作为一个正在用C#和XML语言的技术文档工程师,我以为掌握计算机语言需要一些大体技术。毫无疑问,今天的计算机已经和以前大不相同,因此无论是正在学习新的语言来提高自己的,仍是正在钻研一两门已经有所了解的语言的,以下这几点相信能够帮你翻越计算机这座山。
第一,大体的逻辑技能。最多见的大体逻辑形式和中的判定就是do-while和if-then-else。在这里,需要考虑的是可能出现的哪几种可能的结果和出现这一结果时应该做什么。
第二,自上而下的思维方式。总的来讲,一个计算机系统是由不同的“子系统”组成的,因此需要掌握一些设计技能或自上而下的思维方式,这样才能从整体上把握全局。我设计的模块或子系统是不是让这个系统的性能取得最好的实现?就像经济学分为宏观经济学和微观经济学一样,也需要这样的思维。
第三,面向对象语言的思维方式。可以说目前很多,乃至大多数语言都是面向对象的,这意味着你必需在继承性和多态性的框架下工作。通过选择正确的类、方式、属性等,恰本地利用计算机语言访问和继承,你就可以提升程序性能。
第四,关注细节。每一个计算机语言都有详细的引用和关键字类型规则,这些都必需掌握。在利用类或方式的时候,必需正确利用代码和语法。
第五,读手册。常常和负责系统设计的架构师一路工作,因此必需在手册的指导下写代码。这是个有挑战性的工作,因为必需一条层次解规范,写出的代码才能够遵循统一的参数,最终成功编译。
第六,测试能力。大多数仅仅把自己当做一个写代码的。好的是一个软件公司的宝贵资产,他们能够测试写好的代码、保证不同的数据取得正确利用且代码无误。一些以为测试的工作是由QA来做的,但有时候能够将程序读得更深切,这样QA的测试工作就对整体程序的成功起到更关键的作用。
第七,编写程序文档。和测试类似,很多以为代码才是最关键的,但对一个公司来讲,一个能在代码旁添加适当的注释以便后来的参考,这一点很重要。新程序设计好以后,修改代码和模块的人能够看到之前都做了些什么。
第八,好的商业意识。对来讲,将自己从代码中抽身出来,以整体的目光看待问题有时很难。但这一点很重要。所有的最终都要服务于更大的目标,某种角度来讲,程序是要走向用户和客户的。定阅一本关注所在行业的市场趋势杂志或关注此类博客对很有利处。
第九,耐心。耐心并非技术技能,但却能让走的更远。写代码不容易,越是有耐心的,越有可能取得成功。
第十,坚持不懈。除耐心,坚持不懈的能力和性格对的成功也很重要。有时,在所有的bug和error都弄定之前,有很多很多的编译工作要做,请坚持到底,始终不懈地尽力吧。
高效编程的7个好习惯
这七条都是我这个不怎么高效能的人悟到的. 不权威,不必然全对.
计算机架构师证书1. 利用工具帮你Bug,而不是人工.
工具包括用单元测试,assert语句,代码测试容器. 人工指用print 和debugger 一行一行跟踪. 咱们知道,中绝大部份时间是花费在除bug 上. 不同的人有不同的debug 的方式. 我个人比较喜欢“极限(XP)”学派的主义,也就是说,代码未动,测试先行.
单元测试中的红棒绿棒(熟悉JUnit 的读者知道我在说什么)一出现,哪里出了问题就一目了然. 单元测试的另外一个益处在于增加写程序的自信. 以前没用单元测试之前,天天晚上改代码改到很晚的时候头脑常常不灵活,把代码改错,然后第二天来还要重头弄. 有了单元测试以后天天晚上保证测试全数过掉,这样心理踏实,睡觉也香,早晨也不忙,用饭也棒.
一般的语言都有assert,可是很少有人用. 其实assert 是一个超级好的DEBUG 工具,C 的assert 能够把哪个文件哪一行出了错都告知你. 不过我一般会自己写一个这样的assert 宏:
#define ASSERT(value,msg) if (!(value)) {fprinft(stderr,"At file %s,line %d: \n message: %s\n",__FILE__,__LINE__,msg); exit(-1);}
这样的ASSERT 可以带一个信息出来,比起原来只告知你哪个文件哪一行加倍有价值.
第三个是用容器帮你Bug. 这一点以C/C++ 程序最为突出,因为编译以后直接就是可执行代码,运行时的信息不像Java 和Python 这样有VM 的语言容易患到. 这时,我推荐. 这个工具能够把C/C++ 程序放到一个容器中执行,记下每一个访问. 被这样的容器debug 一下,大体上指针指飞了
(Segmentation Fault) 的情况几乎就没有了. 想像一下是用GDB 追踪非法指针和泄露方便,仍是用容器告知你哪个指针非法,哪个没释放方便:)
2. 选用自动化工具构建
用gcc 或简单的IDE 来编译和运行程序在初期是很快速的,可是越到后来,会越臃肿. 在编译的时候,不同的参数,不同的目标,在IDE/gcc 里面每次都要设定. 而且一般的IDE 也不能做到自动解决依赖等高级方式. 因此,最好的方式是用或Makefile 管理项目. 这方面教程很多,而且我估量的个个都知道. 无论项目大小,注意频繁利用就是了.
自动化测试也有很多工具,特别是GUI 和命令行测试的自动化,工具链都很完整. 大公司里的走这方面的流程都比较规范(我在西门子实习过),可是小一点的公司中,或个人弄小项目的时候,就不必然想得起来了(大部份我见到的就手工来测试). 手工测试看上去快,可是如果积累的次数多了就比较浪费时间了. 其实自动化测试工具的学习本钱很低的,事半功倍.
3. 买本小书做参考,而不是用Google.
这是大实话. 我大三开始学Python 的时候,语言特性并非熟悉,手头也没有书,因此常常连取个随机数都要上Google 查一下库. 我发现,无论网络多快,自己搜索技术多牛,仍是没有手头一本书方便. 后来打印了一个7页的标准库的cheatsheet,当即行云流水. 我在实习的时候也观察到,大部份时候不可能记住一个框架所有的API,所以他们要不等IDE 几秒钟做代码补全,要不一边翻文档一边做. 或许MSDN 这些本地文档系统比查书快吧,可是用Google 和
网络搜索绝对比书慢. 此刻因为工作原因,常常要学一些新的语言,我做的第一件事情,就是把他的库接口的网页全数打印了下来.
4. 用脚本语言原型
人月神话的作者Brooks 说: 准备把第一版扔掉,因为第一版必然要被扔掉. 这是大实话和真理. 既然第一版要被扔掉,咱们就让第一版扔掉得越早越好. 说白了就是,原型要快速的被.
所谓的快速原型,大致有两个捷径,第一是只做核心的功能,输入输出都是构造好的简单的例子. 第二是只做最简单的情况,对于性能和健壮性什么的都不太考虑. 这两点,恰好是脚本语言最擅长的. 脚本语言擅擅长用精简的几行构造出复杂的功能,而且语法很松散,潜在假设程序是正确的.
即便在代码编写阶段,一些功能的实现,也是要先写个简单的,再慢慢打磨成复杂的. 脚本语言此时仍
然有效. 比如我在用Java 的时候,常常不肯定一个函数返回的对象究竟某个属性是什么样的值. 这时我就会用Java 的bsh 脚本写一行打印,而不会写一个复杂的再编译再运行再把那行删除掉. 固然,这几年很流行动态语言,原型和产品之间的差距已经变得很小了.
5. 必要的时候,程序要利用清楚的,自我解释的文本文件作为日记输出.
不知道列位调试程序的时候是不是和我一样,看到不肯定的和要跟踪的变量就直接插入一行print. 我以前一直这样做,可是频繁的插入这样的打印会使
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论