Why care about programming languages
摘要
文章回应开发者关于语言知识是否过时的疑问,指出语言价值源于其体现的思想而非语法或工具。列出示例包括:Rust 的 borrow checker(所有权与生命周期)、Haskell 的 typeclasses(多态与抽象)、SML / OCaml 的模块系统、SQL 的关系理论、C 的数组与指针、Lisp 的语法扩展、函数式语言的一等函数、代数数据类型等。解释这些概念如何扩展思维工具箱,帮助建模领域、选择抽象、评估 AI 生成代码并构建可维护系统,强调在 AI 时代理解这些思想更为重要。
荐读理由
它用Rust借用检查器、Haskell类型类、代数数据类型等具体概念,论证AI生成代码时代这些思想仍是评估代码、选择抽象和架构可维护系统的核心,直接反驳‘语言知识已无用’的看法,帮你判断是否值得投入时间。
原文
Why care about programming languages July 22, 2026 by Eduardo Bellani
In the age of AI-assisted coding, it’s easy to feel that deep knowledge of programming languages has become obsolete. Why spend years mastering language intricacies when an AI can generate code in any language on demand? I recently encountered this sentiment in a question from a fellow developer:
I feel like caring about programming languages and stuff is actually very useless. … Am I being too extreme?
I understand the concern, but I believe it misses something fundamental: a programming language’s worth is derived from the ideas it embodies, not merely its syntax or tooling. These ideas—concepts about how to structure thought, manage complexity, and solve problems—remain essential regardless of who or what writes the code.
Here is my sample list of deep ideas from programming languages:
on Rust, the borrow checker—reasoning about ownership and lifetimes
on Haskell, typeclasses—principled polymorphism and abstraction
on SML/OCaml, the module system—large-scale program organization and decoupling
on OOP languages, identity vs equality—understanding state and comparison
on SQL, relational theory/algebra—declarative data manipulation
on Prolog, first order predicate logic—logic-based problem solving
on C, arrays and pointers—understanding memory layout and indirection
on Lisp, syntax extensions—metaprogramming and language-oriented programming
on functional languages, first class functions—treating computation as values
on SML, Haskell and others, algebraic data types—modeling domains with types
on Clojure, maps and immutable data structures—persistent data and structural sharing
on OCaml, row polymorphism—static typing for extensible records
Each of these concepts represents a different way of thinking about computation. Learning them expands your mental toolkit for solving problems. When you understand the borrow checker, you think differently about resource management everywhere. When you grasp algebraic data types, you model domains more precisely. When you internalize first-class functions, you see abstraction opportunities others miss.
These ideas transcend any particular language or tool. They are the conceptual foundation that lets you evaluate AI-generated code, choose appropriate abstractions, and architect systems that remain maintainable as they grow. In the AI age, understanding these concepts becomes more important, not less—they are what separate those who merely prompt from those who truly engineer.

Figure 1: A man praying in a ruined Catholic church in La Vang, a town south of Quang Tri City, Vietnam on July 6, 1972
这条对你有帮助吗?