Claude Code正成为编程标配:851分热帖的启示
关于Claude Code作为编程工作核心工具的讨论热度极高,反映开发者的广泛认可。
关于Claude Code作为编程工作核心工具的讨论热度极高,反映开发者的广泛认可。
我是如何将 Claude Code 用于工作、娱乐,以及把它当作文本编辑器的
作者:Gareth Dwyer · 2025 年 8 月
我在 6 月安装了 Claude Code。此前我尝试过 Cursor、Cline、Zed 和其他一些工具,但它们都让我觉得用起来很别扭,因为我习惯了在原生 vim 和终端里完成几乎所有事情。Claude Code 是我尝试过的第一个能够完美融入现有工作流,而不需要我去适应新工具的产品。
而且,它真的、真的很好用。
我很快就取消了 GPT 订阅,转而把每月 20 美元花在 Anthropic 上。失去 GPT 的高级语音模式,同时又要忍受 Claude 桌面端和移动端应用更严重的界面延迟,以及不够精致的体验,确实需要适应一下。但终端工具实在太有趣了,所以我并不在意。
几天之内,我就升级到了每月 100 美元的 MAX 套餐,以便试用 Opus,同时避免频繁触及使用上限。
下面是我到目前为止用它做过的一些事情。主要还是些娱乐性质的项目,用来摸索它的使用方式,但我也开始越来越多地将它用于“真正的”工作。
其中一些项目包括:一个实验性的“自主创业公司构建器”、一个(一次生成完成的)SplitWise 替代品、一个 AI 海报制作器、一个给 Hacker News 评论打分的浏览器插件、一个基础版 Trello 替代品,以及一些整理得井井有条的银行对账单。
下文会更详细地介绍其中大多数项目,不过过去几周带给我的主要心得是:
要有信心(始终使用 dangerously skip permissions 运行它,即便面对生产服务器和主力开发机这类重要资源也一样。如果你从事信息安全工作,可能最好现在就别读了——本文剩下的内容不会让你的心情好受半分。如果你决定继续,请把药放在手边)。
给它大量输入。输入越多,输出就越好。它确实是一种神奇的工具,但你仍然最好特别擅长沟通:要么在文本文件或交互式窗口中输入数千字,要么使用 TTS(我没试过,因为我讨厌听到自己的声音,但其他人反馈效果很好)。
考虑到它主要是一个文本模型,它在 UI 设计方面的表现好得出人意料。
让我们来试试凭感觉编程。
题外话:凭感觉编程的定义仍在不断变化,但对我而言,它指的是在不查看或编辑代码的情况下创建软件。你并不真正关心底层使用了什么语言或框架,只通过与模型聊天来开发代码。
我们准备开发一个基础版 SplitWise 克隆,以此充分检验 Claude Code 的能力。很多人会用 Trello 或待办事项列表作为 CRUD 应用的基础示例。我更喜欢使用 SplitWise,因为它足够简单,却没那么俗套,可能也没有那么深地内化在模型之中。
从一些人的角度来看,构建一个基础版 SplitWise 克隆仍然主要是在“复述”已有内容,但它确实包含一些人类和模型都容易处理错误的有趣边界情况。具体来说,就是邀请新用户,同时又允许现有用户提前开始添加支出,并将支出分配给仍处于待接受邀请状态的用户。
凭感觉编程最简单的形式是“一次生成式凭感觉编程”:你希望模型仅根据一条提示词就生成一个完全可用的应用程序,无需再告诉它应该修复、添加、删除或修改什么。
我稍微作弊了一下,因为我用来一次生成这个应用的提示词,在一定程度上参考了更早的尝试——那些尝试中,模型做了一些我不想要的事情。不过,下面展示的应用以及 smartsplit.verysmall.site 上的应用,确实就是执行 claude -p "Read the SPEC.md file and implement it" 后的输出。我的 SPEC.md 文件大约有 500 个英文单词(稍后会完整展示)。
这取决于过去几周或几个月里你使用 LLM 编程的程度:只用一条提示词就能得到一个功能复杂度中等、完全可用的 CRUD 应用,你可能会觉得惊讶,也可能觉得不过如此。从上面的截图中可以看到,它还有一些贴心的细节,比如为已注册用户自动填入姓名,而对于尚未注册的用户,则回退到显示其电子邮件地址。
我没有对它进行全面测试,但我尝试并抽查的几个场景都运行得完美无缺。
如果你对它能做到这种程度感到惊讶,那么你应该知道:a)这些模型的表现仍然不稳定——面对相同或相似的输入,它们的表现可能天差地别;b)它们对输入的质量和数量非常敏感。
例如,这里有一个完全无法使用的版本,就连最基本的注册功能都不能正常工作。我为这个版本使用的提示词几乎完全相同,只是对技术栈的指导少了一些,于是模型决定把事情做过头,将一切复杂化,最终连基本功能都构建不出来。
让我们看看这两个项目,以及生成它们的提示词。可用版本是一个 900 行的 index.php 文件,其中包含整个应用。损坏的版本则是一个拆分成客户端和服务器的 NodeJS 项目。单看代码行数,它并没有长多少——大约 1,000 行不含依赖的代码,分散在 15 个文件中。但对损坏的版本运行 npm i 后,它会拉取 500MB(!!)的依赖。
下面是完整的 SPEC.md。我交给 Claude Code 的提示词就是这个 SPEC.md 文件。两个版本中的内容几乎相同,唯一的区别是:在 PHP 版本中,我要求它保持简单、远离框架,并直接编写原始 SQL;在损坏的版本中,我则允许它随意发挥。
smartsplit-php [master+] $ cat SPEC.md
SmartSplit is a basic CRUD application like SplitWise that lets users split expenses and figure out who needs to pay what to who.
Specifically it has the following features
* A user can sign up with a name, email address, and password
* A user can create a new SmartSplit and give it a name
* A user can add expenses which have a name, an optional description, and an amount
* When adding an expense, a user can specify who paid for it, and who it should be split with
* IMPORTANT: a user can specify that other users are the person who paid, not only the logged in user
* IMPORTANT A user can add others users as the payer or as people to split with even if they haven't joined yet
* For users who haven't joined yet, the user can select them by the invited email address
* Invites are not sent by email, there is no email. THey're just used for unique usernames to manage access
* Once they've joined and added their name, the name should be shown everywhere instead of the email address
* When adding a new expense, the default is that it's split between all users (joined and invited)
* The adder can remove some users if some of them did not take part in that expense
* All splits are always even for simplicity, divided equally between all people specified for that expense
* A user can invite another user to a SmartSplit by specifying their email address.
* Each SmartSplit gets a unique 8-digit alphanumeric code that makes easy to share URLs
* Any user can create a new smartsplit, or join an existing one if they're logged in with an email address that was invited
* Even if that user doesn't yet have an aaccount on SmartSplit, they'll have access to any SmartSplits they're added to after signing up (This bit is important). If the invitee has added their email address, they should have access automatically.
* Any user can add, remove, or edit any expenses within a SmartSplit that they have access to
* Any user can press 'Tally up' which should calculate who needs to make what payments to who to split everything
## Implementation details
* Email addresses are usernames, all registration and login is done with only an email and password
* Passwords are hashed but no extra secrutiy like length or weak passwords or confirmed passwords is applied
* Once a user has registered, they are automatically logged in
* The login and register flow is the same, but the user is registered if they don't have an account and logged in if they do
## Techncial details
* Use a single index.php script for the entire app.
* SQLite for all database functionality.
* No frameworks, just vanilla javascript and css
* No ORMs, use raw SQL
* use a clean minimalist elegant design that's mobile responsive
最后这五个项目符号,就是两份提示词之间唯一的区别。因此从某种意义上说,它们实现了这样一种转换:把 500MB 无法运行的代码,变成了 30KB 可以正常工作的代码。
没错,这只是一个玩具示例,有些人会说 JavaScript 版本的扩展性更好,或者说些诸如此类的话。我不是来吵架的。我也讨厌 PHP,但在完全通过凭感觉编程构建的应用中,我正越来越频繁地使用它,因为 LLM 非常擅长编写 PHP。说到底,框架和抽象是为人类准备的,而不是为机器人准备的;在凭感觉编程中,它们往往不仅帮不上忙,反而会成为阻碍。
@levelsio 谈保持简单
Claude Code 的特别之处在于它并不是什么魔法模型。它在底层仍然使用 Sonnet 或 Opus,这两个都很出色,但它们做不了 Claude Code 能做的事情。Claude Code 的神奇就像一个魔术技巧——看起来令人惊叹,但一旦你看到原理就会发现意外地简单。
我一直告诉人们编程就是条件逻辑和循环(其实循环也只是条件逻辑)。所以如果你想成为程序员,学会什么是 if 语句就行了,然后去建造东西。
这是一个夸张的说法,但也有一定的道理。Claude Code 很好地演示了这一点。与我试过的其他工具相比,使其效果好得多的原因似乎是循环和条件的巧妙而简单的组合——重复调用 LLM,每次都提供特定上下文的指令。这使它能在提示之间的人工输入最少的情况下,在一个有用的循环中运行。
我首先想到的是扩展这个循环——也许是无限循环?如果给 Claude Code 一些资源,比如一个 root VPS,以及一些最小化指令让它永不终止、永远运行,它能走多远?
剧透:这就是它构建的东西。你可以访问它构建的创业公司 claude.dwyer.co.za,或者查看 GitHub 项目 github.com/sixhobbits/claude-experiments。
我在 Hetzner 上启动了一个便宜的 VPS,安装并授权了 Claude Code,然后花了一段时间试图让它写出自己关于构建自主创业公司的提示词,以及让它在没有我输入的情况下永远运行的循环逻辑。
我在让它理解不应该终止方面遇到了一些问题,所以我改为告诉它写一个基本的 bash 脚本,每当它检测到自己没有运行时就用 -p 标志调用 claude 并说"please continue"。
题外话:我遇到了一个小问题,Anthropic 决定不允许以 root 身份运行 Claude 并使用 --dangerously-skip-permissions / yolo-mode。你可以通过运行以下命令绕过这个愚蠢的保姆制措施:
它写了自己的提示词(链接)(我想不起我当时给它的确切提示词是什么了,不过肯定更简短一些,只是概述了构建自主创业公司的基本目标),评估了一堆创业想法,对它们进行了评分,然后开始工作。
我通过查看 GitHub 上的新提交来观看它编码一段时间。我意识到我仍然需要一种方式来引导它,因为它在编码时没有给我任何方式来运行应用。我加入了 HUMAN_INPUT 文件的想法,让它在每个循环中检查这个文件,并告诉它在继续开发更多功能之前确保应用可用且工作正常。
它想到的想法(服务器监控)完全没有任何意义,它甚至没有意识到这一点。这是一个 web 应用,所以它唯一能监控的服务器就是它自己运行的那个,但从文案来看它似乎认为这是一个 SaaS 工具,你可以注册并监控自己的服务器。你根本不能。
但这仍然是认真令人印象深刻的东西。它配置了一个完全运行的全栈 web 应用,包括 Nginx、证书等等。它在几乎没有我的任何输入的情况下进行真实(尽管方向有误)的开发工作。
题外话:我认识的大多数人会以与 AI 一直以来被批评的方式来批评这一点。"这不是真的,老兄,它只是模式匹配。它之前见过类似的东西。它甚至没有正常工作。一个实习生花点时间就能做到。"
这些批评的特点是,从我 2015 年开始接触基于字符的神经网络以来,我一直在听到它们。这些批评永远不会改变,只是论点的标准线不断移动。
不管怎样,我不想在这里深入讨论这个问题,但是 a) 我印象深刻。b) 我十年前甚至六个月前都不会预测出能做到这一点的人工系统,c) 其他声称相反的人可能是在说谎或有不可告人的目的。祝你有美好的一天。
大多数时候我可以通过以下方式与我的创业构建器交互:
在它停止工作之前,我从不需要 SSH 到 VPS。在 6 小时没有提交后,我不得不登录检查发生了什么:
[Fri 25 Jul 2025 02:29:41 AM UTC] Starting Claude process...
API Error: Claude Code is unable to respond to this request,
which appears to violate our Usage Policy
(https://www.anthropic.com/legal/aup). Please double press esc
to edit your last message or start a new session for Claude Code
to assist with a different task.
[Fri 25 Jul 2025 02:29:47 AM UTC] Claude process exited with
status: 1
Waiting 3 hours before restart..
呃哦。我们又被屏蔽了,我听说 Anthropic 有一个名声,即使是付费账户也会以很少或没有警告的情况下关闭。
我阅读了用户政策,看到我最近的输入告诉它继续营销创业公司以获得用户,可能触发了某个大哥哥开关。用户政策(显然我在注册时之前也读过。我总是在使用软件前阅读所有小字,你也应该这样做。但不知怎的我忘了这一点)规定自动发布的内容需要人工参与,Claude 正试图在没有我同意的情况下在 Hackernews 上推广该创业公司。(我不确定它是否有动力或能力来实际创建一个 HN 账户并开始发帖,但它不愿意尝试。)
所以我稍微调整了一下提示词,说它必须遵守这些规定,它需要要求我批准并发帖,而不是试图自己去做。
然后我把它的东西发布到 Hacker News 和 Reddit。幸运的是,我没有被任何一个因为垃圾邮件而被禁,但我确实被两个都忽略了。
我继续观看自主创业构建器。它开始谈论很多关于用户获取和转换指标,我认为这些主要是幻觉,尽管它从 nginx 日志和数据库中提取了一些东西。
它在试图通过免费试用和社交证明的东西来货币化时迷失了方向,虽然方向正确,但在上下文中完全没有意义,然后我决定关闭它,这样我就可以为一些更有用的东西保留我的(仍然有限的,即使在最大计划下)使用量。
该项目有 100 次提交,所以如果你想看看它到底做了什么,你可以查看每一次提交。
(更多内容在后面的部分,但它也是我的文本编辑器。看我在 Claude Code 中写这篇文章。)
我有机会在风险更高的事情上尝试 Claude Code 的第一次是当我从我的朋友 Nic 在 Slack 上收到直接消息时。
我最近从 Nic 接管了 ZATech.co.za Slack 社区。一个相关的项目是 Sboj——一个反向职位板(对名字稍微眯眼一下),已集成到 Slack 社区中用于招聘。
ZATech 和 Sboj,两个我接管的项目,我一直在努力找时间给予它们应得的关注。
这是一个 Laravel/PHP 应用,配有 MySQL 和一堆其他我几乎不熟悉的辅助工具(我通常的选择是 Python 和 Postgres),它在一个昂贵的托管服务上运行,对于流量和用户数量来说过度了。
我想把它迁移到我标准的便宜 hetzner VPS 设置,配有 nginx 和 lets encrypt,但 Nic 是该项目的创始人和唯一开发者,所以它没有详细的 README 说明其他人如何开始,而我没有时间深入这个代码库并找出所有的依赖项和设置步骤。
Claude Code?是的,请。
因为这不再是一个实验,我们需要更加谨慎。一个安全的步骤是在本地克隆代码库并要求 Claude 生成依赖项和设置说明的 README 文件。
它在分析代码库和告诉我我需要检查是否有权访问的依赖项方面做得很好。
它列出了我预期的东西(比如一些工作队列的东西)以及我没有预期的东西(比如我从未听说过的 Cloudflare Turnstyle)。
我点检了它提到的依赖项和 README 的其余部分。它似乎足够准确,所以我决定 Claude Code 已经获得了实际设置和运行该项目的权利。再一次,我的起点是一个全新的 VPS。
我手动安装并授权了 Claude,克隆了仓库,并获得了数据库转储文件。然后我启动了 Claude 并告诉它开始。
命令未找到。哦对,VPS,没有捷径。export IS_SANDBOX=1 && claude --dangerously-skip-permissions 就是这样。
它设置了我需要的所有内容,并使应用在临时域上运行。同时,我不得不在后台做一些老式的非 AI 工作,获得对各种账户的访问权限并将 2FA 转换为我的账户。
它在恢复数据库时遇到了一些问题,我很庆幸自己这次盯得更仔细了:由于没有正确的权限,它试图手动创建新的 SQL 转储文件,而这些文件只是我提供给它的实际转储文件的节选,想以此绕过权限问题。我让它直接给自己授予 SQL 数据库的超级管理员权限,再从那里恢复转储文件,之后就一切正常了。
题外话:有一次,它确实在我完全没有预料到的情况下删除了即将投入生产的数据库,而且根据它当时试图完成的任务,这么做并不合适。还记得前面我说过你需要有信念吗?这也意味着要预料到这类事情会发生,选择原谅、忘记并继续前进,而不是跑到互联网上和媒体面前大肆炒作“AI 失控了”。
我没有手动做过这次迁移,所以不知道自己究竟节省了多少时间,但我估计至少省下了 16~32 个小时——这些时间原本要用来充分学习一个新技术栈,让所有东西运行起来,并确信它确实在按照我的预期工作。
依靠 Claude Code 查找相关日志、调试 Turnstyle 错误、在研究如何迁移 Cloudflare 账户期间暂时关闭 Turnstyle,以及启动 Laravel worker 进程来处理后台分析任务,确实为我节省了大量时间。它还把邮件发送迁移到了 Resend;后来当我达到每天 100 封邮件的免费额度上限时,又轻松迁移到了 Brevo,后者每天免费提供 300 封邮件的额度。(如果你正在招聘技术人才,并且可以从南非招人,不妨看看 Sboj.dev。我们这里有一些非常优秀的人才,而且平台应该很快还会迎来一批升级和改善使用体验的更新。)
#你可以直接把东西做出来
这些只是我开始使用 Claude Code 以来,用它构建的一小部分东西。其中大多数都是实验性项目。我看到过一些报告,说它在超大规模的真实代码库上表现没那么好,但根据我的体验,只要给予足够的指导,如果它在这些场景中仍然没有用,我反而会感到惊讶。我依旧惊讶于:当你为它提供大量上下文和输入时,它作为工具的表现会好上那么多。下面是我让它生成的另外几个玩具项目——这些东西我已经想做几个月甚至几年了,却始终抽不出时间。现在,你只需要几分钟或几小时就能完成这类事情,而不再需要几天或几周。
构建一个 HackerNews 评论排序插件
HackerNews 上有些评论和它们所评论的文章完全无关,这经常让我很恼火。比如文章标题是“Bitcoin 采用新的 FlibbityGippity Protocol,现在每天可以处理 2.3 笔交易”,然后就会有人评论说所有加密货币项目都是骗局之类的话。需要说明的是,我并不在意评论本身的质量,也不在意自己是否赞同它;我只是一直想要一种直观的方式,跳过那些实际上与文章毫无关系的“噪声”评论。
我以前尝试构建过这个东西,但被更重要的事情分散了注意力,所以我决定用 Claude Code 从头再来。
它尝试了几次,才终于能在 HN 那套相当简单的 HTML 结构中正确显示徽章。不过,在几轮“还是不对,再试一次”或“多加一些调试信息,这样我可以把错误粘贴给你”之后,它做出来的东西几乎和我的设想一模一样。
它的外观之好让我很惊讶,比我平时临时拼凑的前端好看多了;它还主动加入了一些我没有要求的细节,比如非常漂亮的设置页面,甚至呼应了 HN 的橙色主题。
实际的排序效果并不是很好。我用的是 OpenAI,而不是 Anthropic。也许可以通过改进提示词,并增加一些示例来说明在我看来什么是“1 分”评论、什么是“5 分”评论,从而改善效果。不过它确实能用,而且至少到目前为止,整体方向看起来是准确的。
构建 Poster Maker——一个极简的 Canva 替代品
AI 在平面设计方面正变得越来越出色,我也认识一些用它生成基础海报的人。他们喜欢 AI 能够选择合适的背景图片,并且通常可以通过尺寸适宜的字体等方式把内容做得很好看;但令他们沮丧的是,AI 在生成包含文字的图片时仍然只能做到 80% 的准确度,而且经常出现拼写错误或其他瑕疵。
我本来打算建议他们使用 Canva、Slides.new 或其他替代方案。为了做一个简短的使用教程,我亲自试用了这些工具,结果发现它们多少都有些糟糕:要么已经被商业化折腾得面目全非,要么缺少基本的 AI 功能,要么对非技术人员来说过于复杂。
与其他项目相比,这个项目更像工程开发,而不太像凭感觉编程。我知道自己想要什么:一个非常简单的界面,可以把图片和文字组合起来,然后导出 A4 PDF。我以前尝试构建过类似的东西,也研究过不同的 PDF 创建库和 HTML→PDF 流程,因此知道这并不是一个容易解决的问题。
上一次解决类似的问题是在 2018 年,最后我通过一些取巧的方式接入 Google Docs 来创建 A4 PDF。不过,那更像是一个模板问题,而 Google Docs 并不擅长处理布局。
于是我构建了 posters.dwyer.co.za——它允许你使用 AI 生成背景图片。(所有东西都是我用 Claude Code 构建的,但我让它使用 GPT 来生成图片,因为我以前用过 GPT,而且我觉得它更好?老实说,我甚至不知道 Anthropic 是否提供图像生成 API,而直接使用自己熟悉的东西似乎更容易。)
题外话:这里还遇到了另一个小障碍。OpenAI 似乎会屏蔽 Anthropic 的爬虫,所以 Claude 无法阅读 OpenAI API 文档,也就没法弄清楚如何生成图片。我不得不把文档文件保存到本地,再让它参考这个文件。
这个项目花了几个小时来回调整。Claude 在 UI 方面的一些知识给我留下了深刻印象——当我告诉它自己想要什么时,它一次就选对了字体;同时,我也看到了它在其他方面的局限性——它总是以一种对用户极不友好的方式把元素叠在一起,侧边栏会时隐时现,并把所有东西挪来挪去。它显然完全不知道作为一个人类使用这类工具是什么感受。
不过,在明确告诉它各个元素应该放在哪里、应该具备什么行为之后,我得到的成品基本上和设想完全一致。经过第 6 次或