抵制代码重写

  本文是从 Fight the Rewrite 这篇文章翻译而来。

  昨天,一位老上级邀请我一起吃午餐。当坐在哪里等待上菜时,我们缅怀起早期这个公司的往事。他有一句话让我心里一虚:

啊,你这个判官…我记得当你看到Dan(公司的第一位程序员)写的代码时的样子。你说:“这代码写的真烂,需要重写!”

  我恐怕是没有足够的勇气告诉他,我这“代码需要重写”的主张是错误的。不错,我认为这代码写的很乱。但是,据过去历次的经验,我感觉大部分的程序员看着别人写的程序时都会想:这代码写的真烂。事实上,当一个程序员数年后再看自己写过的程序时也会想:这代码写的真烂。也许他们想的是对的;这代码确实很烂。

  但是,如果你认为代码需要重写,你将犯下一个低级错误。

  公司里有一些想当然的看法会让你可能现在不能认识到这点。大量的不成文的想当然的观点可能会让你无法解释清楚。

  我喜欢Joel Spolsky说的关于这种事情的话,有些事情你永远不要去做:

我们是程序员。程序员,在他们自己的心里,是建筑师,当他们来到一个地点,第一件想要做的事情就是:把这地方推平,盖上辉煌的建筑。他们对慢慢的修缮没有兴趣:小修小补,改善,培植花草。

有一种不可捉摸的原因让程序员们总是希望丢掉这些代码、重新再写。原因是他们认为老的代码是混乱的。可是,你会观察到一种非常有趣的现象:他们的判断通常是错的。他们之所以会认为老的代码很烂的原因来自于一个重要的、基本的编程定律:

读代码比写代码要难。

这就是为什么代码很难重用的原因。这就是为什么每个团队喜欢用自己不同的函数来做把字符串拆分成数组操作的原因。他们要写自己的方法,这更容易,更有趣,不需要弄清楚老的函数的工作原理。

根据这种定律必然得出这样的一个结论,你现在可以问一问任何一个程序员,问他们对正在写的程序感觉如何。“乱的不能再乱了,”他们会这样告诉你。“我宁愿把它们都删了重新再写。”

  当你招募来了一个程序员,如果他想重写看来工作的不错的程序,你要抵制。他也许会说Java过时了,太慢,Ruby on Rails如何的酷。也许他会向你抛了一大堆专业名称术语。不管他如何做,你要三思而行。

  你觉得呢?

时间: 2024-09-17 03:38:47

抵制代码重写的相关文章

代码-重写DestroyWindow后函数不调用是怎么回事?

问题描述 重写DestroyWindow后函数不调用是怎么回事? BOOL MCD::DestroyWindow () { MessageBox(" "," "); setopen=false; CDialog::DestroyWindow (); return false; } 代码如上,关闭对话框后没有消息框弹出. 解决方案 看上去Destroy消息没有发送过来.你注册了Destroy消息没

ASP.NET超凡的代码控制(一)

crystal译·yesky   对于COM对象不再需要再在服务器上注册的这个功能我们是非常喜爱的.但是通过这种过程简化,我们也能也许会在不经意间将一罐蠕虫病毒打开.这些恶梦躲藏在DLL背后的一个原因(就象我们愤恨的那样)即是它加强了版本的保密性.你再也不能够在你的服务器上运行 另外一个DLL版本,并且代码相当保密,这意味着,如果没有正确的开发工具和源代码,很难改变代码. 这个安全的机制,现在已经删掉了.你可以在你的服务器上运行任何你想运行的DLL版本,这些DLL可能会导致各种令人头痛的问题和安

php快速url重写实例

 5.30以上的版本才能使用,继承了上一个版本的快速重定向的特点(单独类,全部使用静态调用),增添了一个很重要的功能和属性 可以调用其他url中的模块了 也使得模块与模块间或页面与页面间的函数简化共享得以实现 .htaccess文件写法: 代码如下: #-------------- .htaccess start --------------- RewriteEngine on RewriteRule !.(js|ico|gif|jpg|png|css|swf|htm|txt)$ index.p

可视化PK纯代码

简述 其实今天说的内容不仅仅局限于Qt,在很多其它语言或者框架中也适用,那就是 - 用可视化工具or文本编辑器?拖or不拖? 如果有人问我喜欢脱or不脱?我会毫不犹豫地说不脱,因为我比较矜持O(∩_∩)O哈哈~! 其实刚接触Qt,我就习惯了手写代码,不喜欢用Designer.不喜欢并不代表不会,其实很熟练 - 因为很熟,所以注定是朋友O(∩_∩)O~.就和我一直很喜欢用Visual Studio一样,当然,Creator也是很棒的(博客中的分享也是基于Creator来讲解). 喜欢并不能说明纯代

什么时候应该避免注释代码

看到标题,我知道你可能会想:"我为什么要避免代码注释,这难道不是一件好事吗?".是的,写注释在大多数情况下是有用的.但是,请注意,我说的是"在大多数情况下",因为有一些情况下,你不应该写注释. 还不相信?那让我告诉你:写注释有时会坏事!会导致坏代码! 请允许我用一句名言来开始我的论证:不要注释坏代码--重写吧.--Brian W. Kernighan and P. J. Plaugher 这句话给我流下了非常深刻的印象.仔细想一想,有多少次你注释你的代码,只是因为担

什么时候应该避免注释代码?

看到标题,我知道你可能会想:"我为什么要避免代码注释,这难道不是一件好事吗?".是的,写注释在大多数情况下是有用的.但是,请注意,我说的是"在大多数情况下",因为有一些情况下,你不应该写注释. 还不相信?那让我告诉你:写注释有时会坏事!会导致坏代码! 请允许我用一句名言来开始我的论证: 不要注释坏代码--重写吧.--Brian W. Kernighan and P. J. Plaugher 这句话给我流下了非常深刻的印象.仔细想一想,有多少次你注释你的代码,只是因为

php快速url重写更新版[需php 5.30以上]_php技巧

对于apache的rewrite模块打开和设置则非本文主题,请见其他文章详解. 这个类只能php 5.30以上的版本才能使用,继承了上一个版本的快速重定向的特点(单独类,全部使用静态调用),增添了一个很重要的功能和属性 可以调用其他url中的模块了 也使得模块与模块间或页面与页面间的函数简化共享得以实现 .htaccess文件写法: 复制代码 代码如下: #-------------- .htaccess start --------------- RewriteEngine on Rewrit

php快速url重写 更新版[需php 5.30以上]_php技巧

对于apache的rewrite模块打开和设置则非本文主题,请见其他文章详解. 这个类只能php 5.30以上的版本才能使用,继承了上一个版本的快速重定向的特点(单独类,全部使用静态调用),增添了一个很重要的功能和属性 可以调用其他url中的模块了 也使得模块与模块间或页面与页面间的函数简化共享得以实现 .htaccess文件写法: 复制代码 代码如下: #-------------- .htaccess start --------------- RewriteEngine on Rewrit

dos下遍历目录和文件的代码(主要利用for命令)_DOS/BAT

===== 文件夹结构 ============================================= D:\test ---A Folder 1 |-----A file 1.txt |-----A file 2.txt |-----A file 3.txt ---B Folder 2 |-----B file 1.txt |-----B file 2.txt |-----B file 3.txt |---B Folder 3 |-----B sub