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 生成,可能有误。

    编程与软件工程dreamsongs.com编辑精选

    更糟即更好之兴起(1991)

    The Rise of Worse Is Better (1991)

    3次上首页
    6年跨度
    443累计得分
    436条评论

    2018 — 2024,它一次次回到首页

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

    导读

    《The Rise of Worse Is Better》是 Richard P. Gabriel 1991 年的一篇经典软件设计随笔,对比了“做对的事”(MIT/正确性优先)与“更糟即更好”(New Jersey/实现简单优先)两种风格,指出后者虽不完整,却因易实现、易移植而更容易传播并最终胜出。文章原本带有批判口吻,后来常被解读为对 Unix/C 成功路径的总结。

    为什么经久不衰:它用一个反直觉的命名揭示软件生态中“简单可传播”往往战胜“完整正确”,是理解 Unix、C、JavaScript 乃至开源生态为何胜出的经典框架。

    关键词 worse is better软件设计UnixMVP

    HN 评论精选

    作者原意是批评,但“更糟即更好”也能解释 JavaScript 的胜出:先以简单可用占领生态,再靠大量改进变得足够好用。

    这篇文章原本是用批判口吻写 C 和 Unix 的,说它们有很多问题,但只具备 50% 功能就被很多人接受为“足够好”,然后像“终极计算机病毒”一样扩散。发表后,许多 Unix 人把它重新解读为对 Unix 成功路径的赞美。我一直很讨厌 JavaScript 的不一致和丑陋语法,也觉得现在什么都带 JS 引擎、不管原生语言是什么都强制用 JS 很糟糕,还梦想过 Scheme 成为 Web 语言。但近年因这篇文章改变了看法:同样的原则适用于 JavaScript——它以 50% 的功能成为 Web 上的终极病毒,之后大量人力投入改进它;结果它仍保留原始设计的不一致,但整体可用性其实高于设计更“干净”的替代系统,就像 FreeBSD/Linux 仍是最可用的系统之一。所以我决定接受 JavaScript 了。

    segfaultbuserr查看英文原文

    This article was originally written with a critical tone of C & Unix, it said they have a lot of problems, but with a 50% functionality, a lot of people had accepted it as good enough, then spreaded it like "the ultimate computer viruses". After it's publication, many Unix people reinterpreted it as a celebration of Unix's successful apporach since then. I always strongly dislike JavaScript for its inconsistencies and ugly syntax, I found the tendency that everything now comes with a JavaScript engine and force developing in JavaScript regardless of their native programming language is unfortunately, and I always dreamed that the alternative timeline which Scheme became the language of the web. But I've changed my position in recent years, because of this article. Now I think the same principle applies to JavaScript. It was something with a 50% functionality, and so it became the ultimate virus on the Web, and since then, a huge amount of manpower was spent on improving JavaScript. As a result, it still has the same inconsistencies from its original design, but overall, due to all the efforts, the overall usability is actually higher than alternative systems with a "cleaner" / "better" design. Just like a Unix-like OS like FreeBSD or Linux is still one of the most usable systems in existence. So I think I'd just accept JavaScript...

    作者后来把“更糟即更好”概括为:功能不全但可靠、快速、小巧,比功能完整更重要。

    我最近发现作者本人对“Worse Is Better”最好的总结,却不在以此为题的文章里:“一个功能不足但坚如磐石、快速且小巧的产品,远胜于一个覆盖了专家眼中完整需求的产品。”(出自 Patterns of Software 第219页)

    akkartik查看英文原文

    I recently discovered my favorite summary of "Worse is Better". It's by the author, but it isn't anywhere in articles by that name. “It is far better to have an under-featured product that is rock solid, fast, and small than one that covers what an expert would consider the complete requirements.” https://www.dreamsongs.com/Files/PatternsOfSoftware.pdf (pg 219)

    省略某些“正确”功能反而能避免用户陷入混乱,简化实现和用户体验可以一致。

    我认为核心是“只要危及实现简单性,就必须牺牲完整性”。有时删掉一个本应存在的功能,不仅让实现者轻松,也让最终用户更省心,即使她有充分理由想要这个功能。例如 Subversion 允许对空目录做版本控制,而 Git(像 CVS)不允许。表面看这是 Git 的缺陷,但 Subversion“做对的事”带来的后果很广:它把目录当作一等对象,而不只是文件名的一部分,于是仓库可能进入各种奇怪混乱的状态。用 Git,用户永远不会被“我删了目录,然后合并一个往里面加文件的分支”这种结果搞糊涂。

    mjw1007查看英文原文

    I think the central point here is "completeness must be sacrificed whenever implementation simplicity is jeopardized". Indeed, sometimes omitting a feature which really ought to be there makes life easier for the end user, not just the implementor, even though the user has a good reason to want the feature. For example, Subversion allows versioning empty directories while Git (like CVS) doesn't. On the face of it this is just a deficiency in git, but the fallout from Subversion doing the Right Thing is quite extensive: because Subversion treats directories as first-class objects rather than just part of a file's name, you can get a Subversion repo into all kinds of strange and confusing states. With git the user is never going to be confused by the result of something like "I deleted the directory then tried to merge a branch which added a file inside it".

    “先发布再迭代”并非万能,复杂问题可能无法靠增量改进解决。

    我对“更糟”开发方式——先赶出一个简单 MVP 再迭代——的主要批评是:它只适用于简单问题。不是所有问题都能靠增量改进解决。

    gerbilly查看英文原文

    Main main criticism of the 'worse' development approach, rush out a simple MVP then iterate, is that it only works for simple problems. Not all problems can be solved by incremental refinement.

    历次讨论

    同类还值得读

    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

    关注向阳乔木

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

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

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