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

    职业与工作方法github.com

    成为软件工程师的计算机科学学习计划

    A computer science study plan to become a software engineer

    2次上首页
    3年跨度
    644累计得分
    270条评论

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

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

    导读

    这个 GitHub 仓库是一份完整的计算机科学自学路线图,作者整理了大量数据结构、算法、系统等课程资源,目标是帮助没有 CS 学位的人通过自学和面试准备成为软件工程师。它最初是作者为进入谷歌而制定的学习清单,后来成为广受欢迎的开源项目。

    为什么经久不衰:它既提供了可操作的自学路径,又持续引发关于 CS 教育、面试刷题与工程实践脱节的讨论,因此每隔几年就会被重新翻出来。

    关键词 计算机科学自学面试准备软件工程开源学习路线

    HN 评论精选

    批评 CS 课程与大多数软件工程实际工作严重脱节,大厂面试标准并不代表日常工作。

    这份关于数据结构、算法和软件基础的主题清单并不差,但别假装计算机科学和大多数软件工程岗位有多大关系。我学过计算机科学,30 年里几乎没用到多少。少数工作中统计和数学有点帮助,但在我漫长的职业生涯里,CS 和实际软件工程工作的重叠非常少。谷歌等大厂用这些标准在招聘阶段筛人,但绝大多数工作跟这些东西无关。

    caymanjim查看英文原文

    This isn't a bad list of topics about data structures, algorithms, and software fundamentals, but let's not pretend that computer science has anything to do with most software engineering roles. I studied computer science, and in 30 years, I've hardly used any of it. There were a few jobs where some of the statistics and math were helpful, but in my long career, I've seen very little overlap between computer science and working as a software engineer. Google and other big tech companies use these criteria to filter people out at the hiring stage, but the vast majority of work has nothing to do with any of this stuff.

    指出作者本人没能进谷歌却去了亚马逊,并建议以刷题代替啃理论来通过编码面试。

    剧透:作者后来写了篇文章《我没被录用,原因如下》。他收到谷歌拒信,连电话面试都没拿到,理由是找不到合适的团队。但他最终被亚马逊聘为软件开发工程师。假设你能进入面试阶段,最快的准备方式就是刷 LeetCode 最大化通过概率,这对系统设计和行为面试帮助不大,但比学 CS 理论更管用。

    sxp查看英文原文

    Spoiler alert: https://medium.com/@googleyasheck/i-didnt-get-hired-here-s-why-21f26d4784d5 > Last week I received a rejection email from the recruiter, and at first, I thought it was a mistake, and laughed it off. I checked in with my referral and he inquired into it and lobbied on my behalf, but in the end, it didn’t change the situation.... The thing that bothers me is that I didn’t even get a phone screen. I didn’t even talk to a recruiter over the phone. After all this work and enthusiasm, I didn’t even get a chance to prove myself.... After speaking with some folks related to Google, the best I can determine is that they decided to pass because there wasn’t a good fit on any teams where I might be qualified. This is in agreement with the rejection email I received — there were no roles fitting my experience and background. > I’ve been hired as a Software Development Engineer at Amazon! Assuming you can get to the actual interview stage, the fastest option is to prepare by just grinding leetcode to maximize your chances of passing the interview. That won't help with aspects like the system design or behavioral interviews, but grinding leetcode will give you a better chance of passing the coding interview compared to studying CS theory.

    指出学习计划缺少分布式系统和工业级工具,而这些才是大厂实际工作的核心。

    浏览课程大纲后,最大的遗漏是分布式系统和业界常用工具的实现。在大厂,你通常要在更大规模下工作,一个能跑的方案在 10 倍、100 倍、1000 倍规模下未必可行。你往往需要使用与单体 Web 应用架构不同的技术。我建议多学分布式系统工程师常用的工具:负载均衡 Nginx、键值存储 Redis、发布/订阅 Kafka、队列 SQS、Map/Reduce Hadoop/EMR、数据库 SQL。

    nelsondev查看英文原文

    From scanning through the course outline, the big omission is learning about distributed systems, and industry leading implementations of common tools. At big tech companies, you typically have to work at a much larger scale. A solution that works, won’t necessarily work at 10x, 100x, 1000x the scale. You often need to use technologies architected differently than a monolithic Web App. I would recommend learning more about the commonly used “tools” that a distributed systems engineer would use, more specifically: - Load balancer - Nginx - Key/Value storage - Redis - Pub/sub - Kafka - Queueing - SQS - Map/reduce - Hadoop, EMR - Databases - SQL

    批评清单只是面试琐碎知识,缺乏应用判断力和数学基础,不能真正培养工程师。

    很抱歉,这既不算完整,也不是成为软件工程师的计划。它只是一份琐碎知识清单,用来通过不懂行的 HR 部门组织的编码面试,那种面试把工程能力等同于记住考题答案。清单里的东西不会教你如何应用这些技术、何时应用(以及何时避开),而后者比记住如何平衡红黑树或排序列表重要得多。算法随时可以查,今天有几个工程师会自己实现而不是用库?但知道何时用哪种技术或算法才是关键。我还严重缺失数学基础:有组合数学(不错)和可选部分的一些几何,但数值数学、线性代数、统计和微积分基础呢?在大数据和 AI 热潮下,不懂基础你会寸步难行。

    janoc查看英文原文

    I am sorry but this is neither complete nor a plan how to become a software engineer. This is a list of trivia to get you through a coding interview conducted by a clueless HR department that equates engineering skill with remembering answers to test questions. Nothing more. None of the stuff in the list will actually teach you how to apply these techniques nor when to apply them (and when to stay away!) - which is much more important to know than to remember how to balance a red black tree or to sort a list. The algorithms you can always look up - and frankly, how often does an average engineer implement something like that today instead of using a library? However, knowing when to use which technique or algorithm is absolutely essential. What am I missing completely is foundations of mathematics. There is some on combinatorics (good) and some geometry in the optional parts, but where is numerical mathematics? Linear algebra? Basics of statistics and calculus? With the "big data"/AI crazes going on you will be dead in the water if you don't know at least the basics. Not to design the algorithms (that will be still way over your head) but to at least have a shot at understanding what you have to implement! Nobody is going to explain you how to multiply matrices or calculate a covariance there. Stuff like geometry and linear algebra is absolutely essential also for people programming computer games, anything related to virtual/augmented reality or robotics. Statistics is needed anywhere dealing with data but especially in AI, machine learning and computer vision. And basics of calculus are pretty much everywhere. So while the list is pretty useful as a reference, the title is seriously misleading.

    历次讨论

    同类还值得读

    1. 用十年时间自学编程(1998)

      Teach Yourself Programming in Ten Years (1998)

      Peter Norvig 1998 年的经典文章,回应“21天/24小时学会编程”一类速成书,主张真正精通编程需要约十年持续、有意识的练习。

      职业与工作方法上首页 11 次 · 2007–2025norvig.com编辑精选
    2. 如何成为一名程序员:简短、全面而个人的总结

      How to be a Programmer: A Short, Comprehensive, and Personal Summary

      一篇广为流传的程序员成长指南,作者以个人经验系统总结了成为优秀程序员所需的各项技能——从调试、测试、沟通到团队协作与身心健康。

      职业与工作方法上首页 6 次 · 2008–2015samizdat.mines.edu编辑精选
    3. 不要自称程序员

      Don't Call Yourself a Programmer

      经典职业建议文章劝软件工程师不要把自己局限在“程序员”这个标签上,而要从公司业务角度说明自己创造的价值;文中讨论了成本中心与利润中心、头衔、求职与职业选择,也顺带批评了学术界的价…

      职业与工作方法上首页 5 次 · 2011–2021kalzumeus.com编辑精选
    4. 创作者的日程与经理的日程

      Maker's Schedule, Manager's Schedule (2009)

      Paul Graham 在这篇文章里把时间表分成两类:管理者的日程以小时为单位,会议可以填满一天;创作者(程序员、写作者等)的日程则以半天为单位,需要长时间不被打断的连续块。

      职业与工作方法上首页 5 次 · 2009–2021paulgraham.com编辑精选
    5. 为什么程序员的薪酬不与生产力成正比

      Why programmers are not paid in proportion to their productivity

      讨论为什么程序员的薪酬往往不随其生产力成比例增长:生产力难以客观量化,薪酬更多受组织预算、岗位定价和个人议价能力影响。

      职业与工作方法上首页 5 次 · 2009–2022johndcook.com

    打赏支持

    打赏二维码

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

    WeChat

    关注向阳乔木

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

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

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