前几天在网上看到一则新闻,题目是《扬尼斯定律:程序员的开发效率每6年提高一倍》,说实话,这条新闻有些标题*的嫌疑,但内容上也和题目差不多,真的是在说程序员的开发效率每六年就会提高一倍。评判的标准是“KWIC索引系统”的开发过程,新闻 给出的结论是:
“这种巨大的进步无疑是由于可复用的软件代码、更好的开发工具、更好的编程语言,更好的计算机教育等因素叠加的结果。但同时也是使用更快的机器、允许我们忽略掉底层的操作、使用更便捷但效率稍微次一点的解决方案的结果。”
然而,对于这个观点,我并不是特别赞同,主要原因就在于评价“开发效率”的标准以及相关环境因素上。
新闻中的评判标准是开发一个特定的KWIC索引系统,这个系统可以说只是一个程序员的小练习,而不能真正称之为系统,因为我实在想不出会有一家公司雇人开发这样一个系统,然后真正用到实际的工作之中。所以说,这个系统是没有真正的实际意义的。
这样的一个功能使用高级语言的确可以在一两个小时之内完成,那么对于大型系统,我们的开发效率真的有那么大的提升吗?
相信大家都开发过大型系统,如果这个定律成立的话,那么是否意味着在六年前花费一年时间才能够开发完毕的大型管理系统,现在就只需要半年就能完成,再过六年之后就只需要三个月就可以完成了呢?
做过程序员的朋友都会发现这是不可能的,因为一个系统的开发,不仅仅取决于开发工具、编程语言,那毕竟只是工具,人头脑中的思想才是更为重要的。开发一个系统并不是直接就可以生成代码的,我们需要不断地和客户交流,分析他们的需求,做原型,获得反馈,不断改进和维护,那样才能够最终完成一个适用且实用的软件系统,而这样的过程并非是在短时间能够提升效率的。
另外,大家都知道人月神话,软件项目越是加人,就越难以按照进度完成。其实这个所谓的定律和人月神话也是类似的。人们的编码效率也许在某些复用的代码能够有某些提升,但各个模块开发出来之后,整合的过程真的会一帆风顺吗?人们开发得越快,是否就意味着缺少足够的沟通,那样在以后整合的时候就会遇到问题呢?而且比较有趣的就是,按照这个定律,几十年之后,很可能开发一个大型系统的时间就只需要几天了,哈哈。
还有一个概念叫做“技术债务”,如果程序员在开发的时候不管不顾,写出了大量代码,那么这些代码都会在某种程度上成为债务,测试人员在哪里?后期维护的人在哪里?那些因为各种因素造成的工作效率的下降不能不让我们考虑。
还有人可能会说,我们使用各种工具,可以快速生成大量代码,代码行数不就是工作效率的体现吗?
但是那些代码真的对解决实际的问题,或者说对于业务客户来说有意义吗?而真正核心的代码也可以用工具自动生成吗?如果是那样的话,程序员这个职业就大大贬值了,所有程序员都可以回家了,把任务交给自动化的系统搞定就好了。所以真正体现工作效率的核心代码,还是需要人来编写,并且我觉得很多年都不会出现划时代意义的效率提升。
所以说,所谓的开发效率每六年就会提升一倍的说法根本就站不住脚,很可能他想说的是,程序员开发出来的代码量每六年会提升一倍,而提升一倍之后的代码,解决的问题还是和原来一样,甚至还会因为各种干扰以及沟通、维护的问题有所下降,最重要的是,那么多代码都会成为“债务”,让程序员不得不为之疲于奔命。
总之,不要考虑什么开发效率了,那就像是公司里面无意义的KPI一样,只能够让人们得到心理安慰,顺便糊弄一下不懂行的高层管理者。解决实际问题,实现核心价值才是我们最应该云南儿童白癜风医院北京医院治白癜风