一两个月前看到了这本书,那时候正对编写高质量的代码很感兴趣,于是借来读。这一个月断断续续的读完,实际上读书的时间仅有10天左右的业余时间。读的很浅,但也有小小的收获。
这本书讲解如何在不漂亮的旧代码下写漂亮的新代码,依照先有测试后有功能的思想,作者全书都围绕如何让代码可测试展开。
如果旧代码特差,而又时间紧迫,不足以把旧代码纳入测试,通常是让新代码跟旧代码独立开。这可能需要用上继承,会让代码有不必要的层次,这没关系,重构一直在进行,只要代码纳入了测试,以后就可以把它们去掉。
让代码纳入测试,很多时候是说能够用伪造的东西替换真实的东西,这个伪造的东西是测试用的。可以有很多种修改方法让代码能有单元测试,主要有几类方法:预处理期、链接期、修改代码(对象、方法的替换)。
本书看完之后,能回忆起来的东西很少,可能是因为没细看,也可能是写的太细了,实际工作中从来没有试过像书中所说的那样去写代码,步骤那么细,有必要吗?修改代码时,步伐要小是正确的,但小的书中所讲解的那种地步就有点受不了。本书可以总结为三个字“解依赖”,细节上就是各种各样的案例。
看这本书需要有大工程代码的修改经历,不然会觉得很无趣,我现在就有点无趣,跟第一次看设计模式一样的感觉。测试驱动开发,这是我初次接触到的概念,虽然工作中挂着敏捷的羊头,但我们的代码不存在单元测试,连影子也没有。看书的时候想,实际工作不一定要有真实的测试先行,只要头脑里有单元测试的思想,写代码的时候就会尽可能的往那一个方向去,在设计的时候就会想,假如需要测试代码能这样写吗?自然的就会让代码有更少的依赖,更多的分层,这也就有了单元测试的影子,依赖少了,可扩展也强了。这也就是读这本书的潜移默化的影响。
书里讲解看旧代码时,也讲解了些外围的东西,画图看代码就是很不错的方法。还有编译依赖导致一个工程的构建花费很多时间,这点书里谈到的不多,但工作中深感触,不必要的头文件包含、模板的滥用都会导致依赖增多,编译时间变长。
这书跟《重构改善既有代码的设计》是同种类型。不过这本书怎么是这个书名呢?英文版是“Working Effectively with legacy Code”,也就是“在遗留代码上有效的工作”,强调的重点就不一样了。
看这本书有些名词不熟悉的压力,看到了很多新名词,譬如“函数签名”(其实就是形参),“朴素化参数”(可能是说让被切入测试的函数的参数是一般类型),“自由函数”(术语表有解释,C++中是非成员函数),“领域类”(就是MVC中的逻辑M,这个词在《重构》上出现过)……这些新名词也不知道是不是通用的,如果不是通用的,搞出一个离本意遥远的新词来,又不在章节的开头给概述性解释,就真是让看者莫名其妙了(我又想到了那个“名字粉碎”的翻译,这本书里也用了它,很文艺很奇怪)。译者有些地方太小心了,加了不必要的译注,有些地方又感觉翻译得不容易快看,如果能意译会好些。
书很细,无经验读着有压力
《修改代码的艺术》热门书评
-
读《修改代码的艺术》
38有用 1无用 dreamhead 2007-10-22
作为一个程序员,获取知识是让我不断前进的动力,而读书是我获取知识的一条重要途径。在这个“经典”、“必读”过剩的年代里,大多数的书都仅仅扮演着传播知识的角色,真正改变自己对某些问题看法的书其实少之有少。限于读书时的眼界和能力,在我列表中,让我拍案惊奇的书只有几本。Martin Fowler的《重构》,...
-
围绕重构来阐述如何修改遗留代码的不错的书
5有用 0无用 疯狂的菠菜 2009-09-14
这本书看的时间非常长, 断断续续有3个星期了吧, 不错的书, 至少对我来说是这样, 因为我现在就碰到了书中列出的种种问题:对已有的没有完善的单元测试的核心系统进行重构.为了保证少出乱子, 不出乱子, 我必须小心的对超大类, 巨型方法采用各种重构手段进行修改, 没有单元测试作保证的系统进行重构是非常危...
-
翻译的很一般,机械工业出版社
4有用 0无用 YigWoo 2014-07-20
买这本书的原因一是这本书确实是一本关于修改老代码的经典,二来翻译者是中国地区 InfoQ 的主编。但是入手看了大概到100多页之后实在是忍不住要上来吐槽一下。首先是翻译的通畅性,应该说是比较烂的水准<del>只能说是将将达到合格的水准,</del>这个可能是个人的偏见。但是我...
-
参考报价问题
3有用 1无用 rjnew 2007-10-23
我发现很多网页里卓越的报价常常比当当的高,可是实际情况是点击链接后卓越比当当低!比如这本书实际报价:卓越是46.5,当当是46.6不知道是不是最近卓越大范围调整了价格?!顺便说一下,在csdn读书频道上也有类似情况。...
-
写代码不是一件简单的事情
2有用 0无用 jerry 2009-09-11
《修改代码的艺术》看完了这本书很薄,但是看起来还是很吃力,里面介绍了很多重构的知识,而且有很多c++的内容,有的地方也是似懂非懂的,如果了解设计模式和重构,就会轻松很多,可能艺术这东西,本身就不容易懂吧。里面对单元测试的依赖性很强,其实还是一本不错的书,你完全可以领略到作者真的把代码的修改看成是一种...
书名: 修改代码的艺术
作者: Michael Feathers
出版社: 人民邮电出版社
原作名: Working Effectively with Legacy Code
译者: 刘未鹏
出版年: 2007-09-25
页数: 384
定价: 59.00元
装帧: 平装
丛书: 图灵程序设计丛书·程序员修炼系列
ISBN: 9787115163622

