读《修改代码的艺术》

2007-10-22 12:48:02   来自: dreamhead (原来一切就是这么简单!)
修改代码的艺术的评论   5 star rating5 star rating5 star rating5 star rating5 star rating


  作为一个程序员,获取知识是让我不断前进的动力,而读书是我获取知识的一条重要途径。在这个“经典”、“必读”过剩的年代里,大多数的书都仅仅扮演着传播知识的角色,真正改变自己对某些问题看法的书其实少之有少。限于读书时的眼界和能力,在我列表中,让我拍案惊奇的书只有几本。Martin Fowler的《重构》,严格说来,我并没有完整的读完这本书,不过,正如作者自己所说,这样的书原本就不指望能够读完,因为有一大部分其实是参考手册。正是我读过的部分让我知道了重构,让我知道这么做可以把代码写得更好。Robert Martin的《敏捷软件开发》,这是一本名字赶潮流,内容很丰富的书,这本书让我开始理解软件设计,从此不再刻意追求设计模式。Kent Beck的《测试驱动开发》,我读的是英文版,因为当时中文版还没有出版,所以,我不敢说,我通过这本书很好的理解了测试驱动开发,但它却为我打开了一扇门,让我知道了一种更好的工作方式。
  
  有好长一段时间,这个列表没再更新过,中间虽然我也读了很多书,也学到了很多东西,但却没有哪本书如这几本书一样给我带来巨大触动。新近加入我这个列表的书是《修改代码的艺术》,英文名是《Working Effectively with Legacy Code》。
  
  对于很多软件开发人员来说,加入一个公司,通常意味要面对一大堆之前留下的代码。而面对沉重的负担,大多数人的感觉都是无可奈何。让无奈成为往事,也就是这本书的价值所在。
  
  在我看来,这是一本讲解如何编写测试的书。之所以遗留代码让人头痛,除了复杂的逻辑,改动会带来怎样的后果是一件让人心里没底的事,而测试的存在可以大幅度降低这种恐惧。但是,许多代码在开发时并不考虑测试,这样做的结果就是让测试几乎成为一件不可能完成的任务,一个常见的例子就是代码中访问数据库。即便写出测试代码,漫长的测试过程也会让它失去一部分应有的作用,我们希望得到的是快速的反馈。所以,对于
  无测试而言,知道编写测试是一种境界的提升,写好单元测试则是一种更高的境界。如果能够让测试驱动开发,从开发之初便考虑测试,并懂得如何写好测试,开发者应该不会陷自己于一种难为的境地,这也应该成为专业程序员应该具备的基本技能。
  
  至于这本书的具体内容,我的评价是实用。具体的手法,很难在这里一一列举,但是,以我的开发经验来看,
  许多似曾相识的代码不断的出现在书中,而作者举重若轻的处理手法,正是让我有拍案惊奇的地方。实际上,回味起来,每个手法都不是什么很高超的技法,但正是因为见识过类似的代码,才能体会到这种手法的价值所在。所以,相对于程序新人,它更适合有经验的人。
  
  之所以说这本书更适合有经验的人还因为,这本书中谈及的内容涵盖设计、测试、重构等诸多方面:通过重构,解开代码内的耦合,让其可测。这恰恰是前面提到的那三本书所讲的内容。也只有懂得了这些基本内容才能体会到那些具体手法的价值所在。依然记得当年读《重构》时,在提取和内联之间迷茫了好久,直到后来经过了许多开发实践才体会到这些做法的真正含义。
  
  如果说不足,那么,这本书缺乏一个列表,就像Martin Fowler为《重构》所做的那样,出什么样的问题,应该采用怎样的手法进行处理。
  
  关于中译本,总的来说,翻译得很流畅,读起来比较舒服。不过,制作上还是有一些不太让人满意的地方。
  * 译注太多,而且有些是低估读者智商的译注。
  * 页边标有页码,似乎是为了与英文版对照,但文中的参考页码又是以中文版为准,显得有些乱。
  * 书的装订不是特别令人满意,我一直担心从中间断开。
  
  http://dreamhead.blogbus.com/logs/10413904.html

2007-10-22 15:33:00 Cindy

  不错。

2007-10-22 19:33:56 Cindy

  我来回答第二、三个问题。
  2.页边标有的页码,是为了方便读者查看索引的时候对照正文。而正文中的参考页码是为了方便读者在正文内容之间切换。这是编辑为了方便读者的阅读而多做的很多功夫。读者不明白,所以会觉得有些乱。
  3.本书装订很结实,绝对不会出现从中间断开的现象。
  谢谢。
  :)

2007-10-23 07:27:41 nicky

  可以转载吗?

2007-10-23 07:51:39 默石

  谢谢,看完后二收转让否

2007-10-23 09:07:19 阿立

  这本书这么好啊?

2007-10-23 09:49:54 dreamhead

  To Cindy:
  感谢你对第二、三个问题的回答。对于第二点,你提到的,我看出来了,不过,如果这么做了,应该在比较显眼的地方给个提示。
  
  To nicky:
  转载只要遵循网上的规矩,把出处给出就好。
  
  To 默石:
  我读过之后,贡献给公司了。
  
  To 阿立:
  书好不好,取决于读时的能力和期望。这本书是在我想了解相关内容时读到的,刚好又有了几年的经验,所以,我觉得不错。你的能力和需求是什么,我不知道,我不敢说它一定适合你。

2007-10-23 10:25:51 camelwoo

  有时间找来看看 :)

2007-10-23 12:41:07 zengcity

  修改代码的艺术

2007-10-28 15:10:16 1000copy

  以下内容颇有见地。
  ---------------
  书好不好,取决于读时的能力和期望。这本书是在我想了解相关内容时读到的,刚好又有了几年的经验,所以,我觉得不错。你的能力和需求是什么,我不知道,我不敢说它一定适合你。
  
  第一章the first example最为经典
  ---------------
  
  Martin Fowler的《重构》,严格说来,我并没有完整的读完这本书,不过,正如作者自己所说,这样的书原本就不指望能够读完,因为有一大部分其实是参考手册

2007-10-29 15:28:02 Sheldon

  《重构》更像是一种世界观,虽然貌似很实际的很简单的道理,但越简单的道理越是大道理。这是我的看法。
  有机会拜读一下这本《修改代码的艺术》~~~

2007-12-04 15:25:13 hibernatesone

  抱歉点错了

2008-03-05 00:15:01 Vladimirovich

  "书好不好,取决于读时的能力和期望。这本书是在我想了解相关内容时读到的,刚好又有了几年的经验,所以,我觉得不错。你的能力和需求是什么,我不知道,我不敢说它一定适合你。"
  
  这句话我喜欢!!老大我想转载这句话,要不要标明出处呢?
  
  想想这几年的读书经验,很多书是先束之高阁,多年以后再次翻阅则倍感相见恨晚。呵呵,一直有这种感觉,老大帮我归纳出来了。

2008-03-10 21:39:17 fisher

  今天刚收到这本书。希望能挤出时间好好看看!
  一直都做嵌入式开发,软件思想接触的太少了,有好多知识要学习。。。

2008-04-21 23:19:45 Vladimirovich

  "《重构》更像是一种世界观,虽然貌似很实际的很简单的道理,但越简单的道理越是大道理。这是我的看法。"
  
  这句话耳熟啊!想想原来我以前看Kent Beck的《极限编程解析》时也说过类似的话: “XP其实是一种人生观!”
  
  其实很多时候看这些大牛的书虽然说东西有学到,但是更重要的是从大牛们的字里行间发现他们与众不同但又合情合理的一些思维方式。
  
  其实我是在看了《重构》之后才开始慢慢了解什么是“好代码”的。
  

2009-08-07 12:42:31 景天

  !!


>修改代码的艺术

修改代码的艺术
作者: Michael Feathers
isbn: 7115163626
书名: 修改代码的艺术
页数: 384
译者: 刘未鹏
定价: 59.0
出版社: 人民邮电出版社
装帧: 平装
出版年: 2007-09-25

dreamhead的其他评论   · · · · · ·