第一部分 开发者职业生涯基础 13
第1章 职业路径 14
1.1 科技公司的类型 14
1.2 典型的软件工程职业道路 18
1.3 薪酬与公司“层级” 21
1.4成本中心与利润中心 25
1.5 思考职业进步的另类视角 26
第2章 掌控你的职业生涯 28
2.1你的职业生涯由你自己主宰 28
2.2 成为他人眼中“能成事”的人 29
2.3 记录工作日志 30
2.4 主动寻求并给予反馈 31
2.5 让你的上司成为盟友 33
2.6 保持自己的节奏 35
第3章 绩效评估 37
3.1 提早开始:收集背景信息并设定目标 37
3.2 习惯的力量 39
3.3 绩效评估前的准备 41
3.4绩效评估 43
第4章 晋升 46
4.1晋升的决定因素 46
4.2晋升流程的类型 47
4.3“终极职级” 48
4.4大科技公司的晋升之道 49
4.5晋升建议 51
4.6 长期职业观 54
第5章 在不同的环境中蓬勃发展 56
5.1 产品团队与产品思维工程师 56
5.2平台团队 57
5.3 “和平时期”与“战争时期” 59
5.4 公司类型 62
第6章 跳槽 66
6.1 探索新机会 66
6.2 等待晋升vs跳槽 67
6.3 准备技术面试 69
6.4 降级跳槽 73
6.5 升级跳槽 75
6.6 新公司入职 76
要点总结 77
第二部分 称职的软件开发者 79
第7章 高效完成任务 80
7.1 专注于最重要的工作 80
7.2自主解决问题 81
7.3分解工作 86
7.4预估工作时间 87
7.5寻求导师 90
7.6 保持“好感余额”充足 91
7.7 主动出击 92
第8章 编程 94
8.1 大量练习编程 94
8.2 编写可读代码 97
8.3编写高质量代码 99
第9章 软件开发 102
9.1 精通一门编程语言 102
9.2调试 105
9.3重构 107
9.4测试 109
第10章 高效开发者的工具 111
10.1 本地开发环境 111
10.2 常用工具 113
10.3快速迭代的方法 115
要点总结 118
第三部分 全面发展的高级工程师 120
第11章 高效完成工作 123
11.1 完成工作:认知与现实 123
11.2你的个人工作 125
11.3 完成工作要做到“真正完成” 128
11.4你的团队 132
11.5全局视野 133
第12章 协作与团队合作 135
12.1代码评审 135
12.2结对编程 137
12.3指导与辅导 139
12.4提供反馈 143
12.5 与其他工程团队协作 144
12.6影响他人 145
第13章 软件工程 148
13.1 语言、平台和领域知识 148
13.2调试技能 150
13.3技术债务管理 152
13.4文档编写 155
13.5 在团队中推广最佳实践 157
第14章 测试 159
14.1单元测试 159
14.2集成测试 161
14.3 UI测试 161
14.4 自动化测试的思维模型 161
14.5 专用测试 164
14.6 在生产环境中的测试 167
14.7自动化测试的优势与劣势 168
第15章 软件架构 169
15.1设计文档、RFC和架构文档 169
15.2原型开发与概念验证 171
15.3领域驱动设计 172
15.4面向交付的软件架构 173
要点总结 176
第四部分 务实的技术负责人 178
第16章 项目管理 181
16.1 工程师主导项目的公司 181
16.2 为何需要项目管理 182
16.3 项目启动与里程碑 183
16.4“软件项目物理学” 186
16.5日常项目管理 188
16.6风险与依赖关系 190
16.7 项目收尾 193
第17章 发布到生产环境 195
17.1发布到生产环境的极端做法 195
17.2不同公司中的典型的发布流程 197
17.3 负责任地发布到生产环境的原则与工具 199
17.4额外的验证层和保护措施 201
17.5为加速发布做出务实的风险决策 204
17.6定义发布流程时的其他考虑因素 205
17.7选择合适的发布方法 206
第18章 利益相关者管理 208
18.1 利益相关者管理的真正目标 208
18.2 利益相关者的类型 209
18.3 确定谁是你的利益相关者 211
18.4 保持与利益相关者信息同步 212
18.5应对棘手的利益相关者 213
18.6向利益相关者学习 214
第19章 团队结构 216
19.1 角色与头衔 216
19.2 团队流程 217
19.3 提升团队专注力 219
第20章 团队动态 221
20.1 健康的团队 221
20.2 不健康的团队 222
20.3面临成长阵痛的团队 225
20.4 改善团队动态 226
20.5 与其他团队的关系 228
要点总结 229
第五部分 典范级资深工程师与首席工程师 230
第21章 理解业务 232
21.1 北极星指标、关键绩效指标和目标与关键结果 232
21.2你的团队与产品 235
21.3你的公司 238
21.4上市公司 242
21.5初创公司 243
21.6你所在的行业 243
第22章 协作 245
22.1内部政治 245
22.2 影响他人 247
22.3 与管理者合作 251
22.4与资深及以上级别同事的协作 252
22.5拓展你的人脉网络 253
22.6帮助他人 254
第23章 软件工程 256
23.1 你依然参与的编码工作 256
23.2 有益的工程流程 258
23.3快速迭代的工程实践 261
23.4 提升工程师效率的工具 264
23.5合规性与隐私 268
23.6安全开发 269
第24章 可靠的软件系统 271
24.1可靠性责任 271
24.2日志记录 271
24.3 监控 273
24.4 告警管理 275
24.5值班机制 277
24.6事件管理 281
24.7构建弹性系统 283
第25章 软件架构 285
25.1尽可能保持简单 285
25.2掌握行话,但切勿滥用 286
25.3架构债务 287
25.4单向门决策与双向门决策 288
25.5决策的波及范围 290
25.6可扩展架构 291
25.7架构决策与业务优先级 292
25.8紧密贴近工作实际 293
25.9软件架构师的特质 294
第六部分 结语 301
第26章 终身学习 301
26.1 保持好奇心 301
26.2持续学习 304
26.3不断挑战自我 306
26.4紧跟行业动态 309
26.5适当休息 309
第27章 延伸阅读 311