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

    编程与软件工程nora.codes

    别让学生用 Eclipse

    Don't Make Students Use Eclipse

    2次上首页
    1年跨度
    546累计得分
    584条评论

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

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

    导读

    作者主张计算机专业学生的第一门编程课不该用 Eclipse 这类重型 IDE 学 Java/Python,认为 IDE 把 javac 命令行、classpath、import 规则和文件命名要求都藏了起来,学生只学会了点按钮而不理解编译到底发生了什么,应先接触命令行工具和编辑器。文中还顺带谈到计算机科学与数学的关系。评论区多数人并不完全认同,争论集中在"该先学工具细节还是先学语言概念"。

    为什么经久不衰:它把编程入门教学里"工具先行还是概念先行"的老争论摆上台面,每年有新生入学、有新 IDE 出现时都会被重新翻出来讨论。

    关键词 编程教育JavaIDE命令行

    HN 评论精选

    问题不在 IDE 而在 Java:语法和工具层层包装的魔法让初学者始终不明白发生了什么,作者归错因了。

    我觉得更好的说法是"别让学生用 Java"。我实在想不出比它更不适合训练初中级程序员的语言了,真希望我当年学的是别的。从第一天起你接触的就是一层套一层的魔法:"打开 IDE 点新建项目,起名 MyProj,然后在侧边栏点 MyProj,在里面 `public static void main(String args[]){}` 即 `public class MyProj{}` 里写 `System.out.println("Hello World")`,再点顶部菜单的 Run,控制台就出现 Hello World 了,瞧,这就是编程!"你要学一年以上才开始明白这些步骤究竟做了什么,第二个学期过半才知道那些魔法单词是啥意思。我感觉自己做的每件事都是魔法,从不知道为什么它能跑,差点退学。唯一真正开窍的时候,是上了讲 MIPS 的计算机组成课,之后又写了些 C。

    0_gravitas查看英文原文

    I think a better alternative would be "Don't Make Students Use Java", I seriously can't think of a worse language for training beginner/intermediate programmers, I certainly wish my schooling experience consisted of something else. From day one you're introduced to magic on top of magic: "Open up <IDE> and click 'new project' and name it 'MyProj' and now click on the file in the side menu that says 'MyProj' and inside `public static void main(String args[]){}` inside the `public class MyProj{}` write `System.out.println("Hello World")` and go to the top bar and hit 'Run' and then 'Hello World' will appear in the integrated console, ah, programming!" And you don't even begin to grasp what all those steps you just took in the IDE did until you're at least 1+ years in, and you don't learn what all of those magic words even remotely mean by at least halfway into your second semester. I felt like every single thing I ever did was magic, never having a clue why it ever actually worked the way it did, and as a result nearly dropped out. The only time things _finally_ started to make sense is when I got to Computer Architecture/Organization with MIPS followed by some work in C.

    反对作者:javac、import 规则只是某个编译器的实现细节,不该混进语言教学。

    "……它把学生和 javac 命令行程序、以及命令行环境本身隔离开来"——这文章太误导了。Java 语言(字面意义上)和 javac 毫无关系,外面还有一大堆别的编译器。上 Java 课不该把重点放在 Java 编译器命令行界面的种种古怪细节上。为这一点辩护显得很业余。举个例子:我高中用 Borland 编译器学 C++,此后 15 年我再没碰过 bcc,尽管期间写了大量 C++。"……import 和文件命名要求"同样是编译器实现细节,不该成为通用 Java 课程的一部分。而"数学是计算机科学的基础"这类话也有误导性,虽然不算全错,但错得足以把人带偏。

    dvt查看英文原文

    > ... it insulates the student from the javac command line program, and the command line environment itself Such a misguided article. The Java language has (quite literally) nothing to do with `javac`. In fact, there's a lot of other compilers out there. Taking a Java class should not focus on the intricacies and weirdness of Java compiler command line interfaces. It seems pretty amateurish to argue in favor of it. Case in point: back in high school, I learned C++ using a Borland compiler (and I haven't touched `bcc` in the 15 years since then, even though I've written plenty of C++ in the meantime). > ... imports and file naming requirements. These, again, are (compiler) implementation details and should not be part of a generalized Java curriculum. > And of course, mathematics is the foundation of computer science. Stuff like this can be misleading and even though not completely wrong (discrete math, logic, metalogic, mathematical logic are sorta' kinda' similar), it's just wrong enough[1] to lead people astray. [1] https://www.scott-a-s.com/cs-is-not-math/

    折中派:工具细节该学,但第一门课应先让学生体验写代码的乐趣。

    我不太赞同。我开始学 Java 时已有六七年编程经验,仍觉得 classpath 和 javac 这些东西相当复杂。以前用的工具我都用得挺顺,到了 Java 世界却全都很陌生。直到今天,我发现初级开发者仍然卡在这些地方,除非有人替他们配好 maven/gradle 项目。我完全支持大家最终学会这些技能,但在大一课上,我更希望学生专心于语言和写软件的一般概念。很多 JavaScript 教程一开始就是打开浏览器控制台敲几行,没人会说他们应该直接上 node.js 和 webpack。其他那些细枝末节以后自然会来,而安静地写代码本身有一种独特的美好,如果能因此找到同样享受这种感觉的学生就太好了。我更愿意从他们所在的地方出发,只谈语言和核心概念,等他们进度到了再引入丑陋的细节。

    cutchin查看英文原文

    I'm not sure I agree much with this. When I first started learning Java I had six or seven years of programming experience and I still found dealing with matters of classpath and javac remarkably complicated. I had things down well enough with the tools I used before, but it all seemed so foreign in the Java world. And to this day I find junior devs struggle with the same things unless they have a maven/gradle project all set up for them. I'm all for folks learning these skills eventually, but in a first-year CS class I'd really rather students worry about the language and general concepts of writing software. Lots of javascript tutorials start off with opening and browser's javascript console and typing out some simple stuff and I don't think people would tell them they need to jump straight into node.js and webpack. All the other intricacies of writing systems will come to them but I find something uniquely wonderful about sitting and writing code, and if we're lucky we'll find students who can have that same experience. I'd rather meet them where they are and talk purely of the language and core concepts, and introduce them to the ugly details as their progress dictates.

    完全反对:入门课不该纠缠编译细节,IDE 向导加搜索就能搞定真实项目。

    我不认同这个观点:为什么入门学生非得理解编译背后的内部机制、以及拼错 import 这种古怪边角情况?以我的经验,恰恰是这些东西妨碍学习、让学生困惑。作者说学生不学这些就无法做真实世界的编程,但这正是他们不需要知道的:完整的团队完全可以只用 IntelliJ 的项目向导、再加一点从 Stack Overflow 抄来的 Gradle 就构建出大型 Java 项目,学生花 5 秒搜一下 Stack Overflow 就能解决作者说的大部分问题。我不是说这些冷门细节完全没用,比如搞清 char 和 UTF-8 "字符"的区别确实重要,否则表情符号输入能让网站崩溃。但这应该放在后面的课里,留给有兴趣的学生。而且据我观察,有些大学的问题恰恰相反:教学生用过时又繁琐的老工具,比如手写代码还因语法错误扣分,或者用 jQuery 这种过时框架。看到标题我的第一反应就是"对,别让学生用 Eclipse,他们该用 IntelliJ!"

    armchairhacker查看英文原文

    I don’t agree with this perspective: why do entry-level students have to understand the internals behind compiling their code, and weird edge-cases like misspelling import? In my experience this is actually the stuff that hinders learning and confuses students. The author claims that students won’t be able to do real-world programming without learning this esoteric stuff, but actually this is the exact stuff they don’t need to know: full teams can and have built huge java projects just by using the intellij project wizard and maybe a tiny bit of Gradle from stack overflow. Actually students can solve most of the author’s problems by spending 5 seconds on Stack Overflow. I’m not saying that these more esoteric details are completely useless. Learning e.g. the difference between char and UTF8 “character” is actually pretty important so that emoji inputs don’t crash your website. But this is stuff that should come in later classes, particularly for students who are interested in those details. Not everyone needs to know it. In fact my experience is that some colleges have the exact opposite problem: they teach students old tools and techniques which are tedious and not actually used much later on. Like writing code by hand and deducting points for syntax errors, or using some outdated framework e.g. jQuery. When I saw the title my first thought was literally “yeah stop making students use eclipse, they should be using IntelliJ!”

    历次讨论

    同类还值得读

    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

    关注向阳乔木

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

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

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