拒绝重写

作者: 菊小马 | 来源:发表于2013-06-18 01:32 被阅读2212次
  • 图片来源:XKCD

昨天,前老板找我吃午饭。还在等菜的时候,我们又开始回忆当初的公司。他突然想起的一段细节,让我自惭形秽。

对了……还记不记得那次检查 Dan(公司首位程序员)的代码,你怎么评价的来着?

你说:「这写的也太乱了,全重写!」

很可惜,饭桌上我没勇气承认那是个错误判断。虽然,程序确实写的很乱。但长久以来的经验告诉我,大部分的程序员看到别人写的代码时都感觉「太烂了」。如果让他们回看自己几年前写的代码,他们一样会觉得「太烂了」。确实,他们没说错,两边都很烂。

但是,如果笃信这些代码需要重写,那将是个十足的低级错误

出于工作的强大惯性,你现在可能还无法体会个中原因。成堆非正式的「工作惯例」似乎都在暗示这么做是对的,但你真的能解释么?

我很喜欢 Joel Spolsky 在『记得永远别这么做』中发表的看法:

我们是程序员。这是一种在内心深处,更愿意把自己当作建筑师的职业。所以当大家初入岗位,第一件心事就是把眼前这片地铲平,盖上点真正了不起的东西。但对于日常的修缮——修修补补、优化改造、养护花草——他们提不起兴趣。

他们的内心总在催促着自己,抛开现在的代码从头来过,因为总觉得之前的代码混乱不堪。

但这时候,有趣的事情发生了:通常他们都想错了。之所以先前的代码纷乱如麻,是因为一条重要且基础的编程公理:

「读代码,比写代码更难。」

这解释了为什么代码复用是如此困难。同时也解释了为什么团队中每个人都在用不同的函数来拆分字符串。比起搞懂老函数艰深的运行原理,编写新的函数显然更简单,还更有乐趣。

这一公理带来的效应就是,当你询问任何一个程序员他们手头的代码质量如何,「一团糟,」他们准会这么回答:「我宁可删了再写一遍。」

当新招聘的一名工程师表示要重写那些还在流畅工作的程序时,反对他准没错。或许他会说 Java 太老太慢, Ruby on Rails 多么多么酷;或许他还会甩出一堆时髦的术语。但无论如何,保持冷静的思考。

你觉得呢?

版权声明:
译文版权属于作者 @jprichardson ,并受法律保护。除非评论正文中另有声明,没有作者本人的书面许可任何人不得转载或使用整体或任何部分的内容。

相关文章

  • 拒绝重写

    原文:Techneur - Fight the Rewrite 作者:@jprichardson 翻译:菊小马 图...

  • 重写,重写,重写 - 草稿

    重要的事情说三次,这是我本该早就发布的文章,由于我的失误,于是乎,现在写这篇文的时候,带着淡淡的忧伤。 今年,最快...

  • GeekBand OC 7. 多态

    运行时多态 重写override 重写方法 没有重写的方法会被重写 没有重写的方法中调用已经重写的方法会调用重写后...

  • Swift 重写override和重载overload

    1.重写override 重写是子类继承父类,重写父类的方法。 重写方法的参数列表必须完全与被重写的方法相同。重写...

  • swift overrid 跟 overload

    1.重写override 重写是子类继承父类,重写父类的方法。 重写方法的参数列表必须完全与被重写的方法相同。重写...

  • apache URL重写

    URL重写 URL rewrite介绍 URL重写 一、URL重写介绍 Apached的重写功能,即是mod_re...

  • swift中的继承

    只有类支持继承 重写实例方法、下标 重写类型方法、下标 用class修饰的可以被重写 重写属性 1.重写实例属性 ...

  • 初恋(暗恋)

    前段时间写过,觉得不好,重写. 暗恋是所有恋中最保险的一个,可以任由自己意淫,不会有吵架、猜疑、伤害、拒绝、分手等...

  • 第三章所有对象的通用方法

    目录 重写equals方法时遵守通用约定 重写equals方法时同时也要重写hashcode方法 始终重写 toS...

  • 你为什么对“创造"说NO!

    第一, “他并非易事”,他是工作。 工作就是起早贪黑,拒绝各种月会,放弃周末,写了再重写,检查又修改,死记硬背和例...

网友评论

    本文标题:拒绝重写

    本文链接:https://www.haomeiwen.com/subject/inmxtttx.html