【外刊IT评论】抵制代码重写

标签: 批评评论 重写 | 发表时间:2011-05-09 00:34 | 作者:admin 米随随
出处:http://www.aqee.net
本文是从 Fight the Rewrite 这篇文章翻译而来。

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

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

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

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

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

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

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

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

读代码比写代码要难。

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

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

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

你觉得呢?


本文原始地址:抵制代码重写

相关 [it 抵制 代码] 推荐:

【外刊IT评论】抵制代码重写

- 米随随 - 外刊IT评论网
本文是从 Fight the Rewrite 这篇文章翻译而来. 昨天,一位老上级邀请我一起吃午餐. 当坐在哪里等待上菜时,我们缅怀起早期这个公司的往事. 啊,你这个判官…我记得当你看到Dan(公司的第一位程序员)写的代码时的样子. 你说:“这代码写的真烂,需要重写. 我恐怕是没有足够的勇气告诉他,我这“代码需要重写”的主张是错误的.

抵制踐踏GPL的QQ影音

- ZZ - Beyond the Void
2009年11月份,ffmpeg組織指責QQ影音使用了開源ffmpeg的源代碼,但是並沒有按照GPL許可證的規定開放源代碼,因而將QQ影音列入了「恥辱榜」( Hall of Shame http://ffmpeg.org/shame.html),這個恥辱榜上面還有著名的流氓軟件「暴風影音」. GPL(GNU General Public License),是「GNU通用公共許可證」.

代码重构

- - ITeye博客
随着程序的演化,我们有必要重新思考早先的决策,并重写部分代码. 代码需要演化;它不是静态的事物. 重写、重做和重新架构代码合起来,称为重构.    当你遇到绊脚石  ---  代码不在合适,你注意到有两样东西其实应该合并或是其他任何对你来说是"错误"的东西  -------- . 如果代码具备以下特征,你都应该考虑重构代码:.

电影制片人抵制好莱坞3D热潮

- 丰 - Solidot
《纽约时报》报道,好莱坞最近流行制作3D电影,未来两年有近60部电影计划拍摄3D版——包括系列化恐怖电影《电锯惊魂7》和《火星需要妈妈》. 有个笑话讽刺说:“如果你拍不出好电影,那么就把它3D化. ” 一些电影制片人对此种做法深感厌恶. 在最近举行的Comic-Con动漫节上,几位极有影响力的导演出人意料的公开抨击电影的3D化,其中包括《星际迷航》的导演J.J.Abrams,《宁静号》和《萤火虫》导演Joss Whedon.

自由软件基金会呼吁抵制Win8认证电脑

- Adam - cnBeta.COM
微软宣布Windows 8认证电脑必须采用“Secure Boot(安全启动)”,自由软件基金会(FSF)就此发表声明,称限制性的安全启动将会让电脑只能运行微软的操作系统,限制用户安装自由软件GNU/Linux的自由,它呼吁签名抵制. 安全启动技术初衷是防止恶意程序,防止未授权的程序启动.

代码小比较

- Tim - 斯巴达第二季
判断上百万个4k的buffer是否为全0,我最先想到的办法是:zero_buffer = malloc(4096);. /* 循环百万次读取buffer */.         /* 全0 */. 由于好奇,看看shell工具cp的代码,它的解决办法是:. /* 循环百万次读取buffer */.         /* 全0 */.

两行 JavaScript 代码

- MessyCS - Dreamer's Blog
最近看到了两行 JavaScript 代码,很受启发. 在 JavaScript 中,我们可以获取HTML元素的属性值,例如 element.id. 但是,因为 for 和 class 是 JavaScript 中的关键字,所以在 JavaScript 中这两个属性名称分别用 htmlFor 和 className 代替,于是在封装的时候需要先对这两个属性进行特殊判断.

Netty代码分析

- LightingMan - 淘宝JAVA中间件团队博客
Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序[官方定义],整体来看其包含了以下内容:1.提供了丰富的协议编解码支持,2.实现自有的buffer系统,减少复制所带来的消耗,3.整套channel的实现,4.基于事件的过程流转以及完整的网络事件响应与扩展,5.丰富的example.

python代码调试

- - 阿里古古
【转自: http://blog.csdn.net/luckeryin/article/details/4477233】. 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序. 例如,有模拟税收计算的程序:. debug_demo函数计算4500的入账所需的税收. 在需要插入断点的地方,加入红色部分代码:如果_DEBUG值为True,则在该处开始调试(加入_DEBUG的原因是为了方便打开/关闭调试).