摘录自《代码整洁之道》不过改了几处表达方式。
代码可以有,代码必须有
有人也许会以为,关于代码的书有点儿落后于时代-代码不再是问题;我们应当关注模型和需求。确实,有人说过我们正在临近代码的终结点。很快,代码就会自动产生出来,不需要再人工编写。程序员完全没用了,因为商务人士可以从规约直接生成程序。
扯淡!我们永远抛不掉代码,因为代码呈现了需求的细节。在某些层面上,这些细节无法被忽略或抽象,必须明确之。将需求明确到机器可以执行的细节程度,就是编程要做的事。而这种规约正是代码。
我期望语言的抽象程度继续提升。我也期望领域特定语言的数量继续增加。那会是好事一桩。但那终结不了代码。实际上,在较高层次上用领域特定语言撰写的规约也将是代码!它也得严谨、精确、规范和详细,好让机器理解和执行。
那帮以为代码终将消失的伙计,就像是巴望着发现一种无规范数学的数学家们一般。他们巴望着,总有一天能创造出某种机器,我们只要想想、嘴都不用张就能叫它依计行事。那机器要能透彻理解我们,只有这样,它才能把含糊不清的需求翻译为可完美执行的程序,精确满足需求。
这种事永远不会发生。即便是人类,倾其全部的直觉和创造力,也造不出满足客户模糊感觉的成功系统来。如果说需求规约原则教给了我们什么,那就是归置良好的需求就像代码一样正式,也能作为代码的可执行测试来使用。
记住,代码确然是我们最终用来表达需求的那种语言。我们可以创造各种与需求接近的语言。我们可以创造帮助把需求解析和汇整为正式结构的各种工具。然而,我们永远无法抛弃必要的精确性-所以代码永存。
代码是怎么被写烂的
最近我在读Kent Beck著Implementation Patterns(中译版《实现模式》) 一书的序言。他这样写道:"……本书基于一种不太牢靠的前提:好代码的确重要……"这前提不牢靠?我反对!我认为这是该领域最强固、最受支持、最被强调的前提了(我想Kent也知道)。我们知道好代码重要,是因为其短缺实在困扰了我们太久。
20世纪80年代末,有家公司写了个很流行的杀手应用,许多专业人士都买来用。然后,发布周期开始拉长。缺陷总是不能修复。装载时间越来越久,崩溃的几率也越来越大。至今我还记得自己在某天沮丧地关掉那个程序,从此再不用它。在那之后不久,该公司就关门大吉了。
20年后,我见到那家公司的一位早期雇员,问他当年发生了什么事。他的回答叫我愈发恐惧起来。原来,当时他们赶着推出产品,代码写得乱七八糟。特性越加越多,代码也越来越烂,最后再也没法管理这些代码了。是糟糕的代码毁了这家公司。
你是否曾为糟糕的代码所深深困扰?如果你是位有点儿经验的程序员,定然多次遇到过这类困境。我们有专用来形容这事的词:沼泽(wading)。我们趟过代码的水域。我们穿过灌木密布、瀑布暗藏的沼泽地。我们拼命想找到出路,期望有点什么线索能启发我们到底发生了什么事;但目光所及,只是越来越多死气沉沉的代码。
你当然曾为糟糕的代码所困扰过。那么-为什么要写糟糕的代码呢?
是想快点完成吗?是要赶时间吗?有可能。或许你觉得自己要干好所需的时间不够;假使花时间清理代码,老板就会大发雷霆。或许你只是不耐烦再搞这套程序,期望早点结束。或许你看了看自己承诺要做的其他事,意识到得赶紧弄完手上的东西,好接着做下一件工作。这种事我们都干过。
我们都曾经瞟一眼自己亲手造成的混乱,决定弃之而不顾,走向新一天。我们都曾经看到自己的烂程序居然能运行,然后断言能运行的烂程序总比什么都没有强。我们都曾经说过有朝一日再回头清理。当然,在那些日子里,我们都没听过勒布朗(LeBlanc)法则:稍后等于永不(Later equals never)。
混乱的代价 == 挥刀自宫
只要你干过两三年编程,就有可能曾被某人的糟糕的代码绊倒过。如果你编程不止两三年,也有可能被这种代码拖过后腿。进度延缓的程度会很严重。有些团队在项目初期进展迅速,但有那么一两年的时间却慢如蜗行。对代码的每次修改都影响到其他两三处代码。修改无小事。每次添加或修改代码,都得对那堆扭纹柴了然于心,这样才能往上扔更多的扭纹柴。这团乱麻越来越大,再也无法理清,最后束手无策。
随着混乱的增加,团队生产力也持续下降,趋向于零。当生产力下降时,管理层就只有一件事可做了:增加更多人手到项目中,期望提升生产力。可是新人并不熟悉系统的设计。他们搞不清楚什么样的修改符合设计意图,什么样的修改违背设计意图。而且,他们以及团队中的其他人都背负着提升生产力的可怕压力。于是,他们制造更多的混乱,驱动生产力向零那端不断下降。
程序员起义
最后,开发团队造反了,他们告诉管理层,再也无法在这令人生厌的代码基础上做开发。他们要求做全新的设计。管理层不愿意投入资源完全重启炉灶,但他们也不能否认生产力低得可怕。他们只好同意开发者的要求,授权去做一套看上去很美的华丽新设计。
于是就组建了一支新军。谁都想加入这个团队,因为它是张白纸。他们可以重新来过,搞出点真正漂亮的东西来。但只有最优秀、最聪明的家伙被选中。其余人等则继续维护现有系统。
现在有两支队伍在竞赛了。新团队必须搭建一套新系统,要能实现旧系统的所有功能。另外,还得跟上对旧系统的持续改动。在新系统功能足以抗衡旧系统之前,管理层不会替换掉旧系统。
竞赛可能会持续极长时间。我就见过延续了十年之久的。到了完成的时候,新团队的老成员早已不知去向,而现有成员则要求重新设计一套新系统,因为这套系统太烂了。
假使你经历过哪怕是一小段我谈到的这种事,那么你一定知道,花时间保持代码整洁不但有关效率,还有关生存。
分享到:
相关推荐
关于代码的写法的一些小建议关于代码的写法的一些小建议关于代码的写法的一些小建议关于代码的写法的一些小建议关于代码的写法的一些小建议
好的代码风格对于优秀的程序员是必须的。 免费共享 程序员之路——关于代码风格。
Matlab_simulink中关于代码的生成(RTW).pdf
一本不错的关于C和C++的代码规范、编程思想、优化程序的书!
该文档为段念(Dennis)先生的公司内部培训文档。文档内容新颖、思路开阔,让人耳目一新。...1、代码是什么? 2、代码的用户 3、代码的可测试性 4、代码的可维护性 5、什么是单元测试 6、使用JUnit 7、JUnit实战
关于代码风格的 风格 vorlesung_coding_guidelines_ppt.pdf
写的比较好的一篇关于如何把代码写漂亮的文章。
主要是描述了几种常见的代码编写中用到的命名规范,同时结合不同的命名规范的优缺点提出了一个自己觉得好用的命名规范。
是我们本学期的作业。主要是代码应用。非常漂亮。而且我还为大家准备了素材哦
关于代码查错器使用的注意事项: 注意1:代码要考虑大小写,所以窗品右侧必须勾选“区分大小写”按钮 注意2:代码排错时,尽量让需要排错的第一行代码标识性强一些,且保证第一行代码必须是准确的。 注意3:提供...
有需要的朋友下载一下
代码签名证书在我们日常工作中使用已经越来越多,尤其是在IT行业,许多科技公司研发和发布产品都离不开代码签名证书。由于不断的涌现新的CA公司,还有许多CA公司刚刚进入中国地区。代码签名证书的品牌也变的五花八门...
配置下数据库连接就可以直接使用,简单方便。
下面是几篇关于代码生成的期刊文章. 供大家了解一下基于模型设计在国内的应用和研究. 基于代码自动生成技术的汽车电子实时控制软件开发.pdf 动力系统嵌入式ECU开发平台的实现.pdf ...
一些针对java初学者的题目代码 很基础的东东
下面是几篇关于代码生成的期刊文章. 供大家了解一下基于模型设计在国内的应用和研究. 基于代码自动生成技术的汽车电子实时控制软件开发.pdf 动力系统嵌入式ECU开发平台的实现.pdf ...
oc代码,关于厨房的资源,方法和类关于厨房的资源,方法和类
对于不同的代码,根据一些关键字的个数,看程序是否相似,个数越接近,相似度越高
以前找了好久,想要一个“关于我们”的源码,但是找了好久都没有,给大家共享一个关于我们纯html版的,绝对给力。 修改我就不多说了,用dw就行。