程序员的38堂成长课
Pete Goodliffe
宋伯远 译
出版时间:2022年01月
页数:288
同样是程序员,为什么别人能构筑坚固的代码堡垒,而自己却深陷代码泥潭?为什么别人能写出美得像艺术品、优雅得像诗歌的代码,而自己却与几个月前才亲手写的代码形同陌路?亲爱的读者朋友,请不要妄自菲薄。其他程序员固然很好,但你也不错。或许,你需要的仅仅是有效的方法和技巧。
本书作者以38个话题为切入点,用幽默诙谐的笔触为你提炼出卓越程序员常用的方法和技巧。每一章篇幅虽短,却发人深省,章末配有令人忍俊不禁的漫画。无论在工作中使用哪种编程语言,你都将在轻松的阅读过程中不知不觉地提升作为程序员的第六感——代码感。
● 让每一行代码都充满匠心的编写技巧、测试技巧和调试技巧
● 卓越程序员爱用的编程实践和方法,以及应有的工作态度
● 让编程生涯稳步提升的诀窍和高效学习的战术
● 把事做完和做好的方法,正确使用工具,积极寻求帮助
● 程序员应该如何寻觅良师益友
  1. 前言
  2. 第1章 心系代码 
  3. 第一部分 编码乃余事
  4. 第2章 保持外观整洁 
  5. 2.1 编码规范不是小事 
  6. 2.2 它关乎沟通 
  7. 2.3 排版 
  8. 2.3.1 结构合理 
  9. 2.3.2 一致性 
  10. 2.4 命名 
  11. 2.4.1 简洁 
  12. 2.4.2 清晰 
  13. 2.4.3 地道 
  14. 2.4.4 准确 
  15. 2.5 得体地修改代码 
  16. 2.6 结论 
  17. 第3章 写更少的代码 
  18. 3.1 为什么要关注 
  19. 3.2 不严谨的逻辑判断 
  20. 3.3 重复代码 
  21. 3.4 僵尸代码 
  22. 3.5 注释 
  23. 3.6 喋喋不休 
  24. 3.7 设计缺陷 
  25. 3.8 空白 
  26. 3.9 解决之道 
  27. 3.10 结论 
  28. 第4章 删除也是一种优化 
  29. 4.1 代码沉迷 
  30. 4.2 因为无法避免,所以可以接受 
  31. 4.3 那又能怎样呢 
  32. 4.4 唤醒梦中人 
  33. 4.5 动个手术吧 
  34. 4.6 结论 
  35. 第5章 代码之背影 
  36. 5.1 编码规范 
  37. 5.2 技术现状 
  38. 5.3 惯用法 
  39. 5.4 设计决策 
  40. 5.5 bug 
  41. 5.6 结论 
  42. 第6章 导航路线 
  43. 6.1 朋友的帮助 
  44. 6.2 寻找线索 
  45. 6.3 边干边学 
  46. 6.3.1 低垂的果实 
  47. 6.3.2 代码检测
  48. 6.3.3 先研究,再行动 
  49. 6.3.4 测试先行 
  50. 6.3.5 整理内务 
  51. 6.3.6 记录你的发现 
  52. 6.4 结论 
  53. 第7章 走出泥潭 
  54. 7.1 嗅出问题 
  55. 7.2 走进泥淖 
  56. 7.3 用调查说话 
  57. 7.4 入坑工作 
  58. 7.5 清理混乱 
  59. 7.6 做出改变 
  60. 7.7 编写烂代码就是糟糕的程序员吗 
  61. 第8章 不可忽视错误 
  62. 8.1 错误机制 
  63. 8.2 疯狂的举动 
  64. 8.3 托词 
  65. 8.4 结论 
  66. 第9章 意料之中的意外 
  67. 9.1 各种错误 
  68. 9.2 线程 
  69. 9.3 关闭系统 
  70. 9.4 话外之意 
  71. 第10章 bug追踪 
  72. 10.1 经济考量 
  73. 10.2 预防胜于治疗 
  74. 10.3 bug追踪 
  75. 10.3.1 捕获错误 
  76. 10.3.2 活用二分法 
  77. 10.3.3 软件考古 
  78. 10.3.4 测试,测试,再测试 
  79. 10.3.5 磨刀不误砍柴工 
  80. 10.3.6 用排除法查找问题 
  81. 10.3.7 保持清洁,预防疾病 
  82. 10.3.8 迂回策略 
  83. 10.3.9 不要急于离开 
  84. 10.4 不可复现的bug 
  85. 10.5 结论 
  86. 第11章 测试时间 
  87. 11.1 为什么测试 
  88. 11.1.1 缩短反馈循环 
  89. 11.1.2 测试代码的代码 
  90. 11.1.3 谁来编写测试 
  91. 11.2 测试的种类 
  92. 11.3 什么时候编写测试 
  93. 11.4 什么时候运行测试 
  94. 11.5 测试什么 
  95. 11.6 优质的测试 
  96. 11.7 一个具体的测试 
  97. 11.8 测试的结构 
  98. 11.8.1 测试的维护 
  99. 11.8.2 选择测试框架 
  100. 11.9 没有代码是孤岛 
  101. 11.10 结论 
  102. 第12章 应对复杂性 
  103. 12.1 圆团 
  104. 12.2 案例学习:降低圆团复杂度 
  105. 12.3 线条 
  106. 12.4 人 
  107. 12.5 结论 
  108. 第13章 双城故事 
  109. 13.1 混乱大都市 
  110. 13.1.1 让人无法理解 
  111. 13.1.2 缺乏内聚 
  112. 13.1.3 不必要的耦合 
  113. 13.1.4 代码问题 
  114. 13.1.5 代码之外的问题 
  115. 13.1.6 一张来自大都市的明信片 
  116. 13.2 设计之城 
  117. 13.2.1 合理放置功能 
  118. 13.2.2 一致性 
  119. 13.2.3 架构的演进 
  120. 13.2.4 延缓设计决策 
  121. 13.2.5 保证质量 
  122. 13.2.6 管理技术债 
  123. 13.2.7 测试方案设计 
  124. 13.2.8 设计时间分配 
  125. 13.2.9 与设计同行 
  126. 13.3 那又怎样 
  127. 第二部分 刻意练习,成就卓越
  128. 第14章 软件开发是…… 
  129. 14.1 软件(食物)那些事 
  130. 14.2 软件开发是……艺术 
  131. 14.3 软件开发是……科学 
  132. 14.4 软件开发是……运动 
  133. 14.5 软件开发是……做游戏 
  134. 14.6 软件开发是……鸡毛蒜皮的琐事 
  135. 14.7 隐喻过多 
  136. 第15章 遵守规则 
  137. 15.1 我们需要更多规则! 
  138. 15.2 制定规则 
  139. 第16章 保持简单 
  140. 16.1 简单设计 
  141. 16.1.1 简单易用 
  142. 16.1.2 防止误用 
  143. 16.1.3 大小很重要 
  144. 16.1.4 代码调用路径短 
  145. 16.1.5 稳定性 
  146. 16.2 简单代码 
  147. 16.3 保持简单,别做蠢事 
  148. 16.4 假设会损害简单性 
  149. 16.5 避免过早优化 
  150. 16.6 足够简单 
  151. 16.7 简单结论 
  152. 第17章 开动脑筋 
  153. 17.1 别犯傻 
  154. 17.2 避免盲目 
  155. 17.3 你可以思考! 
  156. 第18章 没有一成不变 
  157. 18.1 大胆地改 
  158. 18.2 改变态度 
  159. 18.3 做出改变 
  160. 18.3.1 规划改变 
  161. 18.3.2 改变的工具 
  162. 18.3.3 慎重地选择战场 
  163. 18.4 万变不离其宗 
  164. 第19章 代码复用案例 
  165. 19.1 代码复用案例1:复制–粘贴 
  166. 19.2 代码复用案例2:为复用进行设计 
  167. 19.3 代码复用案例3:提升和重构 
  168. 19.4 代码复用案例4:购买或重新发明轮子 
  169. 第20章 高效版本控制 
  170. 20.1 用进废退 
  171. 20.2 随便选一个 
  172. 20.3 存储正确之物 
  173. 20.3.1 答案一:存储所有 
  174. 20.3.2 答案二:存储尽可能少的文件 
  175. 20.3.3 存储软件版本 
  176. 20.3.4 代码库的布局 
  177. 20.4 用好版本控制系统 
  178. 20.4.1 原子提交 
  179. 20.4.2 提供正确的信息 
  180. 20.4.3 精心创建代码提交 
  181. 20.5 分支:只见树木不见森林 
  182. 20.6 代码的家园 
  183. 20.7 结论 
  184. 第21章 让球越过门柱 
  185. 21.1 软件开发:充满有机肥料的管道 
  186. 21.2 错误的非黑即白 
  187. 21.3 通过解决团队问题来修复代码问题 
  188. 21.4 将构建发送给QA人员 
  189. 21.4.1 首先进行自测 
  190. 21.4.2 明确发布意图 
  191. 21.4.3 欲速则不达 
  192. 21.4.4 自动化 
  193. 21.4.5 尊重 
  194. 21.5 当你收到故障报告时 
  195. 21.6 差异使我们更强大 
  196. 21.7 拼图的碎片 
  197. 第22章 冻结代码奇事 
  198. 22.1 寻找代码冻结 
  199. 22.2 世界新秩序 
  200. 22.3 冻结的类型 
  201. 22.4 采用分支解决问题 
  202. 22.5 不是真正冻结 
  203. 22.6 代码冻结的时间 
  204. 22.7 感受代码冻结 
  205. 22.8 就快结束了 
  206. 22.9 反代码冻结 
  207. 22.10 结论 
  208. 第23章 软件发布 
  209. 23.1 流程的一部分 
  210. 23.2 机器上的一个齿轮 
  211. 23.2.1 第1步:初始化发布 
  212. 23.2.2 第2步:准备发布 
  213. 23.2.3 第3步:构建发布 
  214. 23.2.4 第4步:打包 
  215. 23.2.5 第5步:部署 
  216. 23.3 早发布、勤发布 
  217. 23.4 还有更多…… 
  218. 第三部分 束身修行
  219. 第24章 做一个乐知者 
  220. 24.1 学习什么 
  221. 24.2 学习如何学习 
  222. 24.3 学习模型 
  223. 24.4 以教促学 
  224. 24.5 知行合一 
  225. 24.6 我们学到了什么 
  226. 第25章 考试驱动型程序员 
  227. 25.1 把问题讲清楚 
  228. 25.2 成功使人自满 
  229. 25.3 考试时光 
  230. 25.4 考试驱动型程序员 
  231. 25.5 结论 
  232. 第26章 享受挑战 
  233. 26.1 激励 
  234. 26.2 有哪些挑战 
  235. 26.3 是谁在说:不要这么做! 
  236. 26.4 接受挑战 
  237. 26.5 结论 
  238. 第27章 避免停滞 
  239. 27.1 技能就是你的投资 
  240. 27.2 为本书读者准备的一个练习 
  241. 27.3 职业安全 
  242. 第28章 程序员的道德规范 
  243. 28.1 对代码的态度 
  244. 28.2 法律问题 
  245. 28.3 对人的态度 
  246. 28.3.1 队友 
  247. 28.3.2 管理者 
  248. 28.3.3 雇主 
  249. 28.3.4 你自己 
  250. 28.4 希波克拉底誓言 
  251. 28.5 结论 
  252. 第29章 热爱编程语言 
  253. 29.1 热爱所有的语言 
  254. 29.2 热爱你的语言 
  255. 29.3 与编程语言磨合 
  256. 29.3.1 爱和尊重 
  257. 29.3.2 承诺 
  258. 29.3.3 沟通 
  259. 29.3.4 耐心 
  260. 29.3.5 共同的价值观 
  261. 29.4 这是一个完美的比喻吗 
  262. 29.5 结论 
  263. 第30章 程序员的姿态 
  264. 30.1 基本的计算机操作姿态 
  265. 30.1.1 调试代码时的姿态 
  266. 30.1.2 当情况恶化时 
  267. 30.1.3 通宵加班 
  268. 30.1.4 高层介入干预 
  269. 30.1.5 警报解除 
  270. 30.1.6 设计阶段 
  271. 30.2 视觉疲劳 
  272. 30.3 结论 
  273. 第四部分 计日程功
  274. 第31章 用智不用力 
  275. 31.1 慎选战场 
  276. 31.2 战斗策略 
  277. 31.2.1 复用智慧 
  278. 31.2.2 转变成别人的问题 
  279. 31.2.3 只做必须做的 
  280. 31.2.4 使用探针试验 
  281. 31.2.5 排优先级 
  282. 31.2.6 确认什么是真正需要的 
  283. 31.2.7 一次只做一件事 
  284. 31.2.8 保持简单 
  285. 31.2.9 不要拖延和积累问题 
  286. 31.2.10 自动化 
  287. 31.2.11 预防错误 
  288. 31.2.12 沟通 
  289. 31.2.13 避免过度疲劳 
  290. 31.2.14 强大的工具 
  291. 31.3 结论 
  292. 第32章 完成之际即完成 
  293. 32.1 我们还没到吗 
  294. 32.2 逆向开发:分解 
  295. 32.3 定义“完成” 
  296. 32.4 说干就干 
  297. 第33章 这次我明白了…… 
  298. 33.1 荒岛式开发 
  299. 33.2 站在山脚下 
  300. 第五部分 觅良师益友
  301. 第34章 他人之力 
  302. 34.1 如何实现 
  303. 34.2 你心目中的专家 
  304. 34.3 事后诸葛亮 
  305. 第35章 至关重要的一个认知 
  306. 35.1 拓展这个隐喻 
  307. 35.2 责任感是关键 
  308. 35.3 代码评审 
  309. 35.4 落地 
  310. 35.5 定标准 
  311. 35.6 后续行动 
  312. 35.7 结论 
  313. 第36章 说出来! 
  314. 36.1 编写代码就是沟通 
  315. 36.1.1 和机器说话 
  316. 36.1.2 和生灵说话 
  317. 36.1.3 和工具说话 
  318. 36.2 人与人之间的沟通 
  319. 36.2.1 交谈方式 
  320. 36.2.2 注意你的言辞 
  321. 36.2.3 肢体语言 
  322. 36.2.4 并行沟通 
  323. 36.3 团队之间的沟通 
  324. 36.4 与客户沟通 
  325. 36.5 其他沟通 
  326. 36.6 结论 
  327. 第37章 各种宣言 
  328. 37.1 软件开发通用宣言 
  329. 37.2 就此打住 
  330. 37.3 一些宣言 
  331. 37.4 真是这样吗 
  332. 37.5 画龙点睛 
  333. 第38章 代码赋 
  334. 后记 
书名:程序员的38堂成长课
作者:Pete Goodliffe
译者:宋伯远 译
国内出版社:人民邮电出版社
出版时间:2022年01月
页数:288
书号:978-7-115-57794-8
原版书书名:Becoming a Better Programmer
原版书出版商:O'Reilly Media
Pete Goodliffe
 
皮特·古德利夫(Pete Goodliffe)是拥有20余年经验的程序员,现任inMusic公司软件开发副总裁。他在软件开发方面涉猎广泛,从操作系统实现到音频编解码器和多媒体应用开发,再到嵌入式固件开发和iOS开发。他为大型程序员社群ACCU撰写杂志专栏“Becoming a Better Programmer”,另著有《编程匠艺:编写卓越的代码》。