自四月份发布 Opus 4.7 以来,我再也不手写代码了。我只和 Claude Code 对话。并不是因为我懒惰或不喜欢编码,而是因为他比我更优秀。而且更快速和更便宜。然而,对于大多数任务,我不能让他完全自动执行在 “auto mode” 中。因为他的标准低于我对初级开发人员的期望。他就像 莫格利:聪明而强壮,但粗鲁而笨拙。我的工作是教他优雅,用我的方式。与大多数开发人员不同,我可以与他一起做到这一点。
我知道他的生活最初几个月在野外度过。技术上,是在 GitHub、StackOverflow 和软件开发博客和书籍中。这是他学习他人如何编码的地方,通过查看数十亿行代码。显然,我们不能期望大多数代码行都很漂亮。我们甚至不能期待它们是正确的。
然而,尽管正确性是一个可以验证的确定性类别,代码美观却不是。不仅几乎不可能验证,而且难以表述。不仅因为这是个人品味的问题,而且因为它是一种 情感,而不是算法。你要么感受到它,要么不感受到。
让我通过分享我在编程中特别反感的一些事项的列表来举个例子:
“知识重复”
Global state
可变对象属性
“被吞噬的异常”
NULL references
一个类继承另一个类
类型转换或内省
接受10个或更多参数的函数
封装了10个以上属性的对象
复合变量名
代码中的注释
文档中的表情符号 😢
这只是我所说的源代码“丑陋”的一个小部分。我相信你会对其中一些事项表示同意,对其他一些表示不同意,对其余的一无所知。如果克劳德看到这个清单,他会做出类似的反应。
功能优先,美学其次。我们在编程学校中隐式教授这个原则。克劳德也通过看那些亿万行代码来学会了这一点。如果算法不起作用,你的代码有多漂亮就无关紧要。这是他的哲学,也是百万人类程序员的哲学。
我相信相反的观点:美学高于功能性。仅仅因为设计优雅的软件比制作可工作的软件更容易修复。
缺乏优雅,我不仅指不一致的缩进,尽管这是一个明显的罪过。我还指的是缺乏模块化,不足的错误处理,不一致的命名,紧密耦合,低内聚度和高复杂度。如果你读过《代码大全(2004)》和《对象思考(2004)》,你知道我在说什么。软件在功能上可能是正确的,即使违反了大部分原则。但它将是“丑陋”的软件。对我来说,也许对你们中的一些人来说也是如此。但对克劳德来说不是。
十亿行Java程序教给他将源代码视为用户意图和计算机之间的“过渡副产品”。然而,我更喜欢与将源代码视为一种艺术品、一个独立产品的程序员一起工作。我希望他们能“感受到”他们编写的代码的美。
很难找到并招募这样的人。将一个不在乎的普通程序员转变成一个“审美家”更难。与大多数人不同,克劳德·代码可以被转变。
通常是借助胡萝卜和棍子的方法。
“胡萝卜”是CLAUDE.md文件,主体宣言。这是我的,存储在这个仓库中。在文件中,我向克劳德传道,试图阐述对我来说美是什么。这很难,因为我必须在系统提示中保持简洁。这就是为什么我听起来相当突兀,就像你看到的那样。
“棍子”是风格检查器和静态分析器。多年来,我一直在我的存储库中使用它们,但我的武器库有限。我被迫使用PMD、Checkstyle、Rubocop、Pylint以及市场提供的其他任何东西。制作自己的检查器是一项我没有时间或技能的复杂任务。今天,我可以制作自己的检查器,因为我有了克劳德。
这里有一个例子。最近,我推出了一个新版本的Qulice,一个用于Java代码的检查器。它使用59个额外的检查器扩展了PMD和Checkstyle。新的检查器表达了我对Java代码的个人喜好,有时与社区认为正确的不同。Qulice不是一个新项目。它已经有14年了。然而,直到最近我才能实现所有这些额外的检查器。因为我有了克劳德才有可能。
再举一个例子。我已经使用Rubocop超过10年了。这是一个用于Ruby代码的惊人风格检查器。然而,它缺少一些我个人品味要求的重要规则。一个月前,我为Rubocop实现了一个扩展。现在我装备齐全了。当然,实际上是克劳德实现了它,而不是我。
胡萝卜(宣言)和棍子(检查器)的结合起到了作用。宣言鼓舞了克劳德做正确的事情。检查器惩罚他做错的事情。当然,检查器只涵盖美的可以形式化的部分。不一致的缩进,NULL引用或类型转换——工具可以捕捉到这些。紧密耦合,低内聚度或笨拙的错误处理——没有检查器能感知(到目前为止!)。那沉重的一半留在宣言上。
当宣言是激励性的,检查器是强大的时候,克劳德开始“感受”我了。嗯,至少看起来是这样的(或者也许它确实感觉到我了?!)。他欣赏我的观点,很少写任何与之相悖的东西。当他这样做时,检查器会惩罚他,并且他会记住。
我无法想象有人会做出相同的反应。几年前,我雇了一个不太在乎代码优雅的人。然而,他在算法方面表现良好,并且对Java很熟悉。显然,他还没有准备把美学放在功能性之上。他两周后就辞职了。
克劳德不会辞职。而且他每月只需要108美元。
Translated by ChatGPT gpt-3.5-turbo/42 on 2026-05-29 at 11:33
