凌晨 3 點的 bug 比凌晨 3 點的自己誠實
生活隨筆📖 約 10 分鐘閱讀👁 ---

凌晨 3 點的 bug 比凌晨 3 點的自己誠實

30 秒 mindmap 摘要:

- 那晚發生什麼:記憶體洩漏 4 小時抓不到,凌晨 4:12 放棄去睡

- 我以為我在 debug 什麼:React 裡 useEffect 的 cleanup 沒寫

- bug 真正在告訴我什麼:白天那個「我寫 code 是因為喜歡」是假的

- 隔天早上 5 分鐘解掉:不是 bug 變簡單,是我的狀態變對了

- 我學到的事12 點之後不寫重要 code。保護那個凌晨的自己。

凌晨 3 點的桌面,螢幕紅字、空咖啡杯、單盞桌燈

你有沒有那種經驗——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 對你完全誠實:

  • 主管可能因為政治考量不敢說你不行
  • 同事可能因為情誼不會直接說你寫得差
  • 自我感覺可能因為過去的成功而膨脹
  • 但 bug 不會。bug 只在乎一件事:你的邏輯有沒有漏洞。
    debug 心理狀態的三個階段:卡住 → 抽離 → 隔天早晨看見

    凌晨 3 點,沒人會看到你哭。

    凌晨 3 點的誠實

    後來我學到一件事:越晚寫 code,bug 越誠實。

    不是 bug 變了,是你變了。

    白天你會自我感覺良好:

  • 寫出個 function 覺得自己很行
  • 解決個小 bug 覺得自己又升級了
  • 看到同事卡住會覺得「我比較強」
  • 但凌晨 3 點,那些自我感覺都會被一杯又一杯的咖啡稀釋掉。剩下的只有 code、bug、和你自己。

    這時候你才會誠實面對:

  • 我其實不喜歡寫前端,只是因為比較容易找到工作
  • 我以為我喜歡這間公司,但其實我只是喜歡薪水
  • 我以為我是技術 leader,但其實我只是在轉 PM
  • 我以為我下班還要寫 side project 是熱情,但其實是怕被淘汰
  • 🛎 凌晨 3 點的 bug,是工程師的午夜兇鈴。

    響的時候你會怕,但聽完之後,你才知道白天哪些話是騙你的。

    那天後來怎麼了?

    👤 凌晨 4:12,第 4 杯美式喝完,咖啡機發出「喀拉」一聲——沒豆子了。

    我盯著那行紅字再看了 30 秒。

    我決定不修那個 bug。

    我去睡覺。

    👤 隔天早上 8:30 醒來,洗個熱水澡、吃個完整的早餐(不是昨天的微波便當),重新打開電腦。

    bug 還在,但我看得到它了。

    5 分鐘修完。

    補一行 useEffect(() => { return () => ws.unsubscribe(); }, [])

    紅字不見了。

    那隻 bug 從來都不難,是我那天晚上的狀態不對。

    👤 我以為我在 debug React,但我真正在 debug 的是我自己

    給也在凌晨 3 點的你

    如果你現在也在盯著一行紅字,問自己「為什麼只有我看不出來」——

    先放下。

    不是放棄,是承認你現在的狀態不適合解決問題

    去睡覺。明天再看。

    你會發現那隻 bug 沒那麼難,你也沒那麼差。

    🫂 凌晨 3 點的 bug 是誠實的,但凌晨 3 點的你不是最好的你。

    要聽真話,等明天早上再聽。

    這篇文章的核心 4 個想法:bug 是鏡子、凌晨不清醒、放手也是進度、保護那個自己

    後記:那隻 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,所有引用來源於當日可查證。

  • 1. Stack Overflow Developer Survey 2024 - 工程師工作時間與心理健康 — 查證日期:2026-06-16
  • 2. The Pragmatic Programmer - 關於「流狀態」與「疲勞」對程式碼品質的影響 — 查證日期:2026-06-16
  • 3. Paul Graham - Maker's Schedule, Manager's Schedule — 查證日期:2026-06-16
  • 4. Code as Craft - 為什麼我們公司禁止週末 deploy — 查證日期:2026-06-16
  • 5. 衛生福利部 - 心理健康資訊 - 失眠與焦慮 — 查證日期:2026-06-16
  • 本文使用的來源類型統計
  • 📊 政府/官方:1 個
  • 📚 學術/研究:0 個
  • 📰 媒體報導:2 個
  • 👤 個人經驗(無需外部查證):15 處
  • #工程師#debug#凌晨#自我對話#工程師人生#寫程式#心靈隨筆#30歲