AI 时代的软件工程与架构能力提升路线
目录一、为什么现在需要刻意提升“工程能力”二、需要提升的能力到底是什么三、AI 编程时代最重要的思维转变3.1 不要把 AI 当成“程序员”四、正确的方式让 AI 成为“施工队”五、一个非常重要的能力软件设计六、工程能力的核心概念6.1 高内聚6.2 低耦合6.3 接口与抽象6.4 可扩展性七、AI 编程时应该建立固定工作流Step 1先让 AI 分析需求Step 2让 AI 给出技术方案Step 3确定模块边界Step 4定义接口Step 5让 AI 编写代码Step 6让 AI 做 Code ReviewStep 7测试Step 8重构八、结合 GIS Electron 项目进行训练九、学习过程中不要追求“设计得越复杂越好”十、五个核心学习资源第一阶段 ⭐⭐⭐⭐⭐1. MIT Software Construction第二阶段 ⭐⭐⭐⭐⭐2. 《重构》Refactoring第三阶段 ⭐⭐⭐⭐3. 《设计模式》第四阶段 ⭐⭐⭐⭐4. Clean Architecture第五阶段 ⭐⭐⭐⭐5. Designing Data-Intensive Applications十一、最终学习顺序十二、最重要的学习原则十三、最终目标十四、最终路线总结一、为什么现在需要刻意提升“工程能力”随着 AI 编程工具越来越强写代码本身正在变得越来越容易。现在很多功能都可以通过描述需求 → AI 生成代码 → 运行 → 修 Bug快速完成。但在实际开发过程中会逐渐发现另外一个问题功能虽然实现了但是代码可能越来越难维护Bug 越来越多模块之间耦合严重后续需求一变化就需要大面积修改。这说明问题已经不再单纯是“编程能力不足”而是开始涉及软件工程能力软件设计能力产品设计能力架构设计能力重构能力测试能力系统设计能力因此AI 编程时代真正需要提升的并不是单纯的“写代码速度”而是从“会写代码”逐渐提升到“会构建软件”。二、需要提升的能力到底是什么很多时候会把这些能力统称为“架构能力”但实际上它们是一个逐层递进的体系。软件工程能力 │ ├── 需求分析 / 产品设计 │ ├── 软件设计 │ ├── 模块划分 │ ├── 抽象 │ ├── 接口设计 │ ├── 解耦 │ └── 设计模式 │ ├── 工程质量 │ ├── 测试 │ ├── Debug │ ├── Code Review │ ├── Git │ ├── 日志 │ └── 错误处理 │ ├── 架构设计 │ ├── 分层 │ ├── 模块边界 │ ├── 数据流 │ ├── 状态管理 │ ├── 系统通信 │ └── 可扩展性 │ └── 软件演进 ├── 重构 ├── 维护 ├── 性能优化 └── 需求变化因此目标并不是单纯学习“架构”。真正应该建立的是软件工程 → 软件设计 → 架构设计 → 系统设计这一整套能力。三、AI 编程时代最重要的思维转变3.1 不要把 AI 当成“程序员”传统的 AI 编程方式很容易变成我想实现 XXX ↓ 告诉 AI ↓ AI 写代码 ↓ 运行 ↓ 出现 Bug ↓ 让 AI 修 Bug ↓ 继续增加功能 ↓ 代码越来越复杂短期看效率非常高。但是长期容易出现功能 A ↓ 功能 B ↓ 功能 C ↓ 功能 D ↓ 模块之间开始互相依赖 ↓ 修改 A 影响 B ↓ 修改 B 影响 C ↓ AI 开始不断打补丁 ↓ 项目越来越难维护四、正确的方式让 AI 成为“施工队”更合理的模式应该是人负责设计和决策AI 负责实现和辅助分析。也就是说需求 ↓ 需求分析 ↓ 方案设计 ↓ 模块划分 ↓ 接口设计 ↓ 数据流设计 ↓ 异常场景分析 ↓ 测试方案 ↓ AI 实现 ↓ Code Review ↓ 测试 ↓ 重构AI 可以帮助写代码查 Bug生成测试分析代码重构生成文档Code Review分析技术方案但是最终应该由开发者负责需求理解架构决策模块边界技术选型数据结构接口设计代码质量软件整体结构五、一个非常重要的能力软件设计例如现在需要实现一个 GIS 模型加载功能。最简单的思考方式点击按钮 ↓ 选择文件 ↓ 加载模型但是工程化之后需要考虑用户选择文件 ↓ 文件格式检查 ↓ 文件存在性检查 ↓ 模型解析 ↓ 坐标系检查 ↓ 坐标转换 ↓ 模型加载 ↓ 加载进度反馈 ↓ 加载成功 / 失败 ↓ 资源管理 ↓ 场景管理进一步还需要考虑如果文件不存在怎么办如果文件格式错误怎么办如果模型非常大怎么办如果用户中途取消怎么办如果加载失败怎么办如果模型已经加载过怎么办如果坐标系错误怎么办如果同时加载多个模型怎么办如果关闭项目怎么办下次打开项目是否需要重新加载这就是从“实现功能”转向“设计软件”。六、工程能力的核心概念在学习过程中需要逐渐掌握以下概念。6.1 高内聚一个模块应该尽量只负责一类相关事情。例如ModelService主要负责模型相关业务而不是同时负责ModelService ├── 模型加载 ├── UI DOM 操作 ├── 文件选择框 ├── 日志输出 ├── 数据库操作 └── 用户权限6.2 低耦合模块之间应该尽量减少直接依赖。例如业务代码 ↓ 内部接口 ↓ 具体实现而不是业务代码 ↓ 直接调用第三方 GIS SDK ↓ 直接操作 Electron API ↓ 直接操作文件系统这样以后更换技术方案时会容易很多。6.3 接口与抽象例如模型加载ModelLoader │ ├── OSGBLoader ├── Tiles3DLoader ├── GLTFLoader └── OBJLoader业务层只关心load()而不需要知道具体实现。6.4 可扩展性好的设计应该尽量做到增加新功能时主要是增加代码而不是大量修改旧代码。例如ModelLoader │ ├── OSGB ├── 3DTiles ├── GLTF └── 新格式以后增加新格式时不应该把整个系统重新修改一遍。七、AI 编程时应该建立固定工作流以后可以逐渐形成自己的 AI Coding Workflow。Step 1先让 AI 分析需求不要直接让 AI 写代码。先问请先分析这个需求涉及哪些模块 不要写代码。 请告诉我 1. 功能边界 2. 模块划分 3. 数据流 4. 状态变化 5. 异常情况 6. 潜在风险Step 2让 AI 给出技术方案请给出两个或三个实现方案 分析它们的优缺点。 不要直接写代码。Step 3确定模块边界例如UI │ ↓ ModelService │ ├── ModelLoader ├── CoordinateService └── SceneServiceStep 4定义接口先确定ModelLoader ↓ load() cancel() getProgress() dispose()然后再写具体实现。Step 5让 AI 编写代码这时候 AI 才开始真正进入“施工阶段”。Step 6让 AI 做 Code Review可以固定询问请从以下方面 Review 这段代码 1. 是否存在高耦合 2. 是否违反单一职责 3. 是否存在重复代码 4. 是否存在隐藏状态 5. 是否存在资源泄漏 6. 是否存在异常处理缺失 7. 是否容易测试 8. 如果需求发生变化哪里最难修改 9. 是否存在过度设计 10. 是否存在潜在 BugStep 7测试至少考虑正常情况 异常情况 边界情况 并发情况 用户取消 资源释放 重复操作Step 8重构最终形成需求 ↓ 设计 ↓ AI 实现 ↓ 测试 ↓ Review ↓ 重构而不是需求 ↓ AI 写代码 ↓ 不断打补丁八、结合 GIS Electron 项目进行训练目前正在接触的技术栈非常适合训练软件工程能力。例如Electron │ ├── Renderer │ ├── Main Process │ └── IPC │ ↓ GIS Engine │ ├── 3D Tiles ├── OSGB ├── GLTF └── Terrain如果进一步涉及ZMQ ↓ 后台服务 ↓ GIS ↓ AI还可以进一步训练进程间通信消息通信异步任务状态管理错误处理资源管理网络通信并发服务拆分这些都属于非常有价值的软件工程训练。九、学习过程中不要追求“设计得越复杂越好”这是非常重要的一点。学习架构以后很容易产生一个误区interface factory service repository adapter facade controller ...然后一个简单功能写成几百行代码。这并不是好的架构。真正应该追求的是合适的复杂度。也就是说简单需求 ↓ 简单设计 复杂需求 ↓ 复杂设计而不是简单需求 ↓ 复杂设计因此学习架构的目的不是“把项目设计得高级。”而是在面对复杂度时有能力控制复杂度。十、五个核心学习资源下面按照推荐学习顺序排列。第一阶段 ⭐⭐⭐⭐⭐1. MIT Software Construction目标建立真正的软件工程基本功。重点学习SpecificationTestingDebuggingCode ReviewGitAbstract Data TypesInterfaceImmutabilityDesign PatternsConcurrencyThread SafetyNetworking核心目标让代码安全、容易理解、容易修改。这门课特别适合作为第一阶段因为它不是单纯教“怎么写代码”而是在训练如何构建能够长期维护的软件。建议学习方式学习一个概念 ↓ 理解概念 ↓ 在自己的 GIS 项目中寻找对应场景 ↓ 让 AI 帮你实现 ↓ 自己 Review ↓ 重构第二阶段 ⭐⭐⭐⭐⭐2. 《重构》Refactoring作者Martin Fowler目标解决代码已经能运行但是越来越难维护怎么办重点学习Code SmellExtract MethodExtract ClassRenameMove MethodReplace ConditionalSimplify ConditionalRemove DuplicationEncapsulationSafe Refactoring真正需要理解的是为什么代码需要重构以及什么时候应该重构例如一个函数 300 行 ↓ 为什么有问题 ↓ 职责是否太多 ↓ 哪些部分可以独立 ↓ 拆分 ↓ 测试 ↓ 继续观察这本书对于 AI 编程尤其重要。因为 AI 很容易快速生成大量代码而重构能力决定了你能不能把这些代码逐渐整理成一个长期可维护的系统。第三阶段 ⭐⭐⭐⭐3. 《设计模式》目标学习如何解决反复出现的软件设计问题。重点理解StrategyFactoryObserverAdapterFacadeCommandStateDependency InjectionComposition不要把重点放在“背 23 种设计模式。”而应该放在为什么这个问题需要这种设计例如 GIS 模型加载ModelLoader │ ├── OSGBLoader ├── Tiles3DLoader ├── GLTFLoader └── OBJLoader这里可以学习StrategyFactoryInterfaceDependency Injection第四阶段 ⭐⭐⭐⭐4. Clean Architecture目标开始建立真正的架构思维。重点理解UI ↓ Application ↓ Domain ↓ Infrastructure以及Dependency RuleBoundarySeparation of ConcernsDependency InversionUse CaseEntityAdapter需要特别注意Clean Architecture 是帮助你理解架构原则的工具而不是要求所有项目都严格按照固定模板实现。不要为了“架构”而架构。应该根据项目复杂度决定小项目 ↓ 简单模块化 中型项目 ↓ 分层 明确边界 大型项目 ↓ 进一步考虑领域、基础设施、系统边界第五阶段 ⭐⭐⭐⭐5. Designing Data-Intensive Applications作者Martin Kleppmann简称DDIA这是从“软件工程 / 软件设计”继续向“系统设计”发展的重要一步。重点学习DatabaseStorageReplicationPartitioningDistributed SystemsTransactionsConsistencyBatch ProcessingStream ProcessingMessage SystemsData Models它解决的是更大规模的问题一个程序 ↓ 多个模块 ↓ 多个进程 ↓ 多个服务 ↓ 多个机器 ↓ 大量数据 ↓ 分布式系统对于以后接触GIS 数据平台遥感数据处理超算AI 服务ZMQ消息队列大规模空间数据都会非常有价值。十一、最终学习顺序按照这个顺序学习AI 编程 │ ↓ ┌──────────────────────────┐ │ 1. MIT Software │ │ Construction │ │ │ │ 软件工程基本功 │ └────────────┬─────────────┘ ↓ ┌──────────────────────────┐ │ 2. Refactoring │ │ 《重构》 │ │ │ │ 代码质量 / 可维护性 │ └────────────┬─────────────┘ ↓ ┌──────────────────────────┐ │ 3. Design Patterns │ │ 《设计模式》 │ │ │ │ 软件设计 / 抽象 / 解耦 │ └────────────┬─────────────┘ ↓ ┌──────────────────────────┐ │ 4. Clean Architecture │ │ │ │ 系统架构 / 模块边界 │ └────────────┬─────────────┘ ↓ ┌──────────────────────────┐ │ 5. DDIA │ │ Designing Data- │ │ Intensive Applications│ │ │ │ 系统设计 / 分布式系统 │ └──────────────────────────┘最终形成写代码 ↓ 软件工程 ↓ 软件设计 ↓ 架构设计 ↓ 系统设计十二、最重要的学习原则不要采用看书 ↓ 记笔记 ↓ 看下一本书 ↓ 继续记笔记而应该采用学习概念 ↓ 寻找真实项目中的问题 ↓ 用概念分析问题 ↓ 修改项目 ↓ 让 AI 辅助实现 ↓ Review ↓ 测试 ↓ 重构也就是说用项目学习而不是用书本学习。十三、最终目标最终不是为了成为“最懂设计模式的人。”也不是为了成为“最懂架构的人。”而是为了成为一个能够利用 AI 高效率构建、维护和演进软件的人。理想状态应该是你 │ ├── 理解需求 ├── 做产品判断 ├── 设计系统 ├── 划分模块 ├── 定义接口 ├── 控制复杂度 └── 做技术决策 │ ↓ AI │ ├── 生成代码 ├── 生成测试 ├── 分析 Bug ├── Code Review ├── 重构 └── 生成文档 │ ↓ 最终软件这样AI 越强你的生产力反而越高。因为你不再只是“让 AI 帮我写代码。”而是“我知道我要构建什么也知道应该怎样构建让 AI 帮我把它快速实现出来。”这才是 AI 编程时代真正值得培养的核心能力。十四、最终路线总结阶段学习资源核心能力最终解决的问题1MIT Software Construction软件工程怎么写出可靠、可维护的代码2《重构》代码质量代码越来越乱怎么办3《设计模式》软件设计模块怎么组织、怎么解耦4Clean Architecture架构大型项目怎么划分边界5DDIA系统设计大规模数据和分布式系统怎么设计最终形成软件工程 → 重构 → 软件设计 → 架构 → 系统设计而 AI 则贯穿整个过程成为你的编码助手 测试助手 Review 助手 重构助手 架构讨论伙伴。核心思想不要和 AI 比谁写代码快而要提升自己“设计和构建软件”的能力。最后经过提炼把这五步按照工程学和架构知识进行提炼总结了五篇文档如下1.MIT Software Construction软件工程核心知识提炼2.《重构》代码质量与持续演进能力提炼3.《设计模式》软件设计与解耦能力提炼4.Clean Architecture架构与系统边界能力提炼5.《Designing Data-Intensive Applications》系统设计与分布式能力提炼
上一篇/下一篇内容由系统自动关联
返回资讯列表 →