前几天,与院长一起到学院调研学生软件技能的学习情况。当时,我谈到尽可能多得去写代码,只有代码量达到足够多时,才能提高水平。软件开发是实践特强的技术,只有更多的实践才会有本质的提高,量变引起质变这毋庸置疑。
有学生问写多少代码量,会达到什么水平呢?这个有人这样描述:代码量是评判程序员水平高下的方法之一。微软要求应聘程序员在大学四年间至少要写10万行代码。李开复也建议计算机类的学生争取在大学四年中积累编写十万行代码的经验。由此可见代码量积累的重要性。
当你编写过100行代码的时候,应该对编程有了一个朦胧、感性的认识。
当你编写过1,000行代码的时候,应该已经掌握编程的基本结构了(顺序、分支、循环)。
当你编写过10,000行代码的时候,可以用自己喜欢的编辑器做自己喜欢的小玩意儿了。
当你编写过100,000行代码的时候,你会对自己编码能力充满自信,并且发现公司中至少70%的人水平在你之下。
当你编写过1,000,000行代码的时候,恭喜你,终于成为老皮了,哦,我是说程序高手、高手、高高手,请给我一张你的名片。
首先,在这所描述的“写”不是Ctrl+c 与Ctrl+V。是真正手打出来的,并且是设调完成无bug的可用代码。其次,写代码与不是抄代码,将书上或老师写过的再重新打一遍,而是按自己业务逻辑编写的代码,编写代码的过程也是一个学习与思考地过程。还有,在写代码时,要不断优化,不断重构,这个过程对学习来讲更重要,如果尝试各种方法对比,再找出最优的方法,完成,尽管此时完成代码量不多,但进步更快。优秀的成长过程,会不断发现此前所写代码是多么“烂”,多么不完善,此时,如有时间一定要实验一下新的思路是否正确。
如果你在不停的重构代码,不停的思考更好方式,也不停的接触面向对象,学习设计模式,研究各种开源的架构。那去做开发时,可能更多得是思考,去分析,写代码时间会少,完成项目的代量可能也会不多,但此时才是登堂入室了。大部分程序员只会使用语言编写程序,但不知道这个源程序究竟是如何变成可执行代码、变成什么可执行代码,这些可执行代码的执行时间是长是短。因此,要从根本上提高程序的效率,需要程序员深懂源程序到可执行程序的过程,深懂编译原理、深懂汇编语言、深懂汇编中的系统调用。对于数据库而言,程序员要深懂数据库原理、深懂数据存放方式和数据查询方式,深懂数据库操作与I/O操作与内存的关系。而这些深懂是需要长时间编程积累的。
写代码更要讲质量,前面所说不停的改,不停的思考,实际也是提高编写代码质量的过程。代码的质量包括代码结构,清晰性,可读性,对于性能要求高的软件,还包括算法的复杂性等是衡量一个优秀程序员的标准。大部分程序员只会使用语言编写程序,但不知道这个源程序究竟是如何变成可执行代码、变成什么可执行代码,这些可执行代码的执行时间是长是短。因此,要从根本上提高程序的效率,需要程序员深懂源程序到可执行程序的过程,深懂编译原理、深懂汇编语言、深懂汇编中的系统调用。对于数据库而言,程序员要深懂数据库原理、深懂数据存放方式和数据查询方式,深懂数据库操作与I/O操作与内存的关系。而这些深懂是需要长时间编程积累的。要达到这个标准,是需要一个量变到质变的过程的,而质变的目的也是为了达到高质量代码。所以,有时,写过很多行代码,未必就是优秀程序员。我曾经面视过,几个不求上进的老码农,从他们做过的项目看,代码是写了不少,可比优秀程序员差得很远。原因,第一次写过代码,完成了功能,第二次再用,就考过去,稍加改动就可,至于代码性能如何,是否可维护,是否可读,性能怎么样,根本不去多想。这样下来,水平一直不会长进,自然会被社会淘汰,去努力得找工作!
下面谈一下,作为技术总监从代码怎样去确认程序员。好的程序员写的代码,整洁而规范,视觉上自然有一种美感。空白错落有致,注释恰到好处,命名和排版遵守统一的规范,有一种精心雕琢而成的一致性。程序的好坏几乎总是取决于它们是否“漂亮”,不“漂亮”而好的程序,除了C++ STL源码,而又好又“漂亮”的代码则随处可见,如Linux Kernel,InnoDB,JDK,JUnit等等。
差的程序员写的代码则经常出现过长的函数,前后不一致的命名方式和排版,过深的嵌套结构,非常复杂的表达式,随处可见的数字等毛病。
从代码也可以看出一个程序员的团队协作精神。注意团队合作的程序员,会严格按照团队规范写代码,而风格与团队规范不一致的程序员则很可能欠缺团队精神。注意团队合作的程序员会注意给模块的对外接口加以重要的说明,如前置条件、后置条件、参数能否是NULL等等,不注意团队合作的程序员懒于处理这些细节。在此要重点说一下注释,因为发现学生基本上不写注释。注释并不是越多越好,但多的注释总比没有强。优秀程序员,不仅将必要参数,调用说明写上,将改动过程注明,也将业务逻辑做简单说明,还可能在必要地方写上思路与思考过程,可能引发问题。
好了,先写到这,抛砖引玉了。
http://www.cnblogs.com/sunth/archive/2011/03/16/1986324.html
我的微薄 http://t.sina.com.cn/suntonghai