Files
test-repo/docs/zh-cn/appendix/1-computer-fundamentals/programming-languages.md
T
sanbuphy 3af119a598 feat(appendix): 添加多个交互式演示组件,完善 AI/Infra 等章节内容
- 新增 Vibe Coding 全栈相关演示组件 (DeveloperSkillShift, FrontendTriad, BackendCore 等)
- 新增 RAG 相关组件 (RAGPipeline, ChunkingStrategy, Retrieval 等)
- 新增 Embedding & Vector 相关组件 (EmbeddingConcept, VectorSimilarity 等)
- 新增 AI Native App 设计组件 (AINativeArch, PromptDesign 等)
- 新增 Infrastructure as Code 组件 (IaCConcept, TerraformWorkflow 等)
- 新增 DNS & HTTPS 演示组件 (DnsResolution, HttpsHandshake 等)
- 新增 Model Finetuning 组件 (FinetuningPipeline 等)
- 更新多个章节的 markdown 内容,集成交互式演示
2026-02-24 18:22:58 +08:00

153 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 编程语言图谱
::: tip 前言
为什么有这么多编程语言?该学哪个?本章带你从"语言演化"到"编程范式"到"如何选择",建立对编程语言全景的理解。**结论先行:没有最好的语言,只有最适合场景的语言。**
:::
**这篇文章会带你学什么?**
学完这章后,你将获得:
- **理性选型能力**:面对"学什么语言"时,能根据项目需求做出判断,而不是盲目跟风
- **范式理解深度**:理解"面向对象"、"函数式编程"是不同的思维方式,而不仅仅是语法差异
- **历史演进视角**:看到 70 多年语言演化——从手写 0 和 1 到自然语言生成代码
- **后续学习基础**:为理解新语言设计理念、技术选型决策打下基础
| 章节 | 内容 | 核心概念 |
|-----|------|---------|
| **第 1 章** | 语言演化 | 从机器语言到高级语言 |
| **第 2 章** | 编程范式 | 命令式、面向对象、函数式 |
| **第 3 章** | 语言选择 | 场景驱动的选型方法 |
---
## 0. 人类如何和计算机"说话"?
想象你要和一个只懂二进制的机器人沟通:
- **直接打 0 和 1** — 最原始,效率极低,一个 0 写成 1 就全错了(机器语言)
- **用助记符代替** — `MOV AX, 1``10110000 00000001` 好认多了(汇编语言)
- **用接近自然语言** — `int sum = 1 + 2;` 人类可以直接读懂(高级语言)
**编程语言就是人类与计算机沟通的桥梁**,70 多年来一直在朝着"更接近人类思维"的方向进化。
---
## 1. 编程语言的演化
👇 动手点点看:探索编程语言从 1940 年代到今天的演化历程
<LanguageMapDemo />
::: tip 💡 一句话总结
编程语言的演化趋势:**越来越接近人类思维,越来越安全,越来越高效**。从手写 0/1,到汇编助记符,到 C 的结构化编程,到 Java 的面向对象,再到 Rust 的内存安全——每一代语言都在解决上一代的痛点。
:::
---
## 2. 编程范式:思考问题的方式
编程范式不是语言特性,而是**思维方式**——就像写作有诗歌、小说、论文不同的文体。
### 2.1 命令式 — "一步步告诉计算机怎么做"
```c
int sum = 0;
for (int i = 0; i < n; i++) {
sum += arr[i];
}
```
### 2.2 面向对象 — "把数据和行为封装成对象"
```python
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(f"{self.name} says woof!")
```
### 2.3 函数式 — "用纯函数组合,不修改状态"
```haskell
sum = foldl (+) 0
-- 相同输入永远产生相同输出
```
### 2.4 声明式 — "只说做什么,不管怎么做"
```sql
SELECT name FROM users WHERE active = true
-- 数据库自己决定怎么查最快
```
::: tip 💡 实际开发中
现代语言大多是**多范式**的。Python 既支持面向对象,也支持函数式;JavaScript 也一样。不用纠结"哪个范式最好",而是根据问题选择最合适的方式。
:::
---
## 3. 类型系统:数据的交通规则
| | 强类型 | 弱类型 |
|---|---|---|
| **静态** | Java, Rust, TypeScript — 最安全 | C, C++ — 高效但要小心 |
| **动态** | Python, Ruby — 灵活且安全 | JavaScript, PHP — 灵活但易出错 |
**关键问题**`"1" + 1` 等于什么?
- **JavaScript(弱类型)**`"11"` — 悄悄帮你转了
- **Python(强类型)**`TypeError` — 让你自己想清楚
想深入了解类型系统?→ [类型系统与编译原理入门](./type-systems-compilers)
---
## 4. 编译型 vs 解释型
| | 编译型 | 解释型 | JIT |
|---|---|---|---|
| **过程** | 先全部翻译,再执行 | 边读边执行 | 先解释,热点再编译 |
| **速度** | 最快 | 较慢 | 中等 |
| **调试** | 需编译等待 | 即时反馈 | 即时 + 优化 |
| **代表** | C, Rust, Go | Python, Ruby | Java, JavaScript |
---
## 5. 如何选择编程语言?
### 按场景选择
| 场景 | 推荐语言 | 理由 |
|---|---|---|
| **Web 前端** | JavaScript, TypeScript | 浏览器只认 JS |
| **Web 后端** | Go, Java, Python, Node.js | 生态成熟 |
| **移动开发** | Swift (iOS), Kotlin (Android) | 官方推荐 |
| **AI / 数据** | Python | PyTorch、Pandas 全在 Python |
| **系统编程** | C, Rust | 直接操控硬件 |
| **云原生** | Go, Rust | Docker/K8s 都是 Go 写的 |
### 学习路线建议
1. **Python** — 语法最简单,AI 时代入口
2. **JavaScript** — Web 开发必备,前后端通吃
3. **TypeScript** — 给 JS 加上类型系统,体验静态类型
4. **Go 或 Rust** — 理解编译型语言和底层概念
---
## 6. 总结
::: tip 📚 核心要点
1. **语言演化**:从机器语言到高级语言,越来越接近人类思维
2. **编程范式**:命令式、面向对象、函数式、声明式,各有适用场景
3. **类型系统**:静态/动态、强/弱,影响安全性和灵活性
4. **运行方式**:编译型快,解释型灵活,JIT 兼顾
5. **没有银弹**:根据场景选语言,而不是追求"最好的语言"
:::
**下一步学习**
- [类型系统与编译原理入门](./type-systems-compilers) - 深入理解类型系统和编译过程
- [数据结构](./data-structures) - 理解数据的组织方式
- [算法思维入门](./algorithm-thinking) - 学习解决问题的方法