本书是编程大师“鲍勃大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。
1. 汇聚编程大师"Bob 大叔"40余年编程生涯的心得体会;
2. 阐释软件工艺中的原理、技术、工具和实践;
3. 助力专业软件开发人员具备令人敬佩的职业素养;
4. 代码整洁之道CleanCode姐妹篇,中文版豆瓣评分8.7分。
成功的程序员在以往的工作和生活中都曾经历过大大小小的不确定性,承受过永无休止的压力。他们之所以能够成功,是因为拥有一个共同点,都深切关注创建软件所需的各项实践。他们将软件开发视为一种需要精雕细琢加以修炼的技艺,他们以专业人士的标准要求自己,他们具有职业素养。
世界级软件开发大师Robert C. Martin在书中介绍了真实软件技艺中的各项原则、技术、工具和实践,展示了怎么以自豪、自尊和自信的心态进行软件开发,怎么取得卓越表现和丰硕成果,怎么做到有效沟通和确切估算,怎么以坦诚的心态面对困难,并引导读者认识到专业程序员肩负的责任重大,阐述了什么才是程序员的职业素养。
书中的具体内容包括:
● 成为真正的软件专业人士需要具备哪些条件,如何应对彼此冲突又紧张的进度表和不近情理的管理人员;
● 如何做到流畅编程,克服阻塞状态;
● 如何应对无休止的工作压力,避免崩溃;
● 如何培养坚持不懈的态度,如何拥抱新的开发范式;
● 如何管理好时间,避免身陷泥潭无法自拔;
● 如何培育有利于程序员和开发团队茁壮成长的环境;
● 什么时候应该说“不”,怎么说;
● 什么时候应该说“是”,承诺意味着什么。
优秀软件强大、优雅而实用,让人惊叹不已,不论是开发者还是用户都乐于使用这样的软件。它们并非是由机器编写出来的,而是出自那些对软件技艺拥有坚定信念的专业软件开发者之手。本书将帮助读者成为专业软件开发者中的一员,并赢得只有他们才能拥有的荣誉感和成就感。
Robert C. Martin是世界级软件开发大师,设计模式和敏捷开发先驱,敏捷联盟首任主席,C++ Report前主编,被后辈程序员尊称为“Bob大叔”。20世纪70年代初成为职业程序员,后创办Object Mentor公司并任总裁。他还是一名多产的作家,至今已发表数百篇文章、论文和博客文章。除本书外,还著有《代码整洁之道》《敏捷软件开发:原则、模式和实践》等。
目 录
Pre-Requisite Introduction / 必读引言 1
Chapter 1 Professionalism / 专业主义 7
Be Careful What You Ask For / 清楚你要什么 8
Taking Responsibility / 担当责任 8
First, Do No Harm / 首先,不行损害之事 11
Work Ethic 16
Bibliography / 参考文献 22
Chapter 2 Saying No / 说“不” 23
Adversarial Roles / 对抗角色 26
High Stakes / 高风险时刻 29
Being a “Team Player” / 要有团队精神 30
The Cost of Saying Yes / 说“是”的成本 36
Code Impossible / 如何写出好代码 41
Chapter 3 Saying Yes / 说“是” 45
A Language of Commitment / 承诺用语 47
Learning How to Say “Yes” / 学习如何说“是” 52
Conclusion / 结论 56
Chapter 4 Coding / 编码 57
Preparedness / 做好准备 58
The Flow Zone / 流态区 62
Writer’s Block / 阻塞 64
Debugging / 调试 66
Pacing Yourself / 保持节奏 69
Being Late / 进度延迟 71
Help / 帮助 73
Bibliography / 参考文献 76
Chapter 5 Test Driven Development / 测试驱动开发 77
The Jury Is In / 此事已有定论 79
The Three Laws of TDD / TDD的三项法则 79
What TDD Is Not / TDD的局限 83
Bibliography / 参考文献 84
Chapter 6 Practicing / 练习 85
Some Background on Practicing / 引子 86
The Coding Dojo / 编程柔道场 89
Broadening Your Experience / 自身经验的拓展 93
Conclusion / 结论 94
Bibliography / 参考文献 94
Chapter 7 Acceptance Testing / 验收测试 95
Communicating Requirements / 需求的沟通 95
Acceptance Tests / 验收测试 100
Conclusion / 结论 111
Chapter 8 Testing Strategies / 测试策略 113
QA Should Find Nothing / QA应该找不到任何错误 114
The Test Automation Pyramid / 自动化测试金字塔 115
Conclusion / 结论 119
Bibliography / 参考文献 119
Chapter 9 Time Management / 时间管理 121
Meetings / 会议 122
Focus-Manna / 注意力点数 127
Time Boxing and Tomatoes / 时间拆分和番茄工作法 130
Avoidance / 要避免的行为 131
Blind Alleys / 死胡同 131
Marshes, Bogs, Swamps, and Other Messes / 泥潭 132
Conclusion / 结论 133
Chapter 10 Estimation / 预估 135
What Is an Estimate / 什么是预估 138
PERT 141
Estimating Tasks / 预估任务 144
The Law of Large Numbers / 大数定律 147
Conclusion / 结论 147
Bibliography / 参考文献 148
Chapter 11 Pressure / 压力 149
Avoiding Pressure / 避免压力 151
Handling Pressure / 应对压力 153
Conclusion / 结论 155
Chapter 12 Collaboration / 协作 157
Programmers versus People / 程序员与人 159
Cerebellums / 小脑 164
Conclusion / 结论 166
Chapter 13 Teams and Projects / 团队与项目 167
Does It Blend / 只是简单混合吗 168
Conclusion / 结论 171
Bibliography / 参考文献 171
Chapter 14 Mentoring, Apprenticeship, and Craftsmanship / 辅导、学徒期与技艺 173
Degrees of Failure / 失败的学位教育 174
Mentoring / 辅导 174
Apprenticeship / 学徒期 180
Craftsmanship / 技艺 184
Conclusion / 结论 185
Appendix A Tooling / 工具 187
Tools / 工具 189
Source Code Control / 源代码控制 189
IDE/Editor / 集成开发环境/编辑器 194
Issue Tracking / 问题跟踪 196
Continuous Build / 持续构建 197
Unit Testing Tools / 单元测试工具 198
Component Testing Tools / 组件测试工具 199
Integration Testing Tools / 集成测试工具 200
UML/MDA 201
Conclusion / 结论 204