编程与软件工程arxiv.org编辑精选
Google 的软件工程
Software Engineering at Google (2017)
2017 — 2019,它一次次回到首页
黑点是上首页(≥ 50 分)的那次投稿,空心点是没冲上去的投稿,点越大分数越高。
导读
这是 Google 2017 年发表的论文,系统介绍其软件工程实践:超大规模单体代码库(monorepo)、集中式版本控制、代码评审、测试文化、构建系统以及频繁重写代码等做法。文中还提到 20% 自由时间等工程师文化。它多次登上 Hacker News 首页,是了解大型组织如何管理代码与协作的经典参考。
为什么经久不衰:它罕见地公开了 Google 级别规模的工程实践细节,无论你是否认同 monorepo 或其文化,都是讨论工程流程时绕不开的参照。
HN 评论精选
频繁重写代码的价值之一是让新成员建立代码所有权感,从而提升生产力。
藏在“2.11 频繁重写”一节里,但这是通过“所有权感”提升生产力的妙招:重写代码也是把知识和所有权感传递给新团队成员的方式。这种所有权感对生产力至关重要——工程师对自己觉得“属于自己”的代码,自然会投入更多精力去开发功能和修复问题。
Radim查看英文原文
Buried in the "2.11 Frequent rewrites" section, but a great hack for "productivity via a sense of ownership": "In addition, rewriting code is a way of transferring knowledge and a sense of ownership to newer team members. This sense of ownership is crucial for productivity: engineers naturally put more effort into developing features and fixing problems in code that they feel is “theirs”."
质疑不用分支的开发模式如何支持多人协作大改动。
我不理解他们如何完成较大规模的协作改动。论文说几乎所有开发都在仓库主干上进行,不用分支;Rachel Potvin 也说在 Google 为开发而建分支极为罕见。在我的世界里,大改动我们会开分支,成熟后再合回主干,分支让协作成为可能。按 Google 的模式,他们要么放弃协作只让单人改,要么用其他方式共享代码,要么把未完成的工作提交到主干并不断弄坏主干。
weinzierl查看英文原文
What I don't understand is how they accomplish larger collaborative changes. The paper says: "Almost all development occurs at the 'head' of the repository, not on branches." Googler Rachel Potvin made an even stronger statement in her presentation about "The Motivation for a Monolithic Codebase" [1]: "Branching for development at Google is exceedingly rare [..]" In the related ACM paper she published with Josh Levenberg there is the statement that: "Development on branches is unusual and not well supported at Google, though branches are typically used for releases." I my world when we have to make a bigger change we create a branch and only merge it into the trunk when it is good enough to be integrated. The branch enables us to work on that change together. I don't understand how they do this at google. As far as I understand in their model they either have to - give up on collaboration and always have just a single developer work on a change. - share code by other means. - check in unfinished work to the trunk for collaboration and constantly break trunk. [1] https://youtu.be/W71BTkUbdqE?t=904 [2] https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext#
Protocol buffers 这类共享接口定义能解决前后端模型不同步的痛点。
Protocol buffers 的做法看起来很棒。我在上一家小 web 公司时,端点的类定义一变,某个 js 文件的模型没同步更新,就让人头疼不已。我那时就觉得应该写一份两端都能读的 XML 定义文件,可惜始终没有推动这场变革的政治意愿。
lexpar查看英文原文
The protocol buffers stuff seems pretty cool. At my last job (small web dev shop), we had constant headaches over the class definitions of endpoints changing and some js file not having its model updated to correspond. I thought we should be writing XML files that both ends could be reading in - we never got up the political will to make that big change though. https://developers.google.com/protocol-buffers/
项目立项与取消缺乏透明流程,是作者离开 Google 的原因。
虽然 Google 有明确的发布审批流程,却没有明确的项目立项或取消流程。尽管我在 Google 待了近十年、自己也成了经理,我仍然不完全理解这类决策是如何做出的。这就是我离职的原因。
benzewdu查看英文原文
Although there is a well-defined process for launch approvals, Google does not have a well-defined process for project approval or cancellation. Despite having been at Google for nearly 10 years, and now having become a manager myself, I still don’t fully understand how such decisions are made. The reason why I quit Google.
历次讨论
同类还值得读
开源应用架构
The Architecture of Open Source Applications
《开源软件架构》(AOSA)是一本在线免费书,邀请知名开源项目的作者亲自剖析其内部设计,涵盖 SQLAlchemy、LLVM、Audacity、Apache、Bash 等系统。
编程与软件工程上首页 9 次 · 2011–2024aosabook.org编辑精选编程语言简史:简短、不完整且多半错误
A Brief, Incomplete, and Mostly Wrong History of Programming Languages
一篇以戏谑、故意不准确的方式回顾编程语言史的博客文章,用夸张轶事和讽刺定义串起 Lisp、C、C++、Java、JavaScript、PHP 等语言。
编程与软件工程上首页 8 次 · 2009–2021james-iry.blogspot.comSQLite 是如何测试的
How SQLite is tested
SQLite 官方文档页,系统介绍 SQLite 的测试体系:多种测试方法(TCL 测试、模糊测试、回归测试、静态分析等)和海量测试用例,展示了这个小型开源项目如何靠极致测试获得…
编程与软件工程上首页 8 次 · 2009–2025sqlite.org编辑精选高级编程语言(2009)
Advanced programming languages (2009)
Matt Might 的经典文章,按用途推荐“高级编程语言”:如果追求就业就选主流语言,如果追求表达力、学术研究或创业,则推荐 Haskell、OCaml、Scala 等函数式语…
编程与软件工程上首页 8 次 · 2009–2022matt.might.net我的 Forth 与栈机器经历
Yosefk - My history with Forth & stack machines
作者以亲身经历回顾了使用 Forth 语言和栈式机器的历程:既赞叹其简洁优雅、代码量小、可自举的优点,也坦率指出栈操作在实际编程中的痛苦,以及 Forth 社区文化中的问题。
编程与软件工程上首页 8 次 · 2010–2024yosefk.com编辑精选