最近花了很多時間研究 Claude Code,深深了解照這樣發展下去軟體工程這項技藝會變得跟過往所學有很大的不同,其實也很好奇世界級的軟工大師怎麼看待這樣的世界到來,剛好就聽到了 Kent Beck 的這個 Podcast,覺得蠻值得分享的,以下就透過AI快速翻譯了一下這些內容。

原始影片在這裡: https://youtu.be/5htJ2ML7BKU

《Nobody Knows》整理稿

我要先感謝 Augment Code 贊助《Still Burning》的第一季。 我還記得第一次看到 IDE 時的興奮感。那時候你可以找到任何東西、修改任何程式碼,整個人都覺得世界被打開了。 但如今,那個像鐘錶匠一樣精細雕琢程式碼的時代,已經過去了。

現在,大多數的修改,將會由「精靈」來完成。Augment Code 正透過他們的新產品 intent,把這種能力從 IDE 延伸到更高的層次。 程式設計師的角色,不再只是逐行編修程式,而是維持整體方向、持續學習、看懂發生了什麼、做出策略性判斷。至於那些細部的工作,則交給代理人去處理。

這一季《Still Burning》也由 WorkOS 贊助。 我們都正在經歷一場令人興奮的轉變,也就是從「想法」到「可運行系統」的速度,比過去快得多。 但從一個可以 demo 的系統,走到一個能夠真正賣給個人、甚至迅速導入企業的產品,中間需要一層更紮實的技術基礎。 而 WorkOS 所提供的,正是這種面向企業級產品的技術基礎建設。

我是 Kent Beck,《Still Burning》的主持人。 這個節目想談的是,那些仍然在乎、而且仍然實際去做些什麼的人。

我想把這樣的人,和另一種 geek 做出區別。 有些人學會了一套技能,也把那套技能練得很熟,但多年來始終在同一套程式碼、同一種風格、同一個團隊、同樣的節奏、同樣的工具與語言裡工作,幾乎沒有真正改變什麼。 我對這樣的人沒有敵意,只是,那不是我想對話的人。

因為現在最大的問題是,一切都在改變。 你不能再假設,過去支撐你 10 年、20 年、30 年的工作方式,未來還會繼續有效。 遊戲規則變了,技術地景正在移動,而我們甚至不知道一年後它會長成什麼樣子。 在這種情況下,「適應力」開始以前所未有的方式產生價值。 相較之下,只是一再重複過去擅長的做法,已經不再足夠。

我覺得我們所有人,像是一起被空投進一片荒野。 沒有人知道答案。

五年前,如果你問我:「為什麼正式環境裡的缺陷這麼多?該怎麼辦?」 我可以直接給你一套已經驗證多年的答案,談權責如何對齊、該用哪些工具、該怎麼思考。 但現在,如果你是在做增強式開發的情境下遇到同樣問題,老實說,沒有人真的知道答案。 我們在原則上知道一些事,但在實作層面,已經不像過去那樣確定。

所以,我認為現在最重要的姿態,是一種奇妙的組合:同時擁有自信與謙遜。 我們不知道答案,沒有人知道答案,所以我們只能試。 而「嘗試」本身,就是一項技能。 正如執行既定策略是一項技能,便宜地做實驗、快速驗證、甚至願意去測試一些看起來很糟的點子,也是一項技能。

如果一個點子夠便宜,那你就不需要過度預判它值不值得。 直接試,看看會發生什麼。 也許 100 次裡有 99 次都是爛主意,但只要那 1 次成了,你得到的就是真正的發現。 而且這種發現有三個甜美之處: 第一,它是真的新東西; 第二,沒有人跟你競爭,因為沒多少人會去試那種看起來有點蠢的想法; 第三,你能把這些發現帶回社群,變成共同資產。

所以,我不想跟那些說「反正這一切都會消失,不用研究了」的人對話; 也不想跟那些說「反正搞不懂,別浪費時間了」的人對話。 我想對話的,是那些仍然在乎、也仍然採取行動的人。

而這些人不一定都是老前輩。 其實現在有很多年輕人,正在做非常驚人的事。 他們依然在乎,也依然在做事。 我很想了解,他們是怎麼維持自己的好奇心,怎麼挑選實驗,怎麼用更低成本的方式測試更多想法,再把發現帶回社群。

我使用 geek 這個字,有一個很明確的定義。 我採用 GeePaw Hill 的說法: Geek,是一個同時高度技術性、高度創造性,而且強烈渴望自己同時具備這兩者的人。

這表示,geek 不只存在於程式設計。 你可以是烘焙 geek、藝術 geek、音樂 geek。 雖然我們的核心聽眾大多是程式設計師,但我相信,這種 geek 的精神,其實適用於比我們原本以為更廣的人類活動。

這個節目有贊助商,我很感謝他們,因為那讓這些對談得以發生。 但這裡不是做產品推銷的地方。 我們不會花時間談某個產品的版本號或功能清單。 這裡更像是一個退後一步的地方,大家坐下來,裹著毛毯,在煙霧與火光裡聊幾個真正重要的問題:

你為什麼還在乎? 你在乎的是什麼? 你正在做什麼? 你最近學到了什麼? 你下一步最想試什麼?

如果來賓剛好出了新書、推出新產品,那很好。 但我們感興趣的,不是產品本身,而是那背後的故事。 是什麼樣的探索,把那本書、那場演講、那個產品帶到了現在。 因為這些故事,才真正能幫助我們在這片未知地帶裡前進。

我想,很多 geek 眼前最大的困難之一,是這場劇烈變化根本不是他們主動選的。 五年前,你完全可以把某項技能打磨到極致,並合理地以為自己未來整個職涯都會倚靠它。 但現在,情況變了。

例如,我曾經寫過兩本書,教人如何寫出「人類很容易閱讀」的程式碼。 而現在,這項能力的槓桿效果已經大幅下降。 這讓我很難過,因為我真的很喜歡雕琢那種能夠被快速掃讀、輕易理解、方便修改的程式碼。 但如今,這件事已經像記電話號碼,或是開手排車踩離合器一樣,不再那麼重要了。

許多人現在感受到的失落,其實就來自這裡。 他們不是不努力,相反地,他們花了很多年把某件事做到很好,也靠這些能力養家、存未來。 但現在,那些技能因為外部世界的變化而貶值了。 這確實發生了,而且發生在我們每個人身上。

所以問題不是,我們還能不能繼續死守舊技能直到最後一刻。 問題是:我們要怎麼適應? 有些人現在的策略是保守地問:「我最少要改變多少,才還能繼續付房貸?」 但我不覺得這樣的心態,對個人或整個社群有真正幫助。

我更想對話的,是那些願意承認「我 10 年、20 年、30 年前擅長的東西,現在不夠了」的人。 接著繼續問: 那現在什麼才夠? 現在什麼真正有價值? 我怎麼向社群學習? 我怎麼回饋社群? 我怎麼教年輕人? 我又怎麼向年輕人學習?

對我來說,增強式開發最令人興奮的一點,就是我經常從年輕一代那裡得到極好的建議。 我提出自己的做法,他們可能直接跟我說:「老大,那樣不行。」 而我反而很喜歡這件事。 因為那表示我還有地方能學。

當然,我也有自己的原則和經驗要放上桌。 但我現在也必須重新檢視: 我一生所建立的那些原則,到底哪些是真的歷久彌新,哪些其實只是在舊脈絡裡才成立? 哪些要修正,哪些要保留? 即使在這個新世界裡,我還看不出它們該怎麼被應用,我也得重新去理解。

這就是我想透過對談做的事。 和那些高度技術、又高度創造的人碰撞,去觀察他們如何探索「現在還有什麼可能」、「什麼已經不再重要」,然後一起學習接下來應該往哪裡走。

舉個例子。 我第一本書《Smalltalk Best Practice Patterns》的核心論點,就是如何寫出讓人容易閱讀的程式碼。 我分析 Smalltalk 世界裡各種程式設計習慣,試著找出哪些模式能真正提升可讀性。 這裡面從空白、tab、命名,到類別設計層級的問題都有。

我過去花了很多力氣去調整程式碼的細節: 這樣寫會不會比較容易讀? 還是那樣排版更清楚? 還能不能再更乾淨一點? 我熱愛這種反覆提煉的過程。 Ward Cunningham 甚至教會我一種近乎美學的追求,就是一遍一遍讓程式碼更清楚。

而且那確實有回報。 如果一段程式碼本來就是為了將來容易被改動而寫,那它就有更高價值,因為它內建更多選擇性。 但現在的情況是,人類仍然需要理解程式碼,可是那種微觀層次的精細雕整,已經不像以前那麼重要了。

這不代表結構不重要。 結構依然重要。 只是,今天創造結構這件事,已經不再只是「操作文字編輯器」的技術了。 它更像是站在更高的抽象層次去理解: 這裡發生了什麼? 未來最可能改的是什麼? 我該怎麼把程式碼整理成更適合未來改動的形狀?

所以,變更仍然重要,但細節的重要性變了。 我們現在就像從前的鐵匠。 那些曾經非常珍貴、非常成熟的技能,有些能帶進新時代,有些不行。 關鍵是,我們得學會辨認。

我始終希望,最後我們能找到雙贏。 找到一種新的能力,讓程式碼既更容易被「精靈」操作,也更容易被人類理解。 甚至,我們還能利用精靈來幫助我們理解程式碼。

我最近寫了一個 GPU sorted map 的專案,第一次碰 GPU 程式。 裡面有些術語我根本不熟,所以我乾脆請精靈用童話故事的方式解釋 fetch operation。 它真的寫了一個皇后下令、侍從奔跑、再把答案帶回來的故事。 這不一定是最佳方法,但它提醒我一件事: 現在我們有全新的問題,也有全新的資源。 而且無論問題還是資源,都在持續變動。

但有些底層原則並沒有變。 例如權責一致、利害與共、低成本實驗、創造力、社群、分享與安全。 這些在「精靈增強世界」裡依然成立。 改變的是技術,不是這些基本原則本身。

隨著年紀增長,作為 geek,會經歷一種能力上的轉變。 一開始你不知道什麼東西值得做,只能照著別人的指示去實作。 但慢慢地,你會開始看見那些還不存在、卻很有價值的東西。 那是 senior 的能力之一。

但 senior 之後,另一件事會發生。 你腦中會冒出很多值得做的點子,可是你也知道每一個都很大、很耗時,所以你只能從 10 個點子裡做 1 個。 於是你的世界會越縮越小,只剩下那些你覺得自己做得完的東西。

而精靈的出現,突然把這個世界撐大了。 現在,如果我想從零開始寫一個資料庫,我真的有可能去試。 以前那幾乎是不可能的任務,現在則未必。 因此,「想像有價值的東西」這項能力,突然變得更有槓桿。 同樣地,「決定下一步該試什麼」、「知道什麼時候該放棄某個專案」也都變得比以前重要得多。

現在不是一年做一個專案,而可能是一週開一個。 多數專案其實都不是好主意,而你只有做到一半才會知道。 所以,能在適當時機說出「這個不值得再做下去了,我該轉向別的」的人,會擁有很大的優勢。

我也對有些人對增強式開發的激烈反應感到驚訝。 那到底是出於謹慎,還是出於自我? 我自己其實不是早期採用者。 我看著別人熱烈討論了很久,直到看見 Gene Kim 和 Steve Yegge 示範他們稱為 vibe coding 的東西,才真正被打動。

我努力用一種更平靜的心態看這一切。 因為很多抗拒,其實來自依附。 如果你花了 10 年把 TDD 練得爐火純青,那你自然會對它投入情感,也會認為它是核心能力。 但進入增強式開發後,就連「如何選出下一個 test」這種精細技巧,現在是否還像以前那樣有高槓桿,都變得不那麼清楚了。

這對我也是一種挑戰。 我花了很多年去深挖很多主題,也很難輕易接受「原來有些東西現在已經不重要了」。 但現實是,有些東西確實不再重要;有些則比過去更重要。 而中間還有一大塊灰色地帶,只能誠實承認: 沒有人知道。

舉例來說,我對「不追求 100% 測試通過」這件事一直感到困惑。 對我來說,所有測試都通過,代表一種極高的信心。 雖然那不保證 production 就真的沒事,但它至少讓我能帶著極大的把握去 deploy。 可如今,越來越多人似乎接受「軟體大致能跑就好」。 這樣可以嗎? 這只是過渡期嗎? 還是未來精靈真的會更擅長產出高可靠性的系統? 我不知道。

所以,這正是我想探索的主題。 缺陷是不是仍然是壞事? 在什麼情況下是壞事? 我們能做什麼? 要付出什麼代價? 我們為了品質放棄了什麼,又獲得了什麼? 這些問題,今天沒有標準答案。

另一個讓我興奮的地方,是增強式開發讓設計師與產品人也更有機會直接把想法做出來,不再一定需要透過工程師中介。 而更重要的是,它讓跨職能合作變得更有可能。

極限程式設計一直強調 whole team,也就是成功所需的人應該在同一個房間裡,彼此首先認同自己是團隊的一部分,而不是只認同自己來自某個職能部門。 但過去我們一直受到 silo 拉扯。 產品歸產品、設計歸設計、工程歸工程。 我一直認為這是錯的。

增強式工具現在給了我們一個機會,可以打破這些 silo。 當然,它也可能被拿來把 silo 變得更牢。 但我希望我們選的是前者,也就是讓人與人之間產生更多連結。

還有一件事,我想說清楚。 這裡不會只有溫和、輕鬆、彼此附和的對話。 我希望邀請那些有分歧的人。 那些在價值觀、原則、方法上彼此衝突的人。 因為我不認為那種一團和氣、大家聊得很開心的節目,能為當前這場巨大轉變帶來足夠的價值。

所以,如果你想要的是被拍拍頭、安撫一下,那這裡可能不適合你。 這裡比較像是拍你背一下,甚至偶爾踢你一腳,然後說: 去試。

現在很多問題,我的答案就是這個。 有人問我:「TDD 能不能跟增強式開發一起運作?」 我會說,去試。 有人說:「TDD 是唯一方法。」 我也會說,去試。 因為現在,真的沒有人知道。

10 年後、15 年後,人類還會參與多少開發工作? 沒有人知道。 但至少此刻,我們正站在一個可怕、刺激、充滿創造力的轉折點上。 規則已經變了,而新規則是什麼,我們還不知道。 更刺激的是,它還會繼續變。

有人問我,怎麼跟上這麼快的變化。 我當時的直覺回答是: 我沒有在跟上,我是在努力保持領先。 而這些對談,就是為了那些也願意思考下一步的人而做的。

這不代表你要什麼都追、什麼都試。 但我認同一句話: 我來這裡,是要搖樹,不是做果凍。 我要試東西、理解什麼有效、說出我的觀察,也去聽別人怎麼看。 當別人的結論和我不同時,那不是壞事,反而是一個機會,讓我們更深入理解:某種技術、原則或技能,到底是在什麼脈絡下才成立。

因為在這個時代,最有槓桿的一個問題就是: 我們下一步該試什麼?

我重新找回了自己對寫程式的熱愛,而 AI 對我的價值也不只在寫程式。 我本來就很喜歡深入理解議題,也對世界充滿好奇。 例如,有一次我聽到別人說,當一個系統的 eigenvalue 變成複數時,它就會出現振盪。 我以前學過矩陣,但從來沒真正弄懂 eigenvalue。 於是我去跟模型對話,花了大概兩個小時,我不會說我「懂了」,但我至少對那件事有了直覺。 而那讓我非常驚訝。

對我來說,AI 讓我最喜歡的事變得更容易了: 找到一個有趣的主題,然後一路挖深。 當然,現在我仍然得面對新的選擇困難。 可以學的東西那麼多,到底先學什麼? 什麼時候該停下來,轉去學別的? 這些新的判斷能力,也因此變得更加重要。

現在,我幾乎會把 AI 用在任何我想到的地方。 每當我心裡冒出一句「我很好奇……」,那通常就是一個值得拿模型來試的時刻。 有時我甚至會把同一個問題丟給不同模型,看它們哪裡相同、哪裡不同。 這讓我的智性生活比以前更豐富。

甚至像是「Porto 哪裡最適合吃海鮮」這種事,也一樣有價值。 因為你得到的答案,不再明顯只是別人的商業導流結果。

至於我做這個 podcast 最怕的是什麼? 老實說,是沒有人在乎。 我怕自己投入這些想法,最後根本沒有任何影響。 我怕這項技術對程式設計這件我深愛的事所帶來的負面後果,會一路往前衝,而我根本做不了什麼。

但即使如此,我仍然相信,有一些東西是始終有效的。 例如人與人的連結。 真實的人際對話,尤其是觀點不同的人之間的對話,總是會創造價值。 我一再在自己的職涯中看到這件事。 跨越不同興趣、信念與視角的連結,總是能帶來新的理解。

所以,這就是為什麼這裡有一張椅子。 為什麼有一條毛毯。 為什麼我想邀請那些願意坐下來,談談身為 geek 是什麼感覺、談談什麼叫做「仍然在乎,仍然採取行動」的人。 這,就是《Still Burning》想做的事。