6098908eee
- Add Vue components for interactive demos (SSH auth, regex, env vars, ports) - Complete markdown content for SSH, regex, environment variables, and ports - Remove placeholder "待实现" sections and replace with detailed guides - Add visual explanations for key concepts like ports and localhost - Include practical examples and troubleshooting tips - Add component for showing evolution from transistors to CPU - Improve documentation structure and navigation - Add security best practices for API keys and environment variables
136 lines
4.5 KiB
Markdown
136 lines
4.5 KiB
Markdown
# 编程语言图谱
|
||
|
||
> 💡 **学习指南**:为什么有这么多编程语言?该学哪个?本章带你从"语言演化"到"编程范式"到"如何选择",建立对编程语言全景的理解。**结论先行:没有最好的语言,只有最适合场景的语言。**
|
||
|
||
---
|
||
|
||
## 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) - 学习解决问题的方法
|