使用克劳德构建个人软件

本月初,作者用 Claude 将 Emacs 包的部分内容移植到 Rust 中,执行时间缩短了 1000 倍以上(一个具体案例:从 90 秒到约 15 毫秒)。这是作者日常会做的工作,此次 Claude 在作者监督下几乎无需作者写代码就能完成整个项目,大大加快了项目进度。

问题

过去一年左右,作者成为 Obsidian.md 的重度用户,取代了 Emacs org-mode 文件和 Workflowy。Obsidian 有很多优点,但主要问题是obsidian.el变得非常慢,打开任何笔记都会使 Emacs 卡顿,最初几秒,最终长达一分钟以上。问题在于obsidian-update函数,它会定期重新遍历整个 vault,扫描每个笔记的标签和元数据以更新内部清单,而这一用 elisp 编写的扫描过程非常慢。

计划

作者是一名还不错的 elisp 程序员,但没有优化经验,且 GitHub 问题已有其他人尝试。作者计划用 Rust 编写一个小程序来扫描和整理 vault 并输出最小元数据为 JSON,然后修改obsidian.el以使用该输出。作者认为这样的解决方案可能难以上游合并,但对自己使用来说是相对较小的项目。

使用 Claude

作者突发奇想让 Claude 解决这个问题,最初只是抱着试试看的心态。作者给出相对明确的请求,让 Claude 将obsidian-update函数的相关逻辑移植到 Rust 程序中并输出 JSON 格式数据,Claude 仅用一个提示就完成了,读取约 1000 行 Emacs Lisp 代码,识别相关代码,设计 JSON 格式,并用约 150 行 Rust 代码实现。Claude 甚至输出了包含所需依赖的Cargo.toml。作者进一步让 Claude 编写 Emacs 侧代码,也基本成功,只是有一个小 bug,Claude 很快修复。整个项目耗时约一个下午。

反思

  • Claude 比作者想象中更擅长代码:作者最初没抱太大期望,但 Claude 不仅能根据明确规格编写约 100 行代码,还能从 1000 行 elisp 代码中提取隐含规格并执行,在迭代过程中也表现出色,让作者印象深刻。但作者也意识到模型在不断进步,自己的预期可能落后,需要不断使用和交互来形成准确印象。同时,作者也意识到模型虽然比一年前好很多,但仍与专家人类表现有差距,处于不断进步的中间状态。
  • 感到兴奋:这个项目让作者重新感受到构建软件的兴奋,就像年轻时为解决自己的问题而编写软件一样。作者觉得 Claude 能帮助处理很多软件工程中的繁琐问题,让自己可以专注于高级设计和概念,重新找回那种创造的乐趣和可能性。
  • 意识到在与工具磨合:Claude.app 的设计在这个问题上并不理想,作者在复制粘贴文件和维护上下文方面遇到很多困难,这也让作者意识到围绕 LLM 的工具和界面设计落后于实际能力,仍在不断实验和发展。
  • 在定义接口间工作:与 Claude 合作时,作者本能地将问题分解为具有相对明确和可测试接口的部分,这样有助于自己理解和验证发生的事情,也便于调试和测试。作者认为这种模式在短期内仍将很有效,随着时间推移,Claude 处理更大子系统的能力将增强。
  • 代码比以往更便宜:作者认为代码本身相对便宜,软件开发中更有价值的是对代码的理解和知识。LLM 可能会在短期内进一步加剧这种情况,生成大量代码成本很低,但 LLM 在调试、重构等方面仍不如人类,因此理解和良好的架构设计将变得更有价值。这也可能影响到软件架构模式,如更容易删除代码、构建多语言系统等。
阅读 7
0 条评论