本文译自Software Engineering at Google,原作者为Fergus Henderson,原文如链接https://arxiv.org/pdf/1702.01715.pdf所示。本文翻译原文的摘要、作者序和综述部分。
![7a680661f514f2aa19202103d2e21786.png](https://img-blog.csdnimg.cn/img_convert/7a680661f514f2aa19202103d2e21786.png)
译者按
为什么翻译这篇文章呢?如作者所说,Google是新世纪以来,现象级的最成功的互联网公司。我们可以把它的成功归功于很多原因,但对大多数工程师、极客、程序员来讲,我们更喜欢或者更愿意把它的成功于其独特的工程师文化和杰出的软件工程实践经验。如今,可能你虽然不在Google工作,但你每天也遵循Google代码规范做开发,使用protobuf、gRPC、Leveldb、glog、gtest等做开发,使用Bazel做项目构建,使用Gerrit做代码托管和代码审阅,使用Tensorflow做深度学习研究,使用Kubernetes做产品部署和运维等,而以上提到的软件和工具都源自Google。也许,Google的软件工程和开源工具已经悄然渗透到你平时工作的方方面面。所以,希望通过翻译这篇文章,能够学习和分享更多的Google软件工程的经验和哲学。
如《C程序设计语言》不仅适用于C语言的初学者,对C语言的熟练资深使用者同样有帮助一样,我们相信本文不仅适用于初级和进阶的软件工程师,同样适用于资深的软件工程师;对产品经理、项目经理、工程师管理、团队管理、乃至企业文化管理、公司管理同样有帮助。任何一切和软件工程、和软件工程师相关的从业者都可以从本文中汲取营养。
由于原文是20页的长文,这里我们按照原文的结构,将译文分为以下5个部分。
Google软件工程之道(一)前言
Google软件工程之道(二)软件开发
Google软件工程之道(三)项目管理
Google软件工程之道(四)员工管理
Google软件工程之道(五)总结
翻译过程中括号内的引用文章均附录在Google软件工程之道(五)总结这一章中。
原文大纲
为方便大家参照对比,这里也列出原文的英文大纲,同时给出相关术语的中英文对照(括号内为译文术语)。
Abstract(摘要)
Biography (作者简介)
Content (正文)
- Introduction(综述)
- Software development(软件开发)
- 2.1 The Source Repository(代码仓库)
- 2.2 The Build System(构建系统)
- 2.3 Code Review(代码审阅)
- 2.4 Testing(测试)
- 2.5 Bug tracking(Bug追踪)
- 2.6 Programming languages(程序设计语言)
- 2.7 Debugging and Profiling tools(调试和分析工具)
- 2.8 Release engineering(发布工程)
- 2.9 Launch approval(发行批准)
- 2.10 Post-mortems(事故分析)
- 2.11 Frequent rewrites(频繁重写)
- Project management(项目管理)
- 3.1 20% time(20%时间)
- 3.2 Objectives and Key Results(OKRs,目标和关键结果)
- 3.3 Project approval(项目批准)
- 3.4 Corporate reorganizations(公司重组)
- People management (人员管理)
- 4.1 Roles(角色)
- 4.2 Facilities(设备)
- 4.3 Training(培训)
- 4.4 Transfers(转岗)
- 4.5 Performance appraisal and rewards(绩效评定和奖励)
- Conclusions(总结)
Acknowledgements(致谢)
References(引用)
摘要
本文中,我们描述和整理Google的核心软件工程实践经验。
作者简介
Fergus Henderson已在Google从事十余年的软件工程开发工作。在1979年,还在孩童时期的他就开始学习程序设计,后来在学校研究计算机程序语言的设计和实现。他和他的博士生导师,在墨尔本大学共同创建了一个研究小组,该小组开发了程序设计语言Mercury。他是八个国际程序委员会的委员,目前已经开放了超过50万行的开源代码。他曾是Usenet newsgroup comp.std.c++的早期版主,也是ISO C和C++的标准委员会的公认专家。他拥有超过15年的商用软件行业经验。在Google,他是Blaze的早期开发者之一,目前Bazel作为构建工具目前已经在Google广泛使用。他曾从事语音识别、voice action(比Siri还早的语音助手)和语音合成等产品的服务端软件开发。目前,他负责管理Google的语音合成工程团队,但他依然奋斗在一线,开发和审阅大量代码。他写的代码已经安装在数十亿计的设备上,每天使用超过数十亿次。
1. 综述
Google已经成为一家非常成功的公司。除了Google搜索和AdWords之外,Google还发布了一系列卓越的产品,如Google地图、Google新闻、Google翻译、Google语音识别、Chrome浏览器和Android。Google还极大的增强并拓展了通过收购兼并的小公司的产品(例如Youtube),并且为一些列开源软件和项目做出了突出的贡献。Google还有一些尚在研发还未发布的非常酷炫的产品,如自动驾驶。
Google如此的成功有很多原因,包括开明的领导、杰出的人才、高标准的招聘门槛和其在非常快速增长市场中通过领先地位积累的财务实力。但其中还有一个原因是Google积累了卓越的软件工程实践经验,这同样助力了Google的巨大成功。这些实践由全世界最杰出最才华横溢的工程师积累、提炼,并随着时间不断演进完善。现在我们想向大家分享我们软件工程实践经验,也分享一路走来从错误中汲取的教训。
本篇文章的目的是整理和简要描述Google的核心软件工程实践经验。这样,其他的组织或者个人可以比较、对比他们自己的软件工程实践经验,并考虑是否应用其中一些工程实践经验到他们开发中。
许多作者( [9], [10], [11])都写书或者文章分析Google的成功和历史,但其中的大多数都在围绕着商业、管理和文化分析,仅有一小部分作者( [1, 2, 3, 4, 5, 6, 7, 13, 14, 16, 21])研究软件工程对Google成功的贡献,在这一小部分之中,很多又仅在单个层面上分析。目前还没有关于Google软件工程实践的既全面又概要的性的综述,这就是本文的目的。
- End -
相关文章
Google软件工程之道(一)前言
Google软件工程之道(二)软件开发
Google软件工程之道(三)项目管理
Google软件工程之道(四)员工管理
Google软件工程之道(五)总结
由于头条号限制,无法相互引用相关文章。这里仅列出相关文章列表,感兴趣的同学可以进入主页关注后查阅其他相关文章。
![fe38f4e8c11602259365658d56eec18a.png](https://img-blog.csdnimg.cn/img_convert/fe38f4e8c11602259365658d56eec18a.png)