我會在Substack上分享更多關於北美職場上的所見所聞,有興趣可以訂閱我的電子報。
我相信活在21世紀的人都聽說過人工智能(AI),尤其近幾年生成式AI的興盛,就連我60歲的媽媽也會用ChatGPT,可見AI正以翻天覆地的速度改變著人類的生活。
而在軟體工程界,AI的強大撼動了不少軟體工程師的地位。給予ChatGPT一個功能需求的指令不用一分鐘它就能交出一段似模似樣的程式碼,用GitHub Copilot寫程式只要寫句注釋(Comment)幾秒後它就生成出整個函數或整個檔案,從好的方面看它大大減低了開發成本,從壞的方面看它使不少工程師站不住陣腳,隨時面臨被取締的風險。
我在2023年離開香港的時候感覺AI在香港還未算普及,ChatGPT不能用,只能用POE,認識的工程師朋友不到一半會用AI輔助(如GitHub Copilot),不少甚至連這類輔助程式聽都沒聽說過。
到了2024年,AI的應用以前所未見的速度普及化,會用ChatGPT已成為基本,而GitHub Copilot、Cursor、MarsCode…林林種種的AI輔助也逐漸獲得工程師們的青睞。職場上開始浮現一個奇怪的現象:
好像不會用AI寫程式就不夠格當軟體工程師一樣
我自問並不擅長使用AI,遇上技術難題時第一時間想起的依然是Google、Stack Overflow,想要更多靈感或需要樣板程式碼(Boilerplate Code)時才會找AI幫忙。但我有位同事卻完全相反,入職第一天問有沒有AI工具能用、凡有技術相關問題都先問ChatGPT、要寫程式都是先叫AI提供範例後才進行修改,他交的程式碼相信有8成都是AI生成的。
以前的我對於用AI協助寫程式一直沒什麼意見,直至有次跟上述那位同事合作,才見識到什麼叫過度依賴AI,他對AI的信任和依賴甚至令他失去了排難除錯的能力,在我眼中是位本末倒置的工程師。
講講那次合作
那次合作是他加入公司後他負責的第一個較大型的專案,要把公司在本地跑的系統放到Azure Kubernetes服務(AKS)上。
在開始前,我花了兩星期左右做了些事前準備,把要用到的Docker鏡像記錄下來,找到創建及上載這些鏡像的管道,並成功在本地利用Docker Swarm設置好能讓系統在Ubuntu上跑。
把這些資料交給那位同事(簡稱P)後,以下是P之後大概的步驟:
- 把所有docker-compose檔案交給ChatGPT轉換成AKS Manifest檔案
- 跟負責管理Azure雲端服務的團隊拿到部署權限
- 利用ChatGPT生成的Manifest檔案部署到AKS
之後就開始除錯的步驟,但由於P不熟悉系統本來的運作模式、系統日誌的意思,所以就踏入另一個迴圈:
- 把日誌放到ChatGPT問,但大多數情況下所提供的意見沒有幫助
- 把日誌放到Slack上詢問相關同事
- 得到回覆後嘗試同事們提出的方法
加上另外一些因素例如系統的複雜程度、微服務的系統架構、日誌裏的噪音,導致P在這關卡了整整4個星期。
後來因為耗時太長主管要我放下手上的工作幫忙看看,發現是Manifest檔案上儲存(Storage)和安全(Security)定義上的問題,但這應該是開始專案第一個步驟就能發現的,因為在docker-compose檔案上就能找到相關的定義。
P根據我的建議修改後,“碰”一聲P一巴掌拍在桌上,說:
終於成功了!
P表示應該是當初叫ChatGPT轉換時他沒有檢查它交的功課,所以漏了幾個部份他不知道。而為什麼其他同事幫不上忙?因為系統日誌真的是太多毫不相關的資料,這則是另一個有待改進的問題了。
日常如何使用AI工作
除了那次親身合作之外,由於主管鼓勵我們結對開發(Pair Programming),所以會有其他機會觀察到P的工作模式。
第一個有趣的發現是:
所有技術相關問題都先問ChatGPT
如果是新畢業生我可能還會理解,但P是位在職場已經有20多年經驗的爸爸級人馬,經歷過磁碟(Floppy Disk)年代、互聯網崛起、Google興盛這些年代,竟然對於AI這還算年輕的產物如此信賴。無輪是什麼類型的技術問題,P一律先問ChatGPT,嘗試過不同模型都找不到滿意的答案後才輪到Google上場。
第二個發現是:
從來不會自己由零開始寫任何程式碼
上述提到的AKS部署是其中一個例子,其他情況比如是新增GitHub管道、寫Python腳本自動化部份流程,都是先問ChatGPT拿一個範本,再基於範本去修改,從來不會由零開始建立任何檔案。
對我來說,AI只能算是位同事
P可以是我在職場上(香港/北美)見過最依賴AI的工程師,他的表現令我回想起一次自己研究微調(Fine-tune)模型的經驗:
那時候我曾經花過2星期研究如何使模型能夠擁有一些公司內部的知識,嘗試過微調後發現技術含量比想像中少(或者我應該選擇檢索增強生成RAG而非微調),步驟大概如下:
- 準備一個試算表包含問題和示範答案
- 選擇一個OpenAI的基礎模型
- 把試算表內容轉換成微調模型適用的資料格式
- 開始微調!
第一次的結果是模型的回答像喝醉了一樣,之後我加大數據量並修改了試算表的內容再次嘗試,模型的回答開始變得靠譜,如果要往這方向走的話就是要繼續提升資料的質和量。
我從這過程學會的就是:
訓練AI模型的過程就像培育一位新人一樣
要模型的答案準確,就需要精確的數據,就像我們上小中大學要精確的教材一樣。
要模型答案的一致性,就需要龐大的數據,就像我們要上小中大學共16年教育一樣。
(如有AI大佬有經驗歡迎指錯)
在我眼中,Google已經是一層數據的過濾,2024年互聯網上總共有11億個網站,當我利用Google搜尋關鍵字時它已經根據它的演算法(加上廣告)來篩選。而ChatGPT或其他AI模型則是更甚,如果AI做得好的話,過濾後的資料會比Google搜尋來得準確。
但兩者的問題同樣是:
用戶無法判斷篩選的方法是否符合自己想要的
畢竟用戶拿到的只是結果,Google的算法和AI的算法都掌握在別人手裏,所以我只會把AI當作是一位同事,適時從它手中尋求協助,而非依賴它去完成我的工作。
AI是件工具,就像手機一樣,它能為人類生活帶來方便,同時能使人類沉迷成為過度依賴手機的人。
AI能使工程師縮減開發的時間,但同時能使工程師失去工程師應具備的知識和能力。
我視它為一位同事,它能輔助自己成長但亦同時與我競爭,當它的能力超過自己的時候,自己就會被淘汰。
我不知道AI將會演變成怎樣,馬斯克幾天前又公開了宣稱比ChatGPT和DeepSeek更強的Grok 3模型,它們的學習速度似乎比工程師更快、更廣。
或許AI正是我這代人最具影響力的一場技術革命。繼我經歷過的智能手機、線上聊天程式、Google、YouTube、社交平台,種種都是足以撼動人類原有生活模式的改變。或許以時代見證者的身份自居,面對AI我會更輕鬆一些?