十年前我刚入行的时候,带我的师傅是个秃顶的中年人,每天最后一个走,周末还来公司改bug。我一度以为那就是开发工程师的终极形态——把自己焊在工位上,用命换代码。后来他因为身体原因转岗了,走之前跟我说了句让我记到现在的话:“你以为我是勤奋?其实我是不会偷懒,走了太多弯路,才把自己累成这样。”
那时候我还不懂,直到自己开始带项目,才慢慢咂摸出味道来。我们团队里有两个极端:一个叫阿凯,出了名的拼命三郎,需求下来就埋头写,一个接一个,每天产出惊人,但代码基本没法看,后来没人敢再接他写的模块,因为重构的成本比重写还高。另一个叫老袁,平时看着懒洋洋的,开会时经常说“这需求不合理”“这功能可以砍掉”,甚至有时候会花一整天时间研究一个自动化脚本,就为了省下每天手动发布的十分钟。一开始大家都觉得老袁在摸鱼,但半年后,老袁负责的部分几乎不需要维护,而阿凯每天都在给上个月的自己填坑。
这件事让我开始反思我们被灌输的“勤奋”叙事。开发工程师这个职业,核心竞争力从来不是写了多少行代码,而是避免写了多少行不必要的代码。优秀的工程师都在“偷懒”,但偷的是重复劳动的懒,省的是团队的时间。他们敢于在需求阶段说“不”,敢于在编码前多花半小时画一张草图,敢于用脚本代替手工,敢于为了一次性做事而多花两天去搭脚手架。而那些看起来最忙的人,往往在应付自己曾经偷过的懒——不写测试,于是手工回归;不做规范,于是反复踩同一个坑;不重构,于是在屎山上越盖越高,最后连自己都找不着门。
我曾经也是那种“埋头苦干”的工程师,觉得思考是浪费时间,写代码才是产出。直到有一次,我为了赶一个交付,连续写了两周的业务功能,代码量非常漂亮,可上线当天就出了线上事故,回滚花了三个小时。那晚我坐在工位上盯着日志,突然想起我师傅的话。第二天我把自己锁在会议室,画了一张系统的现状图,把所有重复的代码、冗余的接口、手动的步骤全标了出来。然后我花了整整一周去处理这些“看不见”的活,把能自动化的自动化,能合并的合并,能删掉的删掉。结果那个月末,我的交付效率反而比之前高了一倍,因为我不再需要分心去修那些本就脆弱的角落。
现在很多团队还在比谁的加班时间长,比谁提交得多,但我越来越觉得,这是最廉价的衡量方式。如果非要给开发工程师提一条建议,我会说:无论你在什么公司,都要给自己留一点“浪费”的时间,去审视自己的重复劳动,去质疑那些习以为常的流程。当你开始觉得某项工作很烦、很重复的时候,恰恰是你最应该停下来说“不”的瞬间。真正的成长不是越来越能忍受,而是越来越会改变。写代码这件事,最高级的境界是写得越来越少,而价值越来越大。