读书笔记

去年乘着同事去中国回来的机会让带了几本书,其中一本便是“The Clean Coder: A Code of Conduct for Professional Programmers”,人民币¥59,比amazon.com上面英文原版美元$31还是便宜不少。这个月利用业余的时间读了一遍。
这本书的作者是Robert C. Martin,所谓的Bob大叔,之前还读过他的另外一本“Agile Principles, Patterns, and Practices in C#”。语言的风格还是比较一致的,很多是作者自身的经历解释作如何成为一个专业的程序员。并不是很多的大道理,但是还是很值得一个不够专业的程序员,比如鄙人,好好反思并在行动中去实践的。考虑到我是个健忘的人,还是在这里记录下关键的一些行为准则,以便时常对照。
本书开始提到了著名的挑战者号航天飞机灾难,该事故一个重要原因是管理层忽视了在当天清晨时,工程师对于低温下进行发射的危险性发出的警告,且未能充分地将这些技术隐患报告给他们的上级。在这个过程中,工程师们做了他们所能做的事情,但是作者也反问了这是否足够?由此作者引出来专业的最重要的前提是承担责任(Taking Responsibility),在开发中应该维持功能的结构的一致性(Do No Harm),自动化QA,持续学习(Continuous Learning),熟悉计算机专业知识(Know your field), 练习(Practice), 合作(Collaboration) ,了解领域知识(Know your domain), 谦虚(Humility).
其中Know your field提到了作为软件开发人员应该精通的最低限度领域知识包括,设计模式(Design Pattern), 设计原则(Design principles), 方法学(XP, Scrum,…), 纪律(Disciplines including TDD, OOD, …), 设计工具(UML, …). 这方面我的确还有待提高。
接着作者提出了作为专业的程序员如何在应该说不的时候说不(Saying No), 在应该说是的时候说是(Saying Yes). 有以下几点有些意思:

  • Why is a lot leas important than the fact. Providing too much detail can be an invitation for micro-management.
  • There is no trying.
  • Professionals become heroes when they get a job done well, on time, and on budget.
  • If you can’t make your commitment, the most important thing is to raise a red flag as soon as possible to whoever you committed to.
  • It’s easier to say you’ll get a lot done on the weekends, it’s a lot harder to actually muster enough energy to do high-quality work.
  • Professionals know their limits.
  • Professionals are not required to say yes to everything that is asked of them, however, they should work hard to find creative ways to make “yes” possible.
  • Saying “yes”, it’s commitment, Say. Mean. Do.

接下来作者谈到程序员最核心的工作之一, Coding. 其中的一些建议:

  • Your code must work to solve the problem for you by the customer
  • Your code must fit well into existing system
  • Your code must be readable by other programmers.
  • Do not code If you are tired or distracted.
  • Willingness to be helpful
  • Know when to walk away

下面一章作者专门用来推荐Test Driven Development, 其中提到Unit test不仅可以衡量程序可测试性,而且其本身就是关于程序设计的底层的文档,想到之前某些tester对于TDD的理解,不禁莞尔。另外一章作者提到了Acceptance test作为完美需求文档的作用,并确保程序员和Stakeholder之间的理解一致,之后作者提到他对于测试策略的理解。总的来说Bob大叔还是非常重视测试的。
接着作者提出一些对于时间管理的建议,其中包括会议,”Meeting are necessary” and “Meetings are huge time wasters”. 应该拒绝参加不必要的会议,在可能的情况下提前离开,确保会议有明确的议程和目标,控制standup meeting的时间(1个人1分钟),避免在不一致的问题上耗费过多时间, “Any argument that can’t be settled in five minutes can’t be settled by arguing”.
然后谈到了Estimation,Estimation is a distribution and Professionals draw a clear distinctions between estimates and commitments. 之后是如何面对压力)Pressure),其中非常重要的一点是即使在压力的情况,仍然应该follow your disciplines and keep it clean。在和人协作这个话题中,作者提到程序员有时候难以一些工作,但是Professionals work together and programming is all about working with people.
在最后作者推荐了他经常使用的工作,包括Git作为源代码管理工具,IntellJ作为IDE,已经其他的一些开源工作用于单元测试,Issue tracker, 建模工具,其中Git我倒是颇有兴趣尝试下。
总的来说,这次算是浏览了一篇,还是有不少建议可是应用到实际的工作中,包括和人的沟通,对测试的重视,时间的管理等等。