文章导读:从语言与系统基础,到软件设计和 AI 工程
这里的文章写于不同阶段:有语言特性的小实验,有源码阅读,有系统编程笔记,也有借助 AI 整理的课程与访谈。按发布日期翻阅,不一定容易看出它们之间的联系。这篇导读把已有内容按学习问题重新串起来,方便从当前需要解决的问题进入。
不必先读完所有基础,再接触感兴趣的主题。先选择一条路线,遇到具体概念再回到相关基础,通常更容易形成自己的问题。每组下面的顺序是阅读建议,不是完成时间表,也不代表读完就掌握了整个领域。
先选一个想回答的问题
| 你现在关心什么 | 可以从哪里开始 | 遇到困难时回看什么 |
|---|---|---|
| AI 能写代码以后,我还需要判断什么 | 生成式软件工程与 Clean Code 访谈 | 设计原则、版本管理和可验证的代码例子 |
| 代码一加需求就到处修改,怎么拆分 | C++ 设计模式系列 | 类、虚函数、组合和资源所有权 |
| 想从会写代码走向读懂库的实现 | 语言与内存,再读 Redis、muduo | 指针、模板、对象生命周期与并发基础 |
| 想理解网络服务器怎么工作 | 文件 I/O → socket → 多路复用 → muduo | 文件描述符、字节流、线程与锁 |
| 想知道 Agent 怎样在终端上安全执行 | Agent 安全总览 → 威胁模型 → 系统边界 | 操作系统权限、进程、文件与网络基础 |
一、AI 辅助开发:先理解责任,再组织任务和版本
这一组适合已经写过一些程序、想把 AI 引入开发流程的读者。先修不在于掌握复杂模型数学,而在于能够区分“生成了一段代码”和“完成了一个可以验证的需求”。
建议先读蒋炎岩《生成式软件工程》的前三讲,再用 Uncle Bob 的访谈换一个角度检查自己的判断:
- 第一讲:欢迎来到未来从模型与 Agent 的能力、意图和规格的差距,以及课堂实验出发,讨论生成成本降低后,工程工作为什么仍然存在。
- 第二讲:提示词、上下文与探索的组织方式把问题推进到任务执行:怎样说明完成标准,怎样提供上下文,怎样获得反馈,什么时候需要并行探索。
- 第三讲:软件仓库管理讨论成果怎样保存和汇合。从 Git 的快照、暂存区、提交与合并,走到仓库约定和多个 Agent 协作的问题。官方讲义的延伸讨论与视频内容在文中分别说明。
- Uncle Bob 访谈:AI 写代码之后,工程师关注什么整理 Kent C. Dodds 与 Robert C. Martin 的 Architecture, AI agents, and product empathy with Robert C. Martin,补上代码审查、架构、质量反馈与学习过程的视角。这期节目与 AI Agents for Clean Code 培训相关,但不是培训录像。
读这一组时,可以始终带着一个小任务:写下需求、列出验收条件,让 AI 实现,再检查结果与提交。目标是能解释哪里需要人作判断,以及判断依据是什么。这里提出的是阅读练习,不是文章已经提供的统一实验项目。
如果发现自己很难评价一段代码的结构,可以接着走设计模式路线;如果关注工具会读取什么、能执行什么,则转到最后的 Agent 安全路线。
二、软件设计:从变化出发,逐步找到合适的边界
这组内容使用 C++,适合已经了解类、继承、虚函数和基本对象生命周期的读者。设计原则并不只适用于 C++,但读具体代码时,需要能区分接口调用、对象创建和资源释放。
早期的《设计模式(一):设计原则》可以作为简短概念索引,了解稳定与变化、SOLID 和依赖方向。更完整的推导放在新整理的八篇系列中:
| 阅读顺序 | 这一篇想解决的问题 |
|---|---|
| 一:从变化出发,而不是从类图出发 | 用绘图程序的演化理解抽象,建立全课目录和模式选择方法 |
| 二:流程、算法、状态与通知 | 分辨固定流程的钩子、可替换算法、状态迁移与事件订阅 |
| 三:把创建对象的变化放到合适的位置 | 类型由谁选择,产品怎样成套创建,何时复制、何时分步构造 |
| 四:用组合拆开功能与变化方向 | 怎样避免为每一种功能组合建立一个新子类 |
| 五:四种接口隔离,四种不同的边界 | 简化子系统、管理访问、转换接口和协调对象,各自隔离什么 |
| 六:对象的唯一性、共享与历史快照 | 哪些状态应该唯一、可以共享或需要独立保存 |
| 七:职责链与命令,请求交给谁、怎样保存 | 运行时选择处理者,以及记录、组合和撤销一次行为 |
| 八:组合、遍历与操作扩展 | 树结构、遍历方式、操作和文法分别沿什么方向变化 |
八篇对应李建忠《C++ 设计模式》课程的 26 讲,按问题重新分组;第一篇保留文章与分 P 的对应表。它们是目前已经整理的课程笔记,不代表本站已经完成所有 C++ 课程或形成了完整的 C++ 教材。
读法可以很具体:先理解课堂的朴素方案,再想一次新需求会改到哪里,最后对照重构后的结构。文中的完整示例可以作为实验起点,但“示意片段”只用于说明关系,不应当作独立程序运行。也可以故意改一个条件,例如让命令执行失败、让观察者提前销毁,检查原先的契约哪里不够。
三、语言与内存:为源码阅读补上具体机制
这一组不是完整语言入门,而是围绕几个容易在源码中遇到的问题展开。建议已经能写简单 C++ 或 Java 程序以后,再按需要进入。
C++ 与 C:参数、所有权和数据表示
侯捷 C++ 六门课程导读提供从类设计、泛型与标准库,走向内存管理和程序启动的路线。这个系列正在整理,总导读只列已经成稿的文章,并逐篇注明实际覆盖的讲次。当前可以从下面几个具体问题进入:
- 下册导读把类接口、泛型与对象模型联系起来;类型转换进一步讨论构造函数与转换函数怎样影响表达式和重载选择;指针式类与函数对象说明类怎样提供访问和调用协议。
- auto 与引用可以接在类型转换之后阅读,区分类型推导、别名语义和重载调用的二义性,再用实际编译结果检查自己的判断。
- STL 六部件协作从一个统计任务理解容器、算法和迭代器;vector 与 array继续比较连续存储、容量变化与失效条件。
- deque、queue 与 stack在连续存储之后引入分段结构,再追问队列和栈对底层容器到底要求哪些操作,把结构选择与接口适配联系起来。
- C++11/14 导读说明新语言机制与库实现的学习关系;内存分配层次区分存储申请和对象构造,为后面的分配器、内存池和运行库分析准备概念。
- 默认入口与 CRT 启动流程把视角移到
main之外,学习怎样阅读历史运行库源码,以及怎样区分概念流程图和真实调用栈。它适合在了解对象生命周期后阅读。
已有的专项笔记可以穿插阅读:
- C++17 折叠表达式从变长参数求和进入,讨论怎样用折叠表达式组织参数包操作。适合作为阅读模板代码时的专项补充,先了解函数模板和参数包会更顺畅。
- GCC 5.4.0
shared_ptr引用计数源码阅读沿具体标准库版本分析引用计数结构。可以接在设计模式第六篇之后,继续追问共享所有权在实现层面怎样表达;文中的实现细节具有版本范围。 - Redis 源码阅读:简单动态字符串 SDS从 C 字符串的表示进入长度、容量、分配和拼接,比较文中涉及的 Redis 版本。适合练习“数据结构为什么长这样”,先熟悉指针、数组和内存分配。
这三篇可以形成一个小循环:先读语言表达方式,再看对象怎样管理资源,最后看库怎样为自己的需求选择数据表示。不要把某一版库的内部类名或内存布局当成语言标准的要求。
Java:时间模型与内存回收
Java 中时间处理按旧时间 API 与 java.time 梳理日期、时区、格式化和转换,适合遇到具体时间处理问题时查阅。
《深入理解 Java 虚拟机》第三章:垃圾收集器与内存分配策略从哪些内存需要回收、什么时候回收、怎样回收三个问题进入引用、可达性和收集算法。可以与 C++ 引用计数阅读对照,但不要把两种语言的生命周期模型简单等同。
旧笔记保留了写作时的版本与术语背景。复现 API、编译器行为或垃圾收集机制时,应先确认所用版本,再对照当前官方文档和实际结果。
四、Linux 与网络:从一次读写走向事件驱动程序
这条路线适合想理解服务器底层执行过程的读者。先修包括 C/C++ 基本语法、指针与缓冲区;读到多线程部分时,还需要补上共享状态和同步的概念。
Ubuntu 常见服务搭建记录记录了 SSH、Samba 与编辑器配置,正文使用 Ubuntu 16.04 环境。它可以帮助理解早期实验环境怎样准备,但属于历史配置记录,不是当前发行版的通用部署指南。
网络编程正文建议按以下顺序读:
- 《The Linux Programming Interface》File I/O整理 Michael Kerrisk 书中的文件 I/O 内容,从
open、read、write、close认识文件描述符与系统调用。 - socket 编程(一)进入地址结构、字节序、连接建立和通信例子。目标是能沿一次连接说明客户端和服务端分别调用了什么。
- socket 编程(二)继续讨论字节流上的应用消息边界、收发接口、地址查询和子进程回收。可以带着“接收到的字节怎样还原成一条消息”这个问题阅读。
- select、poll 与 epoll讨论同时等待多个描述符的方法及例子。先理解前面的连接与读写,再看就绪通知,能避免只记住几个 API 名称。
用 muduo 把零散机制接起来
本站 muduo 笔记以 v2.0.2 为阅读背景,适合完成上述基础后挑选具体模块分析:
| 文章 | 阅读重点与当前位置 |
|---|---|
| Timestamp | 时间表示、值语义、比较运算与小型基础类的实现 |
| Atomic | 原子操作封装及所用编译器接口,结合设计模式单例篇区分原子访问与完整同步协议 |
| Exception | 堆栈信息、符号转换与异常诊断,理解出错后怎样留下线索 |
| Thread | 进程与线程标识、线程局部存储、pthread_atfork 等相关机制 |
| MutexLock | 目前仅保留版本来源,是待补充的条目,尚无完整锁实现讲解 |
| 网络部分:EchoServer 入口 | 目前是连接建立、断开、消息到达和发送完成等事件的简短记录,尚未展开完整网络库源码分析 |
这些笔记可以帮助拆解基础组件,但不能代替整条网络调用链的阅读。一个有用的后续练习是从 Echo 请求出发,在相同版本源码中追踪:谁接收事件,谁拥有连接,回调在哪个线程运行,关闭时由谁释放对象。
五、Agent 终端安全:把“可以做什么”落到执行边界
这组文章关注 Agent 获得文件、进程、网络和插件能力以后,怎样定义与实施权限。建议先了解基本的 Agent 工具调用流程,以及操作系统里的进程、用户、文件和网络概念;Linux 路线能提供部分背景,Windows 与 macOS 的具体机制仍需分别学习。
这里有两篇容易混淆的 Roadmap:一篇是技术领域地图,另一篇是分阶段学习计划。中间五篇分别展开需要作出的安全设计判断。
| 建议顺序 | 文章与阅读目标 |
|---|---|
| 先看全貌 | AI 时代的终端安全技术栈 Roadmap:了解系统安全、执行链路、插件与审计怎样组成整体 |
| 明确要保护什么 | 智能体终端安全威胁建模:列出资产、攻击者、信任边界与攻击路径,避免直接堆拦截规则 |
| 找到底层支撑 | Windows 与 macOS 的系统安全基础:按平台认识权限、签名、审计、沙箱和凭证机制 |
| 限制实际执行 | Agent 运行时防护:把文件、网络、命令与审批策略落实到工具执行过程 |
| 管理扩展能力 | Agent 插件与 Skill 供应链安全:从来源、权限、依赖、更新和隔离考虑插件生命周期 |
| 让过程可复盘 | Agent 行为审计与敏感数据保护:关联任务与实际行为,同时避免日志再次暴露敏感数据 |
| 安排学习与产出 | AI 终端安全技术栈学习 Roadmap:参考阶段目标与练习清单,按自己的基础调整节奏 |
学习计划里的时间安排可以作为估算,不需要机械照搬。这组内容主要提供分析框架和方案要点,也不代表读完已经实现了完整安全产品。可以选择一项受控的小实验,画出工具调用经过的权限边界,再观察执行与审计结果是否一致。
怎样使用这里的视频笔记
vibe watching 表示文章经过 AI 辅助阅读和整理。它是一种资料整理方式,不是正确性的保证。阅读时应区分课程本身的观点、课堂代码的简化,以及整理者增加的现代实现和思考。
课程名称、讲者、对应讲次和主题,比某个可能失效的视频地址更适合长期保存。蒋炎岩《生成式软件工程》、李建忠《C++ 设计模式》和 Kent C. Dodds 对 Robert C. Martin 的访谈,各篇都保留了原课程或节目身份与所用回放版本。遇到其他尚未核实的讲者信息,不靠猜测补齐。
读到关键推导时,可以回到原讲的代码变化过程,再尝试自己复现。文章中的结论通常依赖某些前提:接口是否稳定、对象能否共享、回调是否同步、操作是否可撤销。把前提改一下,再看方案还能否成立,比只记住定义更有价值。
后续会逐步补充更精确的时间戳、思考题和复现线索;目前各篇的覆盖程度并不相同,不能假定每个结论都有逐分钟定位或配套练习。新的课程笔记也会在实际整理、核对并发布以后,再加入这份路线。