(转载)工程师应该放心大胆地创造技术负债

身为软体工程师,你应该要尽量写出无法维护的程式码,而且绝对不写测试。

你应该要知道:在绩效管理下,你愈是认真负责,愈是做到符合专业伦理的要求,你反而看起来绩效愈差。而你大概会有 87% 的比例,会遇到这种绩效管理。

举个例子,假如你是警察,你决定要认真抓小偷,于是上个月在你的管区破获了五十起窃盗案,这个月因为你的努力,破获的案件增长到一百件— 这代表什么呢?这代表看起来你的管区治安变差了,而你应该要为治安变差负责,你才是应该被检讨的对象。于是你知道,警察好像应该要想办法破案,但实际上,你的绩效并不是来自破案,而是吃案。

如果你花了半年时间,抽丝剥茧理清了复杂的商业逻辑,建立了清爽明确的抽象层,并且预先额外设想了其他的使用情境,最后开发了一套易于扩充的软体架构,让一个大学刚毕业的新人,都可以在你的架构上不到一个星期就可以开发出新功能。这代表什么呢?这代表你的绩效很差— 你的管理者只会看到,你花了半年才做了一件事清,一个新人刚来,却只需要花上一个星期就可以完成一件事,那还要你来做什么呢?

至于可以轻松开发出新功能的新人,他会怎么看呢?可以这么快开发出新功能,当然是因为他自己的功能啊!跟你有什么关系呢?真的要了解你到底做了什么,其实只有一个办法,就是要阅读你的程式码,但,放心好了,不会有人会去读的。

你要做的事情就是:管理者设定了什么绩效,你就想办法达成什么绩效。如果管理者设定的指标是你修好了多少 bug,那么你就要想办法一开始就在你的程式中制造许多 bug,免得日后需要修 bug 的时候没有 bug 可以修。如果管理者的目标是加速开发,你就应该要不计后果加速开发新功能,明知道是加速迈向毁灭,你也要加速开发。

事实上,身为软体工程师,你也根本不用考虑后续维护的问题。如果你在一家公司写了一大堆完全不考虑耦合关系、程式逻辑纠缠不清、命名混乱、使用大量anti-pattern、到处都是怪气味、效能极差而且宛若天书的程式码,而你开始为了继续维护这样的技术负债感到痛苦的时候,其实只代表一件事情:你已经在这家公司呆得太久,而且还没有升上去当主管。

这个时候你就会知道加速开发的好。你完成了这么多项功能,于是在你想要换工作得时候,你可以写出洋洋洒洒的履历表— 反之,你会把你写了几条单元测试、达成多高的覆盖率这种数字放进履历表里头吗?把力气放在测试这种无助于发展事业的事情上,完全就是在浪费你的时间。

你也同时应该感谢— 不晓得是谁想出来软体产业园区这种德政,原本制造业的产业园区是让上中下游供应链可以集中在一起,降低运输成本,但软体这一行又没有供应链这种事情,成立园区只是让相互竞争的软体公司其中在一起,唯一降低的就是人员流动的成本,换工作都不用搬家。多好啊你看。

如果你有机会高升,开始担任主管(你绩效这么好,怎么可以不选你当主管呢?),你就会知道,当初写下的那些无法维护的legacy code,其实更有助于你担任主管的管理工作。

担任主管最重要的工作,不是别的,就是一边把持住自己的位子一边想办法继续往上爬,所以主管绝对不可以让部属表现得比自己更优秀,而你当初写的程式码,就是部属事业道路上最好的绊脚石。你除了可以一边抱怨为什么新功能开发愈来愈慢,一边说嘴当年你只花了多短的时间就写了多少程式码,果然只有你有资格担任大家的主管。

而到了这个时候,你还会发现,程式码到底是什么品质,已经跟你的绩效无关了。怎样尽可能的接触老板,参与更多会议,让老板三不五时看到你,才是你现在的绩效。

当然,总有一天技术负债会大到你的部门什么东西都做不出来,你的公司什么服务都拿不出来卖,但是这一点都不会影响你找新工作,你瞧,现在,你的履历表上面,可写着你当过主管呢!拿着这份履历表,你更有机会去别的地方,空降担任更高阶的主管。

技术负债从来就不是什么问题。谁说你制造了技术负债之后,你就得要自己还债?怎样欠债不还,才是工程师最伟大的艺术。

在你的人生中,你不需要要为其他人而活,也不是为了程式码这种死物而活,你真正应该要负责的对象只有你自己;而你知道人是经济而自私的动物,既然你的本性就是贪婪,你就应该成就贪婪。管理者想要这种工程师文化,你就提供这种工程师文化。

你要舍弃专业才能成就事业,你应该要把握当下的绩效,而不要为了可能不存在的悲剧结果恓恓惶惶,你每天都应该充满正能量,还有什么可以比利己主义带来更多正能量?凯因斯不就曾经说过:「In the long run, we are all dead」?

身为软体工程师,你应该放心大胆地创造技术负债。这么做唯一的风险,就只有在你换工作的时候,也会接手一大笔前人留下来的技术负债。不过,这种事情反正也早就已经发生了。

1
原文链接:https://p5d12000.medium.com/%E5%B7%A5%E7%A8%8B%E5%B8%AB%E6%87%89%E8%A9%B2%E6%94%BE%E5%BF%83%E5%A4%A7%E8%86%BD%E5%9C%B0%E5%89%B5%E9%80%A0%E6%8A%80%E8%A1%93%E8%B2%A0%E5%82%B5-a8022d85810