为什么选择这本书的读书笔记作为第一篇技术博客呢?
觉得这是一种信仰吧,这句话其实也是从一个音乐学院的小伙口中听来的。今年年初被之前工作的售楼部的同事叫去参加周末活动(他们抬了一架三角钢琴在现场,知道我学过就叫我过去玩),有个小伙儿在弹钢琴,身边的前同事缠着他让他弹周杰伦的歌,但是他很严肃的拿出了一本巴赫作品集,说了一句“每次弹琴之前必须演奏一曲巴赫,这是我的信仰”。当时内心突然就被他震撼到了,我也是学过7、8年钢琴的人,怎么从来没有过这样的想法呢,当然我给自己的解释为可能是当初年龄太小了吧。当然也可能是小伙很爱钢琴,而我当初只是为了学钢琴而学。
好了,回归主题,这本书叫做《代码整洁之道—程序员的职业素养》。内容涉及到的技术内容并不多,作为一名程序员新人,完全可以把它作为入门读物。当然虽然我严格意义上讲算不上新人,被大神安利才来拜读,但依然觉得这本书仍然对我有着极为深切的影响,如果早点看到,也许还能少走一些弯路。
个人觉得译者序余晟写的很棒,虽然这次写读书笔记是我第二次阅读此书,对书中一部分内容印象已经有些模糊,但仍然对他的序言开篇讲到的这个问题印象尤为深刻。
我在招聘中经常会问道:“在你过去的工作中,遭遇过那些印象深刻的困难,最后是怎么解决的?……在我看来,与问题本身的难度相比,解决问题的方式、步骤以及反思的程度,才能体现出一个人的职业素养。”—《代码整洁之道—程序员的职业素养》译者序1
纵观Bob大叔的这本书,并没有什么长篇大论难懂的文字,他用自己的亲身经历和最接地气的语言回答了下列5个他自己在前言中提到的问题:
- 什么是软件专业人士?
- 软件专业人士如何行事?
- 软件专业人士如何处理冲突,应对很紧的工期,如何和不讲道理的管理人员打交道?
- 软件专业人士何时应该说“不”?怎么说?
- 软件专业人士如何应对压力?
下面就分别针对这五个问题,分段总结下自己的体会吧。
一、 什么是软件专业人士?
Bob大叔用他42年的编程经验告诉我们,首先我们要清楚自己作为专业人士肩上需要承担的责任与义务。什么是责任,首先要对自己发布的软件确保QA找不出任何问题,不能把自己都没有把握的代码提交上去,这就是不专业的做法。这就需要我们在写代码的时候最好先写测试,再写要测的代码,即强调内容使用测试驱动开发(TDD)。其次,要确保自己的代码结构良好,具有可扩展性,用Bob大叔的话来说就是“你必须让修改不必花太高代价就可以完成”。然而想轻松做到这样,恐怕还是需要不断的重构练习吧。关于义务,其实我的理解和大叔不谋而合了,它不是每一个雇主强制性的要求,而是自己对于自己职场道路究竟能走多远的一个前期投资吧。首先我们要了解自己的领域,IT行业的发展迅速,知识更迭有时候会令我们眼花缭乱,所以Bob大叔也很贴心的给出了他认为每个专业软件开发人员必须精通的事项。
- 设计模式。必须能描述GOF书中的全部24种模式,同时还要有POSA书中的多数模式的实战经验。
- 设计原则。必须了解SOLID原则,而且要深刻理解组件设计原则。
- 方法。必须理解XP、Scrum、精益、看板、瀑布、结构化分析及结构化设计等。
- 实践。必须掌握测试驱动开发、面向对象设计、结构化编程、持续集成和结对编程。
- 工件。必须了解如何使用UML图、DFD图、结构图、Petri网络图、状态迁移图表、流程图和决策表。
当然这些是远远不够的,除此之外,还要更广泛的学习,接触最新的技术,不要陷于一种语言,多尝试不同的技术。另外,就是练习。唐代著名文学家、思想家韩愈告诉我们“业精于勤荒于嬉”,任何行业都一样,唯有不断的练习才能保持技术纯熟。这本书中大叔介绍的练习方法是,重复做“保龄球游戏”、“素数筛选”这类的Kata(可以理解为“套路”,或者某种固定的“形”—译者注)。多种kata在大叔的网站
http://butunclebob.com/搜索关键字都可以找到。最后,谦逊待人,学会与他人合作,辅导新人,甚至了解自己开发解决方案所对应的业务领域与客户/雇主保持一致,都会为自己的职业道路带来更积极的作用吧。