跳到主要內容
Cypher's Practical Coding
正在準備工作環境...

「在我電腦上可以跑」的終結者

你一定聽過這句話

在我電腦上可以跑啊。

這是工程師在回報 Bug 時最常說的一句話,也是讓 PM 和營運人員最頭痛的一句話。

你提了一個明確的問題:「為什麼昨天促銷頁面的倒數計時器壞了?」

工程師查完說:「奇怪,我這邊跑起來完全沒問題。可能是你們測試環境和正式環境的版本不同。」

然後,就沒有然後了。

這種情況不是因為工程師不負責,而是因為環境問題本來就很難重現、很難解釋。


為什麼環境問題這麼難搞?

想像一下,你要做一道客家炒米粉。你把食譜給朋友,他在家做,味道完全不一樣。

原因可能是:

  • 他用的米粉品牌不同
  • 他的瓦斯爐火力和你的電磁爐不同
  • 他的醬油是日式的,你的是台式的

食譜一樣,結果卻不同——因為執行環境不一樣

軟體的世界也是這樣。同一份程式碼,在工程師筆電、測試機、正式主機三個地方跑,背後的作業系統版本、語言版本、依賴套件……可能都不同。任何一個細微差距,都可能造成「在我電腦可以跑,上線就壞」。


貨櫃革命:一個改變世界的比喻

1956 年之前,全球貨運是一場噩夢。

每艘船、每個港口、每個貨車的規格都不同。一批從台灣出發的商品,到了美國港口要重新裝箱,換船,再重新裝卡車。每一次轉換都是人力、時間、風險。

然後,標準貨櫃出現了。

一個固定尺寸的金屬箱,船可以裝、卡車可以載、起重機可以吊。不管貨物是什麼,外面那個箱子是標準的,所有設備都能處理。

這不只是個方便的工具,這是一場革命:全球貿易量因此爆炸性成長。

**容器化(Containerization)**在軟體界做了完全一樣的事。


Docker:軟體界的標準貨櫃

Docker 讓工程師可以把一個程式,連同它需要的所有環境(語言版本、依賴套件、設定),打包成一個標準的「容器」

這個容器:

特性解釋
可攜帶在工程師筆電跑得起來,就能在任何伺服器跑
可重複每次啟動都是完全相同的環境,不會有「今天好明天壞」
隔離不同容器之間不互相干擾,一個壞掉不影響其他人
輕量比傳統虛擬機快很多,幾秒內就能啟動

身為 PM / 營運人員,你為什麼需要懂這個?

你不需要會寫 Dockerfile(那是工程師的事),但你需要聽懂工程師在說什麼,並且能夠問對問題。

懂了容器化,你可以:

  1. 理解「環境問題」為什麼會發生,不再覺得是工程師在推卸責任
  2. 問出好問題:「這個 Bug 是哪個環境的容器版本?測試環境和正式環境的映像檔一樣嗎?」
  3. 設計更好的工作流程:知道部署流程的每一步在做什麼,推動更快的修復速度
  4. 跟工程師協作更順暢:共用一套語彙,減少來回溝通的摩擦

本課程接下來的路

這門課不會教你寫程式,但你會學到:

  • 映像檔、容器、倉庫是什麼(第 2 課)
  • 如何看懂 Dockerfile 和部署設定(第 3 課)
  • 部署相關的核心字彙(第 4 課)
  • 從一個功能被合併到上線,完整發生了什麼(第 5 課)

讀完這門課,下次工程師說「容器重啟了,映像檔要重 build」,你會知道他在說什麼,也知道這意味著多少時間和風險。


練習題


AI 協作:學了這個,跟 AI 怎麼配合?

了解容器化概念,讓你能精準描述「環境問題」,AI 才能給出有用的排查建議,而不是泛泛而談。

你的人類優勢:

  • 你知道這次上線前改了什麼業務邏輯,AI 無法從技術日誌中判斷業務背景
  • 你能判斷這個 Bug 的商業影響程度,決定是否值得立即回滾

可以這樣跟 AI 說:

我們昨晚部署了新版本,促銷倒數計時器在正式環境壞了但測試環境正常。工程師說可能是容器環境問題。請幫我列出 PM 應該向工程師確認哪些問題,以便快速定位是哪個環節出了差錯。

挑戰任務

Task 1

用自己的話解釋:為什麼「在我電腦上可以跑」這個問題很難解決?寫出一個你工作中可能遇到的類似情況。

Task 2

貨櫃革命和容器化的共同點是什麼?用一句話說明。

Next Lesson →