十倍效率程序员的概念最早可以追溯到上 1968 年的一项关于程序员生产力的研究,研究者对比了一批程序员完成同样任务所花费的时间,发现最快和最慢的开发者之间,效率能达到十倍以上,1975 年,布鲁克斯在他的名著《人月神话》中引用了这个研究,随后这个概念便随着书籍的出版迅速传播至整个开发者领域。
这概念太有诱惑力了,试想一下,全神贯注的开发一天的效率是其他开发者十天的工作量,对系统了如指掌,是整个团队的技术支柱,受到 leader 和同事的尊敬,这怎么不让人向往呢?
那么我们怎么才能成为这样的程序员呢?
过去的第一反应可能是代码量。或者说职业生涯写过的总代码量。但是这个标准今天已经站不住脚了。如今的 AI 编程工具一天能生成的代码量可以超过绝大多数人的一辈子都多,问题是,写得多不等于写的好,写得好不一定等于可以用在生产上,看看最近很火的 pgrust 项目就知道了,这是一个 rust 重写的 postgres 项目,作者通过 AI 工具将原始的 C 代码机械的翻译成 Rust 代码,短短十几天就完成了对原项目近二百四十万行代码的翻译,但是你敢将生产数据库换成它嘛?连作者自己都说了,这玩意还没有做性能调优,也不是生产就绪的状态,很多常用的插件扩展也不支持。
那么是不是熟练的掌握十八般武艺,遇到新技术潮流就上呢?
这个当然也不是,开发代码只不过是软件工程的一小部分,维护才是重中之重,如果盲目的追求新技术,会让整个开发团队疲于奔命,跟各种没有出现过的错误作斗争,要知道,最容易的代码就是不需要维护的代码,久经考验的技术才是最稳定的技术,十倍效率程序员,会在合适的需求场景下选择最合适和最稳定的技术,而不是为了一个人炫技,而是让整个团队更好。
那么成为这样的十倍效率程序员需要什么技能呢?
我觉得首先得有优秀的计算机工程素养和丰富的实践经验。基础知识,例如,数据库管理系统、操作系统相关、编程语言相关、计算机网络相关、前端的 UI/UX 设计、浏览器工作原理等等计算机底层知识需要理解掌握,不是为了炫耀,而是在面对具体问题时,能迅速判断问题出现的根源在哪儿,该用什么方法去解决,而不是靠单纯的试错和搜索撞运气
第二,你得有一定的技术领导力,前面说的是个人的效率提升,而现在说的是让整个团队效率提升,带领团队少走弯路。不是追随着新技术新潮流,而是根据需求使用最简单的技术栈,用最稳定最简单的技术去解决问题和需求,打造稳定的系统,让大家的活更好干。原因很简单,你想一下,每一项技术的引入,都需要团队每一个人的学习与适应,《人月神话》中早就说过,向一个已经延期的项目添加人手,只会让项目更加延期,技术栈越简单越主流, 团队中的每一个人就会更快的上手和掌握,也会让整个项目的效率大大提升
第三,你需要相应的软技能,例如沟通能力,能把复杂的业务需求拆解成技术上相对好实现的方案,把技术上的取舍解释给不懂技术的同事听,也能理解业务同事真正想要的是什么?而不是机械的将需求翻译成代码。有了这样的软技能,你才能在遇到不合理需求,或者实现成本明显不划算的时候,说服对方调整相应的需求,而不是蒙头做一些最后可能根本用不上的需求或实现不了的功能,白白耗费时间。这种能力,往往比写代码的速度更能决定一个项目的成败。
最后,你需要真正的理解你的系统,费曼说过:我没法理解我造不出来的东西。想要吃透一个系统,最好的方法就是亲手去使用它,创建它甚至于破坏它,这样你就能摸透程序的细枝末节,理解它的各种场景。
扎实的专业技术素养,优秀的技术领导力,软技能和深入理解系统的能力,这大概就是成为十倍效率程序员的关键要素。当然,大多数人包括我,也许现在我们还做不到成为十倍相率程序员,但是只要我们朝着这个方向努力,日进一步,我们会逐步成为优秀的程序员,乃至成为十倍效率程序员。