阅读整理:《代码整洁之道—程序员的职业素养》

372 阅读5分钟

本文概括性的阐述了本书每章节的主要内容,感兴趣的话可以结合本书深入理解并延伸相关观点。

1.专业主义

  • 专业主义明确意味着责任与任务;
  • 不行损害之事:不破坏软件功能,不破坏结构;
  • 职业道德:了解你的领域,坚持学习,练习,合作,辅导,了解业务领域,与雇主、业主保持一致,谦逊。

2.说“不”

  • 对抗角色:追求和捍卫自己的目标;
  • 高风险时刻:越是关键时刻,不字就越有价值;
  • 要有团队精神:频繁的与大家交流,关心队友,竭力做到尽职尽责。

3.说”是“

  • 承诺:口头上说自己将会去做,心里认真对待做出的承诺,真正付诸行动;
  • 坚持原则,保持信守承诺,做一名严谨负责的开发人员,是一种很有价值的评价。

4.编码

  • 做好准备:代码必须能够正常工作,代码必须能够替客户解决问题,代码必须与系统结合,其他程序员能读懂你的代码;
  • 流态区:即高效率状态,意识高度专注但是思维视野会收拢到狭窄状态,结对编程可保持高效同时又避免进入流态区;
  • 阻塞:结对编程和创造性输入(广泛阅读);
  • 调试:调试时间同编码时间一样昂贵,应该尽量减少不必要的调试活动;
  • 保持节奏:调整自己的身体状态,保持自己的精力和创造力;
  • 进度延迟:管理延迟的诀窍就是早期检测和保持透明;
  • 帮助:帮助他人和接受他人的帮助。

5.测试驱动开发

  • TDD的三项法则:

定律一 在编写不能通过的单元测试前,不可编写生产代码。

定律二 只可编写刚好无法通过的单元测试,不能编译也算不通过。

定律三 只可编写刚好足以通过当前失败测试的生产代码。

  • TDD的优势:确定性,缺陷注入率低;可塑性强,测试即文档;
  • TDD的局限:不一定所有场合都适用。

6.练习

  • 职业程序员通常会受到解决问题的种类比较单一的限制,公司通常只强调一种语言,一种平台以及程序员的专门领域。经验不够的程序员,履历和思维都存在一种贻害无穷的盲区。应该做好面对行业周期变化的准备。

7.验收测试

  • 需求的沟通:避免过早精细化和迟来的模糊性;
  • 验收测试的目的是沟通,澄清,精确化;考虑成本,验收测试应当自动进行;
  • 单元测试是程序员写给程序员的,是正式的设计文档,描述底层代码和代码行为,验收测试是业务方写给业务方,是正式的需求文档,描述业务方认为系统应该怎么运行。

8.测试策略

  • 以QA应该找不到任何错误为目标;QA是团队的一部分,是需求规约的定义者,是特性描述者;
  • 自动化测试的金字塔:人工探索式测试,系统测试,集成测试,组件测试,单元测试(由顶到底)。

9.时间管理

  • 会议:会议是必需的,会议浪费了大量的时间;学会拒绝和离席;确定议程和目标;立会;迭代计划会议;迭代回顾和demo展示;
  • 注意力点数:睡眠;咖啡因;恢复;肌肉注意力;输入和输出;
  • 时间拆分和番茄工作法:在25分钟的高效工作时间段,你有底气拒绝任何干扰;
  • 避免优先级错乱;
  • 慎重的态度和积累的经验以避免死胡同和泥潭;一但看清楚要立即避开,防止徒劳工作,越陷越深。

10.预估

  • 预估影响到的商业价值巨大,关乎声誉,预估是业务人员和开发人员之间最主要的障碍,横亘在双方之间的种种不信任,业务认为预估是承诺,开发认为预估是猜测。
  • PERT(技术评审技术):三元分析法(乐观预估,标称预估,悲观预估),通过三者预估,得到概率分布。
  • 德尔菲法:讨论-预估,不断重复上述过程,直到意见统一。
  • 大数定律:把大任务分成小任务,分开预估加总,结果会相对准确很多。

11.压力

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

12.协作

  • 编程就意味着合作,我们不仅需要和业务人员一起工作,也需要和程序员们相互合作。

13.团队与项目

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

14.辅导,学徒期与技艺

  • 学校能够传授的是计算机编程的理论,但是学校不会也无法传授作为一名编程匠者所需掌握的原则,实践,技能。这些东西只有经由师徒个体间多年的细心监督和辅导才能获得,软件行业中像我们这样的一批人必须要面对这一事实,即指引下一代软件开发人员成熟起来的责任无法寄希望于大学教育,建立一种包含学徒制,实习期,长期指引的机制至关重要。