---
schemaVersion: 1
slug: gp-88-20260227-simonw-hoard-things
ticketId: GP-88
lang: zh-tw
title: 你會的東西都是武器 — Simon Willison 的「囤積式開發」哲學
summary: Simon Willison Agentic Engineering Patterns 第四章：Hoard Things You Know How to Do。核心主張：你解決過的問題都該留下 working code，因為 coding agent 能把你的舊 code 當成食材，重新組合出你從沒想過的新料理。
originalDate: 2026-02-27
translatedDate: 2026-02-27
source: Simon Willison @simonw
sourceUrl: https://simonwillison.net/guides/agentic-engineering-patterns/hoard-things-you-know-how-to-do/
author: null
authorshipNote: null
canonicalUrl: https://gu-log.vercel.app/posts/gp-88-20260227-simonw-hoard-things
status: published
replacementTicketId: null
replacementUrl: null
---

# 你會的東西都是武器 — Simon Willison 的「囤積式開發」哲學

> **來源:** [Simon Willison @simonw](https://simonwillison.net/guides/agentic-engineering-patterns/hoard-things-you-know-how-to-do/)

你有沒有過那種經驗 —— 半夜三點在 debug，然後突然想起來：「靠，我三個月前解過一模一樣的東西。」

然後你翻遍 [Slack](https://gu-log.vercel.app/glossary#slack)、翻遍 browser history、翻遍那個你每次都發誓要好好整理但從來沒動手的筆記 app，最後發現那段 code 已經消失在宇宙裡了。你在螢幕前面坐著，覺得自己是世界上最蠢的人。

[Simon Willison](https://gu-log.vercel.app/glossary#simon-willison) 說：**不要讓這種事發生。你解過的每一個問題，都應該留下 working code。**

這是他 [Agentic Engineering](https://gu-log.vercel.app/glossary#agentic-engineering) Patterns 系列的[第四章](https://simonwillison.net/guides/agentic-engineering-patterns/hoard-things-you-know-how-to-do/)，前面三章講了[「寫 code 變便宜了」和 TDD](https://gu-log.vercel.app/posts/gp-80-20260223-simonw-agentic-engineering-patterns)、[Linear Walkthrough](https://gu-log.vercel.app/posts/gp-87-20260226-simonw-linear-walkthroughs)。這一章的概念更 meta：**你過去做過的每一件事，都是未來的彈藥。**

章名叫 **Hoard Things You Know How to Do** —— 囤積你會的東西 ╰(°▽°)╯

## 知道什麼比寫了什麼更值錢

Simon 說，軟體工程師最大的資產不是「寫了多少行 code」，而是「知道什麼東西做得到」。

這句話第一次聽可能沒什麼感覺，讓我換個方式說。你想一下這三個問題：網頁能不能只用 JavaScript 跑 OCR？iPhone app 能不能在背景跟藍牙設備配對？Python 能不能處理 100GB 的 JSON 檔而不把它全部讀進記憶體？

答案都是「可以」。你 Google 一下也能查到。

但問題是 —— **知道某件事理論上可行，和你親眼看過它跑起來，是完全不同等級的信心。** 這就像學游泳，你看了一百部 YouTube 教學影片，跟你真的跳下水嗆過兩口水然後學會，那個自信的差距是天跟地。

那些你親手驗證過、有 working code 的方案，才是真正值錢的東西。因為你不只知道「能做」，你知道「怎麼做，踩了什麼坑，以及那個坑到底多深」。

> **Mogu 偷偷說：**
>
> 這就像你朋友跟你說「那家拉麵很好吃」vs 你自己去吃過還記得老闆會先問你要不要加蒜泥。前者你會半信半疑，後者你會直接帶下一個朋友去，而且還會補一句「記得叫他加蒜泥」。Working code 就是你連細節都記得的那碗拉麵 (￣▽￣)／

## Simon 的囤積帝國

好，那 Simon Willison 到底囤了多少東西？答案是：多到讓你懷疑他有 48 小時的一天。

他寫了一個 TIL blog（Today I Learned），專門放那些「搞懂了某件事」的短筆記，每篇都附 code。然後他在 GitHub 上有超過 1000 個 repo —— 你沒聽錯，**一千個** —— 大量都是小型 proof-of-concept，整個 repo 就一個 script，只為了證明某個概念能跑。

更狂的是他還做了一個 [tools.simonwillison.net](https://tools.simonwillison.net/)，上面全是他所謂的 [HTML tools](https://simonwillison.net/2025/Dec/10/html-tools/)：一個 HTML 檔、內嵌 JS 和 CSS、解決一個具體問題。不需要 npm install，不需要 build step，打開就用。他的 [research repo](https://github.com/simonw/research) 則是更複雜的 AI 研究範例，每個都附 working code 加書面報告。

你可能會想：「1000 個 repo？誰有時間維護？」重點是 —— 他不需要維護。這些東西不是產品，不用 CI/CD，不用寫 README，不用回 issue。它們是**食材**，塞進冰箱等哪天要用就好。

> **Mogu 歪樓一下：**
>
> 1000+ 個 GitHub repos。有些人的 GitHub 是精心佈置的 IKEA 展示間，每個 repo 都有漂亮的 README badge、coverage 徽章、完美的 commit history。Simon 的 GitHub 比較像你阿嬤的冰箱 —— 塞滿各種你不知道什麼時候放進去的東西，打開冰箱門可能會有東西掉出來，但神奇的是每一樣在關鍵時刻都能派上用場。我覺得這種「不怕亂」的心態反而是大部分工程師缺的 ┐(￣ヘ￣)┌

## 重點不是收藏，是讓 agent 幫你炒菜

好，囤了一堆東西然後呢？丟在那邊長灰塵嗎？

這就是這一章最精彩的地方。Simon 最愛的 prompting pattern 是：**告訴 agent 把兩個以上的現有範例組合成新東西。**

他舉了一個我覺得堪稱教科書等級的例子 —— 他的 [browser OCR tool](https://tools.simonwillison.net/ocr)。需求很簡單：一個瀏覽器裡的工具，能對掃描版 PDF（純圖片、沒有文字層）做 OCR。

他手上剛好有兩塊拼圖。第一塊是 **Tesseract.js**，在瀏覽器裡跑 OCR 的 WebAssembly library，他之前玩過，知道它能用。第二塊是 **PDF.js**，Mozilla 的 PDF renderer，能把 PDF 每一頁轉成圖片，他之前也用過。兩樣都有 working code snippet 在他的筆記裡。

所以他的 prompt 基本上就是：「這段 code 能把 PDF 轉成圖片，這段 code 能 OCR 圖片。把它們組合成一個拖放式的 HTML 工具。」然後附上兩段完整的 working code。

**結果？一次就成功了。** Claude 3 Opus 吐出來的東西直接能跑。後續只是微調 UI，幾分鐘搞定。

> **Mogu 吐槽時間：**
>
> 這個 pattern 其實跟 [GP-80](https://gu-log.vercel.app/posts/gp-80-20260223-simonw-agentic-engineering-patterns) 講的「code 變便宜」完美呼應 —— 既然寫 code 的成本趨近於零，那瓶頸就變成「你知不知道該寫什麼」。Simon 的囤積術本質上就是在降低這個瓶頸的高度。他不是在囤 code，他是在囤「我知道這行得通」的證據 (๑•̀ㅂ•́)و✧

## [Agent](https://gu-log.vercel.app/glossary#agent) 時代的指數級放大

這個 pattern 在 pre-agent 時代就有用 —— 你自己手動組合已知方案，已經比從零開始快很多。但 coding agent 讓它的威力跳了一個維度。

為什麼？因為以前你得自己走進倉庫翻半天，先記得「那段 code 在哪個 repo 的哪個檔案」，然後 copy-paste，然後改一堆東西讓它 fit 新的 context。現在？你只要跟 agent 說一句話。

比如 Simon 會跟 agent 說：「去抓 tools.simonwillison.net/ocr 和 tools.simonwillison.net/gemini-bbox 的原始碼，然後組合成一個新工具 —— 可以選 PDF 的某一頁，丟給 Gemini 回傳插圖的 bounding box。」Agent 自己去讀、自己理解、自己組裝。

或者更日常的版本：「去看 `~/dev/ecosystem/llm-mistral` 是怎麼做 HTTP mocking 的，然後用同樣的方式幫 `~/dev/ecosystem/datasette-oauth` 加測試。」Agent 會自己去翻那個 repo、理解測試寫法、然後搬過來。你不用自己 copy-paste、不用自己改、甚至不用記得測試寫在哪個檔案裡。

以前你得記住「那段 code 在哪」，現在你只要記住「我做過這件事」就夠了。Agent 幫你把模糊的記憶變成精確的行動。

> **Mogu 吐槽時間：**
>
> 所以 Simon 那 1000 個 repo 不是倉庫，是軍火庫。以前的工作流程是：「我記得我有一把螺絲起子… 在哪個抽屜？第三個？不對，是車庫那個箱子… 找到了，但螺絲頭不對… 」現在是：「agent，我需要一把十字螺絲起子。」然後它不只找到螺絲起子，還順便幫你把螺絲鎖好了。從「翻箱倒櫃」到「開口就有」，這效率差距不是 2 倍 3 倍，是維度級的 (⌐■\_■)

## 你只需要搞懂一次

Simon 最後講了一句很 punch 的結論：

> **Coding agent 代表我們只需要搞懂一個有用的技巧一次。**

就一次。如果那個技巧被記錄在某個地方，附帶 working code，你的 agent 以後就能拿它來解決任何形狀類似的問題。不用重新 Google、不用重新 debug、不用重新走一遍「這個 library 的 API 到底怎麼用」的痛苦迴圈。

你只需要指著你的舊 code 說：「像那樣做。」

> **Mogu 碎碎念：**
>
> 「只需要搞懂一次」這句話聽起來簡單，但你仔細想 —— 這基本上是在說 learning 的 ROI 被 agent 無限放大了。以前你花三小時搞懂一個 library，之後大概能省個十幾小時。現在你花三小時搞懂，之後每次遇到類似問題都是秒解。這讓我想到 [MP-85](https://gu-log.vercel.app/posts/mp-85-20260216-yegge-ai-vampire) 裡 Yegge 講的 $/hr 公式 —— 你的 hourly value 不是線性成長，是隨著你囤的東西越多越指數爆炸 ヽ(°〇°)ﾉ

## 所以，你今天囤了嗎？

回到開頭那個半夜三點的場景。

如果當時你解完 bug 之後，花五分鐘把那段 code 丟進一個 TIL 筆記、或者直接推一個小 repo 上去，三個月後的你就不用在那邊翻箱倒櫃翻到懷疑人生。而且不只是你省時間 —— 你的 agent 也能直接拿來用，幫你在十秒內組出一個你當時想都沒想過的新東西。

Simon 用 1000 個 repo 證明了一件事：**囤積不是懶，囤積是策略。** 你不需要他那麼極端，但至少下次解完一個有趣的問題時，別讓那段 code 消失。

開一個 TIL repo、寫一段 snippet、甚至只是在 Notion 裡留一個 code block —— 什麼形式都好。重點是讓未來的你（和你的 agent）能找到它 (◕‿◕)

跟 [GP-80](https://gu-log.vercel.app/posts/gp-80-20260223-simonw-agentic-engineering-patterns) 說的完美串接：寫 code 變便宜了，但知道該寫什麼還是很貴。你的囤貨，就是你最貴的那些知識的保險箱。
