Google软件工程
Titus Winters, Tom Manshreck, Hyrum Wright
陈军, 周代兵, 邱栋 译
出版时间:2022年03月
页数:570
如今,软件工程师不仅需要知道如何有效地编程,还需要知道如何发展适当的工程实践,以使代码库可持续且健康。这本书强调了编程和软件工程之间的区别。
软件工程师如何管理一个活跃的代码库,这个代码库在其生命周期里不断响应变化的需求,不断地发展?软件工程师Titus Winters和Hyrum Wright,携手技术作家Tom Manshreck,基于他们在谷歌的经验,坦率而有见地的为大家介绍了世界领先的从业者是如何构建和维护软件的。
你将学习到软件组织在设计、架构、编写和维护代码时应牢记的三个基本原则:
● 时间如何影响软件的可持续性,以及如何使代码随着时间的推移而具有韧性。
● 规模如何影响工程组织内软件实践的可行性。
● 在评估设计和开发决策时,一位典型的工程师需要做出哪些权衡。
  1. 前言
  2. 第一部分 理论
  3. 第1章 什么是软件工程
  4. 时间与变化
  5. 规模与效率
  6. 权衡与成本
  7. 软件工程VS编程
  8. 小结
  9. 本章要点
  10. 第二部分 文化
  11. 第2章 如何更好地参与团队合作
  12. 隐藏代码
  13. 天才神话
  14. 隐藏有害
  15. 一切为了团队
  16. 小结
  17. 本章要点
  18. 第3章 知识共享
  19. 学习的挑战
  20. 知识共享的哲学
  21. 设定基调:心理安全
  22. 不断充实知识
  23. 扩大提问渠道:向社区提问
  24. 分享你的知识:你总有可以教别人的地方
  25. 组织知识发展
  26. 可读性:通过代码评审规范化指导
  27. 小结
  28. 本章要点
  29. 第4章 平等工程
  30. 人类的偏见
  31. 理解多样性的必要性
  32. 建立多元文化能力
  33. 使多样性具有可操作性
  34. 拒绝单一的方式
  35. 挑战既定流程
  36. 价值观与成果
  37. 保持好奇心,向前推进
  38. 小结
  39. 本章要点
  40. 第5章 团队领导的艺术
  41. 经理和技术主管(或两者兼任)
  42. 从个人贡献者到领导者
  43. 工程经理
  44. 反模式
  45. 积极的模式
  46. 出乎意料的问题
  47. 其他提示和技巧
  48. 对待人像植物一样
  49. 小结
  50. 本章要点
  51. 第6章 大规模团队领导力
  52. 总是在做决策
  53. 总是不在场
  54. 总是在扩展
  55. 小结
  56. 本章要点
  57. 第7章 度量工程生产力
  58. 为什么要度量工程生产力
  59. 鉴别:它值得度量吗
  60. 根据目标和信号来选择有意义的指标
  61. 目标
  62. 信号
  63. 指标
  64. 使用数据验证指标
  65. 采取行动并跟踪结果
  66. 小结
  67. 本章要点
  68. 第三部分 流程
  69. 第8章 风格指南与规则
  70. 为什么要有规则
  71. 创建规则
  72. 修改规则
  73. 指南
  74. 应用规则
  75. 小结
  76. 本章要点
  77. 第9章 代码评审
  78. 代码评审流程
  79. 谷歌如何进行代码评审
  80. 代码评审的好处
  81. 代码评审最佳实践
  82. 代码评审类型
  83. 小结
  84. 本章要点
  85. 第10章 文档
  86. 什么是文档
  87. 为什么需要文档
  88. 像代码一样对待文档
  89. 了解文档的读者
  90. 文档类型
  91. 文档评审
  92. 文档的哲学
  93. 什么时候需要技术文档工程师
  94. 小结
  95. 本章要点
  96. 第11章 测试概述
  97. 为什么要写测试
  98. 设计测试套件
  99. 谷歌规模下的测试
  100. 谷歌测试的历史
  101. 自动化测试的局限性
  102. 小结
  103. 本章要点
  104. 第12章 单元测试
  105. 可维护性的重要性
  106. 防止脆弱的测试
  107. 编写清晰的测试
  108. 测试与代码共享:DAMP,而不是DRY
  109. 小结
  110. 本章要点
  111. 第13章 测试替身
  112. 测试替身对软件开发的影响
  113. 谷歌的测试替身
  114. 基本概念
  115. 使用测试替身的技术
  116. 实际实现
  117. 伪造(Faking)
  118. 打桩
  119. 交互测试
  120. 小结
  121. 本章要点
  122. 第14章 较大型的测试
  123. 什么是较大型的测试
  124. 谷歌的较大型的测试
  125. 大型测试的结构
  126. 较大型的测试的类型
  127. 大型测试和开发者工作流
  128. 小结
  129. 本章要点
  130. 第15章 弃用
  131. 为什么弃用
  132. 为什么弃用很难
  133. 弃用的类型
  134. 弃用流程的管理
  135. 小结
  136. 本章要点
  137. 第四部分
  138. 第16章 版本控制与分支管理
  139. 什么是版本控制
  140. 分支管理
  141. 谷歌的版本控制
  142. 单一代码仓(Monorepos)
  143. 版本控制的未来
  144. 小结
  145. 本章要点
  146. 第17章 代码搜索
  147. Code Search的用户界面
  148. 如何使用Code Search
  149. 为什么需要一个单独的Web工具
  150. 规模对设计的影响
  151. 谷歌的实现
  152. 权衡
  153. 小结
  154. 本章要点
  155. 第18章 构建工具与构建哲学
  156. 构建系统的目的
  157. 没有构建系统会发生什么
  158. 现代构建系统
  159. 处理模块和依赖
  160. 小结
  161. 本章要点
  162. 第19章 Critique:谷歌的代码评审工具
  163. 代码评审工具的原则
  164. 代码评审流程
  165. 第一步:创建一个变更
  166. 第二步:请求评审
  167. 第三步和第四步:理解和评论变更
  168. 第五步:批准变更(评价变更)
  169. 第六步:提交变更
  170. 小结
  171. 本章要点
  172. 第20章 静态分析
  173. 有效静态分析的特点
  174. 让静态分析发挥作用的关键经验
  175. Tricorder: 谷歌的静态分析平台
  176. 小结
  177. 本章要点
  178. 第21章 依赖管理
  179. 为什么依赖管理这么难
  180. 引入依赖
  181. 从理论上讲,依赖管理
  182. SemVer的局限性
  183. 资源无限的依赖管理
  184. 小结
  185. 本章要点
  186. 第22章 大规模变更
  187. 什么是大规模变更
  188. 谁来处理LSC
  189. 原子变更的障碍
  190. LSC的基础设施
  191. LSC 流程
  192. 小结
  193. 本章要点
  194. 第23章 持续集成
  195. CI的概念
  196. 谷歌的CI
  197. 小结
  198. 本章要点
  199. 第24章 持续交付
  200. 持续交付在谷歌的习语
  201. 速度是一项团队运动:如何将部署分解为可管理的单元
  202. 隔离评估变更:特性开关
  203. 力求敏捷:建立发布火车
  204. 质量与聚焦用户:只发布有用的功能
  205. 左移:更早地做出数据驱动的决策
  206. 改变团队文化:建立发布规则
  207. 小结
  208. 本章要点
  209. 第25章 计算即服务
  210. 驯服计算环境
  211. 为托管计算编写软件
  212. CaaS随时间和规模的演化
  213. 选择计算服务
  214. 小结
  215. 本章要点
  216. 后记
书名:Google软件工程
译者:陈军, 周代兵, 邱栋 译
国内出版社:中国电力出版社
出版时间:2022年03月
页数:570
书号:978-7-5198-6470-5
原版书书名:Software Engineering at Google
原版书出版商:O'Reilly Media
Titus Winters
 
Titus Winters,Google资深软件工程师,是Google C++代码库的负责人:每月有数以千计的各色工程师编辑2.5亿行代码。
 
 
Tom Manshreck
 
Tom Manshreck是Google软件工程部门的专职技术作家。他是C++库团队的成员之一,负责开发文档,推出培训课程并为Google的开源C++代码Abseil编制文档。
 
 
Hyrum Wright
 
Hyrum Wright是Google的一名资深软件工程师,他领导着Google的自动变更工具组。Hyrum对Google的代码库所做的个人编辑比公司历史上的任何工程师都多。
 
 
本书封面上的动物是一只美洲火烈鸟(学名:Phoenicopterus ruber)。这种鸟主要出现在中南美洲和墨西哥湾的海岸附近,它们有时也会飞到美国佛罗里达州南部。火烈鸟的栖息地包括海边淤泥地和沿海的盐水湖泊。
火烈鸟标志性的粉红色羽毛是在其发育成熟过程中获得的,来源于食物中的类胡萝卜素。由于这些色素更容易在大自然的食物中找到,因此野生火烈鸟的羽毛颜色往往比圈养的火烈鸟更鲜艳,尽管动物园有时会在它们的饮食中添加补充色素。火烈鸟通常约42英寸高,其黑色翼展延伸约5英尺。火烈鸟是一种涉水鸟,其脚是有蹼的,三趾粉红色的脚。虽然雄性火烈鸟和雌性火烈鸟之间没有太大的区别,但雄性火烈鸟的体型往往稍大一些。
火烈鸟是滤食性动物,用它们的长腿和脖子在深水中觅食,它们每天大部分时间都在寻找食物。它们的喙内有两排薄片,是梳子状的鬃毛,过滤它们的食物中的种子、藻类、微生物和小虾。火烈鸟生活在多达10000只的大群体中,当它们在一个地方吃掉所有食物后,就会迁徙。火烈鸟除了是群居鸟类外,声音也非常响亮。他们会发出定位声来帮助寻找特定的伴侣,还有报警声来警告同伴。
它曾被认为是属于大火烈鸟(Phoenicopterus roseus)的一种,大火烈鸟可能在非洲、亚洲和南欧发现,但美洲火烈鸟现在被认为是一个独立的物种。虽然美洲火烈鸟目前被列为无危物种,但O’Reilly封面的许多动物都是濒临灭绝的;无论如何,所有这些动物对世界都很重要。