我不断的听到各种关于“软件危机”的警言,以及关于软件开发缺少过程规范的批评。我做编程工作超过15年,我认为这些言论基本上都是错的:我确信我能在很短的时间里用如今的开发工具复制出15年前一个不错的程序员开发出的东西。
模仿摩尔定律和Proebsting定律(这个不像是预言,更像是挑唆),我要给出的定律是:程序员的开发效率每6年提高一倍。
为了证实我这个定律里的数字部分,请注意下面我的发现。在1972年的《在分解模块化系统中用到的规范(On the Criteria to Be Used in Decomposing Systems into
Modules)》这篇经典论文里,作者David Parnas写道:
KWIC索引系统接受一个有序的多行信息,每行由有序的多个词组成,每个词由有序的多个字符组成。每行信息都能通过把第一 个词挪到行尾这样“循环变换”。KWIC索引系统的输出是每行内容都通过字母顺序经过“循环变换”后的新行。这是一个小系统,如果不考虑特殊情况(海量数 据,没有软件支持),这样一个系统由一个中等水平的程序员来开发,能在一到两周时间里做出来。
现在是2003年,如果一个程序员不能在一或二个小时——而不是1972年的一至二周——做出这个系统,我会认为他是个不可接受的程序员。这就建立起了一个31年里开发效率提高40倍、或者说每年12.5%提高的公式,由此而得到每6年开发效率提高一倍的结论。
请注意,没有一个现代程序员所使用的开发工具是专门针对KWIC系统的需求的:这个问题需要“从头解决”,所以,尽管跟1972年的时代不同,我们仍然可以这样比较。
这种巨大的进步无疑是由于可复用的软件代码、更好的开发工具、更好的编程语言,更好的计算机教育等因素叠加的结果。但同时也是使用更快的机器、允许我们忽略掉底层的操作、使用更便捷但效率稍微次一点的解决方案的结果。
[本文英文原文链接:Yannis's Law: Programmer Productivity Doubles Every 6 Years ]
这篇文章里面提到“现在是2003年“。那么到现在已经9年过去了。到09年,编写这个系统的时间按照定律应该快1倍,30分钟-1小时。今年是12年,过了3年。没能增加到15-30分钟。45分钟以内也算符合要求了吧。
找个程序员写一个出来,45分钟写不出来就是不合格的?笑话。而且按照这个规律15年15-30分钟。21年7-15分钟。27年3-7分钟。3分钟能看明白题就不错了。
更好的开发工具:vi到现在多少年了,怎么没被更好的IDE淘汰掉。
更好的编程语言:当年就没有吗?Lisp、smalltalk。能比现在的语言差到哪里去。
更好的计算机教育:没看出来学高级计算机语言也算更好的教育。当年的程序员不是不能用高级语言,而是没有足够的硬件运行高级语言开发出来的程序。
其实文章说的所谓的效率提高,只不过是普通程序员因为硬件成本大幅度降低,带来的提高罢了。如果软件语言没有理论上的跨代突破,你现在用40年后的机器,编这个系统,还是得这么长时间呀。
其实在72年,一个Lisp或者Smalltalk程序员,不计硬件成本。可能因为缺少一些基础库比较慢,但是1-2天也编写出来了。但是前提是你得准备足够好的机器。阿波罗登月项目的主机不过是386的水平。你就知道当年小型机的水平了。任天堂红白机到了那里都是好配置。你72年招聘一个程序员,不可能给他当时世界top500的机器随便调试吧。最多只能给个8位小型机,还得先打好穿孔袋和别人一起排队上机调试。这种小型机要保证运行速度,必然得汇编。就算你等的起,用Fortran,后边排队的还不干呢。
所以,我认为这个定律不过是个笑话而已。我们只不过是把以前只能在纸面上和顶级实验室里面的技术普及到普通人而已。
引用来自“小耶果”的评论
能不能每6年提高一倍开发效率我不知道,我只知道如果开发效率提高一倍,工资就会降低50%这一铁律.
==================
看文章了吗?是来读标题的?
等于是拿高级语言和汇编语言对比开发效率。有种你拿x64汇编写一个,我看你能2小时出来不。