HackerURLs

一次又一次被重新发现的经典。

同一个链接,相隔一年以上,一次又一次被人重新发现、再次冲上 Hacker News 首页。能经受住这种时间检验的,大多是值得一读再读的文章。每篇附中文标题,讨论最热的那些再加上中文导读和高赞评论翻译。

从名人堂开始
  • 4,700+篇经过时间检验的经典

Hall of fame

名人堂

在经典库里看全部精选

上首页次数最多、而且有中文导读的 30 篇。时间轴上每个黑点是一次上首页,空心点是一次没冲上去的投稿。

  1. 正在载入经典…

Archive

经典库

按第一次上首页的年份分布,点柱子筛选。

排序

    About

    这些经典是怎么挑出来的

    1. 01

      合并同一个链接

      读取 Hacker News 自 2006 年以来的全部链接投稿,把 http/https、www、跟踪参数等写法不同的同一篇文章合并成一条。

    2. 02

      只留经得起时间的

      同一链接至少两次拿到 50 分以上(约等于上首页),而且两次相隔一年以上;再由 AI 剔除状态页、产品首页和新闻事件。

    3. 03

      写导读、译评论

      上首页次数最多的 2,000 篇配上中文导读、"为什么经久不衰",并精选翻译 HN 高赞评论。导读由 AI 生成,可能有误。

    编程与软件工程arxiv.org编辑精选

    Google 的软件工程

    Software Engineering at Google (2017)

    2次上首页
    2年跨度
    1,133累计得分
    465条评论

    2017 — 2019,它一次次回到首页

    黑点是上首页(≥ 50 分)的那次投稿,空心点是没冲上去的投稿,点越大分数越高。

    导读

    这是 Google 2017 年发表的论文,系统介绍其软件工程实践:超大规模单体代码库(monorepo)、集中式版本控制、代码评审、测试文化、构建系统以及频繁重写代码等做法。文中还提到 20% 自由时间等工程师文化。它多次登上 Hacker News 首页,是了解大型组织如何管理代码与协作的经典参考。

    为什么经久不衰:它罕见地公开了 Google 级别规模的工程实践细节,无论你是否认同 monorepo 或其文化,都是讨论工程流程时绕不开的参照。

    关键词 软件工程Googlemonorepo工程文化

    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.

    历次讨论

    同类还值得读

    1. 开源应用架构

      The Architecture of Open Source Applications

      《开源软件架构》(AOSA)是一本在线免费书,邀请知名开源项目的作者亲自剖析其内部设计,涵盖 SQLAlchemy、LLVM、Audacity、Apache、Bash 等系统。

      编程与软件工程上首页 9 次 · 2011–2024aosabook.org编辑精选
    2. 编程语言简史:简短、不完整且多半错误

      A Brief, Incomplete, and Mostly Wrong History of Programming Languages

      一篇以戏谑、故意不准确的方式回顾编程语言史的博客文章,用夸张轶事和讽刺定义串起 Lisp、C、C++、Java、JavaScript、PHP 等语言。

      编程与软件工程上首页 8 次 · 2009–2021james-iry.blogspot.com
    3. SQLite 是如何测试的

      How SQLite is tested

      SQLite 官方文档页,系统介绍 SQLite 的测试体系:多种测试方法(TCL 测试、模糊测试、回归测试、静态分析等)和海量测试用例,展示了这个小型开源项目如何靠极致测试获得…

      编程与软件工程上首页 8 次 · 2009–2025sqlite.org编辑精选
    4. 高级编程语言(2009)

      Advanced programming languages (2009)

      Matt Might 的经典文章,按用途推荐“高级编程语言”:如果追求就业就选主流语言,如果追求表达力、学术研究或创业,则推荐 Haskell、OCaml、Scala 等函数式语…

      编程与软件工程上首页 8 次 · 2009–2022matt.might.net
    5. 我的 Forth 与栈机器经历

      Yosefk - My history with Forth & stack machines

      作者以亲身经历回顾了使用 Forth 语言和栈式机器的历程:既赞叹其简洁优雅、代码量小、可自举的优点,也坦率指出栈操作在实际编程中的痛苦,以及 Forth 社区文化中的问题。

      编程与软件工程上首页 8 次 · 2010–2024yosefk.com编辑精选

    打赏支持

    打赏二维码

    觉得有用,请作者喝杯咖啡。

    WeChat

    关注向阳乔木

    微信公众号「向阳乔木推荐看」

    微信公众号「向阳乔木推荐看」二维码

    微信扫一扫;在微信里打开本页时,长按二维码识别。