本文概括性的阐述了本书每章节的主要内容,感兴趣的话可以结合本书深入理解并延伸相关观点。
1.专业主义
- 专业主义明确意味着责任与任务;
- 不行损害之事:不破坏软件功能,不破坏结构;
- 职业道德:了解你的领域,坚持学习,练习,合作,辅导,了解业务领域,与雇主、业主保持一致,谦逊。
2.说“不”
- 对抗角色:追求和捍卫自己的目标;
- 高风险时刻:越是关键时刻,不字就越有价值;
- 要有团队精神:频繁的与大家交流,关心队友,竭力做到尽职尽责。
3.说”是“
- 承诺:口头上说自己将会去做,心里认真对待做出的承诺,真正付诸行动;
- 坚持原则,保持信守承诺,做一名严谨负责的开发人员,是一种很有价值的评价。
4.编码
- 做好准备:代码必须能够正常工作,代码必须能够替客户解决问题,代码必须与系统结合,其他程序员能读懂你的代码;
- 流态区:即高效率状态,意识高度专注但是思维视野会收拢到狭窄状态,结对编程可保持高效同时又避免进入流态区;
- 阻塞:结对编程和创造性输入(广泛阅读);
- 调试:调试时间同编码时间一样昂贵,应该尽量减少不必要的调试活动;
- 保持节奏:调整自己的身体状态,保持自己的精力和创造力;
- 进度延迟:管理延迟的诀窍就是早期检测和保持透明;
- 帮助:帮助他人和接受他人的帮助。
5.测试驱动开发
- TDD的三项法则:
定律一 在编写不能通过的单元测试前,不可编写生产代码。
定律二 只可编写刚好无法通过的单元测试,不能编译也算不通过。
定律三 只可编写刚好足以通过当前失败测试的生产代码。
- TDD的优势:确定性,缺陷注入率低;可塑性强,测试即文档;
- TDD的局限:不一定所有场合都适用。
6.练习
- 职业程序员通常会受到解决问题的种类比较单一的限制,公司通常只强调一种语言,一种平台以及程序员的专门领域。经验不够的程序员,履历和思维都存在一种贻害无穷的盲区。应该做好面对行业周期变化的准备。
7.验收测试
- 需求的沟通:避免过早精细化和迟来的模糊性;
- 验收测试的目的是沟通,澄清,精确化;考虑成本,验收测试应当自动进行;
- 单元测试是程序员写给程序员的,是正式的设计文档,描述底层代码和代码行为,验收测试是业务方写给业务方,是正式的需求文档,描述业务方认为系统应该怎么运行。
8.测试策略
- 以QA应该找不到任何错误为目标;QA是团队的一部分,是需求规约的定义者,是特性描述者;
- 自动化测试的金字塔:人工探索式测试,系统测试,集成测试,组件测试,单元测试(由顶到底)。
9.时间管理
- 会议:会议是必需的,会议浪费了大量的时间;学会拒绝和离席;确定议程和目标;立会;迭代计划会议;迭代回顾和demo展示;
- 注意力点数:睡眠;咖啡因;恢复;肌肉注意力;输入和输出;
- 时间拆分和番茄工作法:在25分钟的高效工作时间段,你有底气拒绝任何干扰;
- 避免优先级错乱;
- 慎重的态度和积累的经验以避免死胡同和泥潭;一但看清楚要立即避开,防止徒劳工作,越陷越深。
10.预估
- 预估影响到的商业价值巨大,关乎声誉,预估是业务人员和开发人员之间最主要的障碍,横亘在双方之间的种种不信任,业务认为预估是承诺,开发认为预估是猜测。
- PERT(技术评审技术):三元分析法(乐观预估,标称预估,悲观预估),通过三者预估,得到概率分布。
- 德尔菲法:讨论-预估,不断重复上述过程,直到意见统一。
- 大数定律:把大任务分成小任务,分开预估加总,结果会相对准确很多。
11.压力
- 应对压力的诀窍在于,能回避压力时尽可能回避,当无法回避时则勇敢直面压力,可以通过慎重承诺,遵循自己的纪律原则,保持整洁来回避压力,直面压力时,要与别人多沟通,坚守原则,并寻求帮助。
12.协作
- 编程就意味着合作,我们不仅需要和业务人员一起工作,也需要和程序员们相互合作。
13.团队与项目
- 团队比项目更难构建,因此,组建稳健的团队,让团队在一个又一个的项目中整体移动共同工作是较好的办法,并且团队可以同时承接多个项目,在组建团队的同时要给团队足够的时间,让他们形成凝聚力,一直共同工作,成为不断交付项目的强大引擎。
14.辅导,学徒期与技艺
- 学校能够传授的是计算机编程的理论,但是学校不会也无法传授作为一名编程匠者所需掌握的原则,实践,技能。这些东西只有经由师徒个体间多年的细心监督和辅导才能获得,软件行业中像我们这样的一批人必须要面对这一事实,即指引下一代软件开发人员成熟起来的责任无法寄希望于大学教育,建立一种包含学徒制,实习期,长期指引的机制至关重要。