跳转至

编程语言

什么是编程语言

编程语言是人和计算机之间的桥梁。你用编程语言写的代码,最终会被翻译成 CPU 能执行的机器指令。不同的编程语言有不同的设计哲学、语法和适用场景。

学编程语言不只是学语法。每种语言背后都有一套关于"程序应该怎么写"的理念。C 语言让你直接操作内存,强调效率和控制;Python 帮你管理内存,强调简洁和可读性;Haskell 用纯函数和不可变数据,强调正确性和组合性。理解这些理念,比记住语法重要得多。

为什么要学编程语言

不同任务用不同语言。 没有万能的编程语言。写操作系统用 C/Rust,做数据科学用 Python/R,做前端用 JavaScript/TypeScript,做 Android 用 Kotlin,做 iOS 用 Swift。掌握多种语言,你就能为每个任务选择最合适的工具。

理解编程范式。 编程语言大致可以分为几种范式:命令式(C、Java)、函数式(Haskell、Erlang)、逻辑式(Prolog)、面向对象(Java、C++)。学习不同范式的语言,能拓宽你的思维方式,让你从不同角度看待编程问题。

学新语言会越来越快。 你掌握的语言越多,学新语言就越容易。因为大多数语言共享基本概念(变量、函数、循环、条件),差异主要在语法和特性上。当你理解了多种范式后,学一门新语言可能只需要几天。

深入理解计算机科学。 编程语言的设计涉及类型系统、内存管理、并发模型、编译原理等核心 CS 主题。学语言的过程,也是在学这些底层知识。

核心知识模块

编程范式

  • 命令式/过程式:C、Go — 通过一系列语句改变程序状态
  • 面向对象:Java、C++、Python — 用对象和类组织代码
  • 函数式:Haskell、Erlang、Scala — 用纯函数和不可变数据编程
  • 多范式:Python、JavaScript、Rust — 支持多种编程风格

类型系统

  • 静态类型 vs 动态类型:编译时检查 vs 运行时检查
  • 强类型 vs 弱类型:类型转换的严格程度
  • 类型推断:编译器自动推导类型(如 Rust、Haskell)
  • 泛型/参数化类型:写出类型安全的通用代码

内存管理

  • 手动管理:C/C++ — 你自己分配和释放内存
  • 垃圾回收(GC):Java、Python、Go — 运行时自动回收不再使用的内存
  • 所有权系统:Rust — 编译时保证内存安全,无需 GC

并发模型

  • 线程与锁:Java、C++ — 传统并发模型
  • Actor 模型:Erlang — 通过消息传递实现并发
  • 协程:Go(goroutine)、Python(asyncio)— 轻量级并发
  • 异步/await:JavaScript、Python、Rust — 基于事件循环的异步编程

怎么学

先精通一门语言,再学其他。 不要一开始就学很多语言。先把一门语言学到能用它解决实际问题的程度,再去学第二门。第一门语言推荐 Python — 语法简洁,生态丰富,适合入门。

用项目驱动学习。 不要只看语法书。给自己设一个小目标 — 写一个爬虫、做一个命令行工具、搭一个网站 — 然后在实践中学习语言的特性和最佳实践。

读优秀源码。 学一门语言最好的方式之一是读用这门语言写的优秀代码。Python 标准库、Go 的标准库、Rust 的 crates — 都是很好的学习材料。

关注语言设计思想。 不要只学"怎么用",要学"为什么这样设计"。为什么 Rust 要有所有权系统?为什么 Go 没有继承?为什么函数式语言强调不可变?理解设计动机,你才能真正掌握一门语言。

做语言对比。 用同一道题(比如实现一个简单的 HTTP 服务器)分别用不同语言实现,对比它们的写法、性能和开发体验。这种对比能加深你对语言特性的理解。

推荐资源

语言入门

编程范式

  • UW Programming Languages — UW 的课程,用 SML、Racket、Ruby 讲解三种范式
  • 《编程语言概念》(Concepts of Programming Languages,Sebesta)— 系统介绍各种编程范式
  • Haskell 趣学指南 — 学习函数式编程的经典入门书

多语言学习

  • Exercism — 支持 60+ 种语言的练习平台,有导师代码审查
  • Rosetta Code — 同一任务用不同语言实现的对比