霸王移山

  小霸王家门口被大山挡住了,有一天,他遇到了一个姓愚的老头子...
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Book Report —— 读《程序员修炼之道》有感

Posted on 2011-06-16 23:45  霸王移山  阅读(308)  评论(0编辑  收藏  举报

读《程序员修炼之道》有感

余江伟

 

       《程序员修炼之道》(英文注释版)原名The Pragmatic Programmer From Journeyman to Master,是Andrew Hunt和David Thomas关于现代软件开发的一些经验之谈。本书覆盖面非常广,包括哲学、项目管理、开发工具、设计、Debug、实现等方面均有涉及。一个注重实效的程序员,应该在以上方面都有一定的修养。而本书就像一个过来人一样把这些修养娓娓道来。

       在书中的前两章,主要叙述了软件工程中的一些基本哲学,有些比喻十分有趣。比如“石头汤与被煮的青蛙”通过一个士兵与村民的故事说明要培养大局观,用于求变。有时我们会觉得整个系统的每个部分都知道是什么、该怎么做,却不敢开始对付整个项目。作者把这种现象称为“开始阶段的疲软”(start-up fatigue)。我觉得这也是不少人遇到的问题,而且这个问题严重了会变成所谓的拖延症——一种在年轻人中较为流行的心理障碍,这是非常值得重视的。

       第三章到第六章主要说明在编程的过程中需要注意的技术细节:包括使用工具的选择和背后的意义、资源的释放、耦合的问题、异常的使用以及契约设计等等。这几章提到的问题比较多,覆盖了编程中可能犯错的方方面面。其中我对“重构”(Refactoring)一节感触比较深。实践的过程让我觉得重构有两个困难:一是设计一套能够和非重构部分衔接好的方案,二是对重构工作量的估计。这两个做不好都会让人对重构望而却步,而做好这两件事的唯一途径就是用于实践,勤动手,勤思考。引用最近比较流行的一句话就是“There’s no shortcut.”

       本书的最后两张主要和读者分享项目开始前和进行中的一些实践经验。包括需求分析、架构设计、制定规范、小组讨论等项目开始前的内容,以及实际开发、自动化测试、代码文档等开发中需要考虑的事情。我关于这部分的体会主要来自需求分析,接下来将会讨论。

       正如网上许多书评所说的那样,读完这本书是不容易的。我在读这本书的时候,就感觉从任何一章任何一节都可以开始,借助对生僻单词的中文注释,尽管我能够基本明白作者表达的意思,却因为缺乏深入的实践而感觉仅仅停留在表面。经过《现代软件工程》课堂上邹欣老师的讲解和多次堂上、堂下作业以及分组大作业的锻炼,我也对书中提到的一些观点有了更切身的体会。在本文的最后,我结合自身经历谈谈对本书最深的体会。

Tip 52. Work with a User to Think Like a User

这是书中第七章关于需求陷阱的小节中提到的一句话——“和用户一起工作,像用户一样思考”,提示我们在确定需求之前要尽可能地挖掘需求,如果能够深入到用户的思维方式来考虑问题就最好了。

在进行课程项目“霸王背单词”的过程中,我们的需求确定经历了如下过程:

(1)   确定项目选题

(2)   组员结合自身经历(有考过GRE并成功申请的,也有结果不理想而放弃的)提出自己的建议,如背单词遇到的困难或者自己背单词的方法等

(3)   试用已有的背单词软件,看看有什么需要改进的地方

(4)   确定基本功能

(5)   开始开发知道alpha发布

在alpha发布后,班上的Amber同学对我们的软件很感兴趣,因为他正在准备GRE考试,他在使用我们的软件后提出了一些建议,包括我们之前并没有很深入考虑却又是一个背单词软件最关键的部分——记忆模式。重新审视我们的需求分析,我们发现在初期没能和用户在一起是很大的失误。在beta版本中,我们吸取了教训,去除了一些和软件核心不太相关的功能,强化了记忆模式的地位。

       《程序员修炼之道》关于程序员提升自身素养的很好的经验之谈,鉴于我在程序员的实践道路上修行尚浅,一些道理仍不能很好领悟,也许今后还需要在实践中碰个头破血流。但有了这本书,就像有了一位棋艺教练,无论你下的一盘棋是赢是输,他都会耐心为你复盘,找到可以提高的地方。