原文链接:https://joshondesign.com/2017/07/02/hire_old_programmer
你应该雇佣一个老程序员。这是真的。的确,老程序员不会像刚走出校门的新人一样工作那么长的时间。他们有小孩,有妻子,有贷款,并且还要参加垒球比赛。他们不会在办公室玩儿Xbox,或者乒乓球。他们不会一周工作80个小时,并且他们实际上会真的会在假期休息。当然雇佣他们要比新人花费多。尽管有这么多你不应该雇佣他们的理由,你还是应该雇佣一名老程序员,因为一个简单的理由:他们值这个价。我当然知道这些,因为我就是。
经验
老程序员不能记住程序员在25岁时能记住的代码量,但是我们有惊人的经验。我们知道每个系统的代码都将成长到一个人无法记住的程度--不管你的大脑有多大,所以能记住多少代码并不像你认为的那么重要。作为替代,我们知道怎样做模块化。我们就是《10倍程序员》中的神话;并非因为我们代码写的多好,而是因为我们已经经历过太多的东西。我们可以轻松的学习一门新语言,因为我们已经在过去的岁月里已经用了太多。我们知道基本的特性。语言的概念一次又一次成为时尚。经过足够的岁月,我们的经验丰富到可以轻易的指出其中的相似性,以及真正的差别。
判断力
“The bitterness of poor quality remains long after the sweetness of low price is forgotten.” — Benjamin Franklin
老程序员知道如何做辨别。他们知道如何把系统切分成可信可测的模块。他们可以从架构图中指出系统可能的瓶颈(你有大量数据还是大数据?这很重要)。他们可以指出特定的项目中应该选用何种技术,怎样进行可靠的优化,性能,或者开发的效率(任选其二)。他们知道如何做好的权衡。尽管他们可能没有为你的项目写下一行实际的代码,老程序员还是像金子般贵重。他们懂得怎么构建质量。在长期的项目运行中,高质量意味着低支撑成本。
深层知识
“True knowledge comes with deep understanding of a topic and its inner workings.” —Albert Einstein
老程序员在特定的领域有深层知识。这些知识帮他们知道去哪里查找bug,怎样避免bug成群出现。例如,我对GUI工具包就非常精通。我在过去数年使用过成打的GUI工具包。我曾经在三个项目(Swing, JavaFx, 和SubArctic)的核心团队呆过。我曾经4次构建过自已的工具包,仅仅是国为有趣。我了解UI 工具包。我可以详细的描述工具包40年的历史(嗯,或者我该在什么时候写下来)。
当我参与一个新的GUI系统项目时,我会很快的融入。如果我看到3个按钮向右偏移了68象素,我能立即指出可能出现 bug 的三个地方(很可能是全局坐标到本地坐标的转换代码)。如果你想做一个新的组件,我可以告诉你需要的扩展点在什么地方。这些关于UI工具包如何工作的深层知识意味着,我可以用比他人快数倍的速度构建应用。我有25年的强大的肌肉记忆来支撑我。我的深层知识是关于UI工具包的。对于其它人可能是内核驱动,数据库索引,或者编绎器。重点是,深层知识远胜于数小时的使用或者原始的代码能力。
广博的知识
A small team of A+ employees can easily perform larger teams of B and C employees. — Steve Jobs
老程序员都是各行的业余选手。当我专注在应用和前端开发时,就把整个技术栈全摸索了一遍。 我曾为内存受限的系统编写过代码。我构建过解析器,数据库,固件,甚至做过一个差劲的内核驱动编写人员。我为demo绘制过图片,也构建过数GB的测试数据。我当然不是你应该雇佣来做构建数据库,或者编写固件,甚至作为你的下一个网站的插画师,但我知道这些系统是如何工作的。这意味着,我知道谁在数据库或者固件领域是专家。我知道如何与其它领域的人员进行有效的沟通。这些沟通技能让我成为一个有效率的团队成员,而不是仅有原始编码技能的人员。
沟通能力
任何人在40多岁的时候仍然是一个程序员, 必然已经发展出了自已良好的沟通技能。这些技能的价值与他们的编码能力相当。如果一个新开发的API没有传递给其它应该使用的人,那同样毫无价值 。大多数大型的软件最终失败,归根结底是由于沟通问题,而不是差劲的代码。
所以, 看上去我们成本高,却工作的少。但我们真的做了更多。我们能做合理的估计,并及时的交付代码。我们构建更少缺陷、且具有合理性能的软件。我们可能写了更少的代码,但却创造更多的商业价值,那就是我们为什么值这个价。
说到这里,你什么不雇佣我?:)