《代码整洁之道--程序员的职业素养》读书笔记

Robert C.Martin 著

第1章 专业主义

1.1 清楚你要什么

专业主义:它不但象征着荣誉与骄傲,而且明确意味着责任义务与担当。

1.3 首先,不行损害之事

1.3.1 不要破坏软件功能

写一些随时都能运行的单元测试,然后尽可能多地执行这些测试。测试覆盖率尽可能为100%。

1.3.2 不要破坏结构

  • 结构良好的代码更灵活。以牺牲结构为代价,得不偿失,将来必追悔莫及。
  • 如果希望自己的软件灵活可变,那就应该时常修改它!
  • 有种策略叫“无情重构”:对每个模块,每检入一次代码,就要让它比上次检出时变得更简洁。每次读代码,都别忘了进行点滴的改善。
  • 对待代码,就如同雕塑家对待泥巴那样,要对它进行不断的变形与塑造。

1.4.1 了解你的领域

  • 设计模式。GOF 24种。
  • 设计原则。SOLID原则,组件设计原则。

1.4.3 练习

每日10分钟卡塔。

第2章 说不

  • 专业人士敢于说明真相而不屈从于权势。
  • 只有敢于说不,才能真正做成一些事情。

2.1 对抗角色

最好的结果是你和你的经理追求共同的目标。最关键的是要找到那个共同目标,而这往往有赖于协商。

2.2 高风险时刻

  • 最要说“不”的是那些高风险的关键时刻。越是关键时刻,“不”字就越具价值。

2.4 说“是”的成本

  • 有时候,获取正确决策的唯一途径,便是勇敢无畏地说出“不”字。

2.5 如何写出好代码

  • 想成为风云为物或救世主有时会让你做出一些不专业的行为
  • 专业人士之所以成为英雄为物,是因为他们出色地完成了任务,不但按时而且符合预算。

第3章 说是

3.3 结论

专业人士不需要对所有请求都回答“是”。不过,他们应该努力寻找创新的方法,尽可能做到有求必应。

第4章 编码

4.2.2 中断

  • 结对是应对中断的一种好方法。结对搭档能够维护住中断处的上下文。
  • 另一种很有帮助的采用TDD。失败的测试能帮你维护住编码进行的上下文。

4.3 阻塞

  • 创造性输出依赖于创造性输入。

4.4 调试

  • 不管是否采纳TDD或其他一些同等效果的实践,衡量你是否是一名专业人士的一个重要方面,便是看你是否能将调试时间尽量降到最低。

4.6 进度延迟

4.6.2 盲目冲刺

  • 如果经理极力要求你尽力赶上最后截止期限,那该怎么办呢?坚决维持你的估算!
  • 唯一能够加快进度的方法便是缩减范围。

4.6.3 加班加点

不应该采用额外加班加点的工作方案,除非以下三个条件都能满足:

  1. 你个人能挤出这些时间。
  2. 短期加班,最多加班两周。
  3. 你的老板要有后备预案,以防万一加班措施失败了。

4.7 帮助

  • 作为业传人士,要以能够随时帮助别人为荣。
  • 如果有人向你伸出援手,要诚挚接受,心怀感激地接受帮助并诚意合作。

第5章 测试驱动开发

5.2 TDD的三项法则

  1. 在编好失败单元测试之前,不要编写任何产品代码。
  2. 只要有一个单元测试失败了,就不要再写测试代码;无法通过编译也是一种失败情况。
  3. 产品代码恰好能够让当前失败的单元测试成功通过即可,不要多写。
    这两个循环不断反复。写一些测试代码,然后再写一些产品代码。这两套代码同步增长,互为补充。

5.3 TDD的优势

5.3.3 勇气

  • 拥有一套值得依赖的测试,便可完全打消对修改代码的全部恐惧。

5.3.4 文档

  • 单元测试即是文档。

5.3.5 设计

  • 遵循三项法则并且测试先行,便能够产生一种驱动力,促使你做出松耦合的设计。

第6章 练习

6.2 编程柔道场

6.2.1 卡塔

  • 真正的挑战是把一个卡塔练习到炉火纯青,你可窥见其中的韵律。
  • some kata
http://katas.softwarecraftsmanship.org/
http://codekata.pragprog.com/

6.3 自身经验的拓展

6.3.1 开源

  • 保持不落伍的一种方法是为开源项目贡献代码,就像律师和医生参加公益活动一样。如果你是Javat程序员,请为Rails项目做点贡献。如果你为老板写了很多C++,可以找一个Python项目贡献代码。

第7章 验收测试

7.2 验收测试

  • 我们把验收测试定义为业务方与开发方合作编写的测试,其目的在于确定需求已经完成。

7.2.1 完成的定义

  • 应该编写整套自动化测试,它们全都通过,就意味着满足了所有的要求。如果对功能的验收测试全部通过,就算真正完成了。

7.2.3 自动化

  • 验收测试都应当自动进行。在软件开发周期中,确实有时候需要手动测试,但是验收测试不应当手动进行,原因很简单:要考虑成本。
  • 工具:FitNesse, Cucmber, robot framework, Selenium。

7.2.5 验收测试什么时候写,由谁来写

  • 在理想状态下,业务方和QA会协作编写这些测试,程序员来检查测试之间是否有冲突或矛盾。
  • 如果只能由开发人员来写测试,应当确保写测试的程序员与开发所测试功能的程序员不是同一个人。
  • 通常,业务分析员测试“正确路径”,以证明功能的业务价值;QA则测试“错误路径 ”、边界条件、异常、例外情况,因为QA的职责是考虑哪些部分可能出问题。

7.2.6 开发人员的角色

  • 开发人员有责任把验收测试与系统联系起来,然后主这些测试通过。

7.2.7 测试的协商与被动推进

  • 与编写测人协商并改进测试是开发人员的职责。绝不能被动接受测试。

7.2.8 验收测试和单元测试

  • 验收测试不是单元测试。单元测试是程序员写给程序呗的,它是正式的设计文档,描述了底层结构及代码的行为。关心单元测试的是程序员而不是业务员。
  • 尽管两者测试的可能是同一个对象,其机制和路径却是不同的。单元测试是系统内部进行,调用特定类的方法;验收测试是在系统外部,通常是在API或者是UI级别进行。

7.2.10

  • 请务必确保在持续集成系统中,单元测试和验收测试每天都能运行好几次。整套系统应该由源代码管理系统来触发。只要有人提交了代码,持续集成系统就会开始构建,并运行所有的测试。
  • 持续集成如果失败了,团队里的所有人应该停下手里的活,看看如何让测试通过。

第8章 测试策略

8.2 自动化测试金字塔

image

第9章 时间管理

9.1 会议

9.1.4 立会

  • 到场人依次回答以下3个问题:1.我昨天干了什么?2.我今天打算干什么?3.我遇到了什么问题? 每个人的发言不超过1分钟。

9.1.7 争论/反对

  • Kent Beck:凡是不能在5分钟内解决的争论,都不能靠辩论解决。
  • 争论之所以要花那么多时间,是因为各方都拿不出足够有力的证据。所以这类争论依据的不是事实,而是信念。
  • 在没有数据的情况下,如果观点无法在适时间(5~30分钟)里达成一致,就永远无法达成一致。唯一的出路是,用数据说话。
  • 如果争论必须解决,就应当要求争论各方在5分钟内向大家摆明问题,然后大家投票。

9.3 时间拆分和番茄工作法

  • 番茄工作法的基本思想:把计时器设定到25分钟。倒计时期间不要让任何事情干扰你的工作。无论什么干扰,都必须等到25分钟结束再处理。
  • 一天中,不错的情况下你可以有1214个番茄时间段,糟糕的情况下可能人有23个。把情况记录下来并且画图表示,就可以很清楚地知道每天有多少时间是有效率的,有多少时间是花在杂事上的。

第10章 预估

10.1.1 承诺

承诺是必须做到的。专业开发人员不随便承诺,除非他们确切知道可以完成。

10.2 PERT

PERT(计划评审技术)的一部分内容就是对预估的计算方法。这种技术包含了一个非常简单有效的办法,把预估变成概率分布。你可以根据3个数字预计某项任务。这就是三元分析法:

  • O: 乐观预计。为保证乐观预估有意义,这个数据对应的发生概率应当小于1%。
  • N:标称预估。这是最大概率的数字。
  • P:悲观预估。为保证悲观预估有意义,这个数据对应的发生概率应当小于1%。
    有了以上三个预估,我们可以这样描述概率分布:
μ = (O+4N+P)/6

μ是任务的期望完成时间。

σ = (P-O)/6

σ是这个任务概率分布的标准差,用来衡量不确定性。如果这个数字很大,就表示非常不确认。

大任务的μ 可由各小任务μ 加和得到。大任务的σ等于各小任务σ的平方和再开方。

第11章 压力

11.1 避免压力

  • 应当避免对没有把握能够达成的最后期限做出承诺。
  • 专业人士总会千方百计地帮助业务方找到达成目标的方法,但并不一定要接受业务方代为做出的承诺。
  • 快速前进确保最后期限的方法,便是保持整洁。
  • 选择那些你在危机时间依然会遵循的纪律原则,并且在所有工作中都遵守这些纪律。

11.3 结论

  • 应对压力的诀窍在于,能回避压力时尽可能地回避,当无法回避则则勇敢直面。可以通过慎重承诺,遵循自己的纪律原则、保护整洁等来回避压力。直面压力时,则要保持冷静,与别人多多沟通,坚守自己的原则纪律,并寻求他人的帮助。

第12章 协作

12.1 程序员与人

12.1.1 程序员与雇主

  • 对做的事情充满激情是好的,但是,最好把注意力集中在付我们薪水的老板所追求的目标上。
  • 专业程序员最糟糕的表现是两耳不闻窗外事,只顾一头将自己埋在技术堆里,甚至公司业务火烧眉毛行将崩溃了也不闻不问。
  • 专业程序员会花时间去理解于业务。他们会和用户讨论他们正在使用的软件,会和销售人员与市场人员讨论所遭遇的问题,会和经理们沟通,明确团队的短期目标和长期目标。

12.1.2 程序员与程序员

  • 专业人士结对工作,因为这是分享知识的最好途径。专业人士不会仅凭一已之力从零开始创建知识,而是通过互相结对来学习系统的不同部分和业务。
  • 结对是复查代码最好的方式

12.3 结论

  • 如果我们真想终生能以编程度日,那么,一定要学会交流。

第13章 团队与项目

13.1.1 有凝聚的团队

  • 有凝聚力的团队通常约有12名成员。最多可以有20人,最少可以只有3人,但是12个人是最好的。这个团队应该程序员,测试人员和分析师,同时还要有一名项目经理。
  • 程序员算一组,测试人员和分析师算一组,2:1是比较好的组合。由12个人组成的理想团队,人员配备情况是这样的:7名程序员,2名测试人员,2名分析师和1名项目经理。

13.2 结论

  • 团队比项目更难构建。困此,组建稳健的团队,让团队在一个又一个项目中整体移动共同工作是较好的做法。团队也可以同时承接多个项目。在组建团队时,要给予团队充足的时间,让他们形成凝聚力,一直共同工作,成为不断交付项目的强大引擎。

第14章 辅导、学徒期与技艺

  • 学校能够传授的是计算机编程的理论。但是学校并不会也无法传授作为一名编程匠者所需掌握的原则,实践和技能。这些东西只有经由师徒个体间多年的细心监督和辅导才能获得。
  • 对新人的培养的辅导非常重要
  • 学徒/实习生-->熟练工(5年左右)-->大师(10年以上)。大师就像星际迷航中的Scotty。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271