编程语言方法论
针对 Top 20 编程语言的系统学习方法论:历史背景、设计哲学、分阶段学习路径、应用领域、生态工具链与避坑指南。
Python
1. 语言简介与历史
Python 由 Guido van Rossum 于 1991 年发布,以"可读性"为第一设计目标。名字来自 Monty Python 喜剧团,而非蟒蛇。Python 3 于 2008 年发布,彻底解决了 Python 2 的历史包袱,现已完全统一生态。
- 当前主流版本:Python 3.11 / 3.12
- 设计者:Guido van Rossum("仁慈独裁者" BDFL,已退休)
- 许可证:PSF License(开源)
2. 核心设计哲学
import this # 打印 The Zen of Python
关键原则:
- 可读性即美德:代码被阅读的次数远多于被编写的次数
- 一种明显的方式:做一件事只有一种最佳方式
- 显式优于隐式:不要依赖魔法行为
- 简单优于复杂:能用简单解法就不用复杂的
3. 快速上手路径
阶段一:基础语法(1-2 周)
- 数据类型:int/float/str/bool/None
- 容器:list / dict / set / tuple
- 控制流:if/for/while/break/continue
- 函数:def、默认参数、args、*kwargs
- 文件 I/O:open/read/write/with
- 异常处理:try/except/finally
练习项目:写一个命令行 Todo 管理器(文件持久化)
阶段二:进阶特性(2-4 周)
- 列表推导式 / 字典推导式 / 生成器表达式
- 装饰器(@decorator)
- 上下文管理器(with/\_\_enter\_\_/\_\_exit\_\_)
- 迭代器与生成器(yield)
- 类与面向对象:继承、多态、魔术方法(\_\_init\_\_、\_\_repr\_\_、\_\_len\_\_ 等)
- 模块与包管理(import、
__init__.py)
练习项目:实现一个带缓存的 HTTP 爬虫
阶段三:工程化(1-2 个月)
- 虚拟环境:venv / conda / uv
- 依赖管理:pip / pyproject.toml / poetry
- 类型注解:typing 模块、mypy 静态检查
- 测试:pytest、unittest
- 异步编程:asyncio、async/await、aiohttp
- 并发:threading、multiprocessing、concurrent.futures
练习项目:构建一个异步 REST API(FastAPI + SQLAlchemy)
阶段四:领域深入(按方向选择)
- AI/ML:NumPy → Pandas → Scikit-learn → PyTorch/TensorFlow
- Web 后端:Django / FastAPI / Flask
- 数据工程:Airflow / dbt / Spark(PySpark)
- 自动化/脚本:Selenium / Playwright / subprocess
- 系统工具:Click / Rich / Typer
4. 主要应用领域
| 领域 | 代表框架/库 |
|---|---|
| AI / 机器学习 | PyTorch、TensorFlow、scikit-learn、Hugging Face |
| 数据分析 | Pandas、NumPy、Matplotlib、Polars |
| Web 后端 | Django、FastAPI、Flask |
| 自动化测试 | pytest、Selenium、Playwright |
| 数据工程 | Apache Airflow、dbt、PySpark |
| 脚本/DevOps | Ansible、Fabric、Click |
| 科学计算 | SciPy、SymPy、Jupyter |
5. 知名开源项目
- CPython — Python 官方解释器
- Django — 全栈 Web 框架,Instagram 使用
- FastAPI — 现代高性能 API 框架
- PyTorch — Meta 出品,AI 研究首选
- Pandas — 数据分析标准库
- Requests — HTTP 客户端,最被 star 的 Python 库之一
- Scrapy — 专业爬虫框架
- Airflow — 工作流调度平台
- Black — 代码格式化工具
- Ruff — 极速 Python linter(Rust 编写)
6. 生态与工具链
# 环境管理
uv venv / python -m venv .venv
# 包管理
pip install xxx
uv add xxx # 更快的现代替代
# 代码质量
ruff check . # linting
black . # 格式化
mypy . # 类型检查
# 测试
pytest tests/
# 打包
pyproject.toml # 现代标准
hatch / poetry # 构建工具
IDE 推荐:
- VSCode + Pylance + Ruff 插件
- PyCharm(专业 Python IDE)
- Jupyter Lab(数据分析场景)
7. 学习资源推荐
入门
- 📘 Python 官方教程 — 最权威
- 📘 Automate the Boring Stuff with Python(免费在线)— 实战向
- 🎥 CS50P(哈佛 Python 课,免费)
进阶
- 📘 Fluent Python(第2版)— 深入理解 Python 设计
- 📘 Python Cookbook(O'Reilly)— 实用技巧集合
- 📘 Architecture Patterns with Python — 工程架构
领域专项
- AI:fast.ai 课程(实战优先)
- 数据:Kaggle Learn
- Web:Django 官方文档 / FastAPI 文档
8. 避坑指南
- 可变默认参数陷阱
```python # 错误! def add(item, lst=[]): lst.append(item) return lst
# 正确 def add(item, lst=None): if lst is None: lst = [] lst.append(item) return lst ```
- GIL 限制:Python 的全局解释器锁使多线程无法真正并行 CPU 密集型任务,应使用 multiprocessing 或 asyncio
- 晚绑定闭包:
``python # 结果全是 4,不是 0,1,2,3,4 funcs = [lambda: i for i in range(5)] # 修复:lambda i=i: i ``
==vsis:is比较对象身份,==比较值,小整数缓存会让is看起来"正确"但实际不可靠
- 不要用
import *:污染命名空间,难以追踪来源
- 先学类型注解:Python 3.10+ 的类型系统非常成熟,从一开始就加注解,IDE 体验提升 10 倍
JavaScript
1. 语言简介与历史
JavaScript 由 Brendan Eich 在 1995 年仅用 10 天设计完成,最初叫 Mocha,后改名 LiveScript,最终借 Java 热度改名 JavaScript(与 Java 无关)。ECMAScript 是其标准规范,ES6(2015)是现代 JS 的分水岭。
- 当前标准:ES2024(ES15)
- 运行时:浏览器 V8/SpiderMonkey + Node.js + Deno + Bun
- 许可证:各引擎独立授权,语言规范 ECMA 开放
2. 核心设计哲学
- 无处不在:唯一能在浏览器原生运行的语言
- 动态类型:灵活但需要自律(TypeScript 弥补了这一点)
- 原型继承:不同于传统类继承,ES6 class 是语法糖
- 事件驱动 + 单线程:通过事件循环(Event Loop)处理异步
- 函数是一等公民:可赋值、可传递、可返回
3. 快速上手路径
阶段一:基础语法(1-2 周)
- 变量:
var(避免)/let/const - 数据类型:string / number / boolean / null / undefined / symbol / bigint
- 对象与数组的字面量语法
- 函数:声明式 / 表达式 / 箭头函数
- 解构赋值、展开运算符(
...) - 模板字符串(
${}) - 可选链(
?.)和空值合并(??)
练习:用原生 JS 实现一个 Todo List(操作 DOM)
阶段二:异步与现代特性(2-3 周)
- 事件循环机制(Call Stack / Web APIs / Callback Queue / Microtask Queue)
- Promise:then/catch/finally
- async/await
- 错误处理:try/catch + Promise.allSettled
- ES Modules:import/export
- 高阶函数:map / filter / reduce / forEach
练习:封装一个支持重试的 fetch 工具函数
阶段三:工程化(1-2 个月)
- 包管理:npm / pnpm / yarn
- 构建工具:Vite / esbuild / Rollup
- 模块打包:理解 CommonJS vs ESM
- 测试:Vitest / Jest
- 代码质量:ESLint / Prettier
- 调试:Chrome DevTools、source maps
练习:从零搭建一个 Vite + 原生 JS 项目
阶段四:领域深入
- 前端:React / Vue / Svelte → 组件化、状态管理
- 后端:Node.js → Express / Fastify / Hono
- 全栈:Next.js / Nuxt / SvelteKit
- 桌面:Electron / Tauri
- 移动:React Native / Expo
4. 主要应用领域
| 领域 | 代表框架/库 |
|---|---|
| 前端 UI | React、Vue、Svelte、Angular |
| 后端服务 | Node.js + Express/Fastify/Hono |
| 全栈框架 | Next.js、Nuxt、Remix |
| 桌面应用 | Electron(VS Code、Slack) |
| 移动应用 | React Native、Expo |
| 边缘计算 | Cloudflare Workers、Deno Deploy |
| 脚本自动化 | Puppeteer、Playwright |
5. 知名开源项目
- Node.js — 服务端 JS 运行时,改变了后端格局
- React — Meta 出品,全球最流行前端库
- Vue — 尤雨溪创建,国内生态最强
- Next.js — React 全栈框架,Vercel 出品
- VS Code — Electron + TypeScript,最流行 IDE
- Webpack / Vite — 打包工具,Vite 已成新标准
- Express — 最简洁的 Node.js Web 框架
- Lodash — 工具函数库(现代 JS 已内置很多功能)
- Prettier — 代码格式化,统一风格
- Bun — 极速 JS 运行时(Zig 编写)
6. 生态与工具链
# 包管理(推荐 pnpm)
npm install / pnpm add / yarn add
# 项目初始化
npm create vite@latest my-app
# 代码质量
eslint --fix .
prettier --write .
# 测试
vitest run
jest
# 类型检查(需 TypeScript)
tsc --noEmit
运行时选择:
- Node.js — 生产主流,生态最完整
- Bun — 开发体验极佳,速度快 3-10 倍
- Deno — 安全沙箱,内置 TypeScript 支持
7. 学习资源推荐
入门
- 📘 MDN Web Docs — 最权威参考
- 📘 javascript.info — 最好的 JS 教程网站(有中文版)
- 🎥 The Odin Project(免费全栈课程)
进阶
- 📘 You Don't Know JS(YDKJS,免费 GitHub)— 深入理解 JS 本质
- 📘 JavaScript: The Good Parts — 经典,帮你避开坑
- 📘 Eloquent JavaScript — 免费在线,系统全面
异步专项
8. 避坑指南
this指向问题:箭头函数不绑定this,普通函数的this取决于调用方式,优先使用箭头函数
- 类型强制转换:
``javascript 0 == false // true(用 === 代替 ==) [] == false // true null == undefined // true,但 null === undefined 是 false ``
var的变量提升:永远用let/const,忘记var
- 异步陷阱:
``javascript // 错误:循环中的异步不等待 for (let i of items) { await fetch(...) // 正确,但要注意并发 } // 并行执行:Promise.all([...items.map(async i => ...)]) ``
undefinedvsnull:JS 中两者都表示"空",但语义不同。函数未返回值是undefined,显式"无值"用null
- 直接学 TypeScript:如果是新项目,从一开始就用 TypeScript,避免后期重构痛苦
Java
1. 语言简介与历史
Java 由 James Gosling 在 Sun Microsystems 开发,1995 年正式发布。口号 "Write Once, Run Anywhere"(WORA)通过 JVM 实现跨平台。2010 年 Oracle 收购 Sun,Java 成为 Oracle 旗下产品。现在每半年发布一个版本,LTS 版本为 Java 8、11、17、21。
- 当前 LTS:Java 21(2023)
- 运行平台:JVM(Java Virtual Machine)
- 许可证:OpenJDK(GPL),Oracle JDK(商业)
2. 核心设计哲学
- 强类型、静态类型:编译期发现大量错误
- 面向对象:一切皆对象(除基本类型)
- 平台无关:编译为字节码,JVM 负责执行
- 向后兼容:Java 8 的代码今天仍能运行
- 企业级稳定:银行、金融、大型系统的首选语言
3. 快速上手路径
阶段一:基础语法(2-3 周)
- 数据类型:byte/short/int/long/float/double/char/boolean
- 包装类:Integer/Double/Boolean 等
- 字符串:String(不可变)、StringBuilder(可变)
- 数组与 ArrayList
- 控制流:if/for/while/switch(现代 switch 表达式)
- 方法:重载、可变参数
- 基础 OOP:类、对象、构造函数、访问修饰符
练习:实现一个银行账户管理系统(控制台)
阶段二:面向对象深入(2-3 周)
- 继承(extends)与多态
- 接口(interface)与抽象类(abstract class)
- 泛型(Generics)
- 集合框架:List / Map / Set / Queue
- 异常处理:checked vs unchecked
- Java 8+ 特性:Lambda、Stream API、Optional、方法引用
练习:用 Stream API 重写数据处理逻辑
阶段三:进阶特性(1-2 个月)
- 多线程:Thread、Runnable、ExecutorService
- 并发工具:synchronized、Lock、volatile、ConcurrentHashMap
- I/O:NIO、Files、Path
- 反射(Reflection)
- 注解(Annotation)与注解处理器
- Java 17+ 新特性:record、sealed class、pattern matching
练习:实现一个简单的线程池
阶段四:框架与生态
- Spring Boot:企业级开发标准
- Maven / Gradle:构建工具
- JPA / Hibernate:ORM 框架
- JUnit / Mockito:测试框架
- Docker:容器化部署
4. 主要应用领域
| 领域 | 代表框架/工具 |
|---|---|
| 企业后端 | Spring Boot、Quarkus、Micronaut |
| Android 开发 | Android SDK(逐渐被 Kotlin 替代) |
| 大数据 | Hadoop、Spark、Flink、Kafka |
| 微服务 | Spring Cloud、gRPC |
| 金融系统 | 核心银行、交易系统 |
| 搜索引擎 | Elasticsearch、Lucene、Solr |
5. 知名开源项目
- Spring Framework — 最流行的 Java 框架体系
- Apache Kafka — 分布式消息队列
- Elasticsearch — 分布式搜索引擎
- Apache Flink — 流批一体计算引擎
- Gradle — 现代构建工具
- Netty — 高性能网络框架
- MyBatis — 轻量级 ORM(国内广泛使用)
- JUnit — 单元测试框架标准
6. 生态与工具链
# 构建工具
mvn clean install # Maven
gradle build # Gradle
# 版本管理
sdk install java 21-tem # SDKMAN
# 代码质量
checkstyle / spotbugs / sonarqube
# 测试
mvn test
gradle test
IDE 推荐:
- IntelliJ IDEA — 行业标准,强烈推荐(社区版免费)
- Eclipse — 老牌,企业仍在用
- VS Code + Extension Pack for Java — 轻量选项
7. 学习资源推荐
入门
- 📘 Head First Java — 最适合初学者的入门书
- 📘 Baeldung — Java 最好的博客网站
- 🎥 韩顺平 Java 零基础(B站)— 国内最系统的入门课
进阶
- 📘 Effective Java(Joshua Bloch)— Java 圣经,必读
- 📘 Java Concurrency in Practice — 并发编程权威
- 📘 Clean Code — 代码质量经典
框架
- 📘 Spring Boot 官方文档
- 📘 《Spring 实战》(第6版)
8. 避坑指南
==vs.equals():对象比较用.equals(),==比较引用地址
``java String a = new String("hello"); String b = new String("hello"); a == b; // false a.equals(b); // true ``
- 空指针异常(NPE):Java 最常见错误,用
Optional防御,Java 14+ 有更好的 NPE 提示
- Integer 缓存陷阱:
``java Integer a = 127, b = 127; // a == b 是 true(缓存) Integer c = 128, d = 128; // c == d 是 false ``
- checked exception 滥用:不要把所有异常都声明为 checked,用 RuntimeException 包装
- 字符串拼接性能:循环中不要用
+拼接,用StringBuilder
- 不要忽视 Java 新特性:很多人停留在 Java 8,但 Java 17/21 的 record、sealed class、虚拟线程(Virtual Threads)极大提升开发效率
C
1. 语言简介与历史
C 语言由 Dennis Ritchie 于 1972 年在贝尔实验室开发,最初用于重写 UNIX 操作系统。K&R C(1978 年)是第一本 C 语言书,奠定了语言基础。ANSI C(C89)、C99、C11、C17、C23 是主要标准版本。
- 当前标准:C23(2024)
- 设计者:Dennis Ritchie
- 地位:操作系统、嵌入式、底层系统的基石语言
2. 核心设计哲学
- 接近硬件:直接操作内存,无垃圾回收
- 信任程序员:不做过多保护,程序员负全责
- 极简设计:语言核心极小,功能通过标准库扩展
- 可移植性:通过编译器适配不同平台
- 性能优先:没有运行时开销,编译直接生成机器码
3. 快速上手路径
阶段一:基础语法(2-3 周)
- 数据类型:char/short/int/long/float/double
- 运算符:算术、关系、逻辑、位运算
- 控制流:if/else、for/while/do-while、switch
- 函数:声明、定义、参数传递(值传递)
- 数组与字符串(char 数组)
- 标准输入输出:printf/scanf
练习:实现各种排序算法(冒泡、快排、归并)
阶段二:指针与内存(3-4 周)
- 指针基础:声明、解引用、地址运算符
- 指针与数组的关系
- 字符串操作(string.h)
- 动态内存:malloc/calloc/realloc/free
- 指针的指针(二级指针)
- 函数指针
- 内存布局:栈、堆、静态区、代码区
练习:实现一个链表(增删查改)
阶段三:高级特性(1-2 个月)
- 结构体(struct)和联合体(union)
- 枚举(enum)
- 预处理器:#define、#include、条件编译
- 文件 I/O:fopen/fread/fwrite/fclose
- 多文件编程与头文件设计
- 位域(bit fields)
- 可变参数(stdarg.h)
练习:实现一个简单的 JSON 解析器
阶段四:系统编程
- POSIX API:进程、线程、信号、管道
- Socket 编程:TCP/UDP 网络通信
- 系统调用与内核交互
- 内存映射(mmap)
- 原子操作与无锁编程
4. 主要应用领域
| 领域 | 示例 |
|---|---|
| 操作系统 | Linux 内核、Windows 内核、macOS XNU |
| 嵌入式系统 | 单片机、RTOS、驱动程序 |
| 编译器/解释器 | CPython、Ruby MRI、PHP 解释器 |
| 数据库 | SQLite、PostgreSQL(核心部分) |
| 网络工具 | Nginx、Redis、curl |
| 游戏引擎 | 底层图形、物理引擎 |
| 科学计算 | 高性能数值库(BLAS、LAPACK) |
5. 知名开源项目
- Linux Kernel — 最重要的 C 项目
- SQLite — 嵌入式数据库,代码质量极高
- Redis — 高性能内存数据库
- Nginx — 高并发 Web 服务器
- cURL — 网络传输工具库
- Git — 版本控制系统
- CPython — Python 解释器
- FFmpeg — 多媒体处理框架
6. 生态与工具链
# 编译
gcc -Wall -Wextra -O2 -o program main.c
clang -Wall -o program main.c
# 构建系统
make # 传统 Makefile
cmake -B build && cmake --build build # 现代 CMake
# 调试
gdb ./program # GNU 调试器
lldb ./program # LLVM 调试器
# 内存检测
valgrind --leak-check=full ./program
AddressSanitizer: gcc -fsanitize=address
# 静态分析
clang-tidy main.c
cppcheck main.c
IDE 推荐:
- CLion(JetBrains,最强 C/C++ IDE)
- VS Code + clangd
- Vim/Neovim + LSP(高手选择)
7. 学习资源推荐
入门
- 📘 The C Programming Language(K&R,Kernighan & Ritchie)— C 语言圣经,必读
- 📘 C Primer Plus(Stephen Prata)— 最适合初学者
- 🎥 CS50(哈佛,用 C 教编程基础)
进阶
- 📘 Expert C Programming: Deep C Secrets(Peter van der Linden)
- 📘 Understanding and Using C Pointers(Richard Reese)
- 📘 Modern C(Jens Gustedt,免费在线)
系统编程
- 📘 The Linux Programming Interface(Michael Kerrisk)— POSIX 编程权威
- 📘 Computer Systems: A Programmer's Perspective(CSAPP)— 必读经典
8. 避坑指南
- 内存泄漏:每个
malloc都要有对应的free,用 Valgrind 检测
- 缓冲区溢出:
```c // 危险! char buf[10]; gets(buf); // 已废弃,不限制长度
// 安全 fgets(buf, sizeof(buf), stdin); ```
- 未初始化变量:C 不自动初始化局部变量,读取未初始化变量是未定义行为
- 整数溢出:有符号整数溢出是未定义行为,无符号整数溢出是环绕(wrap around)
- 悬空指针:
``c int p = malloc(4); free(p); p = 42; // 未定义行为! p = NULL; // free 后立即置 NULL ``
sizeof的陷阱:
```c int arr[] = {1,2,3}; int len = sizeof(arr) / sizeof(arr[0]); // 正确
void func(int *arr) { // sizeof(arr) 是指针大小,不是数组大小! } ```
- 先学 C,再学 C++:理解 C 的内存模型是成为真正系统程序员的基础
C++
1. 语言简介与历史
C++ 由 Bjarne Stroustrup 于 1979 年开始开发(最初叫 "C with Classes"),1985 年正式发布。C++ 在 C 的基础上增加了面向对象、泛型编程、RAII 等特性。C++11 是现代 C++ 的分水岭,C++14/17/20/23 持续演进。
- 当前标准:C++23
- 设计者:Bjarne Stroustrup
- 地位:高性能系统编程、游戏引擎、金融交易的首选
2. 核心设计哲学
- 零开销抽象:你不用的,你不付代价;你用的,手写也不会更快
- 多范式:支持过程式、面向对象、泛型、函数式
- RAII(Resource Acquisition Is Initialization):资源生命周期与对象绑定
- 向后兼容 C:可以直接调用 C 代码
- 信任程序员:给予最大控制权,代价是复杂性
3. 快速上手路径
阶段一:C++ 基础(2-3 周,假设已知 C)
- 引用(reference)vs 指针
- 类与对象:构造/析构、访问控制
- 运算符重载
- 标准 I/O:
iostream(cin/cout) std::string(vs C 字符串)- 命名空间(namespace)
练习:用类封装一个矩阵运算库
阶段二:现代 C++ 核心(3-4 周)
- 智能指针:
unique_ptr/shared_ptr/weak_ptr - 移动语义:右值引用(&&)、
std::move - 模板(Templates):函数模板、类模板
- STL 容器:vector / map / unordered_map / set / deque
- STL 算法:sort / find / transform / accumulate
- Lambda 表达式
auto与类型推导
练习:实现一个泛型二叉搜索树
阶段三:高级特性(1-2 个月)
- 模板元编程(TMP)基础
- 可变参数模板(Variadic Templates)
- SFINAE 与
if constexpr - 并发:
std::thread/std::mutex/std::atomic - 协程(C++20)
- 范围(Ranges,C++20)
- 概念(Concepts,C++20)
练习:实现一个线程安全的任务队列
阶段四:领域深入
- 游戏开发:Unreal Engine、OpenGL/Vulkan
- 系统编程:内核模块、驱动
- 高频交易:低延迟优化、无锁数据结构
- 编译器开发:LLVM 生态
4. 主要应用领域
| 领域 | 示例 |
|---|---|
| 游戏引擎 | Unreal Engine、Unity(底层)、id Tech |
| 系统软件 | 操作系统组件、驱动程序 |
| 高频交易 | 量化交易系统、低延迟中间件 |
| 图形/渲染 | OpenGL、Vulkan、DirectX 应用 |
| 浏览器引擎 | Chromium(Blink)、Firefox(Gecko) |
| 数据库 | MySQL、MongoDB、ClickHouse |
| 编译器工具链 | LLVM、Clang |
| AI 推理 | TensorRT、ONNX Runtime |
5. 知名开源项目
- LLVM/Clang — 编译器基础设施
- Chromium — Google Chrome 浏览器
- Unreal Engine — 3A 游戏引擎
- TensorFlow — AI 框架(核心 C++)
- ClickHouse — 极速列式数据库
- OpenCV — 计算机视觉库
- Boost — C++ 准标准库集合
- fmt — 现代格式化库(C++20 format 的原型)
6. 生态与工具链
# 编译
g++ -std=c++20 -Wall -O2 -o program main.cpp
clang++ -std=c++20 -o program main.cpp
# 构建系统
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
# 包管理
vcpkg install boost fmt nlohmann-json
conan install .
# 调试与分析
gdb / lldb
perf stat ./program # 性能分析
valgrind / AddressSanitizer
clang-tidy / cppcheck # 静态分析
IDE 推荐:
- CLion(最强 C++ IDE)
- VS Code + clangd + CMake Tools
- Visual Studio(Windows 首选)
7. 学习资源推荐
入门
- 📘 A Tour of C++(Bjarne Stroustrup)— 作者亲写的概览,薄而精
- 📘 C++ Primer(第5版,Lippman)— 系统全面的入门书
- 🎥 CppCon YouTube 频道 — 每年大会视频,免费
进阶
- 📘 Effective Modern C++(Scott Meyers)— C++11/14 最佳实践
- 📘 C++ Templates: The Complete Guide(第2版)— 模板权威
- 📘 The C++ Programming Language(Stroustrup)— 完整参考
在线资源
- cppreference.com — 最权威的 C++ 参考
- Compiler Explorer (godbolt.org) — 实时查看汇编输出
- Quick Bench — 在线性能测试
8. 避坑指南
- 用智能指针替代裸指针:
``cpp // 现代 C++ 做法 auto ptr = std::make_unique<MyClass>(args); // 不要用 new/delete ``
- Rule of Five/Zero:如果你定义了析构函数,通常需要同时定义拷贝构造、拷贝赋值、移动构造、移动赋值(或全部 =delete/=default)
- 未定义行为(UB)是真实的危险:数组越界、有符号整数溢出、空指针解引用都是 UB,编译器可能做出意想不到的优化
- 头文件包含顺序:遵循 Google 风格:自己的头文件 → 系统头文件 → 第三方头文件,避免隐式依赖
- 不要过早优化:先写清晰正确的代码,再用 profiler 找热点
- 避免过度使用继承:优先组合(composition)而非继承,多用模板和概念
- 学习曲线陡峭是正常的:C++ 是世界上最复杂的主流语言,给自己足够的时间
C#
1. 语言简介与历史
C# 由 Anders Hejlsberg(也是 Delphi 和 TypeScript 的设计者)主导,2000 年随 .NET 框架一起发布。最初被视为 Java 的竞争对手,随着 .NET Core(2016)和 .NET 5+(2020)的开源跨平台化,C# 已成为真正的全平台语言。
- 当前版本:C# 13(.NET 9)
- 设计者:Anders Hejlsberg(Microsoft)
- 许可证:.NET 开源(MIT),语言规范 ECMA 开放
2. 核心设计哲学
- 优雅的强类型:比 Java 更现代的语法,持续演进
- 多范式:OOP + 函数式 + 异步 + 泛型
- 生产力优先:LINQ、async/await、模式匹配等特性极大提升开发效率
- 统一平台:从 Web 到桌面到移动到游戏,一套语言覆盖
- 开放生态:.NET 完全开源,跨平台运行
3. 快速上手路径
阶段一:基础语法(1-2 周)
- 值类型 vs 引用类型
- 属性(Properties):get/set/init
- 命名空间与 using
- 字符串插值(
$"Hello {name}") - null 安全:
?、??、?.、可空引用类型 - 集合:List\
、Dictionary\ 、Array
练习:实现一个学生成绩管理系统(控制台)
阶段二:OOP 与泛型(2-3 周)
- 类、接口、抽象类、继承
- 泛型(Generics)与约束
- 委托(Delegate)与事件(Event)
- Lambda 表达式
- LINQ(Language Integrated Query)— C# 最强特性之一
- 扩展方法(Extension Methods)
练习:用 LINQ 分析一个 CSV 数据集
阶段三:异步与现代特性(2-3 周)
- async/await(C# 的异步模型是业界标杆)
- Task 与 ValueTask
- 记录类型(record)
- 模式匹配(switch expression、is pattern)
- Span\
与 Memory\ (高性能场景) - Source Generators
练习:构建一个异步 HTTP 客户端封装
阶段四:领域深入
- Web 后端:ASP.NET Core(Minimal API / MVC / Blazor)
- 游戏开发:Unity(C# 脚本)
- 桌面应用:WPF / MAUI
- 云原生:Azure Functions、gRPC
4. 主要应用领域
| 领域 | 代表框架/工具 |
|---|---|
| Web 后端 | ASP.NET Core、Minimal API |
| 游戏开发 | Unity(全球最流行游戏引擎) |
| 桌面应用 | WPF、WinForms、.NET MAUI |
| 移动应用 | .NET MAUI(跨平台) |
| 云服务 | Azure Functions、Dapr |
| 微服务 | gRPC、MassTransit |
| 企业系统 | ERP、CRM(SAP B1、Dynamics) |
5. 知名开源项目
- ASP.NET Core — 高性能 Web 框架,TechEmpower 基准测试排名靠前
- Unity — 全球最广泛使用的游戏引擎
- Roslyn — C# 编译器即服务
- Orleans — 微软分布式 Actor 框架
- MassTransit — 消息总线框架
- Dapper — 轻量级 ORM(Stack Overflow 出品)
- AutoMapper — 对象映射库
- Polly — 弹性和瞬态故障处理库
6. 生态与工具链
# 项目创建
dotnet new webapi -n MyApi
dotnet new console -n MyApp
# 包管理
dotnet add package Newtonsoft.Json
dotnet add package Microsoft.EntityFrameworkCore
# 构建与运行
dotnet build
dotnet run
dotnet test
# 发布
dotnet publish -c Release -r linux-x64 --self-contained
IDE 推荐:
- Visual Studio(Windows,功能最全)
- Rider(JetBrains,跨平台,强烈推荐)
- VS Code + C# Dev Kit(轻量跨平台)
7. 学习资源推荐
入门
- 📘 Microsoft Learn C# — 官方免费教程,质量极高
- 📘 C# 10 in a Nutshell(O'Reilly)— 最全面的参考书
- 🎥 Tim Corey YouTube 频道 — 实战向,免费
进阶
- 📘 CLR via C#(Jeffrey Richter)— 深入 .NET 运行时,进阶必读
- 📘 C# in Depth(Jon Skeet)— C# 特性深度解析
- 📘 Concurrency in C# Cookbook(Stephen Cleary)— 异步并发专项
框架
- 📘 ASP.NET Core 官方文档
- 📘 Pro ASP.NET Core(Adam Freeman)
8. 避坑指南
- 值类型 vs 引用类型:struct 是值类型(栈上),class 是引用类型(堆上),混淆会导致意外的复制行为
- 事件内存泄漏:
``csharp // 订阅事件后必须取消订阅,否则对象无法被 GC button.Click += OnClick; // 在 Dispose 中:button.Click -= OnClick; ``
- async void 的危险:
```csharp // 危险!异常无法被捕获 async void DoWork() { ... }
// 正确 async Task DoWork() { ... } ```
- LINQ 延迟执行:LINQ 查询不是立即执行的,
.ToList()才会触发执行,多次枚举会多次查询
- string 不可变:循环中拼接字符串用
StringBuilder,不要用+
- 不要忽视可空引用类型:C# 8+ 的 nullable reference types 是重要特性,开启它可以在编译期发现大量 NPE
TypeScript
1. 语言简介与历史
TypeScript 由 Anders Hejlsberg(C# 设计者)在 Microsoft 开发,2012 年首次发布。它是 JavaScript 的超集,添加了静态类型系统,编译为纯 JavaScript。TypeScript 已成为大型前端项目的事实标准,VS Code、Angular、Deno 等都用 TypeScript 编写。
- 当前版本:TypeScript 5.x
- 设计者:Anders Hejlsberg(Microsoft)
- 许可证:Apache 2.0
2. 核心设计哲学
- JavaScript 的超集:所有合法的 JS 都是合法的 TS
- 渐进式类型:可以从
any开始,逐步收紧类型 - 结构化类型(Duck Typing):类型兼容性基于结构,不基于名称
- 编译时检查:类型错误在编译期发现,运行时无额外开销
- 类型推断:不必处处写类型,编译器足够聪明
3. 快速上手路径
阶段一:类型基础(1 周,假设已知 JS)
- 基础类型注解:
string/number/boolean/null/undefined - 数组:
string[]/Array<string> - 对象类型与接口(interface)
- 类型别名(type alias)
- 联合类型(
|)与交叉类型(&) - 类型断言(
as) unknownvsany(优先用unknown)
练习:为一个已有 JS 项目添加类型注解
阶段二:进阶类型系统(2-3 周)
- 泛型(Generics):
function identity<T>(arg: T): T - 泛型约束(
extends) - 条件类型(Conditional Types):
T extends U ? X : Y - 映射类型(Mapped Types):
{ [K in keyof T]: ... } - 工具类型:
Partial<T>/Required<T>/Pick<T, K>/Omit<T, K>/Record<K, V> - 模板字面量类型
infer关键字
练习:实现 DeepReadonly<T> 工具类型
阶段三:工程实践(2-3 周)
tsconfig.json配置(strict、target、module、paths)- 声明文件(
.d.ts) @types/*包的使用- 模块解析策略
- 类型守卫(Type Guards):
typeof/instanceof/ 自定义守卫 - 枚举(enum)vs 常量对象(
as const) - 装饰器(Decorators,实验性)
练习:配置一个严格模式的 TypeScript 项目
阶段四:领域应用
- React + TypeScript:组件 Props 类型、Hook 类型、事件类型
- Node.js + TypeScript:Express/Fastify 类型化
- Zod:运行时类型验证(与 TypeScript 完美配合)
- tRPC:端到端类型安全的 API
4. 主要应用领域
| 领域 | 代表框架/工具 |
|---|---|
| 前端开发 | React + TS、Angular(原生 TS)、Vue 3 |
| 后端 Node.js | Nest.js、Fastify、Hono |
| 全栈 | Next.js、Remix、tRPC |
| 桌面应用 | Electron + TS |
| 工具链 | VS Code 插件、CLI 工具 |
5. 知名开源项目
- VS Code — 全部用 TypeScript 编写
- Angular — Google 的全栈框架,TypeScript 原生
- Nest.js — 企业级 Node.js 框架
- Prisma — 类型安全的 ORM
- tRPC — 端到端类型安全 API
- Zod — TypeScript 优先的运行时验证
- TypeORM — TypeScript ORM
- Deno — 内置 TypeScript 支持的运行时
6. 生态与工具链
# 安装
npm install -D typescript
npx tsc --init # 生成 tsconfig.json
# 编译
npx tsc
npx tsc --watch # 监听模式
# 直接运行(开发时)
npx ts-node src/index.ts
npx tsx src/index.ts # 更快的替代
# 类型检查(不编译)
npx tsc --noEmit
# 推荐 tsconfig 设置
{
"compilerOptions": {
"strict": true,
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext"
}
}
推荐工具:
- tsx — 快速运行 TS 文件(替代 ts-node)
- Vitest — 原生支持 TypeScript 的测试框架
- ts-reset — 修复 TypeScript 内置类型的一些问题
7. 学习资源推荐
入门
- 📘 TypeScript 官方 Handbook — 最权威
- 📘 TypeScript Deep Dive — 免费在线,非常全面
- 🎥 Matt Pocock 的 Total TypeScript — 最好的 TS 视频课程
进阶
- 📘 Effective TypeScript(Dan Vanderkam)— 62 条最佳实践
- 🎮 Type Challenges — 类型体操练习题,强烈推荐
- 🔧 TypeScript Playground — 在线调试类型
8. 避坑指南
- 不要滥用
any:any关闭了类型检查,等于放弃了 TypeScript 的优势。用unknown代替,强制做类型收窄
interfacevstype:
interface可以被扩展(extends)和合并(declaration merging)type更灵活,可以表达联合类型、映射类型等- 优先用
interface表示对象形状,type表示复杂类型
as断言的危险:
``typescript const x = someValue as string; // 强制转换,可能运行时出错 // 更安全:先做类型守卫 if (typeof someValue === 'string') { ... } ``
- 枚举的坑:数字枚举有反向映射,const enum 会内联,建议用
as const对象代替
- 严格模式很重要:始终开启
"strict": true,它包含了最重要的检查(strictNullChecks、noImplicitAny 等)
- 类型和运行时是分离的:TypeScript 类型在编译后全部消失,不能用来做运行时验证,需要 Zod/io-ts 等库
Go
1. 语言简介与历史
Go(又称 Golang)由 Robert Griesemer、Rob Pike、Ken Thompson 在 Google 设计,2009 年开源,2012 年发布 1.0。设计目标是解决 Google 内部大规模软件工程的痛点:编译速度慢、依赖管理复杂、并发编程难。Go 以简洁、快速、并发为核心特色。
- 当前版本:Go 1.23
- 设计者:Google(Rob Pike、Ken Thompson 等)
- 许可证:BSD
2. 核心设计哲学
- 少即是多:语言特性极少,关键字只有 25 个
- 显式优于隐式:错误必须显式处理,没有异常
- 并发是一等公民:goroutine + channel 内置于语言
- 工程优先:格式化(gofmt)、测试、文档内置于工具链
- 组合优于继承:通过接口(interface)和嵌入(embedding)实现多态
3. 快速上手路径
阶段一:基础语法(1 周)
- 变量:
:=短声明 vsvar - 基础类型:int/float64/string/bool/byte/rune
- 复合类型:array / slice / map / struct
- 函数:多返回值、命名返回值
- 指针(简化版,无指针运算)
- 控制流:if/for(Go 只有 for)/switch/defer
- 包(package)与导入
练习:实现一个命令行文件统计工具(行数/字数/字节数)
阶段二:接口与并发(2-3 周)
- 接口(interface):隐式实现,duck typing
- 错误处理:
error接口、errors.New、fmt.Errorf(%w包装) - Goroutine:
go func() - Channel:有缓冲/无缓冲、方向性 channel
select语句sync包:Mutex、WaitGroup、Once- Context:超时、取消传递
练习:实现一个并发 URL 检测器(限制并发数)
阶段三:工程实践(2-3 周)
- Go Modules:
go.mod/go.sum - 测试:
testing包、表驱动测试、基准测试 - 泛型(Go 1.18+):类型参数、约束
- 反射(reflect 包)
- 嵌入(Embedding)
- 标准库精通:
net/http、encoding/json、os、io、bufio - 性能分析:pprof
练习:实现一个 HTTP 中间件框架
阶段四:领域深入
- 云原生/微服务:gRPC、Kubernetes、Docker
- Web 后端:Gin / Echo / Fiber / Chi
- CLI 工具:Cobra + Viper
- 系统工具:eBPF、网络编程
4. 主要应用领域
| 领域 | 代表项目/框架 |
|---|---|
| 云原生基础设施 | Kubernetes、Docker、Terraform、Istio |
| 微服务 | gRPC、Consul、Etcd |
| Web 后端 | Gin、Echo、Fiber |
| 命令行工具 | Cobra(Hugo、kubectl 等使用) |
| 网络工具 | Caddy、Traefik(反向代理) |
| 数据库工具 | CockroachDB、TiDB、InfluxDB |
| 安全工具 | Nuclei、各种渗透测试工具 |
5. 知名开源项目
- Kubernetes — 容器编排平台,Go 的代表作
- Docker — 容器运行时(早期核心用 Go)
- Terraform — 基础设施即代码工具
- Hugo — 最快的静态网站生成器
- Prometheus — 监控系统和时序数据库
- Etcd — 分布式键值存储
- CockroachDB — 分布式 SQL 数据库
- Caddy — 自动 HTTPS 的 Web 服务器
6. 生态与工具链
# 项目初始化
go mod init github.com/user/project
# 包管理
go get github.com/gin-gonic/gin
go mod tidy
# 运行与构建
go run main.go
go build -o myapp ./cmd/myapp
GOOS=linux GOARCH=amd64 go build # 交叉编译
# 测试
go test ./...
go test -bench=. ./... # 基准测试
go test -cover ./... # 覆盖率
# 代码质量
gofmt -w . # 格式化(必须)
go vet ./... # 静态检查
golangci-lint run # 综合 linter
# 性能分析
go tool pprof cpu.prof
IDE 推荐:
- GoLand(JetBrains,最强 Go IDE)
- VS Code + Go 官方插件
7. 学习资源推荐
入门
- 📘 Go Tour — 官方交互式教程,必做
- 📘 Go by Example — 示例驱动学习
- 📘 The Go Programming Language(Donovan & Kernighan)— 最好的 Go 书
进阶
- 📘 Concurrency in Go(Katherine Cox-Buday)— 并发专项
- 📘 100 Go Mistakes and How to Avoid Them(Teiva Harsanyi)— 避坑必读
- 📘 Effective Go — 官方风格指南
实战
- 🎯 Gophercises — 实战练习
- 📘 Let's Go(Alex Edwards)— Web 开发实战书
8. 避坑指南
- 错误处理不能忽略:
```go // 错误!忽略了错误 result, _ := someFunc()
// 正确 result, err := someFunc() if err != nil { return fmt.Errorf("someFunc failed: %w", err) } ```
- goroutine 泄漏:goroutine 不会自动回收,确保每个 goroutine 都有退出路径,使用 Context 传递取消信号
- slice 的陷阱:
``go // slice 共享底层数组,修改可能影响原 slice a := []int{1, 2, 3} b := a[:2] b[0] = 99 // a[0] 也变成 99! // 用 copy() 创建独立副本 ``
- map 并发不安全:并发读写 map 会 panic,用
sync.Map或加锁
- nil interface 陷阱:
``go var p *MyType = nil var i interface{} = p i == nil // false!接口不为 nil(有类型信息) ``
- 不要过度使用 goroutine:goroutine 轻量但不是零开销,无限制创建仍会耗尽内存,用 worker pool 控制并发数
Rust
1. 语言简介与历史
Rust 由 Mozilla 的 Graydon Hoare 于 2006 年开始开发,2010 年公开,2015 年发布 1.0。Rust 连续 9 年(2016-2024)在 Stack Overflow 开发者调查中荣获"最受喜爱的编程语言"第一名。Linux 内核于 2022 年正式引入 Rust,标志着系统编程领域的历史性转变。
- 当前版本:Rust 1.8x(每 6 周发布)
- 设计者:Graydon Hoare(Mozilla)
- 许可证:MIT / Apache 2.0
2. 核心设计哲学
- 内存安全无 GC:所有权系统(Ownership)在编译期保证内存安全
- 无数据竞争:借用检查器(Borrow Checker)在编译期防止并发错误
- 零成本抽象:高级抽象不带来运行时开销
- 可靠性:如果编译通过,很可能就是正确的
- 明确性:没有隐式转换,没有空指针,没有未定义行为(safe Rust 中)
3. 快速上手路径
阶段一:基础语法与所有权(3-4 周)
- 变量绑定:
let(不可变)/let mut(可变) - 基础类型:i32/u64/f64/bool/char/&str/String
- 函数、控制流(if/loop/while/for)
- 所有权(Ownership):每个值有且只有一个所有者
- 借用(Borrowing):
&T(不可变引用)/&mut T(可变引用) - 生命周期(Lifetimes):引用不能比数据活得更长
- 结构体(struct)与方法(impl)
- 枚举(enum)与模式匹配(match)
⚠️ 这是 Rust 最难的部分,给自己充足时间,反复练习
练习:实现一个链表(会遇到所有权的各种挑战)
阶段二:类型系统与错误处理(2-3 周)
Option<T>:替代 nullResult<T, E>:替代异常,强制处理错误?运算符:错误传播语法糖- Trait:Rust 的接口系统
- 泛型(Generics)与 Trait Bounds
- 迭代器(Iterator)与闭包(Closure)
- 集合:Vec\
、HashMap\ 、HashSet\
练习:实现一个命令行文件处理工具(带完整错误处理)
阶段三:高级特性(1-2 个月)
- 智能指针:Box\
、Rc\ 、Arc\ 、RefCell\ - 并发:thread、Mutex、RwLock、channel
- 异步编程:async/await、tokio 运行时
- Trait 对象(dyn Trait)与动态分发
- 宏(Macro):声明宏(
macro_rules!)与过程宏 - unsafe Rust:何时使用、如何正确使用
- 模块系统与 Cargo 工作空间
练习:实现一个异步 HTTP 服务器
阶段四:领域深入
- 系统编程:嵌入式(no_std)、操作系统
- WebAssembly:wasm-bindgen、Leptos
- Web 后端:Axum、Actix-web
- CLI 工具:Clap、Ratatui
- AI 推理:Candle(Hugging Face)
4. 主要应用领域
| 领域 | 代表项目/框架 |
|---|---|
| 系统编程 | Linux 内核驱动、操作系统组件 |
| Web 后端 | Axum、Actix-web(TechEmpower 排名第一) |
| WebAssembly | wasm-bindgen、Leptos、Yew |
| 命令行工具 | ripgrep、fd、bat、exa |
| 网络工具 | Cloudflare 基础设施、Rustls |
| 区块链 | Solana(全部用 Rust)、Polkadot |
| 嵌入式 | RTIC 框架、Embassy(异步嵌入式) |
| 编译器/工具链 | SWC、Biome、Ruff(Python linter) |
5. 知名开源项目
- ripgrep (rg) — 最快的代码搜索工具(VS Code 内置)
- Tokio — 异步运行时,Rust 生态基石
- Axum — Tokio 团队出品的 Web 框架
- Serde — 序列化/反序列化框架,使用最广泛的 Rust 库
- Tauri — 用 Web 技术构建桌面应用(Electron 替代)
- SWC — 极速 JavaScript 编译器(Next.js 使用)
- Ruff — Python linter(比 Flake8 快 100 倍)
- Zed — 下一代代码编辑器
6. 生态与工具链
# 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 工具链管理
rustup update
rustup target add wasm32-unknown-unknown
# Cargo(包管理 + 构建工具)
cargo new my-project
cargo build --release
cargo run
cargo test
cargo clippy # linter(必用)
cargo fmt # 格式化
# 常用依赖
[dependencies]
tokio = { version = "1", features = ["full"] }
serde = { version = "1", features = ["derive"] }
anyhow = "1"
IDE 推荐:
- RustRover(JetBrains,专用 Rust IDE)
- VS Code + rust-analyzer(免费,推荐)
7. 学习资源推荐
入门
- 📘 The Rust Book — 官方书,免费在线,最佳入门
- 📘 Rustlings — 交互式练习,强烈推荐
- 📘 Rust by Example — 示例驱动
进阶
- 📘 Programming Rust(O'Reilly,Blandy & Orendorff)— 最全面的 Rust 书
- 📘 Rust Atomics and Locks — 并发底层原理(免费在线)
- 📘 Zero To Production In Rust(Luca Palmieri)— Web 后端实战
练习
- 🎯 Exercism Rust Track — 在线练习
- 🎯 Advent of Code — 每年 12 月的编程挑战
8. 避坑指南
- 不要和 Borrow Checker 对抗:当编译器报错时,先理解它在保护什么,而不是想办法绕过
- 学习曲线很陡,这是正常的:Rust 通常需要 3-6 个月才能感到"顺手",坚持下去
- clone() 是逃生舱,不是解法:遇到所有权问题先用
.clone()让代码跑起来,再优化
unwrap()在生产代码中要谨慎:
```rust // 开发调试时可以 let x = some_option.unwrap();
// 生产代码用 ? 或 match let x = some_option.ok_or("missing value")?; ```
- 异步的传染性:async 函数只能在 async 上下文中调用,一旦用了 async 就需要一个运行时(tokio)
- 不要在 Rust 里写 Java/Python 风格的代码:学会用迭代器链、模式匹配、Result 链,这才是 Rust 的惯用法(idiomatic Rust)
Kotlin
1. 语言简介与历史
Kotlin 由 JetBrains 开发,2011 年公开,2016 年发布 1.0。2017 年 Google 宣布 Kotlin 成为 Android 开发的官方语言,2019 年进一步宣布 Kotlin 优先(Kotlin-first)。Kotlin 运行在 JVM 上,与 Java 100% 互操作,同时也可编译为 JavaScript 和原生代码(Kotlin/Native)。
- 当前版本:Kotlin 2.x
- 设计者:JetBrains
- 许可证:Apache 2.0
2. 核心设计哲学
- 实用主义:解决 Java 的痛点,不追求学术纯粹
- 简洁性:用更少的代码表达相同的意图
- 安全性:空安全(Null Safety)内置于类型系统
- 互操作性:与 Java 无缝互操作
- 多平台:一套代码跑 JVM / JS / Native(Kotlin Multiplatform)
3. 快速上手路径
阶段一:基础语法(1 周,假设有 Java 基础)
val(不可变)vsvar(可变)- 类型推断
- 字符串模板(
"Hello, $name") - 空安全:
?、?.、?:(Elvis 运算符)、!! - 数据类(data class)
- 密封类(sealed class)
- 对象声明(object)与伴生对象(companion object)
练习:将一个 Java POJO 改写为 Kotlin data class
阶段二:函数式特性(2 周)
- 高阶函数与 Lambda
- 扩展函数(Extension Functions)— Kotlin 最强大的特性之一
- 作用域函数:
let/run/with/apply/also - 集合操作:map / filter / reduce / groupBy / flatMap
- 解构声明(Destructuring)
- 运算符重载
练习:用函数式风格重写一个数据处理流水线
阶段三:协程(2-3 周)
- 协程基础:
suspend函数 CoroutineScope与launch/asyncFlow:冷流(cold stream)StateFlow/SharedFlow:热流- 结构化并发
- 异常处理:
CoroutineExceptionHandler
练习:实现一个带超时和重试的网络请求封装
阶段四:领域深入
- Android 开发:Jetpack Compose、ViewModel、Room
- 后端开发:Ktor、Spring Boot(Kotlin 版)
- 多平台:Kotlin Multiplatform(KMP)
4. 主要应用领域
| 领域 | 代表框架/工具 |
|---|---|
| Android 开发 | Jetpack Compose、Android SDK |
| 服务端开发 | Ktor、Spring Boot |
| 多平台移动 | Kotlin Multiplatform(KMP) |
| 脚本编写 | Kotlin Script(.kts) |
| 构建脚本 | Gradle Kotlin DSL |
5. 知名开源项目
- Kotlin — 语言本身(JetBrains 开源)
- Ktor — JetBrains 出品的异步 Web 框架
- Exposed — Kotlin SQL 框架
- Arrow — 函数式编程库
- Compose Multiplatform — 跨平台 UI 框架
- Gradle(Kotlin DSL)— 构建工具的 Kotlin 版本
6. 生态与工具链
# 安装(通过 SDKMAN)
sdk install kotlin
# 编译运行
kotlinc main.kt -include-runtime -d main.jar
java -jar main.jar
# Gradle 构建(Android/后端项目标准)
./gradlew build
./gradlew test
./gradlew run
# 代码质量
ktlint # Kotlin linter
detekt # 静态分析
IDE 推荐:
- IntelliJ IDEA / Android Studio — JetBrains 出品,对 Kotlin 支持最好
- VS Code(Kotlin 插件支持有限)
7. 学习资源推荐
入门
- 📘 Kotlin 官方文档 — 质量极高
- 🎮 Kotlin Koans — 官方交互式练习
- 📘 Kotlin in Action(Jemerov & Isakova,JetBrains 作者写的)
进阶
- 📘 Kotlin Coroutines Deep Dive(Marcin Moskała)— 协程专项
- 📘 Functional Programming in Kotlin(Arrow 团队)
8. 避坑指南
- 不要滥用
!!:!!是"非空断言",如果值是 null 会抛 NullPointerException,应该用?.或?:安全处理
- 作用域函数选择:
let:对可空值做操作apply:配置对象(返回对象本身)run:执行代码块(返回最后一行)with:对对象执行多个操作(非扩展函数)
- data class 的限制:data class 不适合做继承层级,密封类(sealed class)更适合建模有限状态
- 协程不是线程:协程是轻量级的,但仍需要正确管理生命周期,避免协程泄漏
- Java 互操作的平台类型:从 Java 传入的对象类型是平台类型(
T!),Kotlin 不知道是否可空,要谨慎处理
Swift
1. 语言简介与历史
Swift 由 Apple 的 Chris Lattner 主导开发,2014 年在 WWDC 上发布,2015 年开源。Swift 旨在替代 Objective-C,成为 Apple 平台(iOS/macOS/watchOS/tvOS)的首选语言。Swift 5.5 引入 async/await,Swift 5.9 引入宏(Macros),Swift 6 引入严格并发检查。
- 当前版本:Swift 6.x
- 设计者:Chris Lattner(Apple)
- 许可证:Apache 2.0
2. 核心设计哲学
- 安全性:可选值(Optional)消灭空指针,强类型防止类型混淆
- 速度:性能接近 C,远超 Objective-C
- 表达力:现代语法,函数式与面向对象融合
- 渐进式:从脚本到系统编程,覆盖范围广
- 互操作:与 Objective-C 无缝互操作
3. 快速上手路径
阶段一:基础语法(1-2 周)
let(常量)vsvar(变量)- 类型推断
- Optional:
?、!(强制解包)、if let、guard let、?? - 字符串插值(
"\(variable)") - 集合:Array / Dictionary / Set
- 控制流:if/for-in/while/switch(强大的模式匹配)
- 函数:参数标签、默认参数、可变参数
练习:实现一个 Playground 中的数据处理程序
阶段二:类型系统(2-3 周)
- 类(class)vs 结构体(struct)vs 枚举(enum)— Swift 的核心区分
- 值类型 vs 引用类型
- 协议(Protocol):Swift 的接口
- 扩展(Extension):给已有类型添加功能
- 泛型(Generics)
- 关联类型(Associated Types)
- 错误处理:
throws/try/do-catch
练习:用协议和扩展实现一个图形库
阶段三:现代 Swift(2-3 周)
- 闭包(Closure)与捕获列表(避免循环引用)
- async/await 与结构化并发
- Actor(Swift 并发安全)
- SwiftUI 基础(声明式 UI)
- Combine 框架(响应式编程)
- 属性包装器(Property Wrappers:@State/@Binding/@Published)
练习:用 SwiftUI 实现一个天气应用
阶段四:平台开发
- iOS/macOS:UIKit(老)/ SwiftUI(新)
- 服务端:Vapor(Swift Web 框架)
- 系统编程:Swift System、Swift NIO
4. 主要应用领域
| 领域 | 代表框架/工具 |
|---|---|
| iOS 应用开发 | UIKit、SwiftUI、Xcode |
| macOS 应用开发 | AppKit、SwiftUI |
| watchOS / tvOS | SwiftUI |
| 服务端开发 | Vapor、Hummingbird |
| 系统编程 | Swift System、Swift NIO |
| 跨平台 | Swift on Linux、Swift on Windows |
5. 知名开源项目
- Swift — 语言本身(Apple + 社区开源)
- SwiftUI — 声明式 UI 框架
- Vapor — Swift 服务端 Web 框架
- Swift NIO — Apple 出品的异步网络框架
- Alamofire — 最流行的 Swift HTTP 库
- Kingfisher — 图片缓存库
- SnapKit — AutoLayout DSL
- RxSwift — 响应式编程库
6. 生态与工具链
# 安装(macOS 通过 Xcode,Linux 通过官网)
xcode-select --install
# Swift Package Manager(官方包管理器)
swift package init --type executable
swift build
swift test
swift run
# 添加依赖(Package.swift 中)
.package(url: "https://github.com/vapor/vapor.git", from: "4.0.0")
# REPL
swift
IDE 推荐:
- Xcode — Apple 平台开发必须(免费)
- VS Code + Swift 插件(跨平台开发)
- Swift Playgrounds(iPad/macOS,学习用)
7. 学习资源推荐
入门
- 📘 Swift 官方文档 — 免费在线,写得非常好
- 🎯 100 Days of SwiftUI — Paul Hudson 的免费课程,强烈推荐
- 📘 Swift Programming: The Big Nerd Ranch Guide
进阶
- 📘 Advanced Swift(objc.io)— 深入 Swift 类型系统
- 📘 Swift Concurrency(objc.io)— 并发专项
- 📘 Swift Evolution — 了解语言设计决策
8. 避坑指南
- 强制解包(
!)要谨慎:
``swift let name: String? = nil print(name!) // 崩溃! // 用 if let 或 guard let 安全解包 if let name = name { print(name) } ``
- 值类型 vs 引用类型:struct 是值类型,赋值时复制;class 是引用类型,赋值时共享。Swift 推荐优先用 struct
- 循环引用:两个类互相持有对方会导致内存泄漏,用
weak或unowned打破循环
``swift class A { weak var b: B? } ``
@MainActor和 UI 更新:所有 UI 更新必须在主线程,Swift 并发中用@MainActor标注
- Protocol 与泛型的选择:协议提供动态分发,泛型提供静态分发(性能更好)。优先考虑泛型
- Swift 版本迁移:Swift 的 API 变化较快,注意项目的 Swift 版本设置,
@available标注兼容性
PHP
1. 语言简介与历史
PHP(PHP: Hypertext Preprocessor)由 Rasmus Lerdorf 于 1994 年创建,最初是一组用于追踪个人简历访问量的 Perl 脚本。PHP 3(1998)奠定了现代 PHP 基础,PHP 5(2004)引入了真正的 OOP,PHP 7(2015)性能翻倍,PHP 8(2020)引入了 JIT 编译器和大量现代特性。
- 当前版本:PHP 8.3
- 设计者:Rasmus Lerdorf(初版),后由社区驱动
- 许可证:PHP License(类 BSD)
2. 核心设计哲学
- Web 原生:专为 Web 开发设计,HTML 嵌入语法
- 易于上手:学习曲线平缓,适合初学者
- 灵活性:动态类型,宽松的语法规则
- 无处不在:驱动全球约 77% 的网站(包括 WordPress)
- 持续演进:PHP 8.x 已经是现代化的强类型语言
3. 快速上手路径
阶段一:基础语法(1-2 周)
- 变量(
$variable)、数据类型 - 字符串函数(str_、preg_)
- 数组(索引数组、关联数组、多维数组)
- 控制流:if/for/foreach/while/switch
- 函数:定义、默认参数、可变参数
- 表单处理:
_GET</code> / <code>_POST/$_SESSION - 文件操作:fopen/fread/fwrite
练习:实现一个用户注册/登录系统(文件存储)
阶段二:面向对象与现代 PHP(2-3 周)
- 类、接口、抽象类、Trait
- 命名空间(namespace)
- Composer(PHP 包管理器)与 PSR 标准
- 类型声明:参数类型、返回类型、属性类型
- PHP 8 特性:命名参数、联合类型、match 表达式、nullsafe 运算符(
?->) - 错误处理:异常、
set_error_handler - 枚举(PHP 8.1)
练习:用 Composer 构建一个 MVC 框架骨架
阶段三:Web 开发实践(1-2 个月)
- 数据库:PDO(数据库抽象层)、防 SQL 注入
- 安全:XSS 防护、CSRF 保护、密码哈希(
password_hash) - REST API 设计与实现
- 缓存:Redis/Memcached
- 队列:任务队列、异步处理
- 测试:PHPUnit
练习:实现一个完整的博客 REST API
阶段四:框架深入
- Laravel — 现代 PHP 最佳框架(Eloquent ORM、Blade 模板)
- Symfony — 企业级框架,Laravel 的底层依赖
- WordPress 开发 — 插件/主题开发
4. 主要应用领域
| 领域 | 代表框架/工具 |
|---|---|
| Web 后端 | Laravel、Symfony、Slim |
| CMS 系统 | WordPress、Drupal、Joomla |
| 电商平台 | Magento、WooCommerce、PrestaShop |
| 企业应用 | Symfony、Yii2 |
| API 服务 | Laravel API、Lumen |
5. 知名开源项目
- WordPress — 全球最流行 CMS,驱动 43% 的网站
- Laravel — 最优雅的 PHP 框架
- Symfony — 企业级框架组件集合
- Composer — PHP 包管理器
- PHPUnit — PHP 测试框架标准
- Magento — 企业级电商平台
- MediaWiki — 维基百科使用的引擎
6. 生态与工具链
# 安装(macOS)
brew install php
# Composer(包管理器)
composer init
composer require laravel/laravel
composer install
composer update
# 开发服务器
php -S localhost:8000
# 代码质量
phpcs --standard=PSR12 . # 代码风格检查
phpstan analyse src/ # 静态分析(推荐)
php-cs-fixer fix . # 自动修复格式
# 测试
./vendor/bin/phpunit
# Laravel 专用
php artisan serve
php artisan make:model User
php artisan migrate
IDE 推荐:
- PhpStorm(JetBrains,PHP 最强 IDE)
- VS Code + PHP Intelephense 插件
7. 学习资源推荐
入门
- 📘 PHP 官方文档 — 有大量用户评论,非常实用
- 📘 PHP: The Right Way — 现代 PHP 最佳实践汇总(必读)
- 🎥 Laracasts(Jeffrey Way,PHP/Laravel 最好的视频课程)
进阶
- 📘 Modern PHP(Josh Lockhart)— 现代 PHP 实践
- 📘 Laravel: Up & Running(Matt Stauffer)
8. 避坑指南
- 不要学旧版 PHP:忘记
mysql_*函数(已废弃),用 PDO 或 MySQLi;忘记register_globals
- SQL 注入:永远使用预处理语句
```php // 危险! sql = "SELECT * FROM users WHERE id = _GET['id']";
// 安全 stmt = pdo->prepare("SELECT * FROM users WHERE id = ?"); stmt->execute([_GET['id']]); ```
- 密码存储:
``php // 永远不要用 md5/sha1 存密码 hash = password_hash(password, PASSWORD_BCRYPT); valid = password_verify(input, $hash); ``
- 类型比较:
``php 0 == "foo" // true(宽松比较!) 0 === "foo" // false(严格比较,用这个) ``
- 开启严格类型:在文件顶部加
declare(strict_types=1);,避免隐式类型转换
- 用 Composer 管理依赖:不要手动下载 PHP 库,这是 2010 年代之前的做法
Ruby
1. 语言简介与历史
Ruby 由日本程序员松本行弘(Matz)于 1993 年开发,1995 年公开发布。设计目标是让程序员快乐("Ruby is designed to make programmers happy")。Ruby on Rails(2004)使 Ruby 名声大噪,开创了现代 Web 框架的先河。
- 当前版本:Ruby 3.3
- 设计者:松本行弘(Matz)
- 许可证:Ruby License / BSD
2. 核心设计哲学
- 开发者幸福感:代码应该让人愉悦地编写和阅读
- 一切皆对象:包括数字、nil、true/false 都是对象
- 最小惊讶原则(POLS):语言行为应符合直觉
- 约定优于配置:Rails 将这一哲学推向极致
- 元编程友好:Ruby 的动态特性使元编程极为强大
3. 快速上手路径
阶段一:基础语法(1-2 周)
- 变量:局部变量(小写)、实例变量(
@)、类变量(@@)、全局变量($) - 数据类型:Integer / Float / String / Symbol / Array / Hash / Range
- 字符串插值(
"#{expression}") - 控制流:if/unless/while/until/for/case
- 块(Block):
do...end和{} - 方法:def、默认参数、关键字参数
练习:实现一个命令行计算器
阶段二:面向对象与块(2-3 周)
- 类与继承
- 模块(Module)与混入(Mixin)
- 可枚举(Enumerable)模块:map/select/reject/reduce/each_with_object
- Proc 与 Lambda 的区别
- yield 关键字
- 方法缺失(method_missing)
- 符号(Symbol)vs 字符串
练习:实现一个简单的 ORM(对象关系映射)
阶段三:高级特性(1-2 个月)
- 元编程:
define_method、class_eval、instance_eval - 开放类(Open Classes):修改内置类
- DSL 设计
- 异常处理:begin/rescue/ensure/raise
- 文件 I/O 与正则表达式
- Gem 开发与发布
- 测试:RSpec / Minitest
练习:实现一个 DSL(领域特定语言)
阶段四:框架与生态
- Ruby on Rails — 全栈 Web 框架
- Sinatra — 轻量级 Web 框架
- RSpec — 行为驱动测试框架
- Sidekiq — 后台任务处理
4. 主要应用领域
| 领域 | 代表框架/工具 |
|---|---|
| Web 后端 | Ruby on Rails、Sinatra、Hanami |
| 脚本自动化 | 系统管理、部署脚本 |
| DevOps 工具 | Chef、Puppet、Vagrant |
| 测试框架 | RSpec、Capybara |
| 原型开发 | 快速验证想法 |
5. 知名开源项目
- Ruby on Rails — 改变了 Web 开发的框架(GitHub、Shopify、Airbnb 早期使用)
- Homebrew — macOS 包管理器(Ruby 编写)
- Jekyll — 静态网站生成器(GitHub Pages 使用)
- Sidekiq — 高效后台任务处理
- RSpec — 行为驱动开发测试框架
- Devise — 用户认证解决方案
- Capistrano — 服务器部署工具
6. 生态与工具链
# 版本管理
rbenv install 3.3.0
rbenv global 3.3.0
# 或使用 rvm
# Gem(包管理)
gem install rails
gem install bundler
# Bundler(项目依赖管理)
bundle init
bundle add sinatra
bundle install
bundle exec ruby app.rb
# Rails
rails new myapp
rails server
rails generate model User
rails db:migrate
# 代码质量
rubocop . # linter + 格式化
bundle exec rspec # 测试
IDE 推荐:
- RubyMine(JetBrains,最强 Ruby IDE)
- VS Code + Ruby LSP 插件
7. 学习资源推荐
入门
- 📘 The Odin Project — 免费全栈课程,Ruby 路径很好
- 📘 Learn Ruby the Hard Way(免费在线)
- 🎮 Ruby Koans — 通过测试学 Ruby
进阶
- 📘 The Well-Grounded Rubyist(David Black)— 最全面的 Ruby 书
- 📘 Metaprogramming Ruby(Paolo Perrotta)— 元编程圣经
- 📘 Practical Object-Oriented Design in Ruby(Sandi Metz)— OOP 设计经典
Rails
- 📘 The Rails Tutorial(Michael Hartl,免费在线)— Rails 最好的教程
8. 避坑指南
nil处理:Ruby 不像 Swift/Kotlin 有内置空安全,要养成防御性编程习惯
- 符号 vs 字符串:
``ruby :name.object_id == :name.object_id # true(符号是唯一的) "name".object_id == "name".object_id # false(每次创建新对象) # Hash 键优先用符号 ``
- 块、Proc、Lambda 的区别:
- 块不是对象,不能赋值
- Proc 中
return会从外层方法返回 - Lambda 中
return只从 lambda 返回
==vsequal?vseql?:
==值相等(可重写)equal?对象身份(同一对象)eql?用于 Hash 键比较
- 冻结字符串:在文件顶部加
# frozen_string_literal: true提升性能
- Rails 的"魔法":Rails 大量使用元编程,初学时感觉神奇,但要理解背后的原理才能有效调试
R
1. 语言简介与历史
R 由 Ross Ihaka 和 Robert Gentleman 于 1993 年在新西兰奥克兰大学开发,是 S 语言的开源实现。1997 年成立 R Core Team,2000 年发布 1.0。R 是统计计算和数据可视化的标准工具,在学术界和数据科学领域地位不可撼动。
- 当前版本:R 4.4
- 设计者:Ross Ihaka、Robert Gentleman
- 许可证:GPL-2
2. 核心设计哲学
- 统计优先:为统计学家设计,不是为软件工程师
- 向量化操作:操作默认作用于整个向量,无需显式循环
- 函数式:函数是一等公民,支持高阶函数
- 交互式分析:REPL 驱动的探索式数据分析
- 可重现研究:R Markdown / Quarto 支持文学编程
3. 快速上手路径
阶段一:基础语法(1-2 周)
- 赋值:
<-(推荐)或= - 数据类型:numeric / integer / character / logical / complex
- 向量(vector):R 的基本数据单元
- 向量化操作:
c(1,2,3) * 2=c(2,4,6) - 矩阵(matrix)、列表(list)、数据框(data.frame)
- 因子(factor):分类变量
- 控制流:if/for/while(尽量避免,用向量化替代)
- 函数定义
练习:用基础 R 分析一个 CSV 数据集
阶段二:tidyverse 生态(2-3 周)
- dplyr:数据操作(filter/select/mutate/group_by/summarise)
- ggplot2:数据可视化(图形语法)
- tidyr:数据整形(pivot_longer/pivot_wider)
- readr:高效读取数据文件
- stringr:字符串处理
- lubridate:日期时间处理
- 管道操作符:
|>(原生)或%>%(magrittr)
练习:完整的数据清洗 + 可视化分析报告
阶段三:统计与建模(1-2 个月)
- 描述统计:mean/median/sd/quantile
- 假设检验:t.test/chisq.test/wilcox.test
- 线性回归:
lm(y ~ x) - 广义线性模型:
glm(y ~ x, family=binomial) - 时间序列:
ts、forecast 包 - 机器学习:caret / tidymodels / mlr3
- 贝叶斯统计:Stan / brms
练习:对真实数据集做完整的回归分析报告
阶段四:高级应用
- R Markdown / Quarto:可重现报告
- Shiny:交互式 Web 应用
- Rcpp:用 C++ 加速 R 代码
- 并行计算:parallel、future 包
4. 主要应用领域
| 领域 | 代表包/工具 |
|---|---|
| 统计分析 | stats(基础包)、lme4、survival |
| 数据可视化 | ggplot2、plotly、leaflet |
| 生物信息学 | Bioconductor 生态(3000+ 包) |
| 金融分析 | quantmod、PerformanceAnalytics |
| 机器学习 | tidymodels、caret、h2o |
| 地理空间分析 | sf、terra、tmap |
| 交互式应用 | Shiny |
| 文档报告 | R Markdown、Quarto |
5. 知名开源项目/包
- tidyverse — Hadley Wickham 创建的数据科学包套件
- ggplot2 — 基于图形语法的可视化,R 最重要的包
- Shiny — 交互式 Web 应用框架
- Bioconductor — 生物信息学包集合(3000+ 包)
- data.table — 极速大数据处理(比 dplyr 快 10-100 倍)
- Stan — 概率编程语言(R 接口)
- knitr — 文学编程工具
6. 生态与工具链
# 包安装
install.packages("tidyverse")
install.packages("ggplot2")
# Bioconductor 包
if (!require("BiocManager")) install.packages("BiocManager")
BiocManager::install("DESeq2")
# 项目管理
install.packages("renv")
renv::init() # 创建项目环境
renv::snapshot() # 锁定依赖
renv::restore() # 恢复环境
# 常用工作流
library(tidyverse)
df <- read_csv("data.csv")
df |> filter(age > 18) |> group_by(gender) |> summarise(mean_score = mean(score))
IDE 推荐:
- RStudio / Posit — R 的标准 IDE,功能完整(免费)
- VS Code + R 插件(轻量选项)
- Jupyter + IRkernel(notebook 风格)
7. 学习资源推荐
入门
- 📘 R for Data Science(Hadley Wickham,免费在线)— R 数据科学圣经
- 🎮 Swirl — 在 R 控制台中学 R
- 📘 The Art of R Programming(Norman Matloff)— 编程视角
统计与建模
- 📘 An Introduction to Statistical Learning(ISLR,免费 PDF)— 统计学习入门
- 📘 Statistical Rethinking(Richard McElreath)— 贝叶斯统计
可视化
- 📘 ggplot2 官方文档 + ggplot2: Elegant Graphics for Data Analysis
8. 避坑指南
- 向量索引从 1 开始:不像大多数语言从 0 开始,R 的索引从 1 开始
- 赋值符号:
<-是 R 的惯用赋值符,=也可以但在某些上下文有歧义
- 因子(factor)的陷阱:
``r x <- factor(c("1", "2", "3")) as.numeric(x) # 返回 1, 2, 3(因子的内部编码,不是字符串转换!) as.numeric(as.character(x)) # 正确做法 ``
for循环很慢:R 的 for 循环性能差,用向量化操作(apply 家族、dplyr)代替
- 内存管理:R 把所有数据加载到内存,处理大数据集用 data.table 或 arrow 包
- 包版本冲突:用
renv管理项目依赖,避免不同项目间的包版本冲突
Scala
1. 语言简介与历史
Scala 由 Martin Odersky 在瑞士洛桑联邦理工学院(EPFL)设计,2004 年发布。名字来自 "Scalable Language",意指从脚本到大型系统都能胜任。Scala 运行在 JVM 上,融合了面向对象和函数式编程,是 Apache Spark 的实现语言。
- 当前版本:Scala 3.x(Dotty)
- 设计者:Martin Odersky(EPFL)
- 许可证:Apache 2.0
2. 核心设计哲学
- OOP + FP 融合:两种范式无缝结合
- 类型系统强大:比 Java 更强的类型推断和类型系统
- 表达力极强:同样功能,Scala 代码通常比 Java 短 3-10 倍
- JVM 生态兼容:可以使用所有 Java 库
- 大数据首选:Spark、Kafka Streams 等核心用 Scala 编写
3. 快速上手路径
阶段一:基础语法(2-3 周,假设有 Java 基础)
val(不可变)vsvar(可变)- 类型推断
- 样例类(case class):不可变数据模型
- 模式匹配(match/case)— 比 Java switch 强大得多
- 选项类型(Option[T]):替代 null
- 集合:List / Map / Set / Vector(不可变优先)
- 元组(Tuple)
练习:用 case class 和 pattern matching 实现一个表达式求值器
阶段二:函数式编程(3-4 周)
- 高阶函数:map / filter / flatMap / fold / reduce
- 函数组合与柯里化
- for 推导式(for comprehension)— 本质是 flatMap 链
- 偏函数(PartialFunction)
- 隐式转换(Scala 2)/ 给定实例(given/using,Scala 3)
- Typeclass 模式
- 不可变数据结构
练习:实现一个函数式 JSON 解析器
阶段三:高级特性(1-2 个月)
- Trait(比 Java interface 更强大)
- 类型类(Typeclasses)
- 高级类型:协变/逆变、上界/下界
- Actor 模型(Akka)
- Future 与 Promise(异步编程)
- 宏(Macro,高级)
练习:用 Akka 实现一个简单的分布式计数器
阶段四:领域应用
- 大数据:Apache Spark
- 流处理:Akka Streams / Apache Kafka
- 函数式 Web:http4s / Play Framework
- 纯函数式:Cats / ZIO
4. 主要应用领域
| 领域 | 代表框架/工具 |
|---|---|
| 大数据处理 | Apache Spark(核心是 Scala) |
| 流处理 | Apache Kafka(部分)、Akka Streams |
| 分布式系统 | Akka Actor 系统 |
| Web 后端 | Play Framework、http4s |
| 函数式编程 | Cats、ZIO |
| 数据工程 | Apache Flink(Scala API) |
5. 知名开源项目
- Apache Spark — 大数据处理引擎,Scala 最重要的应用
- Apache Kafka — 分布式消息队列(部分 Scala)
- Akka — Actor 模型并发框架
- Play Framework — 响应式 Web 框架
- Cats — 函数式编程库
- ZIO — 现代函数式效果系统
- Slick — 函数式关系数据库库
6. 生态与工具链
# 安装(通过 SDKMAN)
sdk install scala
sdk install sbt
# SBT(Scala 构建工具)
sbt new scala/scala3.g8
sbt compile
sbt run
sbt test
# 代码质量
scalafmt # 格式化
scalafix # 重构和 lint
# Scala CLI(现代轻量工具)
scala-cli run main.scala
scala-cli test .
IDE 推荐:
- IntelliJ IDEA + Scala 插件 — 最好的 Scala 开发体验
- Metals + VS Code — 轻量选项
7. 学习资源推荐
入门
- 📘 Scala Book — 官方 Scala 3 书(免费)
- 🎓 Functional Programming in Scala(Coursera,Martin Odersky 主讲)
- 📘 Programming in Scala(Odersky、Spoon、Venners)— 最权威的 Scala 书
大数据
- 📘 Learning Spark(O'Reilly)— Spark 权威指南
- 📘 Spark 官方文档
函数式进阶
- 📘 Functional Programming in Scala("Red Book",Manning)— FP 圣经
8. 避坑指南
- Scala 2 vs Scala 3:两个版本语法有差异,Scala 3 是未来,新项目直接用 Scala 3
- 不要写 Java 风格的 Scala:
```scala // Java 风格(避免) var result = new ArrayList[Int]() for (x <- list) { result.add(x * 2) }
// Scala 惯用法 val result = list.map(_ * 2) ```
- 隐式(Implicit)的复杂性:Scala 2 的隐式转换很容易让代码难以理解,Scala 3 的 given/using 更清晰
- 编译速度:Scala 编译比 Java 慢很多,这是已知问题,用增量编译缓解
- 学习曲线陡峭:Scala 是主流语言中学习曲线最陡的之一,给自己 3-6 个月时间
- 从 Spark 入手:如果你的目标是大数据,先学 Spark API,不必深入语言特性也能有产出
Dart
1. 语言简介与历史
Dart 由 Google 的 Lars Bak 和 Kasper Lund 设计,2011 年发布。最初目标是替代 JavaScript,但转型后成为 Flutter 的专属语言。Flutter(2018)的成功使 Dart 重新焕发生机,成为跨平台移动/桌面/Web 开发的重要选择。
- 当前版本:Dart 3.x
- 设计者:Google(Lars Bak、Kasper Lund)
- 许可证:BSD
2. 核心设计哲学
- 为 Flutter 而生:Dart 的设计决策很多是为 Flutter 优化的
- AOT + JIT 双模式:开发时 JIT(热重载),生产时 AOT(高性能)
- 类型安全:健全的空安全(Sound Null Safety,Dart 2.12+)
- 简洁易学:语法接近 Java/JavaScript,上手快
- 多平台:编译为原生代码(移动/桌面)或 JavaScript(Web)
3. 快速上手路径
阶段一:基础语法(1 周)
- 变量:
var/final(运行时常量)/const(编译时常量) - 类型系统:int / double / String / bool / List / Map / Set
- 空安全:可空类型(
String?)vs 非空类型(String) - 字符串插值(
"variable"</code> / <code>"{expression}") - 控制流:if/for/for-in/while/switch
- 函数:命名参数(
{})、位置参数([])、箭头函数(=>)
练习:实现一个命令行 Todo 应用
阶段二:面向对象(1-2 周)
- 类、构造函数(命名构造函数)
- 工厂构造函数(factory)
- Mixin
- 抽象类与接口(Dart 中 class 即接口)
- 泛型
- 枚举(增强枚举,Dart 2.17+)
- 扩展方法(Extension Methods)
练习:设计一个数据模型层(带 JSON 序列化)
阶段三:异步编程(1-2 周)
- Future:async/await
- Stream:数据流处理
StreamControllerIsolate:Dart 的并发单元(类似 Web Worker)compute():Flutter 中的后台计算
练习:实现一个异步 HTTP 客户端
阶段四:Flutter 开发
- Widget 树:StatelessWidget / StatefulWidget
- 状态管理:setState → Provider → Riverpod / Bloc
- 路由与导航
- 平台通道(Platform Channels):调用原生代码
- 包管理:pub.dev
4. 主要应用领域
| 领域 | 代表框架/工具 |
|---|---|
| 移动应用(iOS/Android) | Flutter |
| 桌面应用(Win/Mac/Linux) | Flutter Desktop |
| Web 应用 | Flutter Web |
| 嵌入式/IoT | Flutter Embedded |
| 服务端(较少) | Dart Frog、shelf |
5. 知名开源项目
- Flutter — Google 跨平台 UI 框架,Dart 的核心应用场景
- Riverpod — Flutter 最流行的状态管理库
- Bloc — 可预测的状态管理
- Dio — 功能强大的 HTTP 客户端
- Freezed — 不可变数据类代码生成
- Drift — Flutter 的 SQLite ORM
6. 生态与工具链
# 安装(通过 Flutter SDK 自带 Dart)
flutter doctor
# 或单独安装 Dart
brew install dart
# 包管理(pub)
dart pub add http
flutter pub add provider
# 构建运行
dart run main.dart
flutter run # 在连接的设备运行
flutter build apk # 构建 Android APK
flutter build ios # 构建 iOS
flutter build web # 构建 Web
# 代码质量
dart format .
dart analyze
dart fix --apply
# 代码生成(常用)
dart run build_runner build
IDE 推荐:
- Android Studio / IntelliJ + Flutter 插件 — 最完整
- VS Code + Flutter + Dart 插件 — 轻量推荐
7. 学习资源推荐
入门
- 📘 Dart 官方文档 — 质量很高
- 📘 Flutter 官方文档 — 有大量 Codelab
- 🎓 Flutter & Dart - The Complete Guide(Udemy,Maximilian Schwarzmüller)
进阶
- 📘 Flutter in Action(Manning)
- 📘 Programming Flutter(O'Reilly)
8. 避坑指南
- 空安全迁移:老代码可能还没迁移到空安全,注意
?的使用
constvsfinal:
``dart const pi = 3.14; // 编译时常量,性能最好 final now = DateTime.now(); // 运行时常量(只赋值一次) ``
- Flutter Widget 重建:
setState会重建整个 Widget 子树,状态管理不当会导致性能问题
- Isolate 通信:Isolate 之间不共享内存,通过消息传递(SendPort/ReceivePort)通信
async不等于多线程:Dart 的 async/await 是单线程事件循环,CPU 密集型任务需要 Isolate
- 代码生成的必要性:Dart 生态大量依赖代码生成(
build_runner),JSON 序列化、Freezed、Riverpod 等都需要运行生成命令
Lua
1. 语言简介与历史
Lua 由巴西 PUC-Rio 大学的 Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo 于 1993 年开发。名字在葡萄牙语中意为"月亮"。Lua 以极小的体积(解释器约 250KB)、高嵌入性和高性能著称,是游戏行业嵌入式脚本语言的事实标准。
- 当前版本:Lua 5.4
- 设计者:PUC-Rio 团队
- 许可证:MIT
2. 核心设计哲学
- 极简主义:语言核心极小,只有 8 种数据类型
- 可嵌入性:设计为嵌入到 C/C++ 应用中
- 轻量快速:解释器极小,启动极快
- 可扩展:通过 C API 扩展功能
- 多范式:过程式、函数式、面向对象(通过 table 模拟)
3. 快速上手路径
阶段一:基础语法(1 周)
- 数据类型:nil / boolean / number / string / table / function / userdata / thread
- 变量:默认全局,用
local声明局部变量 - 字符串:单引号/双引号/长字符串(
[[...]]) - 控制流:if/elseif/else/while/repeat-until/for(数值 for 和泛型 for)
- 函数:多返回值、可变参数(
...) - Table:Lua 的唯一数据结构,既是数组又是字典
练习:实现一个简单的配置文件解析器
阶段二:Table 与元表(1-2 周)
- Table 作为数组:索引从 1 开始
- Table 作为字典:任意键值对
- 元表(Metatable):重载操作符和行为
- 元方法:
__index/__newindex/__add/__tostring/__call - 用 Table + 元表模拟面向对象
- 弱表(Weak Tables)
练习:实现一个面向对象的类系统
阶段三:高级特性(1-2 周)
- 闭包与词法作用域
- 协程(coroutine):
coroutine.create/resume/yield - 垃圾回收控制
- C API 基础(如何从 C 调用 Lua,从 Lua 调用 C)
- 模块系统(require)
- 错误处理:
pcall/xpcall/error
练习:用协程实现一个生产者-消费者模式
阶段四:应用场景
- 游戏脚本:在游戏引擎(Unity via MoonSharp、Defold、LÖVE)中写游戏逻辑
- Nginx 扩展:OpenResty(Nginx + Lua)
- 嵌入式配置:Neovim 配置、Redis 脚本
4. 主要应用领域
| 领域 | 代表产品/框架 |
|---|---|
| 游戏开发 | World of Warcraft 插件、Roblox、LÖVE、Defold |
| 游戏引擎脚本 | CryEngine、Corona SDK |
| Web 服务器 | OpenResty(Nginx + LuaJIT) |
| 嵌入式系统 | NodeMCU(ESP8266/ESP32 固件) |
| 编辑器配置 | Neovim(配置语言) |
| 数据库脚本 | Redis EVAL 命令 |
| 安全工具 | Nmap 脚本引擎(NSE) |
5. 知名开源项目
- OpenResty — Nginx + LuaJIT,高性能 Web 平台
- LÖVE — 2D 游戏引擎
- Neovim — 用 Lua 作为配置语言
- LuaJIT — 极速 Lua JIT 编译器(比官方快 10-100 倍)
- Lapis — OpenResty 上的 Web 框架
- Busted — Lua 单元测试框架
6. 生态与工具链
# 安装
brew install lua # macOS
apt install lua5.4 # Ubuntu
# LuaJIT(推荐用于性能场景)
brew install luajit
# 包管理
luarocks install luasocket
luarocks install inspect # 调试用,打印 table
# 运行
lua script.lua
luajit script.lua # 用 LuaJIT 运行
# 代码质量
luacheck . # linter
lua-format -i *.lua # 格式化
IDE 推荐:
- VS Code + Lua Language Server(sumneko)
- ZeroBrane Studio — Lua 专用 IDE,支持调试
7. 学习资源推荐
入门
- 📘 Programming in Lua(Roberto Ierusalimschy,第一版免费在线)— Lua 官方书
- 📘 Lua 5.4 参考手册 — 权威参考
- 📘 Lua Quick Start Guide(Packt)
游戏开发
- 📘 LÖVE 官方文档 + 社区教程
- 🎓 Roblox 开发者文档(Luau,Lua 的超集)
8. 避坑指南
- 索引从 1 开始:Lua 数组索引从 1 开始,不是 0
- 局部变量必须显式声明:
``lua x = 10 -- 全局变量(通常不想要) local y = 20 -- 局部变量(推荐) ``
- Table 长度操作符
#的陷阱:#只对序列(连续整数键)有效,有"洞"的 table 结果不确定
==对 table 比较引用:两个内容相同的 table 用==比较结果是 false(除非是同一对象)
- 不存在的键返回 nil:访问不存在的 table 键不报错,返回 nil,容易掩盖 bug
- 协程不是多线程:Lua 协程是协作式的(需要主动 yield),不是抢占式多线程
Haskell
1. 语言简介与历史
Haskell 由学术委员会于 1990 年设计,以逻辑学家 Haskell Curry 命名。Haskell 是纯函数式编程语言的标杆,GHC(Glasgow Haskell Compiler)是主要实现。Haskell 的很多特性(类型类、Monad、惰性求值)已影响了 Rust、Scala、Swift 等现代语言。
- 当前版本:GHC 9.x / Haskell 2010
- 设计者:学术委员会(Simon Peyton Jones 等)
- 许可证:BSD
2. 核心设计哲学
- 纯函数式:函数没有副作用(副作用通过 IO Monad 显式表达)
- 惰性求值:默认按需计算,不是立即计算
- 强类型 + 类型推断:Hindley-Milner 类型系统,极强的类型推断
- 数学严谨性:程序即证明,类型即命题
- 抽象极致:Functor / Applicative / Monad 等抽象层次极高
3. 快速上手路径
阶段一:基础语法(2-3 周)
- 函数定义与应用(函数调用不需要括号)
- 类型签名:
add :: Int -> Int -> Int - 模式匹配(Pattern Matching)
- 列表与列表推导式
- 元组
where与let绑定- 守卫(Guards)
练习:实现基础数学函数(阶乘、斐波那契、快速排序)
阶段二:类型系统(3-4 周)
- 代数数据类型(ADT):
data Maybe a = Nothing | Just a - 记录语法
- 类型类(Typeclass):
Eq/Ord/Show/Num/Functor - 多态(参数多态 + 特设多态)
newtype包装- 派生(deriving)
练习:实现一个类型安全的表达式解析器
阶段三:Monad 与效果(1-2 个月)
- Functor:
fmap - Applicative:
<*>/pure - Monad:
>>=(bind)/return/do记号 - 常见 Monad:Maybe / Either / IO / State / Reader / Writer
- Monad 变换器(Monad Transformers)
do记号语法糖
练习:实现一个带状态的解释器(State Monad)
阶段四:高级特性
- 惰性求值与严格求值(
!强制求值) - 并发:
forkIO/STM(软件事务内存) - 类型级编程:GADTs、类型族(Type Families)
- 镜头(Lens):函数式数据访问
- 流处理:Conduit / Pipes
4. 主要应用领域
| 领域 | 代表项目/框架 |
|---|---|
| 编译器/解析器 | GHC 本身、Pandoc |
| 金融系统 | 高频交易、风险计算 |
| 密码学 | 形式化验证 |
| 学术研究 | 类型理论、程序语言理论 |
| Web 后端 | Yesod、Servant、IHP |
| 区块链 | Cardano(Plutus 智能合约) |
5. 知名开源项目
- GHC — Glasgow Haskell Compiler,Haskell 的参考实现
- Pandoc — 万能文档格式转换器(Haskell 的代表作)
- Yesod — 类型安全的 Web 框架
- Servant — 类型级 REST API 框架
- Cardano/Plutus — 区块链平台的智能合约语言
- ShellCheck — Shell 脚本静态分析工具
- XMonad — 用 Haskell 配置的窗口管理器
6. 生态与工具链
# 安装 GHCup(推荐)
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
# 工具链
ghcup install ghc 9.6.3
ghcup install cabal
ghcup install stack
# 构建(Cabal)
cabal init
cabal build
cabal run
cabal test
# 构建(Stack,更简单的依赖管理)
stack new myproject
stack build
stack run
stack test
# REPL
ghci
:l Main.hs # 加载文件
:t show # 查看类型
:i Functor # 查看类型类信息
# 代码质量
hlint . # linter
ormolu . # 格式化
IDE 推荐:
- VS Code + Haskell Language Server(HLS)
- IntelliJ + HaskForce 插件
7. 学习资源推荐
入门
- 📘 Learn You a Haskell for Great Good!(免费在线)— 最友好的入门书
- 📘 Haskell Programming from First Principles("HaskellBook")— 最系统全面
- 🎓 CIS 194(宾夕法尼亚大学,免费)
进阶
- 📘 Real World Haskell(免费在线,稍旧但有价值)
- 📘 Thinking with Types(Sandy Maguire)— 类型级编程
- 📘 Parallel and Concurrent Programming in Haskell(Simon Marlow,免费在线)
8. 避坑指南
- Monad 不是魔法:先理解 Functor 和 Applicative,Monad 是自然的延伸。不要试图用比喻("Monad 是容器")来理解,直接看类型签名
- 惰性求值的空间泄漏:
``haskell -- 这会建立一个巨大的 thunk 链,耗尽内存 foldl (+) 0 [1..1000000] -- 用严格版本 foldl' (+) 0 [1..1000000] ``
show和print的区别:print = putStrLn . show,print "hello"会打印"hello"(带引号)
- 字符串性能:
String = [Char],性能很差。用Text(text 包)处理文本,ByteString处理二进制
- 学习曲线极陡:Haskell 可能需要 6-12 个月才能感到"顺手",这是正常的
- 先学会用,再理解原理:不要在理解 Monad 之前停下来。先用
do记号写 IO,再逐渐理解背后的数学
Bash/Shell
1. 语言简介与历史
Shell 是 Unix/Linux 系统的命令解释器,Bash(Bourne Again SHell)由 Brian Fox 于 1989 年为 GNU 项目开发,是最流行的 Shell 实现。macOS 默认 Shell 已从 Bash 换为 Zsh(2019),但 Bash 脚本仍是 Linux 服务器和 DevOps 自动化的通用语言。
- 当前版本:Bash 5.2
- 设计者:Brian Fox(GNU)
- 许可证:GPL
2. 核心设计哲学
- 一切皆文本:程序通过文本流(stdin/stdout/stderr)通信
- 管道组合:小工具通过
|组合完成复杂任务 - Unix 哲学:做一件事并做好,程序应该协作
- 交互与脚本统一:同样的命令既可交互使用也可写成脚本
- POSIX 标准:跨平台 Shell 脚本的基础
3. 快速上手路径
阶段一:命令行基础(1 周)
- 文件系统导航:cd / ls / pwd / find / locate
- 文件操作:cp / mv / rm / mkdir / touch / ln
- 文本处理:cat / less / head / tail / grep / wc / sort / uniq
- 重定向:
>/>>/</2>/2>&1 - 管道:
| - 权限:chmod / chown / ls -la
- 进程:ps / top / kill / jobs / bg / fg
练习:用管道命令统计日志文件中各 IP 的访问次数
阶段二:Bash 脚本基础(1-2 周)
- Shebang:
#!/bin/bash - 变量:
name="value"/name</code> / <code>{name} - 字符串操作:
{#var}</code>(长度)、<code>{var:0:5}(切片)、${var/old/new}(替换) - 数组:
arr=(a b c)/${arr[@]} - 条件:
if [ condition ]/[[ ]](推荐) - 循环:for/while/until
- 函数定义与调用
- 参数:
1</code> / <code>@/#</code> / <code>0 - 退出码:
$?/exit 0
练习:写一个自动备份脚本(带日期戳)
阶段三:进阶脚本(2-3 周)
set -euo pipefail(错误处理三件套)- 陷阱(trap):处理信号和清理
- 进程替换:
<(command)/>(command) - Here Document:
<<EOF getopts:命令行参数解析- 正则表达式与 grep/sed/awk
xargs:批量处理- 并行执行:
&/wait/ GNU parallel
练习:实现一个完整的部署脚本(带参数、日志、错误处理)
阶段四:文本处理三剑客
- grep:搜索(
-E扩展正则、-r递归、-l只显示文件名) - sed:流编辑(
s/old/new/g、地址范围、多命令) - awk:字段处理(
$1/NF/NR/ 模式-动作)
4. 主要应用领域
| 领域 | 典型任务 |
|---|---|
| DevOps/CI-CD | 构建脚本、部署脚本、Jenkins Pipeline |
| 系统管理 | 用户管理、日志分析、定时任务 |
| 数据处理 | 日志解析、CSV 处理、批量文件操作 |
| 自动化测试 | 环境准备、集成测试脚本 |
| 容器/云 | Dockerfile 中的 RUN 命令、k8s 初始化脚本 |
| 安全/渗透测试 | 自动化扫描、漏洞利用脚本 |
5. 知名工具(Bash 生态)
- GNU coreutils — ls/cp/mv 等基础命令
- ripgrep (rg) — 极速 grep 替代
- fd — 更友好的 find 替代
- fzf — 模糊搜索工具
- jq — JSON 命令行处理器
- yq — YAML 命令行处理器
- GNU parallel — 并行执行命令
- shellcheck — Shell 脚本静态分析
- shfmt — Shell 脚本格式化
6. 生态与工具链
# 脚本模板(最佳实践)
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly SCRIPT_NAME="$(basename "$0")"
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >&2; }
die() { log "ERROR: $*"; exit 1; }
main() {
log "Starting $SCRIPT_NAME"
# 脚本逻辑
}
main "$@"
# 代码质量
shellcheck script.sh # 静态检查(必用!)
shfmt -w script.sh # 格式化
# 调试
bash -x script.sh # 追踪执行
bash -n script.sh # 只检查语法
终端推荐:
- Zsh + Oh My Zsh / Starship — 日常交互
- fish — 更友好的交互 Shell
- Bash — 脚本编写的通用选择
7. 学习资源推荐
入门
- 📘 The Linux Command Line(William Shotts,免费在线)— 最好的命令行书
- 📘 Bash Guide — 深入 Bash 编程
- 📘 ShellCheck Wiki — 学习常见错误
进阶
- 📘 Classic Shell Scripting(O'Reilly)
- 📘 The AWK Programming Language(Aho、Weinberger、Kernighan)— awk 权威
在线工具
- 🔧 ShellCheck — 在线检查脚本
- 🔧 explainshell.com — 解释命令含义
8. 避坑指南
- 始终加
set -euo pipefail:
-e:命令失败立即退出-u:使用未定义变量报错-o pipefail:管道中任意命令失败都报错
- 变量加引号:
```bash # 危险!文件名有空格会出错 rm $file
# 安全 rm "$file" ```
- 用
[[ ]]替代[ ]:[[ ]]是 Bash 扩展,更安全,支持&&、||、=~
- 不要解析
ls输出:文件名可能包含空格、换行,用find的-print0和xargs -0
- 整数比较用
-eq,字符串比较用==:
``bash [ "a" -eq 5 ] # 数字比较 [ "a" = "foo" ] # 字符串比较 ``
- 用 ShellCheck 检查所有脚本:ShellCheck 能发现 90% 的常见 Bash 错误,强烈推荐
SQL
1. 语言简介与历史
SQL(Structured Query Language)由 IBM 的 Donald Chamberlin 和 Raymond Boyce 于 1974 年开发,基于 Edgar Codd 的关系模型理论。1986 年成为 ANSI 标准,1987 年成为 ISO 标准。SQL 是数据库领域的通用语言,几乎所有关系型数据库都支持 SQL,是数据工程师、后端开发者、数据分析师的必备技能。
- 当前标准:SQL:2023
- 主要实现:PostgreSQL / MySQL / SQLite / SQL Server / Oracle
- 地位:数据领域最重要的语言之一
2. 核心设计哲学
- 声明式:描述"要什么",不描述"怎么做"
- 集合操作:操作的对象是数据集(表),而非单行
- 关系模型:数据以表格(关系)形式存储,通过 JOIN 连接
- ACID 事务:原子性、一致性、隔离性、持久性
- 标准化:核心语法跨数据库通用
3. 快速上手路径
阶段一:基础查询(1-2 周)
- SELECT / FROM / WHERE
- 比较运算符:
=/<>/>/</>=/<= - 逻辑运算符:AND / OR / NOT
- 特殊条件:IN / BETWEEN / LIKE / IS NULL
- 排序:ORDER BY(ASC/DESC)
- 限制:LIMIT / OFFSET(或 TOP / FETCH)
- 去重:DISTINCT
练习:对 Northwind 或 Chinook 示例数据库做各种查询
阶段二:聚合与分组(1 周)
- 聚合函数:COUNT / SUM / AVG / MAX / MIN
- GROUP BY:分组统计
- HAVING:对分组结果过滤(WHERE 对行过滤,HAVING 对组过滤)
- 聚合函数与 NULL 的关系
练习:分析销售数据,统计各类别销售额排名
阶段三:多表查询(2 周)
- INNER JOIN:只返回匹配行
- LEFT JOIN / RIGHT JOIN:保留一侧所有行
- FULL OUTER JOIN:保留两侧所有行
- CROSS JOIN:笛卡尔积
- 自连接(Self Join)
- 子查询:相关子查询 vs 非相关子查询
- IN / EXISTS / ANY / ALL
练习:实现一个电商数据库的完整查询(用户、订单、商品)
阶段四:高级 SQL(1-2 个月)
- 窗口函数(Window Functions):ROW_NUMBER / RANK / DENSE_RANK / LAG / LEAD / SUM OVER
- CTE(公共表表达式):WITH 子句
- 递归 CTE
- CASE WHEN 表达式
- 集合操作:UNION / UNION ALL / INTERSECT / EXCEPT
- 事务:BEGIN / COMMIT / ROLLBACK / SAVEPOINT
- 索引:B-tree / Hash / 覆盖索引 / 复合索引
- 执行计划:EXPLAIN / EXPLAIN ANALYZE
练习:用窗口函数计算移动平均和同比环比
阶段五:DDL 与数据库设计
- DDL:CREATE TABLE / ALTER TABLE / DROP TABLE
- 约束:PRIMARY KEY / FOREIGN KEY / UNIQUE / NOT NULL / CHECK
- 视图(View)
- 存储过程与函数
- 触发器(Trigger)
- 数据库规范化(1NF / 2NF / 3NF / BCNF)
4. 主要应用领域
| 领域 | 代表数据库/工具 |
|---|---|
| 业务系统后端 | PostgreSQL、MySQL、SQL Server |
| 数据仓库 | Snowflake、BigQuery、Redshift |
| 嵌入式数据库 | SQLite(移动端、桌面、边缘) |
| 大数据查询 | Hive、Presto/Trino、Spark SQL |
| 实时分析 | ClickHouse、DuckDB |
| 时序数据 | TimescaleDB(PostgreSQL 扩展) |
5. 各数据库特色
| 数据库 | 特色 |
|---|---|
| PostgreSQL | 功能最全,扩展性最强,开源首选 |
| MySQL | Web 应用最广泛,LAMP 栈核心 |
| SQLite | 零配置嵌入式,移动端/桌面标准 |
| SQL Server | Windows 生态,企业级功能 |
| ClickHouse | 列式存储,OLAP 极速查询 |
| DuckDB | 嵌入式 OLAP,数据分析新宠 |
6. 生态与工具链
-- PostgreSQL 常用命令
\l -- 列出数据库
\c mydb -- 连接数据库
\dt -- 列出表
\d tablename -- 描述表结构
\timing -- 显示查询时间
-- 执行计划
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 1;
-- 创建索引
CREATE INDEX idx_orders_user_id ON orders(user_id);
CREATE INDEX idx_orders_created ON orders(created_at DESC);
-- 窗口函数示例
SELECT
user_id,
order_date,
amount,
SUM(amount) OVER (PARTITION BY user_id ORDER BY order_date) AS running_total,
LAG(amount, 1) OVER (PARTITION BY user_id ORDER BY order_date) AS prev_amount
FROM orders;
-- CTE 示例
WITH monthly_sales AS (
SELECT
DATE_TRUNC('month', order_date) AS month,
SUM(amount) AS total
FROM orders
GROUP BY 1
)
SELECT month, total,
total - LAG(total) OVER (ORDER BY month) AS mom_change
FROM monthly_sales;
工具推荐:
- DBeaver — 免费跨平台数据库 GUI(支持所有主流数据库)
- TablePlus — macOS/Windows,界面优雅
- DataGrip — JetBrains,功能最强
- pgAdmin — PostgreSQL 专用
- VS Code + SQLTools 插件
7. 学习资源推荐
入门
- 🎮 SQLZoo — 最好的交互式 SQL 练习网站
- 🎮 Mode SQL Tutorial — 数据分析向
- 📘 Learning SQL(Alan Beaulieu,O'Reilly)— 系统入门书
进阶
- 📘 SQL Antipatterns(Bill Karwin)— 避坑必读
- 📘 High Performance MySQL(O'Reilly)— MySQL 性能优化
- 📘 The Art of PostgreSQL(Dimitri Fontaine)
练习数据集
- 🗃️ Northwind — 经典练习数据库
- 🗃️ Chinook — 音乐数据库
- 🗃️ Kaggle Datasets — 真实数据集
8. 避坑指南
- NULL 的三值逻辑:
``sql -- NULL 不等于任何值,包括 NULL 本身 SELECT NULL = NULL; -- NULL(不是 true!) SELECT NULL IS NULL; -- true -- 过滤 NULL 用 IS NULL / IS NOT NULL ``
- COUNT(*) vs COUNT(column):
COUNT(*)计算所有行(包括 NULL)COUNT(column)只计算非 NULL 值
- WHERE vs HAVING:WHERE 在分组前过滤行,HAVING 在分组后过滤组
- 隐式类型转换:
``sql -- 可能导致索引失效 WHERE user_id = '123' -- user_id 是 INT,但比较字符串 WHERE user_id = 123 -- 正确 ``
- N+1 查询问题:在应用层循环中执行 SQL 是常见性能杀手,用 JOIN 或 IN 批量查询
- 不加 WHERE 的 UPDATE/DELETE:
``sql -- 危险!更新所有行 UPDATE users SET status = 'inactive'; -- 好习惯:先 SELECT 验证,再 UPDATE ``
- 索引不是越多越好:索引加速读取但减慢写入,只在高频查询的列上建索引