David Crawshaw 博客全站深度笔记

crawshaw.io —— 一位硬核程序员 12 年的思考与探索
笔记整理 | 涵盖 2014–2026 年关键文章
AI Agents Go SQLite Cloud Software Philosophy

一、作者画像:David Crawshaw 是谁?

David Crawshaw 是一位资深的系统程序员和创业者。他曾在 Google 工作多年,参与了 Fuchsia 操作系统、Google+ 等项目的开发,也是 Tailscale 的联合创始人之一(VPN/网络安全领域非常成功的产品)。2026年,他又创办了 exe.dev,致力于打造"真正好用的云"。

Crawshaw 的写作风格极为鲜明:技术深度 + 哲学思考 + 个人叙事。他不写"10个Go最佳实践"这类快餐文章,而是分享自己多年来在技术前沿的真实实践、失败教训和深层观察。他的文章往往从一个具体的技术问题出发,最终抵达对软件行业、甚至社会趋势的深刻判断。

Crawshaw 的技术背景:

  • Google 资深工程师(Fuchsia OS、Google+)
  • Tailscale 联合创始人(网络安全/虚拟组网)
  • exe.dev 创始人(为 Agent 时代重新设计云基础设施)
  • Go 语言深度用户和贡献者(sqlite 绑定、CGO 优化等)
  • 从底层系统到前端产品的全栈能力

二、博客文章全景图

crawshaw.io 从 2014 年到 2026 年,累计发表了约 50 篇文章。这些文章可以按照主题划分为六大板块:

2.1 六大主题板块

  • AI / LLM / Agent 革命(2025–2026,4篇核心长文)—— 最前沿的实践复盘
  • 云计算与基础设施(2026,2018)—— exe.dev 的理念、单进程编程哲学
  • Go 与 SQLite 工程(2016–2019,约10篇)—— 编译器、运行时、数据库接口设计
  • 软件工程哲学(2018–2021)—— 兼容性、实验文化、Finalizer、日志
  • 互联网与社会观察(2018–2020)—— 创意互联网、LAN怀旧、身份不对称
  • 个人成长与选择(2015–2018)—— 离开Google、遗憾推理、写作

2.2 最值得精读的 10 篇文章

  • 2026-04I am building a cloud —— 为什么今天的云是"错误形状"的
  • 2026-02Eight more months of agents —— Agent 编程八个月深度复盘
  • 2025-06How I program with Agents —— Agent 定义、实践与容器化未来
  • 2025-01How I program with LLMs —— 自动补全、搜索、对话式编程
  • 2020-01Remembering the LAN —— 90年代 LAN 的魔法与 Tailscale 的起源
  • 2018-07One process programming notes —— 单进程哲学:1 VM + 1 Zone + Go + SQLite
  • 2018-07Reasoning with Regret —— 用"80岁的自己会后悔什么"来做决策
  • 2018-05Searching the Creative Internet —— 创意互联网被商业搜索淹没了
  • 2018-04The Tragedy of Finalizers —— 为什么 Finalizer 几乎不可能用好
  • 2018-03Experimentation Adrift —— Google+ 的 A/B 测试为什么失败了

三、主题一:AI / LLM / Agent 革命(2025–2026)

这是 Crawshaw 博客最近、最密集、也是最有价值的部分。作为一个每天真正用 Agent 写代码的创始人,他的观察比任何评论员都更有说服力。四篇文章构成了一个完整的认知框架。

3.1 Agent 的进展:模型能力是一切

核心数据点:

时间点模型Crawshaw 代码占比
2025年2月Claude Code(早期)约 25%
2026年2月Opus(最新)约 90%

工作模式转变:大公司 80:20(读:写)→ 创业 50:50 → Agent 时代 95:5

Crawshaw 的判断非常犀利:Agent harness(框架)没有太大进步,他自己六个月前的 Sketch 能做的事情,今天最流行的 Agent 也做不到。他将框架创新比作"1990年代兆赫兹爆发时期的编译器优化"——重要,但不是最激动人心的。真正改变一切的是模型本身

可学习之处:

  • 忽略公共 benchmark——它们都被刷爆了。关注定性的、来自真实使用的感受。
  • Agent = 9 行代码——一个包含 LLM 调用的 for 循环,让模型能执行命令并看到输出。简单得令人震惊,但效果惊人。
  • Agent 是"有环境反馈的 LLM"——bash、patch、web_search、codereview 等工具让 LLM 从"白板编程"变成了"有编译器、有 grep、有测试的编程"。

3.2 IDE 正在衰落

Crawshaw 对 IDE 的历史做了一个精辟回顾。他认为 VS6.0 + Windows 2000 是他用过的最棒的 IDE,完美、完整、一致。但后来编程环境变成了"一团糟"(a hot mess)。

2021年 Copilot 发布后,IDE 似乎不可战胜——LLM 辅助的自动补全太强大了,让人不得不忍受 IDE。Crawshaw 说 Copilot 让他的"打字效率提升 50%",编程很大程度上是打字受限的。

"In 2021, the IDE had won. In 2026, I don't use an IDE any more."
—— David Crawshaw

仅仅四年后,他回到了 Vi——而 Vi 今年正好 50 岁。他现在唯一用的"IDE 功能"是 go-to-def,neovim 稍加配置就能实现。

核心洞见:Agent 不是让 IDE 变得更好,而是让 IDE 变得不必要。当 AI 可以直接理解整个代码库、执行命令、修改文件时,IDE 提供的语法高亮、自动补全、项目管理等功能已经微不足道。轻量级编辑器 + 强大 Agent > 最复杂的 IDE

3.3 非前沿模型是"主动有害"的

Crawshaw 的措辞非常严厉:用便宜模型(如 Sonnet)或二流本地模型,不仅浪费时间,还会学到错误的经验教训。因为 Agent 工作很大一部分是"发现模型的能力边界",如果用弱模型探索边界,你会形成错误的认知——这会严重拖累你使用前沿模型时的效率。

"Pay through the nose for Opus or GPT-7.9-xhigh-with-cheese. Don't worry, it's only for a few years."
—— David Crawshaw

但他也相信本地模型终将胜利——当前沿模型面临收益递减时,本地模型会迎头赶上。那一天会很美好,但在到来之前,你必须用最好的模型才能知道模型真正能做到什么。

3.4 内置沙盒不起作用,Fresh VM 才是答案

Claude Code 不断请求"may I run cat foo.txt?"的许可,Codex 说"无法在我的复杂沙盒中执行 go build"。这种内置沙盒的设计本意是安全,但实际体验是灾难性的——不断打断工作流。

解决方案:Fresh VM

  • 完整的环境控制权——Agent 可以执行任何需要的命令
  • 真正的隔离——不会影响主机系统
  • 可抛弃性——用完即弃,保持环境纯净
  • 这正是 exe.dev 的核心设计动机之一

3.5 编程乐趣回来了:从 TODO 到真实程序

Crawshaw 说他现在拥有的程序和服务比以前多得多。他需要一个 VM,里面运行着一个不受约束的 Agent,可以随手启动,然后把原本会写在 Apple Notes TODO 里、然后遗忘的一句话,变成一个真实可用的程序。

"I am having more fun programming than I ever have, because so many more of the programs I wish I could find the time to write actually exist."
—— David Crawshaw

3.6 反 LLM 论点如同"禁止电动工具"

Crawshaw 承认恐惧本身——他对"智能即服务"在社会中的终极走向也有担忧。但在"编写计算机程序"这个有限领域内,这些工具带来了前所未有的探索和乐趣。

"It sounds like someone saying power tools should be outlawed in carpentry. I deeply appreciate hand-tool carpentry and mastery of the art, but people need houses and framing teams should obviously have skillsaws."
—— David Crawshaw

3.7 软件的形状需要彻底改变

Crawshaw 的核心判断:大多数软件的形状是错误的,大多数解决问题的方式也是错误的。

Stripe Sigma 案例:三句话打败一个产品

  • Stripe Sigma 是为 Stripe DB 提供的 SQL 查询系统,内置 LLM 辅助写查询
  • 但这个 LLM 不太好,而且 Sigma 先推出了 UI,API 还在 private alpha
  • Crawshaw 让 Agent 从零开始做 ETL:用标准 Stripe API 查询账户所有数据,构建本地 SQLite DB
  • 投入:三句话的描述。产出:比商业产品更好地解决了他问题的方案。
"I implemented that entire Stripe product (as it relates to me) by typing three sentences. It solves my problem better than their product. That's the world we are in today."
—— David Crawshaw

3.8 核心哲学:最好的 Agent 软件 = 最好的程序员软件

"The best software for an agent is whatever is best for a programmer."
—— David Crawshaw 的核心哲学

传统逻辑:产品经理必须温和地告诉工程师——你不是客户。产品需要为真实客户设计。

Agent 时代逻辑:每个客户都有一个 Agent,会为TA写代码来对接你的产品。如果你建造的是程序员喜欢的东西,那么每个人的 Agent 都能轻松使用它——于是所有人都跟来了。"开发者体验(DX)"不再只是吸引开发者的策略,而是通向所有终端用户的门户

3.9 LLM 辅助编程的三种用法

在"How I program with LLMs"中,Crawshaw 系统性地总结了三种用法:

  • Autocomplete(自动补全)——最基础但最有效。Crawshaw 尝试放弃一周后无法忍受,因为"太多 mundane typing"。
  • Search(搜索替代)——"如何在 CSS 中让按钮透明"这类问题,问 LLM 比用传统搜索引擎好得多。
  • Chat-driven programming(对话式编程)——最难但最有价值。当你知道需要写什么、能描述它,但没有精力创建文件、查找库时,LLM 给你第一稿。

3.10 写好 Prompt 的艺术:"考试式问题"

Crawshaw 发现 LLM 最擅长"考试式问题":给出明确目标和所有背景材料,让它能构造一个良好封装的代码审查包。

两个核心原则:

  • 避免过度复杂和模糊——不要在 messy workspace 里用 LLM,给它们一个空白 slate
  • 要求易于验证的工作——你可以要求 LLM 做你绝不会要求人类做的事,比如"重写所有测试,引入一个中间概念让测试更易读"。重做工作极其便宜

3.11 代码结构的新权衡:更小的包、更多的专门化代码

LLM 改变了代码组织的权衡。因为 LLM 更擅长处理封装的、独立的问题,更小、更多的包变得更有利。Crawshaw 举例:以前他会把多个统计算法放在一个包里,现在他会为每个算法创建独立的包。

他还预见了一个趋势:更少通用包、更多专门化代码。对于 REST API wrapper,他宁愿自己写 200 行的简单 wrapper,也不愿用官方 1155 行的复杂包。"我只想要 cURL 和解析 JSON"。

3.12 更好的测试:LLM 改变 DRY 的权衡

"不要重复自己"(DRY)在过去被过度推崇。现在 LLM 让写测试更便宜,你可以要求它写 fuzz test、写可读性更好的测试。专门化的实现 + 全面的测试将成为新常态。

四、主题二:云计算与基础设施

4.1 "我在建一朵云"——为什么今天的云是错误形状

2026年4月,Crawshaw 宣布融资并阐述了 exe.dev 的愿景。开头出人意料地简单:"I like computers." 他喜欢所有计算机——微控制器、桌面、手机、服务器。但有一个例外:

"So it is no small thing for me when I admit: I do not like the cloud today."
—— David Crawshaw

4.2 云的四大根本问题

1. VM 是错误形状

  • VM 被绑定到 CPU/内存资源,但你应该能买 CPU、内存、磁盘,然后运行任意数量的 VM
  • Linux VM 只是另一个 Linux cgroup 里的进程,应该能随意运行
  • 今天唯一的解决方式是嵌套虚拟化,支付性能惩罚,然后自己管理反向代理

2. PaaS 是更糟糕的抽象

  • 每个供应商的 PaaS 都是比计算机更弱的专有抽象
  • 学到一半才发现某个简单需求因为平台深层限制而无法实现

3. 磁盘是错误形状

  • 云厂商想要你使用远程块设备(或更慢的 S3)
  • 远程块设备在 HDD 时代合理(10ms seek vs 1ms RTT)
  • SSD 时代:seek 从 10ms 降到 20μs,远程 IOPS 开销从 10% 变成 10 倍以上
  • MacBook 有 500k IOPS,配置 EC2 到 200k IOPS 要花 $10k/月

4. 网络被敲诈

  • egress 费用是正常数据中心的 10 倍
  • 中等体量时倍数更糟。只有每月花 $XXm 时价格才变好
  • 如果网络容易互通,你会从邻近开放 DC private link 几个系统,从云账单上砍掉一个零

4.3 Kubernetes:在猪身上涂口红

"It is tempting to dismiss Kubernetes as a scam, artificial make work designed to avoid doing real product work, but the truth is worse: it is a product attempting to solve an impossible problem: make clouds portable and usable. It cannot be done."
—— David Crawshaw

Crawshaw 认为 K8s 试图解决一个不可能的问题:让云变得可移植和可用。但你无法通过在错误抽象之上构建新抽象来解决根本问题

4.4 为什么现在是修复云的时机?因为 Agent 来了

Agent 让写代码变得更容易,这意味着会有更多软件(经济学上的杰文斯悖论)。每个人会为乐趣和工作写更多程序。我们需要私密的地方来运行它们,需要轻松与朋友同事分享,需要最小开销。

Agent 时代的云需求:

  • 更多计算、更易管理
  • Agent 也能驱动 AWS API,但会消耗更多 token、得到更差结果
  • Agent 花在"如何让经典云工作"上的每一 percent 上下文窗口,都不是花在解决你的问题上
  • 所以云抽象本身需要变得对 Agent 友好

4.5 单进程编程哲学(2018)

2018年的"One process programming notes"是 Crawshaw 离开 Google 后的独立开发实践总结。核心思想极其简单:

"Don't use N computers when 1 will do."
—— David Crawshaw

单进程栈:

  • 1 VM,1 Zone,1 process
  • Go + SQLite + WAL + 共享缓存
  • EBS 卷定期快照到 S3
  • 部署脚本 10 行长
  • 中型 VM 可处理 5-6k 并发请求
  • 最大 AWS 机器可处理数万个并发请求

Crawshaw 承认这有明确的扩展限制,但他声称典型服务不会触及这个限制。如果你的业务能在单机上运行数年并盈利,你就有收入来雇佣更多工程师,在需求真正变化时重写服务。早期在扩展上花费的每一小时,都应该是与客户交谈的一小时。

给公司程序员的建议:即使你在资本充裕的公司,也用这个 indie mini stack 来测试你的设计——"如果我用一台计算机解决这个问题,能走多远?能支持多少客户?在什么规模下需要重写?"如果 indie stack 能支撑你的业务数年,也许应该推迟采用现代云软件。

五、主题三:Go 与 SQLite 工程

5.1 Go 和 SQLite:当 database/sql 不合适时

Crawshaw 写了自己的 Go SQLite 绑定 crawshaw.io/sqlite,因为他发现 database/sql 对 SQLite 来说有太多不合适的地方。

database/sql 的问题:

  • 隐式连接池——SQLite 是进程内数据库,连接池让事务和特殊功能难以使用
  • 语句缓存复杂——需要跟踪 *sql.Stmt 对象,而 Crawshaw 更喜欢用查询字符串本身作为 key
  • 参数绑定——问号位置参数对复杂查询不友好,SQLite 支持命名参数
  • 错误处理——database/sql 所有操作都返回 error,但 SQL 语法错误是程序 bug,应该 panic
  • Context 过度——每个函数都要传 context,但 SQLite 没有网络
  • 并发默认配置差——默认不用共享缓存、WAL、unlock_notify

5.2 Savepoint:比 Tx 更好的事务模型

Crawshaw 推崇用 SQL SAVEPOINT 替代 BEGIN/COMMIT。因为 SAVEPOINT 可以嵌套,天然支持 Go 的 defer 模式:

func doWork(conn *sqlite.Conn) (err error) {
    defer sqlitex.Save(conn)(&err)
    // ... 自动 RELEASE 或 ROLLBACK
}

这种模式下,事务函数可以安全组合——一个事务函数调用另一个事务函数,嵌套的 savepoint 会正确处理。

5.3 SQLite Session 扩展:极简同步

SQLite 的 session 扩展让客户端-服务器同步变得极其简单:在连接上启动 session,所有修改被打包成 patchset blob,上传服务器应用即可。Crawshaw 用它来构建客户端数据同步系统。

5.4 JSON 文件作为原型数据库

2024年的"jsonfile"文章展示了 Crawshaw 的务实主义。一个简单的 JSON 文件数据库,带 RWMutex、写时复制、rename(2) 原子写入,85 行 Go 代码。适用条件:数据量小、无索引需求、写入不频繁。

"Most projects fail before they start. They fail because the activation energy is too high."
—— David Crawshaw

他的核心观点是:愿意妥协几乎所有东西来开始。当 n 很小、全表扫描足够快时,JSON 文件完全够用。直到你需要索引的那一刻,再迁移到 SQL。明确的退出策略比完美起步更重要。

5.5 Finalizer 的悲剧

两篇关于 Finalizer 的文章展示了 Crawshaw 对底层机制的深刻理解。他指出 Go 的 runtime.SetFinalizer 几乎不可能用好,因为 GC 不保证何时运行。他甚至用代码证明:在一个循环创建 2000 个文件的程序中,finalizer 在第 252 个文件时就因为"too many open files"而崩溃了。

Finalizer 的唯一合理用途:作为"锋利边缘的 Finalizer"(Sharp-Edged Finalizer)——在 finalizer 中 panic,把资源泄漏变成立刻崩溃的 bug。这比默默泄漏要好得多。

六、主题四:软件工程哲学

6.1 向后兼容性:我们误解了它

在 log4j 事件后,Crawshaw 写了一篇关于向后兼容的深刻文章。他认为 log4j 的 JNDI/LDAP URL 功能本应该被移除,但被向后兼容的承诺束缚住了。

Crawshaw 对向后兼容的三层理解:

  • 升级不费时间——运行升级命令、执行测试、提交,不用思考
  • 问题尽早暴露——不在生产环境才发现行为变化
  • 长期积累知识——工具稳定,20年前的 awk 单行代码今天还能工作;Swift 代码每过几个月就要重学
"We as a profession misunderstand and misuse the concept of backwards compatibility, both upstream and downstream, by focusing on narrow legalistic definitions instead of outcomes."
—— David Crawshaw

6.2 实验文化的漂移

Crawshaw 在 Google+ 工作时尝试引入实验文化,但失败了。他发现硅谷的 A/B 测试往往不是真正的科学:

  • 有效的科学家假设→实验→用学到的知识形成下一个假设
  • 但产品团队的 A/B 测试:设计师/管理层喜欢 A 和 B,测试选 winner,下一个功能再来一次
  • 没有整合之前实验的教训,没有设计实验来最大化学习
  • 长期结果是"某种抽搐的山丘攀爬",甚至是一种长期的 P-hacking

他的结论:科学文化与硅谷文化很大程度上是不兼容的。科学训练需要数年,做科学也需要数年。初创模式的" rushed feature release"与严谨实验背道而驰。

6.3 依赖恐惧

Crawshaw 对依赖的态度越来越谨慎。他要求自己"在把任何库加入项目之前,阅读其中的很大一部分"。log4j 事件强化了这一立场:一个日志库为什么需要网络查找功能?核心库应该保守。

七、主题五:互联网与社会观察

7.1 怀念 LAN(Tailscale 的起源故事)

这篇充满感情的文章解释了为什么 Crawshaw 要创建 Tailscale。他回忆了 90 年代在澳大利亚北部小镇的 LAN 经历:

  • 15 台 PC,MS-DOS,IPX over coax 到 Novell Netware
  • 可以在网络上安全地做"不可想象"的事:无权限文件共享、无安全实验服务器
  • 即使搞崩了网络,影响也只在楼内,"我知道该向谁道歉"
  • 200MHz Pentium Pro 感觉飞快,32MB 内存无所不能
  • 他父亲(全科医生)用 Clipper 写了医疗记录软件,让诊所效率远超同行
"If programming a LAN in the 1990s was the care-free tending to a garden in the countryside, then programming on the internet today is tending a planter box on Madison Avenue in midtown."
—— David Crawshaw

他问了一个深刻的问题:今天的父亲还能写出这样的小商业软件吗?答案是:几乎不可能。HIPAA、OAuth2、XSS 防御、密码存储——今天的激活能量太高了。

Tailscale 的愿景:用 WireGuard + 身份 + 加密授权,重建 90 年代 LAN 的安全小型空间,同时保留 21 世纪互联网最好的部分。让互联网做"笨管道",让端点根据另一端的人来决定与谁通信。

7.2 寻找创意互联网

Crawshaw lamenting 90 年代互联网的消失——那个一切都 obscure 或 new 的地方。今天搜索"disney",结果全是迪士尼公司或主流媒体。但他发现:创意互联网还在,只是被搜索引擎埋在了后面

  • 搜索 [disney],前 14 页全是企业网站和新闻
  • 搜索 [disney blog],第 7 页开始出现 Rejected Princesses 这样的原创内容
  • 搜索 [modern nuclear propulsion research],第一页是 Gizmodo 和 NASA 新闻稿
  • 第 2 页出现了 Beyond NERVA 博客——真正的研究和思考

他的愿望:为创意互联网设计独立的工具——一个惩罚媒体出口、推广博客和播客的搜索引擎;一个让 West Virginia 三兄弟和爸爸的 D&D 播客与 NPR $2亿/年的机器一样容易找到的平台。

八、主题六:个人成长与选择

8.1 用遗憾做决策

Crawshaw 分享了他最喜欢的决策工具——来自 Jeff Bezos 的 Princeton 演讲:

"I will hazard a prediction. When you are 80 years old, and in a quiet moment of reflection narrating for only yourself the most personal version of your life story, the telling that will be most compact and meaningful will be the series of choices you have made."
—— Jeff Bezos, Princeton 2010

Crawshaw 的用法:投射自己到遥远的未来,问自己:我会后悔没做这件事吗?这帮助他离开 Google、创办公司、选择艰难但有意义的道路。

8.2 离开 Google

2018年3月,Crawshaw 简短宣布离开 Google。他说会 sad to leave Fuchsia("作为操作系统它做对了很多事"),接下来要做 childcare 和 start a software business。他也提到内部 Google+ 是他过去五年的主要社交媒体,现在它要关闭了,他需要看看还有什么别的选择——于是开始写博客。

九、跨主题的深层模式

9.1 "错误形状"的反复主题

"错误形状"(wrong shape)是 Crawshaw 博客中最有力的概念之一。它出现在多个领域:

  • 软件形状错误——大多数软件为 Agent 时代设计错了,API-first 和 DX 是新的核心竞争力
  • 云的形状错误——VM、磁盘、网络、PaaS 的抽象都是为过去时代的硬件和商业模式设计的
  • 工具形状错误——IDE 假设人类需要语法高亮和项目管理,但 Agent 需要的是直接操作文件系统的能力
  • 容器形状错误——内置 Agent 沙盒限制太多,fresh VM 才是正确形状

9.2 简单化作为力量

从单进程编程到 JSON 文件数据库,从 9 行代码的 Agent 到 85 行的 jsonfile,Crawshaw 始终展现一种"简单即力量"的哲学。他不是不知道复杂系统的存在价值,而是坚持:先证明你需要复杂性,再引入它。

9.3 对"中间层"的怀疑

Crawshaw 对中间层/抽象层有一种天生的怀疑:

  • database/sql 是通用 SQL 的中间层,对 SQLite 来说过于臃肿
  • Kubernetes 是云抽象的中间层,试图让不可移植的东西变得可移植
  • PaaS 是计算机的中间层,比计算机更弱
  • IDE 是编程的中间层,Agent 让它变得不必要

他的模式是:当抽象层比底层更弱时,这个抽象层就是可疑的。

9.4 第一性原理思维

Crawshaw 的写作处处体现第一性原理:

  • Agent 是什么?一个 for 循环 + LLM 调用。不是魔法。
  • 云是什么?Linux VM。API 驱动的 Linux VM。应该 heaven,实际是 hell。
  • SQLite 是什么?一个 C 库,进程内,不需要网络协议。
  • 编程环境需要什么?反馈。编译器错误、测试失败、grep 结果。

9.5 长期主义 vs 短期优化

从"向后兼容性"到"本地模型终将胜利",从"单进程能支撑多年"到"80岁时的反思",Crawshaw 展现出罕见的长期主义。他愿意为几年的"付高价用前沿模型"买单,因为他知道这只是暂时的。他愿意用一台计算机运行服务,因为扩展限制是"好问题"。

十、我们可以从 Crawshaw 学到什么?

10.1 对程序员的技术启示

  • Agent 不是未来,是现在。如果你还没每天用 Agent,你已经落后了。从自动补全开始,逐步探索对话式编程。
  • 只用前沿模型。便宜模型不仅浪费时间和金钱,还会让你形成错误的能力边界认知。
  • 为 Agent 设计你的代码。更小的包、更好的注释、清晰的接口、可读性优先——这些本来就是好代码的特征,现在有了更强的理由。
  • Fresh VM 是 Agent 的最佳环境。放弃内置沙盒,给 Agent 完整的环境控制权和真正的隔离。
  • 重新考虑你的工具链。IDE 可能不是未来。一个轻量编辑器 + Agent 可能更高效。
  • 不要过早引入复杂性。JSON 文件、单进程、一台 VM——证明你需要更多之前,保持简单。
  • SQLite 被低估了。对于绝大多数应用,SQLite + WAL + 共享缓存的性能远超你的需求。

10.2 对创业者的产品启示

  • "最好的 Agent 软件 = 最好的程序员软件"——如果你的产品能被 Agent 调用,DX 就是 UX。
  • API 优先于 UI。Stripe Sigma 的故事告诉我们:没有 API 的产品在 Agent 时代是脆弱的形状。
  • 考虑 Jevons 悖论。Agent 让写代码更便宜→更多代码→更多运行需求→基础设施的痛点被放大。
  • 简单栈能走多远?在引入微服务/K8s/分布式之前,问自己:一台机器能支撑多久?

10.3 对思考者的认知启示

  • 用遗憾做决策。"80岁的我会后悔没做这件事吗?"——这是一个强大的长期决策工具。
  • 关注定性信号。当所有 benchmark 都被刷爆时,来自一线实践者的定性观察可能更有价值。
  • 警惕"中间层"。当抽象比底层更弱时,它可能在制造问题而非解决问题。
  • 第一性原理。把复杂概念还原到最基本的事实,再重建理解。
  • 好奇心和谦逊。LLM/Agent 时代一切都在变,"甚至更多于往常,远离那些绕圈子讨论技术的互联网论坛——那是 Agent 的工作。"

10.4 对社会的观察启示

  • 技术变革有代价。农业就业从 40% 降到 1% 是净收益,但过程中有大量痛苦和心碎。承认这一点,不要无脑乐观,也不要恐惧到反对电动工具。
  • 创意互联网需要独立工具。为数十亿人设计的搜索引擎不适合探索 obscure 话题。我们需要为"周末漫游"设计的工具。
  • 小空间的价值。90 年代 LAN 的"安全小型空间"不是怀旧,而是一种可重建的产品愿景。