欢迎来到天天文库
浏览记录
ID:34429899
大小:195.66 KB
页数:6页
时间:2019-03-06
《程序员的素质new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、程序员的素质白杨http://baiy.cn2010-12-01众所周知,软件和硬件工程师个体间存在巨大的生产力差异:经常有一个人一两天就能做好的事情另一个人花一两个月也没能做到同样好。Apple创始人史蒂夫·乔布斯曾在《IntheCompanyofGiants》一书中接收采访时提到:“一个最优秀的人完成工作的能力能抵50到100个一般水平的人”。而软件工程领域也经常提到最好和最差的程序员之间的生产力差异超过1000倍,因为如果一个程序员产出的代码中包含了很多bug,需要其它程序员花费大量时间去修正,那么他的生产力是负值。在世界名著《人月神话》中,作者也明确地提出
2、了类似的观点:“最优秀和一般的软件工程实践之间的差距是非常大的,可能比其他工程领域中的差距都要大……”。除了团队组织和项目管理等行政方面的问题;以及语文、数学、逻辑思维和形象思维等个人基础素质以外,到底是哪些专业素养导致了程序员个体间的巨大生产力差异呢?本文尝试以由浅到深、由易到难的顺序来讨论程序员的个体素质。1.基本技术素养基本素养包含了每个程序员都应当牢固掌握和充分理解的技能和知识。基本素养中又可以分为前景知识和背景知识两种。前景知识:今天的程序员主要通过使用编程语言书写代码来完成软件开发活动,前景知识则特指程序员对其使用语言的掌握程度。这里所说的“掌握”并不
3、是仅仅能够写出合法的代码就行了,而是对语言中各种实现细节的深度掌握。如果一位程序员未能透彻掌握他正在使用的程序设计语言,那他写的程序就一定会或早或晚地出现一些至少在他看来有些“莫名其妙”的问题,比如:应用程序时常莫名其妙地崩溃、经常发生资源泄露、或是执行过某些操作时性能差的离谱等等。以C++语言为例:正如大部分C程序员都能毫不费力地将任意C源码“肉眼翻译”成伪汇编码那样,一个合格的C++程序员也应当可以做到将任意C++源码“人脑编译”为对应的伪汇编码。但现实的情况是由于C++新增了模板、虚函数、RTTI、虚基类、异常等大量高级特性,以至于能够真正透彻掌握C++语言
4、的程序员很少。除非完全不使用前文中列出的那些C++高级特性,仅把它作为一个“稍好的C”来使用。否则,对于任何一个职业程序员来说,贸然地使用一种尚不了解其底层(编译器或VM)实现细节的语言特性是一件很危险的事。类似的例子同样适用于其它语言。不管是编译型的(如:C/C++)还是解释/虚拟机型的(如:PHP、Java以及JavaScript)程序设计语言,它们都有一些需要程序员事先透彻理解和掌握的实现细节。背景知识:透彻地理解和掌握至少一门编程语言对任何一位职业程序员来讲都是很重要的基础素质,但仅仅做到这点仍然是远远不够的。想要产出具备现实意义的产品,还需要具备足够的背
5、景知识。以下,我们将背景知识分成“公共背景”和“领域背景”两类,分别进行讨论。公共背景:公共背景包括了几乎每个程序员都需要掌握的知识。从操作系统原理、编译原理、数据结构、离散数学、计算机组成原理、网络原理等理论性知识到各种接口和实际环境的运行时API(例如:对C/C++来讲通常是操作系统API,对JavaScript来讲通常是浏览器提供的API)都是作为程序员必不可少的基础。领域背景:领域背景中包含了与具体问题域相关的背景知识,这些知识并不是每个程序员都需要掌握的,但对于涉及该领域的开发人员来讲却必不可少。例如:对于要实现音频编辑器的程序员来说,至少具备起码的声学
6、背景;MIDI编曲软件的作者需要乐理和和声方面的知识;OCR软件的作者则要学习模式识别和图像处理方面的理论等等。2.思维的条理性和连贯性对于一个程序员来说,从产品的设计之初到其中组件的逐一实现完成乃至最后的联调。整个开发周期从始至终都需要保持清晰的条理和连贯的思维。以下准则有助于帮助程序员在开发过程中始终保持思维的条理性和连贯性。3W准则:我想每个程序员都应该遵循3W准则,即:每次在开始编写代码之前,都应当先搞清楚What、Why、How三个问题。其中“What”指我们要做什么,也就是用户的需求。“Why”表示为什么我们要做这件事,这是对需求和架构的更深层理解。很
7、多时候,只有充分了解了“为什么”以后,我们才能更好地完成设计(例如:使用更合适的算法和构架,以及在架构中预留恰当的接口等等)。最后“How”从设计层面指明了应当以何种架构、哪些模式和算法来最终构建出产品。值得指出的是,3W准则不但适用与对系统进行整体分析和设计,同样也应当利用在模块或组件等粒度更细的层面上——在开始着手编写一个组件前,应当事先搞清楚这个组件的功能(What);需要在何处使用它、为什么需要用到它、它的典型用例和工作上下文(Why);最后是使用何种架构、模式和算法来实现它(How)。本质上讲,需求分析和总体设计的意义就是在系统的层面上回答以上三个问题。
8、总体设计使
此文档下载收益归作者所有