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

    算法与计算机科学matt.might.net编辑精选

    每个计算机科学专业学生都应该知道的事(2011)

    What every computer science major should know (2011)

    3次上首页
    8年跨度
    807累计得分
    311条评论

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

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

    导读

    这是计算机科学家 Matt Might 的经典文章,列出他认为每个计算机科学专业学生都应掌握的知识清单,涵盖数学、系统、语言、理论、工程实践等多个领域。文章多次登上 HN 首页,每次都引发关于“CS 学生到底需要学什么”的激烈讨论。

    为什么经久不衰:它提出了一个历久弥新的问题——计算机科学教育的核心是什么,清单本身虽显理想化,但作为知识地图和讨论起点至今仍有参考价值。

    关键词 计算机科学教育学习路线课程清单职业发展

    HN 评论精选

    不存在人人必备的知识清单,深度专精比广度堆砌更容易通向成功

    “存在一个所有人都必须知道的东西才能成功”这种观念,其危害大于清单内容本身的好处(这类清单归根结底就是“人人都该知道我知道的东西”)。要成功,你真正需要的只是足以对社会做出有意义贡献的知识,通往这一点的路径有千万条。事实上许多最成功的人很早就专精于某一领域,把整个职业生涯投入到一个或一组项目上。John Carmack 懂可视化、数据库或密码学吗?Linus Torvalds 在乎 Scala、Haskell 或 Prolog 吗?人们喜爱他们创造的东西,所以他们成功了——没人考核过他们 25 个不相关领域的知识。追逐一个无所不知的“超级程序员”的柏拉图式理想并不值得,这种态度反而有害。

    stiff查看英文原文

    There is more harm in the notion that there is anything at all that absolutely everyone needs to know to succeed than there is benefit from the contents of such lists themselves (which boil down to "everyone needs to know what I know"). To succeed, all you really need to know is enough to be able to do meaningful contributions to society in any way whatsoever. This is all there is to it and there are thousands of individual paths that lead to this. In fact, many of the most successful people specialize early, devote themselves to a single project or group of projects and spent the rest of their professional lives on it. Do you think John Carmack knows much about visualization, databases or cryptography? Does Linus Torvalds care about Scala, Haskell or Prolog? People love what those guys have created, so they have succeeded, it is as simple as that - nobody examined them for knowledge of 25 unrelated areas, instead they have built for themselves a useful toolkit of skills for their particular goals. It is not worth it to spend your life chasing some abstract platonic ideal of an uberprogrammer who knows everything about anything - in fact such attitude is detrimental to success.

    清单不切实际且重工具轻理论,可能反而劝退学生;本科教育应侧重原理

    我能理解这样的清单是怎么形成的,但它不幸变成了学术版的招聘广告——要求对每种工具和技术都有 20 年经验。没人能在学位课程的时间框架内消化如此广而深的课程,我担心目标读者未必意识到这一点,这种呈现方式反而可能劝退想学 CS 的人。问题部分在于过分强调具体工具和标准,而非通用原理和理论。本科 CS 教学不应以工具为优先,我也不太信任那些靠惯性和生态效应流行、但按现代标准并不出色的“老派”工具。正因如此,扎实的理论基础被低估了。我希望在任何现代本科大纲里看到“比较排序”“停机问题”“ACID”“事务”“分布式系统”“CAP 定理”“并发”“死锁”“无锁”等术语,以及更多数据结构和算法的具体内容。

    Silhouette查看英文原文

    I can see how a list like this could develop, but unfortunately it seems to have become the academic version of a job ad that wants 20 years of experience in every tool and technology ever invented. No-one would stand a chance of coping with such a broad and deep syllabus within the time frame of a degree course, but I worry that the target audience for this list won't necessarily realise that and so the current presentation could actually discourage people from studying CS. I think part of the problem is having so much emphasis on specific tools and standards rather than general principles and theory. Hopefully CS students do pick up some familiarity with practical examples along the way, but I don't think that should be the priority for undergraduate level CS teaching. I'm particularly wary of putting so much emphasis on "old school" tools that aren't necessarily very good by modern standards but remain popular because of momentum and ecosystem effects. As a result of that emphasis on tools, I'd say sound theoretical foundations seem to be given less weight than they deserve. Some examples of terms that I would have liked to see on any modern undergraduate CS syllabus or reading list are "comparison sort", "halting problem", "ACID", "transaction", "distributed system", "CAP theorem", "concurrency", "deadlock", and "lock-free", as well as a lot more specifics on basic data structures and algorithms.

    清单严重超载,与其堆砌理想化的全部知识,不如定义最小必需集

    这类清单总是夸张地塞满内容,像一张宽大的修辞沙发。列一个 8-10 年学习量的清单很容易,真有人照做的话会导致单一文化——除了计算机科学和“学到电磁学的物理”这种巨型需求清单,什么都没时间做。我大致在 1997 年前后达到过这些要求(靠不错的高中理科基础、四年本科和 CMU 的 8 门研究生课程),即便如此按他的定义我仍有一长串缺口,而那是 7-8 年的准备,不是 4 年。更有意思的做法是定义一个最小集合——人人都能堆出 8-10 年的学习量,但“你到底需要什么”才是真正有趣的问题。

    glangdale查看英文原文

    These kind of lists are always hilariously overstuffed, like a big comfortable rhetorical couch. It's not all that hard to make up a giant list of 8-10 years worth of material, which if anyone took seriously would also lead to a monoculture i.e. we didn't have any time to do anything aside from computer science and this giant-ass list of requirements like "physics up to electromagnetism". I'd say I was close to hitting, for about the year 1997 or so, these requirements or their equivalents as they existed then, after (a) a pretty decent prep at high school level (Australian high schools allowed a heavy math/science concentration), (b) 4 years of undergrad with - nominally CS as 1 subject in 4 in first year, 1 in 3 in second year, 1 in 2 in third year and full-time in honours (but actually way more focus on CS vs other subjects), and (c) completing the 8 graduate courses required to move on to the rest of the PhD at CMU. Even then I'd have a long list of gaps in his definition. And that's off 7-8 years of prep, not 4, and an Australian honours CS degree allowed a lot more specialization than a lot of 4-year degrees in the US at the time. It would be a more interesting approach to try to define a minimal set. Anyone can spam out 8-10 years of study and everyone will agree that, sure, someone who knew all that would be Pretty Good (better have 11 programming languages under your belt, hey). But a far more interesting task is - what do you need? And, perhaps, in a class of 100 people, why should everyone come out with the same laundry list? Maybe it's good to have 20 really good statisticians there, as well as 20 people who could design the processor they are programming on, etc etc (obviously an overlapping set).

    学术清单之外,现实工程岗位更需要协议、Git、测试、沟通等实用技能

    我来自 CS 背景,学习 CS 给了我坚实的基础并改变了我理解和看待计算的方式。文中提到的大部分主题我在学校都学过,它们都有效,但不足以应对现实世界的需求。约 90% 的 CS 本科生最终会成为工程师或与工程师共事,2019 年不可或缺的技能是:1) 理解 WWW 常用协议(http、ssh、ftp 等);2) 版本控制(Git),理解 pull request 和团队协作流程;3) 解决问题的能力——如何拆解问题、遇到瓶颈如何突破;4) 设计模式;5) 框架:MVC、angular、依赖注入等;6) 沟通能力;7) 如何组织工作、把大任务拆成小块;8) 理解截止日期;9) 写测试(单元测试、集成测试等);10) 明白“够用就好”有时就是全部所需(当然之后还是尽量改进 :))。

    pinacarlos90查看英文原文

    I come from a CS background and learned a lot from studying CS, it definitely gave me a strong foundation and changed the way I view and understand computing. I learned most of the topics mentioned in this document while in school, and although they are all valid, they are not enough for real world needs. ~90% of CS undergraduates will end working as or with engineers, and in 2019 here are the skills that are indispensable: 1) understand popular protocols used in WWW (http, ssh, ftp, etc) 2) version control (Git). Understand pull-requests and the process of collaboration in a team 3) problem solving - how to breakdown problems, and how to overcome them when you reach a wall (use known algorithms when possible) 4) design patterns (learn as many as you can) 5) frameworks: MVC, angular, dependency injection, etc 6) communication skills 7) how to organize work, how breakdown big tasks into small easier-to-accomplish pieces 8) understand deadlines 9) write tests (unit-test, integration-test, etc) 10) understand that “good enough” sometimes is all you need (still try to fix it later :) )

    历次讨论

    同类还值得读

    1. 位运算技巧集

      Bit Twiddling Hacks

      斯坦福页面上的经典位运算技巧合集,收录了 popcount、前导/尾随零、位反转、交换、舍入等大量技巧,并附有解释和性能讨论。

      算法与计算机科学上首页 8 次 · 2011–2024graphics.stanford.edu编辑精选
    2. 如何不按平均评分排序

      How Not To Sort By Average Rating

      经典文章解释了为什么按平均评分排序不可靠:只有少量评价的条目(比如仅一条五星)会轻易排到最前,而评价数量的差异被忽略。

      算法与计算机科学上首页 7 次 · 2009–2024evanmiller.org编辑精选
    3. 数据结构可视化

      Data Structure Visualizations

      旧金山大学 David Galles 教授制作的数据结构与算法交互式可视化网站,涵盖 B 树、红黑树、排序、图算法等,可逐步操作观察其运行过程。

      算法与计算机科学上首页 6 次 · 2011–2021cs.usfca.edu编辑精选
    4. 1996 年以来的计算机科学最佳论文奖

      Best Paper Awards in Computer Science since 1996

      Jeff Huang 维护的一个汇总页面,收录了自 1996 年以来计算机科学各主要会议的“最佳论文奖”获奖名单,并按年份和会议整理,方便读者一站式浏览历届获奖论文。

      算法与计算机科学上首页 6 次 · 2010–2018jeffhuang.com编辑精选
    5. 算法(Jeff Erickson)

      Algorithms, by Jeff Erickson

      伊利诺伊大学 Jeff Erickson 教授的算法课教材,免费在线开放。

      算法与计算机科学上首页 5 次 · 2018–2022jeffe.cs.illinois.edu编辑精选

    打赏支持

    打赏二维码

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

    WeChat

    关注向阳乔木

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

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

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