心流之後
幾週前我注意到一件奇怪的事:我已經不坐在書桌前了。
多年來,我的辦公室都是為了單一目標最佳化的:保護一段又一段不被打斷的專注時間。機械鍵盤、大螢幕、人體工學椅、好耳機。這套配置反映的是當時這份工作的要求——坐著不動,在腦子裡撐住一個複雜的心智模型,然後連續幾個小時把它翻譯成程式碼,中途不能掉。然後,幾乎在我沒察覺的情況下,我不再用它了。
現在我會派一個 agent 去做某個功能,走進廚房煮咖啡,對著手機口述幾則筆記,窩在沙發上審查另一個 repo,做幾分鐘徒手健身,再回來看 agent 做出了什麼。有時候我在書桌前工作,有時候在廚房檯面上,有時候在戶外。我整天在家裡走來走去。
一開始我以為自己只是養成了壞習慣。後來我才想到,習慣會變,是因為這份工作變了。
工作的節奏
關於 AI 輔助寫程式的討論,大多集中在那些顯而易見的東西:模型、基準測試、prompt、上下文視窗、agent。這些都很有意思,但我認為它們正讓我們錯過一件更根本的事。AI 改變的不只是軟體怎麼被寫出來,它改變的是軟體工程師一天的節奏。
心流曾經是寫程式這件事最具代表性的特徵,我們不斷談論它,因為它確實有價值。如果你實作過複雜的功能,你知道那種感覺——腦子裡同時裝著十幾個檔案、好幾層抽象,以及所有還沒寫進程式碼裡的邊界情況。有人打斷你三十秒,代價不是三十秒,而是二十分鐘,因為你得把剛剛從腦子裡掉出來的東西重新建起來。
心流不是奢侈品,而是對工作型態的適應。
用 agent 寫程式悄悄拆掉了這個迴圈。原本是一邊持續思考、一邊持續打字,現在一天被切成一段段短週期:界定問題、派出 agent、等待、審查、修正方向、再來一次。深度思考沒有消失,只是移位了。以前我花四個小時實作一個解法,現在可能花四十分鐘想清楚怎麼把它拆解成 agent 能安全執行的工作,然後那四個小時發生在我沒看著的地方。我之前寫過以 session 為單位這件事,這裡是同一個觀察,只是對準的是行事曆,不是上下文視窗。
寫程式變成即時戰略
一旦一天是由這些週期組成的,我整天在做的事看起來就不再像寫程式了,比較像調度。
有人把這說成是變成管理者,我覺得不太對——管理者主要協調的是人,而這件事更偏戰術層面。我找到最接近的類比是即時戰略遊戲。在 RTS 裡,你不會親自去砍木頭或挖礦,你在做的是指派工兵、擴張版圖、對新情報做出反應,並確保沒有重要的東西閒置。難的不是執行任何單一動作,而是決定整張地圖上此刻該發生什麼。
這跟我現在的工作日感覺很接近。一個 agent 在實作功能,另一個在更新相依套件,第三個在追一個 bug,而我一邊審查昨天的成果,一邊決定它們各自接下來要做什麼。我的注意力變成了稀缺資源——對一份過去瓶頸在打字速度的工作來說,這句話說出來有點奇怪。
導演椅
即時戰略這個比喻涵蓋的是調度,沒有涵蓋到你判斷這東西到底好不好的那一部分。
電影導演不會下去演,也不會親自操作攝影機。在大型製作裡,最後上銀幕的每一格畫面,他可能一格都沒親手碰過。但沒有人會因此說這部片不是他的,因為讓這部片屬於他的,是在關鍵處反覆做出的判斷——什麼該存在、什麼需要再拍一次、什麼要剪掉、整部片撐不撐得起來。這是真正的工作,只是不用親手做。
這就是工程裡存活下來的那一部分,而且它在這份工作裡佔的比重比以前更大。決定某個功能不該被做出來。因為抽象設計錯了而把東西退回去,即使測試全過。發現整個程式碼庫已經漂移成同一件事有三種不同做法。這些從房間另一頭看過來都不像在工作,但它們全部加起來,就是一個撐得住的系統和一個在六個月裡悄悄散掉的系統之間的差別。
消失中的工作站
這個轉變會出現在家具上。
幾十年來,工程師的書桌都是繞著手工產出最佳化的。前提假設是你會在那裡坐六個小時,持續產出程式碼。我還是喜歡好鍵盤,遇到難搞的除錯或要讀一份很大的 diff,我絕對想要大螢幕。但那已經不是一天裡大部分時間發生的地方了。我的開發環境越來越常是一台筆電、一副 AirPods,加一支還可以的麥克風。這篇文章有一部分,是我在家裡走來走去、對著手機講出來的——這裡的東西現在大致都是這樣做出來的。幾年前這聽起來會很荒謬。
工作站悄悄地從一個生產環境變成了一個監督環境。這不代表舊的那套配置消失了,而是我開始有意識地使用它。現在有兩種模式。調度模式輕便、可以到處走——派出工作、回答問題、口述指令、確認狀態。檢視模式則是大螢幕仍然值得那個位置的地方——難搞的除錯、複雜的 diff、架構,以及任何需要持續投入人類判斷的事。
從這裡還掉出另一件我沒預期到的事:我變得比較常動。在舊的工作方式下,站起來是昂貴的,因為那代表打斷專注,之後還要付出代價把它重建起來。現在停頓本來就內建在工作裡。我離開房間的時候 agent 還在跑,所以離開不用付出什麼。
舊的工作站,設計目的是讓身體保持不動,好讓腦袋撐住狀態。用 agent 工作削弱了這個要求,這可能是整個轉變裡比較健康的後果之一——前提是我們沒有把「坐在書桌前」換成「窩在沙發上強迫性地一直查看五個 agent」,那會是另一種版本的繞著機器人重新佈置整間房子。
書桌不再是一天的中心。它是工作難到值得我過去的時候,我才會去的地方。
一起思考,各自執行
同一個轉變也改變了我對遠端工作的想法。
剛開始遠端工作的時候,我覺得工程這一行終於找到了它的自然棲地。程式設計師當然應該在安靜的家裡工作,而不是開放式辦公室——這份工作需要不被打斷的專注,而家裡比較能提供這個。但最近,在 agent 跑著的時候,我常常會想找人講話。不是需要人幫忙實作什麼。我想把一個架構上的想法丟出來討論、為一個取捨爭論一下、在派出下一批工作之前確認一下方向合不合理。
實作變成非同步的了,思考沒有。
這並不能解決遠端與進辦公室之爭——Slack 和通話應付這些對話沒什麼問題,而且公司決定要不要辦公室,理由向來跟工程工作的認知需求關係不大。它改變的是我對「為什麼會想待在其他工程師旁邊」的直覺。重點比較不是一起寫程式,而是一起思考。舊的工作方式偏好獨自思考、獨自建造。正在成形的這一種比較接近一起思考、平行執行、一起審查。這不需要一棟樓,但確實表示這份工作有更多時間花在對話上。
現在的生產力長什麼樣
我一直注意到的是,我們評價工程這件事,用的還是舊工作方式的眼光。我們想像中有生產力的程式設計師,是坐在三個螢幕前面用力打字的人。我們把看得見的專注讀成產出。一個在家裡走來走去、對著 AirPods 講話、看四分鐘筆電、然後跑去煮咖啡的人,看起來不像一個認真的工程師。
我不認為那個形象撐得下去。下一代工程師走路的時間可能比坐著多,講話的時間比打字多,審查的時間比寫的多——同時推進好幾條獨立的工作線,只有在真的需要的時候才回到大螢幕前。奇怪的地方在於,他們產出的軟體大概會多得多,但看起來會比較不像程式設計師。
這就是我一直試著想通的那個轉變。AI 改變的不只是我怎麼寫程式,它改變了我的一天長什麼樣、這一天發生的時候我的身體在哪裡,以及我到底是為了什麼而在場。