Files
sanbuphy df51f84ab5 docs: 重构 README 附录展示 & 新增多个附录交互组件
README 更新:
- 移除顶部 header.png 横幅图片
- 新增「附录知识库」板块,以 3×3 网格展示 9 大知识领域精选内容
- 附录链接指向部署版网站 (datawhalechina.github.io)
- 阶段表格新增「附录」行,突出 80+ 交互式专题
- 章节标题「新手入门 & PM」简化为「零基础入门」
- News 新增 2026-02-25 附录知识库更新条目

新增交互组件:
- 异步任务队列 (async-task-queues) 演示组件
- 文件存储 (file-storage) 演示组件
- 项目架构 (project-architecture) 演示组件
- 限流与背压 (rate-limiting) 演示组件
- 搜索引擎 (search-engines) 演示组件
- 计算机基础: AppLaunch/BiosUefi/OSBoot 等启动流程演示组件

新增附录文档:
- 前端项目架构 (frontend-project-architecture.md)
- 后端项目架构 (backend-project-architecture.md)

内容优化:
- 算法思维、数据结构、编程语言、调试艺术等多篇附录内容更新
- HTML/CSS 布局、请求旅程等前后端文档完善
- 附录索引页 (index.md) 同步更新
2026-02-25 12:22:49 +08:00

154 lines
5.3 KiB
Markdown
Raw Permalink 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. **没有银弹**:根据场景选语言,而不是追求"最好的语言"
:::
**下一步学习**
- [编译原理入门](./compilers) - 深入理解编译过程和代码优化
- [类型系统入门](./type-systems) - 深入理解类型系统和类型安全
- [数据结构](./data-structures) - 理解数据的组织方式
- [算法思维入门](./algorithm-thinking) - 学习解决问题的方法