编程与软件工程matt.might.net
高级编程语言(2009)
Advanced programming languages (2009)
2009 — 2022,它一次次回到首页
黑点是上首页(≥ 50 分)的那次投稿,空心点是没冲上去的投稿,点越大分数越高。
导读
这是 Matt Might 的经典文章,按用途推荐“高级编程语言”:如果追求就业就选主流语言,如果追求表达力、学术研究或创业,则推荐 Haskell、OCaml、Scala 等函数式语言,并附上各语言的学习资源。文章多次登上 HN 首页,成为讨论语言选择标准的常青参考。
为什么经久不衰:它把“选语言”从技术问题上升为职业与思维方式的选择,其核心框架(就业性 vs 表达力)至今仍是语言讨论的经典切入点。
HN 评论精选
读者正用此文在函数式语言之间做选择,关心生态与前置知识
这篇文章来得正是时候。我正想学一门函数式语言,已把范围缩小到 Haskell、OCaml 和 Scala。有常用 Haskell 或 OCaml 的朋友能说说标准库和第三方库的现状吗?我很喜欢 Scala 的 JVM 支持,生态看起来很成熟。不过我来自 C++ 和 Python 背景,学 Scala 之前需要先精通 Java 吗?
dsacco查看英文原文
This post is very fortuitous for me. I've been looking to learn a functional language and I had more or less narrowed my options to Haskell, OCaml and Scala. I liked the breakdown between these languages and the resources. Can anyone who programs in Haskell or OCaml regularly tell me the current state of standard and third party library support? I'm very attracted to Scala because it has JVM support, which sounds fantastic for overall ecosystem maturity. That said, I come from a C++ and Python background, so do I need to know Java well before learning Scala?
创业选语言要考虑招聘难度,不能只看个人效率
如果是围绕一门难以招人的语言来创业,我会非常犹豫。短期内你确实效率更高,但创业不只是写代码,在有能力雇人分担之前,你得身兼数职。到这个阶段,你的第一个员工应该是替你分担工程负担的人——因为工程是你唯一真正理解的业务,也只有这件事你能有效管理他人去做。
vinceguidry查看英文原文
I personally would really hesitate before picking a language that will be hard to hire for to build a business around. Yes, you'll be more productive in the short-term, but a business is more than just code and you will need to wear those hats too before you'll have enough understanding and resources to hire those out. At this point, I'm fairly certain your first hire should be someone to take the engineering load off of you. Engineering will be the only thing you really, truly understand about your business and so it will be the only thing you'll be able to effectively manage others doing.
质疑原文把学术研究和创业与就业性割裂的说法
“如果你追求的是开悟、学术研究或创业,选语言的标准不是就业性而是表达力”——但开悟、学术研究和创业之间差别很大。对学术研究和创业来说,就业性都很重要:研究“没人用”的语言会降低研究影响力和自己的就业前景;创业则需要团队都能高效上手、社区健康、招人不出问题的语言。
marceloabsousa查看英文原文
"If, on the other hand, you're interested in enlightenment, academic research or a start-up, the criterion by which you should choose your next language is not employability, but expressiveness." There is a big difference between enlightenment, academic research and a start-up. For both academic research and start-ups, employability is a very important component: - Doing academic research on "non-employable" languages decreases the impact of your research and your own employability; - In a start-up, you want to pick a language where you can be productive with your team members, with an healthy community, and where you won't have hiring problems because you're using an "advanced" programming language.
建议“一门主流+一门差异最大”的双语言学习策略
每个开发者至少应掌握两门语言。最优选法是:(1) 学你所在行业最主流、最好就业的语言(如企业用 Java、科研用 Python、前端用 JavaScript);(2) 再学一门与第一门差异最大的语言,不管它冷门与否——会 Java 就学 Scheme,会 Python 就学 Haskell,会 JavaScript 就学汇编。
goto11查看英文原文
Every developers should know at least two languages (more is of course better, but two is the minimum for a professional). The optimal way to select: (1) Learn the language which is most prominent or employable in your preferred industry (e.g. Java for enterprises, Python for science, JavaScript for frontend). (2) Learn the language most different to the first, regardless of its popularity and employability. Eg. Scheme if you know Java, Haskell if you know Python, Assembler if you know JavaScript. (There will probably be some disagreement about which languages are to most different to each other, but you get my point.)
指出文中 AI 首选 Haskell 的说法已过时,并追问函数式语言为何未在 ML 领域流行
“如果做 AI、NLP 或机器学习研究,Haskell 也会是我的首选”——这显然是过时的说法,今天显而易见的选择是 Python。但我很好奇:为什么这些“表达力更强”(文中似乎是“函数式”的同义词)的语言没在这些领域流行?像 Elixir 这种围绕管道、并行和数据处理设计的语言,配上高性能原生库,似乎很适合数据科学。
krebs_liebhaber查看英文原文
> I don't do a lot of artificial intelligence, natural-language processing or machine-learning research, but if I did, Haskell would be my first pick there too. This is definitely a dated article, since the obvious choice today would be Python, but I have to wonder: why aren't the "more expressive" (which in this post seems to be a synonym for "functional") languages used in these fields? I don't have much experience with ML languages, but it seems to me that something like Elixir (where the whole language is centered around pipes, parallelization, and operating on data) would be ideal for data science with a performant native library to back it up.
历次讨论
同类还值得读
开源应用架构
The Architecture of Open Source Applications
《开源软件架构》(AOSA)是一本在线免费书,邀请知名开源项目的作者亲自剖析其内部设计,涵盖 SQLAlchemy、LLVM、Audacity、Apache、Bash 等系统。
编程与软件工程上首页 9 次 · 2011–2024aosabook.org编辑精选编程语言简史:简短、不完整且多半错误
A Brief, Incomplete, and Mostly Wrong History of Programming Languages
一篇以戏谑、故意不准确的方式回顾编程语言史的博客文章,用夸张轶事和讽刺定义串起 Lisp、C、C++、Java、JavaScript、PHP 等语言。
编程与软件工程上首页 8 次 · 2009–2021james-iry.blogspot.comSQLite 是如何测试的
How SQLite is tested
SQLite 官方文档页,系统介绍 SQLite 的测试体系:多种测试方法(TCL 测试、模糊测试、回归测试、静态分析等)和海量测试用例,展示了这个小型开源项目如何靠极致测试获得…
编程与软件工程上首页 8 次 · 2009–2025sqlite.org编辑精选我的 Forth 与栈机器经历
Yosefk - My history with Forth & stack machines
作者以亲身经历回顾了使用 Forth 语言和栈式机器的历程:既赞叹其简洁优雅、代码量小、可自举的优点,也坦率指出栈操作在实际编程中的痛苦,以及 Forth 社区文化中的问题。
编程与软件工程上首页 8 次 · 2010–2024yosefk.com编辑精选学习 Haskell 时我希望知道的事
What I Wish I Knew When Learning Haskell
Stephen Diehl 整理的 Haskell 学习指南(以幻灯片/参考文档形式呈现),旨在让初学者快速了解学习 Haskell 时最需要知道的核心库、概念和工具。
编程与软件工程上首页 7 次 · 2013–2020dev.stephendiehl.com