
我曾在李開復的演講中發問,『我會寫程式,但不喜歡寫程式,這樣子的情況在 Google 可以做什麼』,這個問題引起了哄堂大笑,李開復也在後面的媒體專訪中以此舉例批判這個想法;不過我當時的想法在最近幾年慢慢被實現了,因為不喜歡寫程式的人,只要存在著概念,現在也可以創造許多軟體應用。
最近我在程式開發上遇到一個難題,這個難題要徹底被解決需要進行重構工作,也就是同樣的功能以更具結構的方式重新寫過,避免在不良的結構上堆疊產生更多難以預期的錯誤,但過去礙於時程我大多會選擇繼續硬改,然後想著也許未來有時間再修吧,這也就技術圈常常在討論的技術債;但我選擇了進行重構,因為現在是 AI 在產生程式碼,我則是在一連串的『天啊,它居然寫的出來,那如果這樣呢…』想法中度過,然後就把重構工作完成,只用了一週的時間,大概是過去 3-5 個人的開發團隊空出一季到半年時間才能做到的事情,在發生之前我也難以想像。
更有趣的是,我過去 20 多年累積的經驗是 PHP 開發為主,但這個問題是發生在 dotNet 專案,我基本上不具有直接寫出 dotNet 程式的能力,大概要翻很久的文件才知道如何開始,但幾個月來我在這個陌生的程式語言中逐一完成承諾的事項;而且我是在 Linux 環境中完成 dotNet 程式開發,佈署到 Windows 環境中執行,測試環境使用 Docker 打造,這一連串組合在技術圈都很新、很陌生,但就靠著 AI 協助探索逐一找到解法並且確認可行,過去陡峭的學習曲線突然變得門檻低很多。
但別誤會,我並沒有因此成為 dotNet 大師,僅管已經順利交付一個專案並且進入下一個專案的啟動,我還是沒辦法直接打開電腦就手工寫出 dotNet 程式;但因為我在網頁應用上面有深入的理解,我是先想著 PHP 環境我會怎麼做,然後化為指令讓 AI 用 dotNet 打造,這就好像我們學英文的過程先在腦子產生中文的邏輯,然後轉成英文說出來的過程,也許講出來的東西沒那麼道地,但溝通工作還是可以順利進行,有了 AI 的參與,軟體開發變成了這樣的過程,而且 AI 不會嫌棄與拒絕你錯誤的語法。
但並不是每個人都意識到這件事情,在另外一個專案中,我看到一個開發團隊堅持手工刻出程式,然後一直跟需求方要求降低驗收標準;我大概用 2 天的時間,搭配 AI 完成了程式碼的整理與接手延伸到能夠運作的狀態,使用 PHP 復刻原本使用 JAVA 開發的部份,就這樣直接達到可以取代原有開發團隊的狀態。
當然,這一切也可能只是幸運的巧合,開始運用 AI 開發程式的過程,我發現自己遇到了越來越多艱澀的問題,因為以往在到達這個階段之前會有非常多重複的、枯燥的工作,以至於面對難題時會容易選擇簡單的解法;也其實,大部分的使用者無法分辨,到底你是使用糟糕的方式還是使用厲害的方式寫出程式,對使用者來說,順利的運用程式完成工作就是好事,堆疊抽象的層次數量是個位數還是數以百計,使用者基本上無感,只有開發者理解不同的程式結構的好壞,沒有使用者要求時都容易選擇便宜行事,這也就為什麼資安工程師這麼熱門了。
也因為這些體驗,改變了很多過去的理所當然,我不會再鼓勵學習程式開發的人去刷 LeetCode ,去追逐對程式碼語法的熟悉度,因為正常來說人類在這個層面很難跟上 AI ;現在會鼓勵大家,直接把目標鎖定在架構師這樣的位置,因為好的架構與開發習慣才能讓 AI 發揮最大的價值。
不過也因為 AI 刷新了三觀,我其實沒把握未來會軟體開發再出現什麼新奇的東西,現在很多人直接以 Vibe Coding 方式建構出可以運作的軟體工具,在完全沒有程式開發經驗的情況下進行,有些的確是看起來笨拙的組合,但那些運作良好的案例,說明了未來產生軟體工程師的路徑,可能不再是我們這些老屁股能夠預期的;而馬斯克直接預言 AGI 會取代軟體工程師,我是還看不出這樣的跡象,但大概不會像過去那樣斬釘截鐵的說這是騙局了。
這樣的體驗是在 Claude 訂閱 Max 等級的感受,然後很多朋友發現我在網路上發廢文的頻率變高了,因為我不是在等 AI 產生程式,就是準備要輸入指令進入另外一段等待回應的過程;至於用其他 AI 工具產生圖片、影片就是另外一段故事了,就先讓這篇停留在火星文的情境。
