《代码整洁之道 程序员的职业素养》

本书主要讲什么是专业的(Professional)程序员,成为专业的程序员,需要什么样的态度、原则、行动。

作者简介

Robert C.Martin,人称Bob大叔,真·骨灰级 程序员。书中他是这么介绍自己的:
“我编了42年的程序。这42年里,我什么都经历过。我被开除过,也被表扬过。我当过小组长,当过主管,也当过普通员工,甚至当过CEO。”
“我用过COBOL、FORTRAN、BAL、PDP-8、PDP-11、C、C++、Java、Ruby、Smalltalk。”
“20世纪70年代,并没有多少资深程序员。我后来去哪里工作,就是那里的资深程序员。”

书名讨论

本书原文名为:The Clean Coder. A code of Conduct for Professional Programmers
译名为:《代码整洁之道 程序员的职业素养》。我觉得翻译得不是很贴切,而且极易与另一本书搞混。
书名直译过来应该是:整洁的程序员。专业程序员的行为准则。(Clean这个词在这里不太好翻译,姑且译为整洁的吧)。本书强调的是Coder,是,是怎么做事、什么时候说Yes、什么时候说No。
作者还有另一本书,原文名为: Clean Code. A Handbook of Agile Software Craftsmanship.
译名为:《代码整洁之道》。是不是很上面那本书混淆了。这本书直译过来应该是:整洁的代码。敏捷软件开发指南。本书强调的是Code,是代码,怎么命名、写函数、写类等。

本书主要讲了以下几大内容:

  • 专业主义
  • 什么时候该说不,什么时候该说是
  • 如何高效地写代码
  • 测试的重要性以及执行方案
  • 时间管理
  • 预估工期
  • 如何避免压力、应对压力
  • 如何协作
  • 团队与项目
  • 程序员的不同阶段

1 专业主义

1.1 清楚你要什么

什么叫专业(Professional)?
当说一个人专业的时候,大家应该会想到娴熟的技艺,专注的态度,强烈的责任感。
如果一个人技术非常厉害,但工作态度不端正(做事随意、缺乏时间观念),恐怕是无法被称为专业。书中作者就讲到自己年轻的时候在公司虽然技术非常厉害,但缺乏责任感与时间观念,最后被公司开除的故事,可以说是专业一词的反面案例。

“专业主义”有很深的含义,它不但象征着荣誉骄傲,而且明确以为着责任与义务。
非专业人士不需要为自己所做的工作负责,他们大可把责任退给雇主。如果非专业人士把事情搞砸了,收拾摊子的往往是雇主;而专业人士如果反了错,只好自己收拾残局。
“专业注意”意味着担当责任。那么,我们改如何担当责任呢?

1.2 担当责任

1.3 首先,不行损害之事

1.3.1 不要破坏软件功能

  1. 让QA找不出任何问题;
  2. 要去确信代码正常运行;
  3. 自动化QA;

1.3.2 不要破坏结构

成熟的专业开发人员指导,聪明人不会为了发布新功能而破坏结构。
专业的软件开发人员会牢记这些原则和模式,并在开发软件的时候认真遵循。其中有一条就是,如果希望自己的软件灵活可变,那就应该常修改他。
有一种策略叫做“无情重构”:关注哪个模块,就对它做点简单的修改来改进结构。

1.4 职业道德

职业发展是你自己的事。雇主没有义务确保你在职场立于不败之地,也没有义务培训你,送你参加各种会议或给你买各种书籍充电。这些都是你自己的事。
你应该计划每周工作60小时。前40小时是给雇主的,后20小时是给自己的。在这剩余的20小时里,你应该看书、练习、学习,或做其他能提升职业能力的事情。

1.4.1 了解你的领域

每个软件开发人员必须精通的事项

  • 设计模式。必须能描述GOF书中的全部24中模式,同时还要有POSA书中的多数模式的实战经验。
  • 设计原则。必须了解SOLID原则,而且要深刻理解组件设计原则。
  • 方法。必须了解 XP、Scrum、精益、看板、瀑布、结构化分析及结构化设计等。
  • 实践。必须掌握测试驱动开发、面向对象设计、结构化编程、持续结成和结对编程。
  • 工作 。 必须了解如何试用UML图、DFD图、结构图、Petri网络图、状态迁移图表、流程图和决策表。

1.4.2 坚持学习

软件行业的飞速改变,意味着软件开发人员必须坚持广泛学习才不至于落伍。
不写代码的架构师必然遭殃,他们很快就会发现自己跟不上时代了;不学习新语言的程序员同样回遭殃,他们只能眼睁睁看着软件业一路发展,把自己抛在后面;学不会新规矩和新技术的开发人员更可怜,他们只能在日渐沦落的时候看着身边的人越发优秀。

1.4.3 练习

真正的专业人士往往勤学苦干,以求得则自身技能的纯熟精炼。只完成日常工作是不足以称为练习的,那只能算是种执行性质操作,而不是练习。练习,指的是在日常工作之余专门练习技能,以期自我提升。

1.4.4 合作

专业软件开发人员往往会更加努力地尝试与他人一起编程、一起练习、一起设计、一起计划,这样他们可以从彼此身上学到很多东西,而且能在更短的时间内更高质量的完成更多工作。

1.4.5 辅导

专业人士会视辅导新人为己任,他们不会放人未经辅导的新手恣意妄为。

1.4.6 了解业务领域

1.4.7 与雇主客户保持一致

每次开发系统,都应该站在雇主的角度来思考,确保开发的功能真正能满足雇主的需要。

1.4.8 谦逊


2 说“不”

专业人士敢于说明真相而不屈从于全是。专业人士有勇气对他们的经理说“不”。
奴隶没有权利说“不”,劳工或许也对说“不”有所顾虑,但是专业人士应该懂得说“不”。

对于无法完成的需求,要如实反映情况,要勇敢说不。在明确无法在规定时间内完成需求的情况下,承诺“尝试”是一种不诚实的表现。


3 说“是”

3.1 承诺用语

做出承诺,包含三个步骤:

  1. 口头上说自己将会去做;
  2. 心里认真对待做出的承诺;
  3. 真正付诸行动。

3.1.1 缺乏承诺的征兆

“需要/应当”,“希望/但愿”,“让我们”(而不是“让我”)

3.1.2 真正的承诺听起来是怎样的

“我 将在...之前...”
对自己讲过做某件事做了清晰的事实称述,而且还明确说明了完成期限。


4 编码

不要在太疲惫的时候编码。
不要在焦虑、情绪不稳定的时候编码。
不要禁不住诱惑盲目冲刺。


9 时间管理

9.1 会议

9.1.1 拒绝

受到邀请的会议没有必要全部参加。你应该理智地使用时间,谨慎选择,应该参加哪些会议,礼貌拒绝哪些会议。

9.1.2 离席

如果发现参加某个会议是在浪费时间,就应当像个礼貌的办法退出来。
继续参加对你没有太多意义的会议,是不专业的行为。

9.1.3 确定议程与目标

为了合理使用与会者的时间,会议应当有清晰的议程,确定每一个议题所话得时间,以及明确目标。

9.1.4 立会

  1. 昨天干了什么;
  2. 今天打算干什么;
  3. 遇到了什么问题;
    每个问题20秒,总共1分钟之内。

9.1.5 迭代计划会议

9.1.6 迭代回顾和Demo展示

9.1.7 争论/反对

如果观点无法在短时间(5-30min)里达成一致,就永远无法达成一致。唯一的出路,就是用数据说话。


10 预估

10.2 PERT

计划评估技术(PERT,Program Evaluation and Review Technique)
三元分析法:

  • O:乐观预估。
  • N:标称预付。概率最大的数字。
  • P:悲观预估。最糟糕的数字。
    任务期望完成时间: μ = (O + 4n + P) / 6
    任务的概率分布标准差:σ = (P - O) / 6

你可能感兴趣的:(《代码整洁之道 程序员的职业素养》)