- 原文:Techneur - Fight the Rewrite
- 作者:@jprichardson
- 翻译:菊小马
- 图片来源:XKCD
昨天,前老板找我吃午饭。还在等菜的时候,我们又开始回忆当初的公司。他突然想起的一段细节,让我自惭形秽。
对了……还记不记得那次检查 Dan(公司首位程序员)的代码,你怎么评价的来着?
你说:「这写的也太乱了,全重写!」
很可惜,饭桌上我没勇气承认那是个错误判断。虽然,程序确实写的很乱。但长久以来的经验告诉我,大部分的程序员看到别人写的代码时都感觉「太烂了」。如果让他们回看自己几年前写的代码,他们一样会觉得「太烂了」。确实,他们没说错,两边都很烂。
但是,如果笃信这些代码需要重写,那将是个十足的低级错误。
出于工作的强大惯性,你现在可能还无法体会个中原因。成堆非正式的「工作惯例」似乎都在暗示这么做是对的,但你真的能解释么?
我很喜欢 Joel Spolsky 在『记得永远别这么做』中发表的看法:
我们是程序员。这是一种在内心深处,更愿意把自己当作建筑师的职业。所以当大家初入岗位,第一件心事就是把眼前这片地铲平,盖上点真正了不起的东西。但对于日常的修缮——修修补补、优化改造、养护花草——他们提不起兴趣。
他们的内心总在催促着自己,抛开现在的代码从头来过,因为总觉得之前的代码混乱不堪。
但这时候,有趣的事情发生了:通常他们都想错了。之所以先前的代码纷乱如麻,是因为一条重要且基础的编程公理:
「读代码,比写代码更难。」
这解释了为什么代码复用是如此困难。同时也解释了为什么团队中每个人都在用不同的函数来拆分字符串。比起搞懂老函数艰深的运行原理,编写新的函数显然更简单,还更有乐趣。
这一公理带来的效应就是,当你询问任何一个程序员他们手头的代码质量如何,「一团糟,」他们准会这么回答:「我宁可删了再写一遍。」
当新招聘的一名工程师表示要重写那些还在流畅工作的程序时,反对他准没错。或许他会说 Java 太老太慢, Ruby on Rails 多么多么酷;或许他还会甩出一堆时髦的术语。但无论如何,保持冷静的思考。
你觉得呢?
版权声明:
译文版权属于作者 @jprichardson ,并受法律保护。除非评论正文中另有声明,没有作者本人的书面许可任何人不得转载或使用整体或任何部分的内容。