
凌晨 3 點的 bug 比凌晨 3 點的自己誠實
📍 文章快速導覽▼
30 秒 mindmap 摘要:
- 那晚發生什麼:記憶體洩漏 4 小時抓不到,凌晨 4:12 放棄去睡
- 我以為我在 debug 什麼:React 裡
useEffect的 cleanup 沒寫
- bug 真正在告訴我什麼:白天那個「我寫 code 是因為喜歡」是假的
- 隔天早上 5 分鐘解掉:不是 bug 變簡單,是我的狀態變對了
- 我學到的事:12 點之後不寫重要 code。保護那個凌晨的自己。

你有沒有那種經驗——debug 到凌晨,盯著一行紅字,問自己:「為什麼全世界只有我看不出問題在哪?」
我前陣子又來了一次。
那隻 bug 是個記憶體洩漏(memory leak),出在我們公司新寫的 SaaS 後台。技術細節我簡化講:是 React 元件 unmount 之後還在訂閱某個 WebSocket channel,event listener 沒被清掉。邏輯很簡單,但漏的點藏在 callback 裡,要追到 event loop 的某個非同步分支。
我試了 5 種修法、加了 10 個 console.log、甚至把那段 code 整段重寫——
bug 還在。那個晚上我一共喝掉 4 杯美式、罵了 2 次前一個寫 code 的同事(在心裡罵的,他早就離職了)、跟 Slack 上的 GPT 對話窗打了 17 次「為什麼還是壞的」。
凌晨 3:18,我盯著螢幕上那行紅字——Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate.——突然有種很奇怪的感覺。
我以為我在 debug React,其實我在 debug 自己
👤 凌晨 3:18,我端著第 4 杯美式,看著螢幕上那行紅字,腦子跑出了這串對話:
那個 bug 跟我說:
- 「你寫的 code 沒有你以為的那麼好。」
- 「你以為你懂了 React,但其實你只是會抄 Stack Overflow。」
- 「你 35 歲了,技術還是停在這裡。你真的有未來嗎?」
👤 我盯著螢幕發呆。
那個 bug 把我想了 5 年但不敢說的話,一次說完了。🧠 白天的我跟凌晨的我,是兩個人。
白天那個我會說「你寫 code 是因為喜歡」「你下班寫 side project 是熱情」「你 30 歲就當 tech lead 是實力」。
凌晨那個我只會說一件事:「你騙誰?」
為什麼工程師特別容易被 bug 打到?
👤 我後來跟幾個朋友聊過,發現這不是只有我會這樣。工程師這個職業有個殘酷的特性:你的能力每天都會被赤裸裸地展示出來。
👤 寫 code 的人沒有「主管說你做得好就做得好」這種模糊空間。code 跑得動就是跑得動,跑不動就是跑不動。沒有「差不多」這件事。
bug 對你完全誠實:

凌晨 3 點,沒人會看到你哭。
凌晨 3 點的誠實
後來我學到一件事:越晚寫 code,bug 越誠實。
不是 bug 變了,是你變了。
白天你會自我感覺良好:
但凌晨 3 點,那些自我感覺都會被一杯又一杯的咖啡稀釋掉。剩下的只有 code、bug、和你自己。
這時候你才會誠實面對:
🛎 凌晨 3 點的 bug,是工程師的午夜兇鈴。
響的時候你會怕,但聽完之後,你才知道白天哪些話是騙你的。
那天後來怎麼了?
👤 凌晨 4:12,第 4 杯美式喝完,咖啡機發出「喀拉」一聲——沒豆子了。
我盯著那行紅字再看了 30 秒。
我決定不修那個 bug。我去睡覺。
👤 隔天早上 8:30 醒來,洗個熱水澡、吃個完整的早餐(不是昨天的微波便當),重新打開電腦。
bug 還在,但我看得到它了。
5 分鐘修完。
補一行
useEffect(() => { return () => ws.unsubscribe(); }, [])。
那隻 bug 從來都不難,是我那天晚上的狀態不對。紅字不見了。
👤 我以為我在 debug React,但我真正在 debug 的是我自己。
給也在凌晨 3 點的你
如果你現在也在盯著一行紅字,問自己「為什麼只有我看不出來」——
先放下。不是放棄,是承認你現在的狀態不適合解決問題。
去睡覺。明天再看。
你會發現那隻 bug 沒那麼難,你也沒那麼差。
🫂 凌晨 3 點的 bug 是誠實的,但凌晨 3 點的你不是最好的你。
要聽真話,等明天早上再聽。

後記:那隻 bug 後來怎麼了
隔天早上修完之後,我 commit 寫得很短:「fix: cleanup ws subscription on unmount」。看起來跟平常一樣,沒人知道我前一天晚上經歷了什麼。
但從那天開始,我桌上多了一張便利貼,寫著:
「12 點之後不寫重要 code。」
不是給別人看的。是給凌晨那個我自己看的。提醒他:你不是機器,你不需要隨時待命。
一年過去,那張便利貼已經被我摸得有點皺了。但我每次看到它,都會想起那個凌晨 3 點的自己,盯著紅字、眼眶有點濕、心裡有點委屈。
他不孤單。寫這篇文的時候,我正式跟他說了再見。—— 給所有在凌晨 3 點還在跟 bug 奮戰的工程師
你今天很累了。 你其實做得不錯。 去睡覺。明天還有新的 bug 等你修。
(如果半夜真的睡不著,不要硬撐——起來喝杯水、寫下剛才 debug 的筆記、明早再戰。你不需要在凌晨 3 點證明任何事給任何人看,包括你自己。)
Ryan 的話:
>寫 code 12 年,我學到最重要的一件事不是某個語言、某個 framework、某個 design pattern。
>是學會分辨「哪個我在說話」。
白天那個我會說「你很行」「你沒問題」「你可以的」。
>凌晨那個我會說「你其實不夠」「你在逃避」「你害怕什麼」。
>兩個都是真的。 但要選擇聽哪個,是你的權利。
>我後來選了一個原則:12 點之後不寫重要 code。 不是迷信,是保護自己。
順帶一提:bug 從來不是問題。問題是你不願意聽它說的話。
參考資料 References
本文撰寫於 2026-06-16,所有引用來源於當日可查證。
📚 延伸閱讀

4% 法則退休規劃完整教學:30 歲工程師用 Claude Code 算自己的退休金,8 步蓋一座個人退休模擬器
大多數工程師都聽過 4% 法則,但 9 成的人不知道怎麼把它套到自己的數字上。這篇把 4% 法則、蒙地卡羅模擬、台灣在地...

我用 Claude Sonnet 4.5 三個月,再對比剛出的 Sonnet 5 — 一個工程師的真實心得
Claude Sonnet 5 昨天(2026-06-30)剛發布,但社群已經罵成一團。身為用了 Sonnet 4.5 ...

黃仁勳說你可以更好,為什麼我聽完反而更焦慮?一個工程師的兩個月研究
黃仁勳一句「你可以更好」引發討論,醫師警告「亞洲式稱讚」會變成「永遠不夠好」的焦慮循環。我不是要評論他說的是對還是錯,我...

康寧單日飆16%背後:AI 基礎設施上游爆發,工程師該看懂的三層訊號
上週康寧因 NVIDIA 入股單日大漲 16%,半年漲幅破 130%。這篇不聊選股,而是拆給工程師看:當 GPU 不夠用...