原文作者John D. Cook是一位数学教授、程序员、顾问、经理人和统计学家,善于并享受结合运用这些技能来解决问题。
最近,我听说了一个关于缺乏经验的程序员和经验丰富的程序员每天写相同行数的代码的研究结果。其不同之处在于,经验丰富的编程人员让这些代码更高效,向着目标稳步前进;缺乏经验的程序员单纯地将大段的代码分隔开,并且多次复写相同的代码块直到它们看起来能够运行。或者不拆分代码,他们连续调试好多天,几乎是随机的改变一两行代码,直到这些代码看起来能够运行。
正如格雷.威尔森在他的采访中所指出的,将注意力放在软件开发的质量上,往往也会提高生产力。更多的努力,会带来进步;反之,将会导致“回锅肉”(返工)。
经验丰富的程序员不仅能每天编写更多行值得借鉴的代码,而且他们的每行代码都能实现更多的功能,有时候多的不可思议。但是这并没有什么新奇的。众所周知,最优秀的程序员不是一般的高产,他们的产量一般是普通程序的一倍或两倍。(例如Joel Spolsky的书《聪明的完成工作》Smart and Gets Things Done)。更有意思的是,在编写和理解代码方面,最优秀的程序员看起来并没有什么更高超的能力。
并且,也有研究显示,程序员每天编写相同行数的代码与他们使用的语言无关。你可能认为使用汇编语言的程序员每天能比使用像VB或Java之类的高级语言的程序员编写更多的代码,但是事实并非如此。虽然通过数代码的行数来衡量程序员的产量是一种很烂的方法,但它却是判断一个人大脑能装多少东西的好方法。
(编注:在原文评论中,Fred Mitchell 的评论非常精彩,编译如下。)
我编写代码的时间已有30年,我可以非常肯定地说,和那些仅有过两三年代码经验朋友的代码来比,根本没有可比性。
为了更好地反应手中问题,我在代码中力争清晰性和简洁性,也注重“清洁”的架构和对象模型。我所编写的东西有,操作系统、驱动、应用程序、中间件和Web应用。
不仅是代码,还有算法、模式和数据结构。一个经验不多的程序员或许并不喜欢某些算法,从而选择一个“蛮力”方法,而不是选择更有效并省时的方法。
但是通过代码行数来判断工作的方法,并不能反映出所有这些。这种方法完全是一个愚蠢之极的想法。注释算不算进代码行数呢?有时候,我写的注释,比代码还要多,因为我想尽可能详细一些,我不想6个月之后再来看这些代码的时候,我是一头雾水。
真正的生产力是无法轻易和快速测量出来的。有时候,你必须考虑业务模式。总共节省了多少时间,节省(或创造)了多少钱,代码所涉及的维护或停工时间是多少,客户服务的工作量是多少,等等。所有这些才是影响真正生产力的因素。
原文链接:http://www.johndcook.com/blog/2008/06/03/experienced-programmers-and-lines-of-code/