碎碎念之「程序员的时间都花在了哪?」
先来看一篇有趣的论文,浙江大学的 Xin Xia 博士等人,分析了多家公司程序员的日常行为,写了一篇题为《测量程序理解:与专业人员进行的大规模田野研究》的论文,发表于 IEEE Transactions on Software Engineering。论文详细描述了获得数据的方法,并且定量地给出一个结论,程序员平常花在理解代码上的时间平均占 58%。
是不是很意外,有没有很惊喜?
我知道编写的代码容易阅读很重要,但从来也没有过这么具体的数据。从这篇论文看,除了 58% 左右的时间花在搞明白代码是怎么工作的之外,还有 24% 的时间花在了在代码和文档里来回跳转上,真正用来「写代码」的时间只有大约 5%。
Programs are meant to be read by humans and only incidentally for computers to execute.
——SICP, Harold Abelson and Gerald Jay Sussman
代码首先是用来给人读的,只是碰巧能被机器执行。我们写代码做设计,首先要考虑将来的理解成本。
程序员为什么花这么多的时间在理解代码上?很简单,因为他们要搞清楚状况,才能知道下一步怎么办。代码、设计是不是清晰,会极大影响别人(也可能是未来的自己)在理解系统上需要花费的时间和精力。
很多程序员会很在乎程序运行得有多快,完全无法理解 Python 这种会比「高效语言」慢上几十倍的编程语言为什么能得到普及,就是忽略了代码的理解成本如此高昂。很多时候他们会不假思索地花时间去「优化代码」,牺牲代码的可理解性,追求运行效率。殊不知过早优化是万恶之源。
任何有点规模的程序都不可避免地有 bug,也很可能在未来需要扩展或者修改。几年后,你的超级高效的代码将不得不由一些可怜的家伙来维护。如果这个可怜的家伙无法理解你的牛逼代码的作用,他也会留下一段超级高效的代码,但不幸的是,这段代码并没有做它应该做的事情。如果那个可怜的家伙恰好是未来的你自己,那么正义将得到伸张。至少……我自己早年干过这事。
说了半天意外,惊喜呢?
如果你是产品经理,留点时间给程序员还技术债,你会惊奇地发现开发速度变快了。
参考文献:
Measuring Program Comprehension: A Large-Scale Field Study with Professionals, July 2017 · IEEE Transactions on Software Engineering, Xin Xia etc.
编写可读代码的艺术,Dustin Boswell;Trevor Foucher
代码整洁之道:程序员的职业素养,Robert C. Martin
架构整洁之道,Robert C. Martin
版权声明: 本文为 InfoQ 作者【Justin】的原创文章。
原文链接:【http://xie.infoq.cn/article/04b29faebe457f3f65e11c125】。文章转载请联系作者。
评论