在音符之間休息

2026年10月12日星期一

前陣子看的一段演講影片,在我心裡停留了特別久。那是創立 Extreme Programming、把 TDD 推廣到全世界的 Kent Beck 在 Prodacity 2026 的演講,題目是〈Software Engineering in the Age of AI〉。現在有相當一部分的程式碼是 AI 寫的,這場演講問的是:怎樣才算把軟體做好。52 分多鐘的演講裡,最打動我的是 2 個單字,還有一位大提琴家的小故事。

Kent Beck 用 2 個軸來說明軟體開發:features 和 futures。一個是我們實作的功能,另一個是這套軟體以後還能怎麼改的選項,也就是改變的餘地(optionality)。他說,專案一開始什麼功能都沒有,卻有無限的可能,而隨著功能一個個實作出來,futures 就跟著減少。照他的說法,如果一直只堆功能,最後就會變成什麼都很難動的軟體:futures 值為 0,已經死掉了。

演講 25 分 45 秒處,Kent Beck 畫的 features 和 futures 圖:紅線代表只堆功能,綠線代表在功能和整理之間來回(來源:Rise8 YouTube 頻道)

某種程度上,這也是我當工程師這些年在工作中親身體會過的:重構很重要。以前實作功能時,看到可以改善的地方,我會一邊做一邊重構;做下一個功能之前如果還剩一點時間,也會把那段時間當成重構的時間。只是不知道從什麼時候起,我開始請 AI 把程式從頭寫到尾,現在想想,從那之後我就一直錯過了「重構的時間」。實作功能時,我會考慮好幾種 harness,像測試、lint、hook、寫明限制條件的 prompt、負責驗證的 agent,這些都是用來校正 AI 產出的機制。可是我發現,自己沒有在做「純粹的重構工作」。

Kent Beck 接下來說的也讓我很有共鳴。他大意是說,以前要 100 個人花 10 年,才會走到 futures 為 0 的地步;現在多虧了 AI,1 個人花 1 週就能搞出一個完美的爛攤子。至於是什麼樣的事,我沒辦法在這裡全部說出來。不過聽演講的時候,我眼前一直浮現那段過程中的摸索和犯過的錯,一個接一個疊到 Kent Beck 畫的那張圖上。回想起來,功能和功能之間的 cool down 有多重要,我好像忘得一乾二淨。

Kent Beck 在說明另一種做法時,提起了大提琴家帕布羅‧卡薩爾斯(Pablo Casals)的故事。他說自己年輕時在音樂系主修古典吉他,這個故事就是那時候聽到的。大提琴是很耗體力的樂器,據說卡薩爾斯拉的曲子裡,有一段是無止盡的 16 分音符。有人問他拉那麼多 16 分音符會不會累,卡薩爾斯這樣回答:「不會,我在音符之間休息。」其實聽說卡薩爾斯從來沒說過這句話,故事是編出來的。不過 Kent Beck 補了一句:這個故事實在太好了,不講不行。

雖然是編的,但聽著卡薩爾斯在音符之間休息的故事,我又一次想到:在節奏飛快的 AI 工作裡,應該也需要「為了把下一個音按準,調整手和呼吸的時間」,也就是「整理的時間」。前面寫到的「重構的時間」,就是這裡說的音符之間。在功能和功能之間不時整理一下,才能做出既有彈性又能擴充的軟體,這是開發者都知道的基本功;可是在功能大量湧出的這陣子,我覺得正是該把這個基本功重新撿回來的時候。就像卡薩爾斯在無止盡的 16 分音符之間也會休息,快速開發出來的一個個 feature 之間,也該穿插重構、整理測試案例吧。Kent Beck 舉的比喻「沒辦法邊切邊擦刀,但刀還是得擦」也很直覺,一聽就有感。

沒有整理、一路衝過來的痕跡,不只留在程式碼裡,我的 MacBook 裡也原封不動地留著。接連湧來了好一陣子的工作告一段落,我暫時空了下來。手一停下來,才看見了一些東西。來不及整理的 git worktree 和 DB container 到處堆著,剩下的儲存空間也快見底了。要是就這樣直接跳進下一個工作,說不定哪一刻容量就變成 0,一切都停擺。把堆起來的東西一個個刪掉之後,MacBook 才找回了接下一個工作的餘裕。我這台 MacBook 的 futures,也算是這樣回來了一點。

前陣子和家人去了一趟濟州島。這趟旅行在我心裡留得最久的,是在西歸浦看到的日出。一大早起床看著太陽升起的那段時間,真的很好。鋪滿整片天空的魚鱗雲從底下開始染上橘色,太陽在椰子樹的剪影後面一點一點探出頭來。

在西歸浦看到的日出

神奇的是,旅行回來之後,我們家早上的氣氛一下子就變了。早早起床開始一天,不知不覺成了我們家的節奏,也感覺得到身體跟著一點一點變得更健康。對我們家來說,那趟旅行算是音符之間的整理。這麼說來,我們的生活好像也跟軟體沒有太大的不同。不管是工作還是帶小孩,日子都一天接一天往下一個 feature 湧過去;中間如果沒有整理,生活的 futures 也會一點一點燒掉吧。