42 篇基础 + 8 篇 CMake + 21 篇实战,给三年后的自己
一、三年前的那个晚上
三年前一个周末,我在出租屋里写下 C++ Primer Plus 重读精讲的第一篇。
当时刚换工作,接手一个 60 万行的 C++ 项目。每天打开 IDE,面对那一堆文件夹,心里是慌的。语法我都认识,可项目为什么这么组织,为什么要分那么多层,为什么要用插件、IoC、MVVM。没人告诉我。
我逼自己把 C++ Primer Plus 重看一遍,把笔记整理成文章发出去。
没想过要写成一个系列。
只是觉得,如果当初有人帮我画一张"从语法到工业级"的地图,我不至于在前三个月那么痛苦。
第一篇发出去,有人留言说"终于有人讲这个了"。
于是有了第二篇。然后第三篇。
42 篇 C++ 基础写完了。8 篇 CMake 实战也写完了。今天,Aether 系列 21 篇,是这套系列的终章。
从入门到工业级,这条路我陪你走完了。
二、71 篇文章的全景地图
如果把这 71 篇文章比作一张地图,它长这样:
第一板块:C++ Primer Plus 重读精讲(42 篇)
基础语法 → 核心机制 → 标准库 → 高阶技巧 → 设计原则 ├── 变量/类型/函数 ├── 类/继承/多态 ──→ 为"为什么这么设计"打底 ├── 模板/异常/IO ├── STL 容器/算法/迭代器 ├── 智能指针/移动语义 └── 并发/原子操作关键词:“是什么"和"怎么写”。
那 42 篇解决的是最基础的问题。你看得懂每一行代码,但看不懂为什么代码要那么组织。
第二板块:CMake 实战(8 篇)
单文件 → 多目录 → 库管理 → 第三方集成 → 安装打包 ├── 最小 CMake 项目 ├── 目录结构与 target ├── 静态库/动态库 ├── find_package 原理 ├── 自定义模块 └── 安装与 CPack关键词:“怎么构建”。
那 8 篇补上了国内 C++ 教学最大的缺口。没有人教你怎么搭构建系统。42 篇学完语法,你写得出代码,但写不出一个"能交付的产品"。CMake 就是那道坎。
第三板块:Aether 实战(21 篇,本系列)
架构全景 → 核心机制 → 架构演进 ├── 01-03:插件系统(架构总纲) ├── 04-06:IoC / 分层 / 命令模式(设计模式落地) ├── 07-10:主题 / 权限 / 国际化 / 序列化(功能架构) ├── 11-13:类型擦除 / 生命周期 / 多线程(C++ 硬核技巧) ├── 14-16:信号槽 / 通信 / CMake 进阶(底层与构建) ├── 17-18:重构 / 测试(工程实践) └── 19-21:跨平台 / 架构演进 / 终篇(回顾与展望)关键词:“为什么这么设计"和"什么场景选什么方案”。
这个系列不是教你语法,也不是教你写 demo。它是一份"工业级 C++ 项目的解剖报告"。
三块拼在一起,才是一张完整的路线图:
| 板块 | 篇数 | 解决什么问题 | 学习成果 |
|---|---|---|---|
| C++ 基础 | 42 | 看得懂代码 | 语法过关 |
| CMake | 8 | 能构建项目 | 能搭工程骨架 |
| Aether | 21 | 懂架构设计 | 能设计可扩展系统 |
没有 42 篇基础,直接看 Aether,会看不懂。
没有 Aether 实战,只学基础,永远停留在"写作业"的阶段。
这三块,缺一个都不完整。
三、从语法学习者到架构设计者
我见过太多人卡在某个阶段再也上不去。
比如我一个前同事,C++ 语法滚瓜烂熟,模板元编程信手拈来。面试的时候什么难题都答得出来。但入职后看项目代码,他说了一句让我印象极深的话:
“每行代码我都懂,合在一起我不知道它们在干什么。”
这不是他的问题。这是 C++ 教育的普遍缺陷。
我们把大量时间花在"怎么表达"上,几乎没有花时间在"怎么组织"上。
回顾我自己的成长路径,大概分三个阶段:
第一阶段:语法学习者
目标:能写正确的代码。
这个阶段你在和编译器做朋友。你关心的是:这段代码能不能编译通过?这个模板特化语法对吗?auto 和 decltype 什么区别?
42 篇基础文章覆盖的就是这个阶段。当时每篇文章后面都有人留言说"终于弄懂了这个"。
标志性能力:给你一个需求,你能在 30 分钟内写出一个能跑的 demo。
第二阶段:工程实践者
目标:能写可维护的代码。
这个阶段你在和团队做朋友。你开始关心:这段代码别人看得懂吗?重用时会不会出问题?这个函数会不会被误用?
CMake 8 篇帮你搭好了工程骨架,Aether 前 10 篇带你见识了工业级的代码长什么样。
标志性能力:给你一个模块,你能独立完成开发、测试、打包。
第三阶段:架构设计者
目标:能设计可扩展的系统。
这个阶段你在和未来做朋友。你开始关心:如果需求变了,这套代码要改多少?如果新来 5 个人,他们能快速上手吗?如果这个模块要拆出去,成本高不高?
Aether 后 10 篇讲的就是这个阶段的东西。插件系统、IoC 容器、中间件管道、主题/权限/国际化的设计思路。
标志性能力:给你一个业务场景,你能设计出一套架构,让 10 个人同时开发而不互相踩脚。
三个阶段的核心转变
| 维度 | 语法学习者 | 工程实践者 | 架构设计者 |
|---|---|---|---|
| 关注点 | 编译器是否通过 | 团队是否看懂 | 系统是否可扩展 |
| 代码量 | 几千行 | 几万行 | 几十万行 |
| 时间跨度 | 单人一天 | 多人一周 | 多人半年 |
| 核心问题 | 对不对 | 好不好 | 值不值 |
| 失败代价 | 改代码重编 | 改接口重测 | 改架构重构 |
没有第一阶段,基础不牢。没有第二阶段,写不出产品。没有第三阶段,走不远。
但很多人从第一阶段直接跳,不是跳到了第三阶段,而是跳出了编程这个行业。
因为中间那段路,从"能写"到"能设计",没有人带。
这个系列,就是来带这一段。
四、Aether 给了你什么
回头看这 21 篇,有三样东西是实打实的:
1. 一个完整的工业级项目源码
Aether 不是一个教学 demo。它是一个真正跑在产线上的桌面应用框架。插件系统、IoC 容器、MVVM 数据绑定、中间件管道、主题引擎、权限框架、国际化方案。每一样都是真实的工业级实现。
你可以下载它,编译它,跑起来,然后一行一行读源码。
21 篇里每一篇都指向源码中的具体文件。你不只是在读文章,你是在带着地图逛一座真实的代码城市。
2. 一套可以复用的架构模式
不是每个项目都需要插件系统,不是每个项目都需要 IoC 容器。
但你一定会在某些时候面临这些问题:
- “这个模块太耦合了,怎么拆?”
- “业务逻辑散得到处都是,怎么收敛?”
- “加了新功能,老功能就崩了,怎么隔离?”
- “这个代码只有我能改,别人不敢动,怎么办?”
Aether 给的,不是"你就该这么写"的教条,而是一套经过验证的参考答案。
插件化对应解耦,IoC 对应依赖管理,MVVM 对应界面与逻辑分离,中间件对应横切关注点。
你不需要照搬。但你需要知道,在真实的工业项目中,这些问题有人解决过,方案在这里。
3. 一份从入门到工业级的路线图
这是我最想给你的东西。
前面说了,C++ 的教学最大的问题不是教得不够深,而是教得太"散"。
语法点一个一个讲,但没有人把这些点串成一条路。你学完 RAII,学完模板,学完多态,然后呢?
然后你看一个 60 万行的项目,还是不知道从哪里开始。
这个系列做的事很简单:把"然后"的那部分补上。
42 篇语法 + 8 篇构建 + 21 篇实战 = 71 篇。从"int a = 0;"到插件加载、IoC 容器、跨平台架构。
这条路,我帮你画出来了。
五、回到最初的问题
文章 01 的开头,我问了一个问题:
“第一次打开 Aether,我盯着屏幕看了 10 分钟,一个字都敲不出来。你呢?”
那之后我们聊了很多。
聊了插件系统的三种架构,聊了 IoC 容器背后的依赖注入原理,聊了为什么 MVVM 在桌面端比 MVC 好用。我们把 Qt 信号槽从源码到应用拆了个遍,把 C++ 类型擦除的四种方案全部列出来对比过。聊了权限系统的设计失误,聊了国际化不是翻译,聊了跨平台移植踩了哪些坑。
每篇文章下面都有你的留言。
有人问"那智能指针在 IoC 容器里怎么用",有人在文章里发现了 bug 并提了 PR,有人说"看了这篇我才知道以前写的都是玩具"。
这些留言,是这 21 篇能写下来的最大动力。
现在回到最初那个项目。
那个让我盯了 10 分钟的项目,那个让我写了删、删了写、反复崩溃的项目。
现在再打开它,我知道每一层为什么这么放,每一个类为什么这么设计,每一条 CMake 指令为什么这么写。
不是因为我变聪明了。而是因为我花了整整三年的时间,走完了从"语法学习者"到"架构设计者"的路。
而这条路,你已经在路上了。
六、接下来怎么走
系列结束了,你的学习没有结束。
如果你不确定下一步做什么,这里有三条路,选一条你感兴趣的:
路线 A:继续深挖,精读源码
Aether 源码里还有很多细节这 21 篇没有覆盖到。比如:
- 通信模块的完整实现
- 日志框架的设计细节
- 各个插件的具体业务逻辑
- 单元测试的编写策略
建议你用"特征驱动"的方式读源码。挑一个你当前工作中最头疼的问题,比如线程安全、模块解耦、配置管理,然后去 Aether 里找对应的实现。带着问题读,效率最高。
路线 B:动手实践,基于 Aether 模板做自己的项目
Aether 的插件架构天然适合做"上位机软件"的脚手架。
如果你想做自己的工具,可以基于 Aether 的框架搭起来。插件系统、IoC 容器、MVVM 绑定、主题切换。这些通用的基础设施已经写好了,你只需要写业务逻辑。
具体怎么做?文章 02 到 06 已经把核心框架的用法讲清楚了。打开 Aether 源码,边看边写。
路线 C:面试准备
这 21 篇覆盖了 C++ 后端/桌面开发面试中 80% 的架构类题目:
| 面试题 | 对应文章 |
|---|---|
| 如何设计一个插件系统? | 02, 03 |
| IoC 容器怎么实现依赖注入? | 04 |
| MVVM 在 Qt 里怎么落地? | 05 |
| 设计一个可扩展的命令系统 | 06 |
| 跨平台 C++ 项目怎么组织? | 19 |
| 如何做 CMake 模块化设计? | 16 |
| C++ 类型擦除有哪几种方式? | 11 |
如果你在准备 C++ 架构相关的面试,把这 21 篇里的设计思路理一遍,面试时至少不会没话说。
七、写在最后
三年前我写下第一篇的时候,没想过会有今天。
当时只是觉得,如果把这些笔记扔掉太可惜了,不如整理出来发到网上。有人看最好,没人看就当自己的学习记录。
没想到,42 篇基础写完了有人追着问有没有进阶。8 篇 CMake 写完了有人说"终于有人讲这个了"。21 篇 Aether 写完了,有人私信我说"因为你的系列,我拿到了 offer"。
如果这个系列真的帮到过你,哪怕只是一篇文章里的一个知识点让你在工作里少踩了一个坑,那我就觉得这三年值了。
最后,我想请你做一件事。
这篇是终章,但我希望它不是你和"工业级 C++"的告别。它是一个起点。
请你在这篇文章下面分享你和 C++ 的故事。可以是你的入门经历,可以是你在某个项目里踩过的坑,可以是看到这个系列后改变了自己写代码的方式。
三年时间,71 篇文章。从语法到架构,从入门到实战。
这条路,我帮你画了地图。真正要走过去的,是你自己。
如果你身边有朋友正在从 C++ 入门迈向工业开发,转发给他。
这篇不仅是一篇文章,是一份三年来走过的完整路线图。
🖊️ 欢迎评论区写你的 C++ 成长故事。
🔄 转发给一起在这条路上走的人。
这 21 篇属于 “Aether 实战系列”,前 42 篇参见 “C++ Primer Plus 重读精讲”,中间 8 篇参见 “CMake 实战系列”。
感谢一路陪伴。