我的 AI 编程旅程 Part 1
从去年12月开始高强度实践 AI coding 到现在三个多月,要歇一下了,这玩意儿快是快,累也是真累,大脑负荷比自己写代码还重。借此告一段落的机会梳理一下成果,记录于此备忘。
- revesi: 用 Python 编写的 Reversi(a.k.a. Othello,中文一般叫夹子棋)游戏,跨平台 GUI 应用,一开始用 Flet 框架,后来被其混乱的升级策略气晕,又换成了 Qt(PySide6);有完善的 UI ↔︎ Engine 协议体系,支持与各种不同语言编写的 AI 引擎对战以及引擎间大乱斗;可以玩也可以用于教学。
- 衍生了一篇自己觉得挺有意思的文章。
- sbs-ext: 给我的 Markdown 扩展标准 SBS 编写的几个扩展,可以用 Markdown 格式创作图文并茂的桥牌、国际象棋和围棋内容,使用最适合 AI 编程的 Python 和 TypeScript 语言编写,有个线上 demo。
- sct: 多年以前用 Objective-C 为 Rime 中州韵输入法 写过一个图形化配置工具 SCU,后来没时间维护,一致觉得心怀愧疚,现在好了,AI 让我可以比较轻松地维护这种级别的工具了,所以用新的 SwiftUI 重写了这个新的版本。
- qidao: 我觉得应该是目前 macOS 下最好的围棋工具,支持棋谱分析、棋谱编辑和对弈练习三模式无缝切换,使用了 SwiftUI 和 rust core 混合语言开发。因为受不了大量或烂尾或粗制滥造的围棋工具而写,专业领域的工具真是一言难尽。
- oasis: 用 Haskell 编写的大语言模型 client 库及用例,基本上是移植了之前用 Python 写的 MAL 和 modelbench 工具。
- 与之联动的是两篇文章:《什么是好的代码》《为什么你要学习类型系统》。经实践证明,Haskell 强大的类型系统和静态编译,确实可以降低代码中隐形错误的几率,整个开发过程除了被 Haskell 的 TUI 库坑了一阵以外都很顺利,但即使 Haskell 也无法阻止 AI 的一些先天陋习,比如放着代码中已有的共享框架自己另写一个,不断督促 AI 去重构以保持低熵依然是人类逃不掉的职责。
- mercury: 用 SwiftUI 编写的 AI 赋能的 RSS 阅读器,是这一批里面复杂度最高的软件,包含 300 多个 commits 大约 30000 行 Swift 代码,1.0 之后一共发布了 7 个功能版本,用了整个 2 月份来完成,现在算是功能比较完整的一个现代化 RSS 工具了。
- swift-readability: 在编写 Mercury 的过程中发现现有 Swift 的 Readability 库都没法用,干脆自己整了一个,完全原生 Swift,不依赖任何 JS 引擎,100% 通过了原版 Mozilla Readability JS 库的测试集,是个相当不错的副产品。这种已有完备测试集的库的开发实在太适合目前的 AI coding agent 了,以后写 test case 比写功能实现可能更需要人类(也更值钱)。
下一步打算好好总结一下经验教训,争取开发一个真正有用、能不断迭代的“AI时代软件工程”课程出来。
p.s. 发现我还是喜欢写有着简洁优雅设计的 GUI 应用,可能也是目前 AI coding 比较费劲的一个类型,经过这些玩意儿的洗礼,再去写一些命令行或者后台服务简直像度假。