下午五點,阿偉的手機震了一下。
小姜傳來訊息:「學長,下午說的那個API我寫好了,已經push上去了。麻煩你有空幫我review一下。」
阿偉看了一眼時間。從午飯後開完需求會議到現在,才過了三個小時。
三個小時?
他點開GitLab,commit記錄顯示小姜剛才push了一個完整的API實作,包含錯誤處理、資料驗證、還有單元測試。
阿偉快速掃過code,語法看起來沒什麼問題,邏輯也滿清楚的。甚至連註解都寫得很完整。
「不錯啊。」他回覆。
但放下手機後,阿偉突然感到一陣不對勁。
他想起以前自己還是菜鳥的時候。
那時他處理類似的整合功能時,光是研究第三方API的文件就花了大半天。更別說那些邊界條件的處理,還有測試案例的設計...他記得那次至少花了兩天。
小姜出社會到現在才快兩年,怎麼可能三小時就搞定?
他打開Slack,傳訊息給小姜:「你怎麼做這麼快?」
小姜很快回覆:「喔,我用Cursor輔助寫的。把需求跟API文件餵給它,它就幫我生成了大部分的code。我只是調整一下邏輯跟加上我們專案的error handling而已。」
「而且學長你之前建立的FAQ文件啊,裡面的範例超有用耶,我照著那個風格寫,AI生成的code品質就變得很穩定。」
阿偉盯著螢幕,突然覺得胃有點不舒服。
他花了七八年累積的經驗,現在被一個AI三小時就...超越了?
晚上,咖啡廳。
阿偉一坐下來就開始抱怨。
「我不知道我還能幹嘛。」他的聲音裡帶著一種挫敗,「你知道嗎,我以前引以為傲的那些經驗,現在好像都沒什麼用了。」
「怎麼說?」我問。
「就是小姜今天做的那個功能,」阿偉攪著咖啡,「我記得我以前要處理類似的整合,光是搞懂第三方API的那些眉眉角角就花了好幾個小時。什麼timeout要這樣設、什麼參數要那樣傳,都是我一個一個試錯出來的。」
他停頓了一下,「結果現在呢?小姜把文件丟給AI,三小時就全部搞定了。那我這麼多年到底在幹嘛?」
我看著他,「所以你覺得...AI讓你的經驗貶值了?」
「不是貶值,是直接歸零好嗎。」阿偉有點激動,「你知道那種感覺嗎?就像你辛辛苦苦熬了多年練就的武功,結果人家吃個仙丹就直接超越你了。」
「而且...」他的聲音變小了,「我開始懷疑,我當初跟老楊說好要保留的那些 codeing time,還有什麼意義?」
店裡的輕音樂換成了鋼琴獨奏,旋律有點憂傷。
「你還記得我們聊過冒牌者症候群嗎?」我問。
阿偉皺眉,「記得啊。你是說我現在又發作了?」
「有點類似,但這次不太一樣,」我說,「那時候你害怕的是你『配不上』,對吧。但現在你害怕的是什麼?」
阿偉想了想,「我害怕...我的技術價值被AI取代了。」
「對,」我點點頭,「所以我們現在要面對的問題核心是,你覺得自己的價值在哪裡?」
「我的價值...」阿偉停頓了一下,「應該是我寫code又快又好吧?還有我累積的那些經驗,知道什麼情況該用什麼技術。」
「那小姜今天的表現呢?」我問,「他寫得快嗎?」
「快啊,才三小時。」
「寫得好嗎?」
「呃...」阿偉遲疑了,「code看起來沒什麼大問題。邏輯滿清楚的,基本的測試也有寫。」
「所以,如果只看『執行效率』這個標準,」我說,「AI確實贏你了,而且贏得很徹底,對吧?」
阿偉沒說話,但臉色更難看了。
「可是,」我繼續說,「既然這樣,那為什麼公司還是需要你呢?如果只是要『寫code又快又好』,那直接請一堆會用AI的junior不就好了嗎?」
「這...」阿偉愣住了。
我在紙上寫了兩個詞:
執行效率 vs 判斷能力
「你一直在用『執行效率』來衡量自己的價值,」我說,「但你有沒有想過,也許這根本不是一個有豐富經驗的工程師該比的東西呢?」
「那我該比什麼?」阿偉有點困惑。
「判斷能力,」我說,「你知道宮崎駿嗎?」
「知道啊,《龍貓》那個。」阿偉不解,「這跟寫code有什麼關係?」
「很有關係,」我說,「宮崎駿在他的工作室裡,有一大群從美術專門學校畢業的動畫師,對吧?」
阿偉點點頭。
「這些後輩很多都比宮崎駿更年輕,體力充沛、手又穩、技巧又學得很好。他們之中,很多人的畫技很可能比宮崎駿本人還精湛,產出動畫的速度也更快。」
「這種時候,」我看著阿偉,「你覺得拿宮崎駿跟那些畫師比手速、比誰素描更精緻,有意義嗎?」
「呃…沒必要吧。」
「對吧?」我繼續說,「而且,如果沒有宮崎駿,光是把這些動畫師集合起來,也是完成不了《龍貓》的。你知道為什麼嗎?」
阿偉想了想,「因為... 只有宮崎駿才知道,這部動畫要怎麼呈現…嗎?」
「對!更精確地說,」我在紙上又寫下幾個字:
動畫師的價值:執行技巧 (畫得快、畫得好)
宮崎駿的價值:判斷與願景 (定義要畫什麼、為什麼要這樣畫、把關助手的產出要符合需求)
「你看,」我說,「AI 就像那些厲害的動畫師,它可以快速、高效率地執行指令,它甚至能為你做出各種專業的、頭頭是道的分析。但到頭來,它卻沒辦法替你決定,你最後該端出去的東西,應該是什麼。」
阿偉盯著紙上的字,眼神開始有了變化。
「所以你是說...」他慢慢地說,「我應該從『執行的人』變成『會判斷的人』嗎?」
「不光是判斷而已,」我說,「是定義方向的人。」
阿偉沉默了一會,突然開口:「可是...AI不會也學會判斷嗎?它現在已經可以幫我寫code了,說不定哪天它也能學會做技術決策啊。」
「你說得對,」我點點頭,「AI確實在進步。但你想啊,為什麼小姜今天能用AI做得這麼快?」
「因為...AI很強?」
「不只是這樣,」我說,「是因為他用了你之前建立的說明文件當中的範例當作參考,而AI需要適當的prompts 以及 上下文(context) 才能產出好的結果。那請問,這個上下文是誰提供的?」
阿偉愣了一下,「是...我?」
「對。而且你想想看,小姜把AI生成的code push上來之後,誰要負責review?誰要判斷這個實作會不會跟現有系統衝突?誰要為最終的交付的成果負責?」
「是...我。」阿偉的聲音變小了。
「所以你看,」我說,「AI確實把效率提升了沒錯,但它依然無法取代你的主觀想法。即使哪天它進化到能夠做出100種分析、每一種都非常厲害,但說穿了它永遠只能是你的助手,最終還是得要依賴身為『導演』的你。」
阿偉攪著杯裡的冰塊,思考著。
「而且,」我看著阿偉,「現在vibe coding這麼流行,任何人出一張嘴都可以產生一支程式,甚至開始有人喊以後的社會可能『不需要工程師』了。你覺得,這可能嗎?」
「雖然聽起來很恐怖…不過我知道這不太可能。」阿偉搖搖頭。
他停了一下,接著說,「而且,如果有人不分青紅皂白的,用AI大量生產他自己也看不懂的code,那也很可能只是個華而不實的『大型垃圾』而已。」
「沒錯。」我點點頭,「那,你知道為什麼小姜這次,拿給你的是『還不錯』的code嗎?為什麼他今天沒有生出垃圾來?」
「為什麼?」
「因為這次,小姜除了有良好的材料能夠給AI參考之外,他也利用了自己的素養來判斷AI怎樣的輸出才是他要的,」我說,「他從AI生出的東西裡面,分辨出了哪些部分可以用,哪些不行、哪些地方要調整、哪些邏輯要加上專案的error handling。這個能力,是他從學校跟老師學的、這兩年靠著在公司裡摸索所學來的、從實際的專案經驗裡累積的。」
阿偉若有所思地點頭。
「AI 就像一個強大的槓桿,」我繼續說,「他會無條件放大你的能力,不管你手握的能力是好的還是爛的。如果你有好的能力、明確的方向,那AI能夠讓你做得更快更好。但如果你沒有,AI只會把你的認知缺陷給放大成災難。」
咖啡廳裡的人潮散去了一些,阿偉看起來心情好了一點。
「好,我懂了,」他說,「所以我現在的價值除了『寫code』之外,還要學會『掌握方向』對吧。那具體來說,我現在該做什麼?」
「你記得你試著讓小林小姜做決定的時候,我們談過什麼嗎?」我問。
「記得啊,授權與當責,」阿偉點點頭,「我們都要為自己的決定負責。」
「對,」我說,「那我問你,假設你寫code時,是用AI工具輔助完成的,如果後來出bug了,是AI要負責、還是你要負責?」
「當然是我啊,因為是我放它過的,code也是我上的嘛。」
「那現在小林小姜用AI輔助開發,那誰應該為AI生成的code負責呢?」
阿偉愣了一下,「應該...也是他們自己吧?」
「沒錯。」我說,「我們要做的不是去當AI警察,而是教他們如何當責。」
我接著說,「還有要注意的是,雖然小姜今天做得還不錯,但那不見得就代表他真的懂得怎麼『正確』使用AI。他可能只是碰巧這次給對了context、碰巧問對了問題。下次呢?我們能保證每次都這麼順利嗎?」
「所以,」阿偉慢慢理解了,「你是說,我需要建立一個機制,讓他們學會把關AI生成的產物囉?」
阿偉拿出手機,開始做起筆記,「那我現在該怎麼做呢?」
「嗯… AI寫出來的code可不是能動就好,對吧?」我說,「我們需要建立一個AI輸出的審核機制。」
我拿過他的手機,開始打字:
AI輸出審核checklist:
1. 檢查產出物
- 你明白AI實作的內容的意義嗎?是否有超出自身認知範圍的部分?
- 實作的範圍正確嗎?是否有over design或是造成scope擴張的問題?
- 是否有與目標無關的功能添加/縮減/修改?
- 是否符合團隊的coding style?
2. 風險評估
- 有沒有考慮到現有系統的技術債?
- 這個改動會影響哪些其他模組?
- 效能上有沒有潛在問題?
- 資安層面是否有漏洞?
- 有沒有跟我們專案的特殊限制相牴觸?
3. 長期影響
- 這個實作是否符合系統的長期演進方向?
- 未來維護的成本如何?
- 是否會製造新的技術債?
「類似像這樣,我簡單地先把 checklist 給列出來。至於實際上要列哪些、要以什麼形式來管理,你可以跟小林和小姜他們好好討論。」
阿偉看著這份清單,仔細地閱讀著。
「然後,」我繼續說,「你可以跟小林和小姜約定,當他們大量使用AI輔助時,要在PR裡註明哪些部分是AI生成的,以及他們做了什麼調整。」
「這樣的話,」阿偉說,「我在review的時候就知道要特別注意哪些地方了。」
「對。而且這也是在培養他們的當責意識,」我說,「他們要為自己選擇相信AI的決定負責。」
阿偉點點頭,「還有呢?」
「可以定期跟他們討論,」我說,「為什麼某些AI的輸出你沒有通過、為什麼某些設計需要調整、不同AI模型之間的強弱項…等等。像這樣大家一起練習當AI教練,你跟你的組員都能把AI工具用得更好。」
咖啡廳準備打烊了,老闆開始收拾桌子。
阿偉收起手機,「你知道嗎,我突然想到我之前技術焦慮那次。」
「怎麼說?」
「那時候我焦慮的是『技術學不完』,」他說,「你跟我說要找到自己的錨點。現在我發現,我的錨點其實不是『會多少種技術』,而是找到與辨別方向的能力。」
「沒錯,」我笑了,「技術會一直變,AI也會一直進步。但你的判斷力、對事物的全局觀、對風險的敏感度,這些在時間和經驗的累積下,可是貨真價實的喔。」
我們走出咖啡廳,阿偉對著我說:「那麼我明天就跟小林小姜開個會,建立AI輸出的審核流程。」
「很好,」我說,「記得要強調,這不是要去限制他們使用AI喔。」
「我知道,是一起建立起安全護欄,對吧?」阿偉笑了。