用了半年 Claude Code 後,我嘗試關掉它寫了一週程式碼——結果比想像中嚴重

> 上週我做了一個實驗:卸掉 Claude Code,不碰 Codex,回到純手寫程式碼的狀態,堅持整整一週。不是為了證明什麼,而是因為有一天寫程式碼的時候,我發現自己連一個 `Array.reduce` 的回呼參數順序都想不起來了——以前閉著眼都能寫。這件事嚇到我了。

為什麼要做這個實驗

先交代背景。我從今年初開始用 Claude Code 做主力開發工具,中間也穿插使用 OpenAI 的 Codex,到現在差不多半年。

半年裡,我的開發效率確實提升了很多。需要一個新元件,在終端機裡用自然語言描述一下,Claude Code 直接生成整個檔案。寫單元測試,一句「給這個模組補全測試案例」,批次搞定。遇到不熟的 API,不用翻文件,直接問它。甚至重構、除錯、寫文件,它都能一條龍做完。

但上週三,我在沒有網路的高鐵上寫一個很簡單的資料處理函式時:

javascript 代碼解讀複製代碼const total = orders.reduce((  // 我停在這裡了

我腦中一片空白。

reduce 的回呼第一個參數是累加器還是目前元素來著?第二個參數呢?初始值放在哪?

以前這些東西是肌肉記憶,不需要思考。但那一刻,沒有 Claude Code 幫我補全,我居然卡住了。

我不是不會寫程式碼了,但我正在失去「不依賴 AI 也能寫程式碼」的能力。

這讓我非常不安。於是我決定關掉所有 AI 程式設計工具,純手寫一週,看看到底退化到了什麼程度。

實驗規則

  • 卸載 Claude Code CLI
  • 不用 Codex、Copilot 或任何 AI 程式設計 Agent
  • 編輯器只保留 VS Code 原生功能(變數補全、import 路徑等非 AI 補全)
  • 可以查文件,但不能用 ChatGPT / Claude 問程式碼問題
  • 時間:完整的一個工作週,週一到週五

當週正好有一個中等複雜度的需求:給後台管理系統加一個資料匯出功能,支援 CSV 和 Excel 格式,帶篩選條件和分頁匯出。不算簡單,但也不是什麼高難度的活。

Day 1:像回到了 2023 年

第一天最大的感受是——

不是慢一點,是那種「我怎麼連這個都要想一下」的慢。

寫一個 React 表單元件,以前在終端機裡跟 Claude Code 說一句「幫我寫一個帶驗證的註冊表單」,30 秒整個檔案就出來了。現在我需要:

  1. 手動寫 useState 的宣告
  2. 手動寫 onChange 處理函式
  3. 手動寫 onSubmitpreventDefault
  4. 手動寫表單驗證邏輯

每一步都不難,但合在一起就是慢。以前 Claude Code 半分鐘就能生成一整個元件,現在我手寫了四十分鐘。

更讓我焦慮的是,我發現自己頻繁地去看之前的程式碼——不是因為需要理解業務邏輯,而是因為我忘了某個工具函式的參數怎麼傳。

比如專案裡封裝的請求函式:

typescript 代碼解讀複製代碼// 我記得大概是這樣,但參數順序記不清了
const res = await request('/api/export', {
  method: 'POST',
  // 第二個參數是 config 還是 data 來著?
  // headers 在哪一層?
});

半年前我是寫這個封裝的人。半年後我需要翻原始碼才能確認用法。

Day 1 產出:平時一天能完成的量,只做了大概 60%。

Day 2-3:最痛苦的階段

第二天和第三天是最難熬的。

不是因為不會寫,而是因為大腦在不斷做一件事:抵抗「打開 AI」的衝動。

每次遇到一個需要想兩秒的地方,我的第一反應不是思考,而是想切到終端機敲 claude。這個反應是無意識的,就像你想查東西時手會自動伸向手機一樣。

用 Claude Code 和 Codex 這種 Agent 型工具養成的習慣更可怕——因為它不只是幫你「補全一行」,而是幫你「做完一整件事」。你甚至不需要想程式碼結構,直接用自然語言描述需求就行。這意味著一旦離開它,你不只是打字變慢,是連「怎麼拆解任務」都要重新適應

我數了一下,Day 2 一天裡我有 37 次想打開 AI 的衝動。

其中大概:

  • 15 次是因為忘了某個 API 的用法(可以查文件解決)
  • 12 次是因為懶得寫樣板程式碼(以前直接讓 Claude Code 整個檔案生成)
  • 7 次是遇到了真正需要思考的問題(這些才是有價值的思考)
  • 3 次是想讓 AI 幫我寫正規表示式(正規表示式確實該用工具)

有意思的發現:37 次衝動裡,只有 7 次是真正「需要」AI 幫助的。其他 30 次,本質上是懶和習慣。

到第三天下午,一件事情開始發生——我的手指開始「記起來」了。

useEffect 的時候,不再需要想參數順序。寫 fetch 的時候,then 鏈自然地流出來。寫 CSS Flex 佈局的時候,不再糾結 justify-contentalign-items 哪個是橫向哪個是縱向。

這些東西並沒有丟失,它們只是被 AI 的即時補全「蓋住了」——你不需要從記憶裡取出它們,所以它們的檢索路徑變弱了。但它們還在。

Day 2-3 產出:恢復到平時的 70-75%。

Day 4-5:一個意外的發現

到第四天,一件出乎意料的事情發生了。

我寫的程式碼品質變高了。

不是主觀感受,是客觀指標。我比較了兩份程式碼:

AI 輔助寫的匯出模組(一個月前的類似需求):

typescript 代碼解讀複製代碼async function exportData(filters, format) {
  const data = await fetchAllData(filters);
  if (format === 'csv') {
    const csv = data.map(row => 
      Object.values(row).join(',')
    ).join('\n');
    downloadFile(csv, 'export.csv', 'text/csv');
  } else if (format === 'excel') {
    const wb = XLSX.utils.json_to_sheet(data);
    const workbook = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(workbook, wb, 'Sheet1');
    XLSX.writeFile(workbook, 'export.xlsx');
  }
}

手寫的匯出模組(這週):

typescript 代碼解讀複製代碼type ExportFormat = 'csv' | 'excel';

interface ExportOptions {
  filters: FilterParams;
  format: ExportFormat;
  pageSize?: number;
  onProgress?: (percent: number) => void;
}

async function exportData({ filters, format, pageSize = 1000, onProgress }: ExportOptions) {
  const totalCount = await fetchCount(filters);
  const pages = Math.ceil(totalCount / pageSize);
  const allData: ExportRow[] = [];

  for (let page = 1; page <= pages; page++) {
    const chunk = await fetchPage(filters, page, pageSize);
    allData.push(...chunk);
    onProgress?.(Math.round((page / pages) * 100));
  }

  const exporter = exporters[format];
  exporter(allData);
}

const exporters: Record<ExportFormat, (data: ExportRow[]) => void> = {
  csv: (data) => {
    const headers = Object.keys(data[0]).join(',');
    const rows = data.map(row => 
      Object.values(row).map(v => `"${String(v).replace(/"/g, '""')}"`).join(',')
    );
    downloadFile([headers, ...rows].join('\n'), 'export.csv', 'text/csv');
  },
  excel: (data) => {
    const ws = XLSX.utils.json_to_sheet(data);
    const wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, 'Data');
    XLSX.writeFile(wb, 'export.xlsx');
  },
};

差別在哪?

  1. 分頁匯出 + 進度回呼:資料量大時不會一次性拉全部資料撐爆記憶體。AI 生成的版本直接 fetchAllData,一萬筆資料就卡了。
  2. CSV 值的跳脫處理:手寫版本處理了引號跳脫(""),AI 版本沒有——匯出的 CSV 如果資料裡有逗號就會錯欄。
  3. 型別安全:手寫版本有完整的 TypeScript 型別約束,AI 版本全是 any
  4. 可擴充性:用 exporters 物件取代 if-else,加新格式只需要加一個 key。

為什麼手寫反而品質更高?

因為當你手寫的時候,你會思考

AI 補全的速度太快了,快到你來不及想「這裡需要考慮什麼邊界條件」。Claude Code 和 Codex 更誇張——你連程式碼都不用看,說一句「幫我寫個匯出功能」,整個檔案就出來了。你掃了一眼,「嗯,能跑」,就過了。

但手寫的時候,你被迫慢下來。慢下來就會想:資料量大了怎麼辦?有沒有特殊字元?型別安全嗎?以後要加新格式怎麼擴充?

速度是程式碼品質的敵人。 AI 讓你太快了。

Day 4-5 產出:恢復到平時的 85%,但程式碼品質明顯更高。

我的結論

1. AI 造成的不是「能力退化」,而是「能力休眠」

那些 API 參數順序、語法細節,並沒有從你腦子裡消失。它們只是因為長期不被呼叫,檢索速度變慢了。關掉 AI 三天後,大部分都回來了。

但如果一個初級開發者從第一天就完全依賴 AI 寫程式碼,他可能根本沒有建立過這些記憶。這才是真正危險的情況。

2. AI 補全在「加速編碼」的同時,也在「加速跳過思考」

寫程式碼最有價值的部分不是敲鍵盤,是想清楚要怎麼寫。AI 把「敲鍵盤」的時間壓縮到了接近零,但副作用是連「思考」的視窗也一起壓縮了。

3. 我不會戒掉 AI,但我改變了用法

實驗結束後,我重新裝回了 Claude Code。但我做了兩個調整:

調整一:核心邏輯手寫,樣板程式碼用 AI。

涉及業務判斷、資料處理、狀態管理的程式碼,我會手寫。表單、列表、CRUD 這種重複性高的程式碼,繼續讓 Claude Code 或 Codex 生成。

調整二:每週保留半天「無 AI 編程時間」。

就像運動員不能只靠器械訓練一樣,程式設計師也需要定期「徒手」寫程式碼,保持基礎能力不退化。

最後

我不是勸你關掉 AI。2026 年了,不用 AI 寫程式碼確實會被淘汰。

但我建議你試一下:關掉 AI,純手寫一天程式碼。

不需要一週,就一天。看看你會不會像我一樣,在 reduce 的參數順序上卡住。

如果卡住了——不用慌,你的能力還在。但這是一個訊號,提醒你該偶爾「脫離輔助」練一練了。

你有多久沒有不靠 AI 寫過完整的程式碼了?留言區說說。


原文出處:https://juejin.cn/post/7654807811400450086


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝13   💬2   ❤️1
640
🥈
我愛JS
📝1   ❤️1
69
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登