Google之类公司的代码质量如何?
这是 Quora 网友的一个提问,他还补充说:“我经常在想,像谷歌这样的公司,它们的代码质量如何呢?根据我在两个大公司的工作经历来说,我感觉代码质量和公司年龄成反比。” 下面是伯乐在线摘编了两位网友的回复:一位是Google的程序员,另一位是Google前员工。
Google 程序员 Jeremy Hoffman 的回复:
我没有怎么去比对过,但我认为Google的代码质量是非常高的。Google的软件工程文化是原因之一(感谢 Kevin X Chang 给建议):
- 代码审查。在你提交任何代码改动之前,你得找去代码“主人”签字确认。为了实现,评审者(被鼓励去)建议大修代码,而不是让它成为根本没有经过思考的“图章”代码。
- 按语言可读性要求坚持代码风格指南(请 参阅这里)。除了让我们代码有统一的外观(所以我们能快速认出方法、成员等),我们的风格指南禁止了一些复杂、混乱、易出错的 C++ 特性(比如:class 类型的静态和全局变量)。
- 整个团队都致力于提供我们代码库的质量,维护我们的核心库,不断给我们做更好的工具。
- 一个活跃的“代码健康”课题组。
- 发布软件时,不对外部期限负有义务。一般而言,这让我们可以正确做事,而非为了期限把东西拼凑起来。
- “Fixits.” 例如,一个工程师或许说,“我认为我们真应该别再用过时的 CruftMap 类(class)了。我打算在 1 月 20 日组织一次 Fixit。” 当 1 月 20 日来临时,大家应当暂停其正常运作,把他们代码中的 CruftMaps 都换掉。在 1 月 21 日,Google 就永远和 CruftMap 说拜拜了!不过最近,核心库团队已经很优秀了,貌似没有啥东西可再值得类似的 fixit 了。
- 测试文化。单元测试覆盖率可能接近 100%,我们有持续构建/整合/测试,还有知名的 ”Testing on the Toilet” (请参见 Google Testing Blog)
题主是想讨论代码年龄和代码质量之间的非正比关联,这一现象程序员有时戏称为“位腐”。Google 肯定也有。不是这里就是那里,你会发现Google早期的代码被孤立了(不是工程师的活跃工作对象了,或没人熟悉了),但它们还在。我曾因为不得不和一些遗留代码打交道,曾经一直感受过沮丧。就我个人经验来看,我认为,在Google快速扩张的一段时间内,如此少量的工程师实现了诸多特性,这阶段中的有些代码,不能托起我们近日代码质量标准。
译注:“Bit rot”相当于“ Software rot”,意指软件性能随着时间而退化,或者因环境变化而失势。( 维基百科)
但从宏观角度来说,我实际上认为Google的代码质量是随着时间在提高,原因就是我上面所说的。
Googe 前员工 Dima Korolev 的回复:
之前我在Google时常抱怨。
然而,在看过微软、Facebook 和一些早期创业公司朋友写的代码后,我欣然确认了,Google的代码质量确实非常高。保持代码高质量的方法并不总是 great。工程师的态度也并不总是 great。被奖励和认可的程序员,也并不总是哪些喜欢更整洁代码的人。但不知何故,它奏效了,至少以前是奏效了。
事实上,在我离开Google多年后,人们常抱怨我在维护代码标准方面有点过于严苛。我不确定这和Google有多大关系,但肯定有关系。过一段时间后,会有人学习理解这些代码为什么不长久,它们能如何改善,应当如何改进。:)