讓 AI 生成程式,後續維護至關重要

讓 AI 生成程式,後續維護至關重要

近期因為研究 Github Copilot,也一併看了 Figma to code 相關的服務,因為我想生成式 AI 會影響的並不單純是寫程式本身,而是直接影響了整個軟體開發生命週期。

釐清需求,我會考慮直接用 Figma 或其他設計工具搭配 AI 模組直接跟使用者溝通,然後若有雛型可以直接使用應該是非常快的。設計,Figma 應該就夠好用了,Figma to code 還能直接轉出前端程式碼跟 UI flow,也可以省下一些功夫。

Canva 或 Adobe 的工具也能轉成 html,也能省下一些功夫。Pseudocode to code,將虛擬碼轉成程式碼,目前還沒找到其他可以將規格直接轉成後端程式碼的工具,但合理來說,一些做軟體設計、UML 或者 pseudo code 相關的工具應該能做到。

程式撰寫、code review、測試,Github copilot 應該就夠強大了。佈署,現在的 copilot 不只能寫程式,也可以自動生成各種指令。前陣子我也是用了 Cursor,覺得易上手程度勝過 Github copilot,我相信連程式小白都能很快上手。

未來的軟體開發,設計稿跟規格開完就直接產出第一版程式,應該會漸漸變成一種趨勢。

維護將成為大問題

靠 AI 產出第一版程式可以很迅速,但難題將會出現在後續的維護上,因為會有愈來愈多的開發團隊不知道當初程式為什麼這麼寫,以及這樣寫為什麼會動,當你不知道時,你當然也改不動。而如果你全部交給 AI 來修改,他很可能會將本來沒問題的部分改得有問題。除非你能很明確的告知他只改哪些地方。

可請問,程式當初不是你寫的,現在出了錯,你真的知道要改哪個地方嗎?如果不知道,那要如何對 AI 下 prompt 呢?而這個問題,是肯定會發生的。

為什麼我這麼篤定,跟大家分享近 20 年前我所在的公司其實就做過這種事了,而且算是非常好用的。

當年我們軟體開發團隊分成三個 team,一個 team 做底層跟共用元件,一個 team 做產品開發,一個 team 做客製開發。底層團隊人不多,大概 4-5 人,產品團隊大概 10 多人,客製團隊大約 20 多人。

那時為了強化開發效率,同時要確保交付的程式能符合客戶需求,公司有一套開規格的工具叫軟體分鏡,它的使用介面就如同我們的產品一般(如下圖),當時公司的 SD 會透過這工具來開立所有的規格。

這工具不僅僅可以設計界面,還可以針對欄位撰寫對應的邏輯,並且能做到現在很多設計工具都能做到的「播放」效果。讓 SD 在解釋規格時,可以實現很多操作效果。

而這個工具產出的檔案,儲存的格式是 XML。後來我將這個 XML 檔跟我們所負責的平台整合在一起,弄出了第一版 spec to code 的程式產生器。所以 SD 產出的規格,透過程式產生器變成直接產出可以在測試環境 run 的程式,如果測試沒有問題,就能直接上 production。

這個工具,基本上產品團隊跟客製團隊都可以用,因為會節省掉很大比例的工作量。很多複雜且較偏技術底層的工作,會先由底層團隊處理,並加以封裝,讓其他團隊不需要知道細節就能完成預期的開發工作。

下圖為當年的開發分工層級,這個圖片是當年原汁原味的樣子,我就沒特別改了

  • 底層團隊:負責開發技術平台、應用平台基礎框架與 Pattern 基礎框架
  • 產品團隊:負責完善應用平台與 Patterns,並開發產品相關應用
  • 客製團隊:在上述基礎之上開發客製化功能

這種分工與技術架構的好處是可以大量產出品質一致的客製化程式,也能很快的讓一些 junior 工程師上線開始撰寫程式。根據當年的經驗,一個沒有經驗的工程師只要掌握基本觀念,按著步驟進行,通常一週時間就能開始承接較簡單的客製化專案。

只是他通常不知道為何這樣寫,這一大堆功能就都 work 了。

所以這種做法的缺點就是工程師的技術水平落差會很大,只能按規範撰寫出「能動的程式」的工程師,很容易被這些工具給綁死,只要工具做不到,或者出問題,他們也沒有能力能解決,往往只能向其他人求救。

這問題,也會發生在那些叫 AI 寫程式的人身上。如果你請 AI 寫的東西是一次性的,或者是個人使用,那問題不大,壞了就壞了。但如果你讓 AI 寫的東西要放在產品內,那你豈能不搞懂它

即便當年公司在上述的架構下進行分工,還是有些求知慾強的工程師,就會拼命來找你問這是怎麼做到的,他們想了解原理,也想知道如果出錯時要 trace 問題,可以怎麼做?甚至未來,如果他們想自己再造一次輪子,可以怎麼做?

而為了滿足這些求知慾強的同事們,我那時真的也寫了很多的文件,並適度開放部分重要元件的 source code 供他們 trace。

那時候的我們不出事,主要是因為懂技術核心的人都在,也有意願去普及各種重要的知識。所以遭遇問題時都能找到人問,再不濟也還有文件或 code 能 trace。

但中間有一段時間,因為技術在升級,客戶的使用量也增加,開始出現一些效能、memory leak、db connection 的問題,當產品與客製團隊找不到問題時,統一的說法都是「這是底層的問題」。

當資訊被封裝,關鍵技術只掌握在特定人身上時,這些人就像是 AI,他們負責生成程式,而其他人使用他們生成的程式。可使用者可能對 AI 生成的細節缺乏掌握,出事時只好推到 AI 身上。

而身在底層團隊,我們經常得去釐清跟舉證問題在哪,但不論最後錯誤在哪,底層永遠有需要改進的地方,這也讓我們團隊有點疲於奔命。不過對應的好處就是我們擴大了我們能覆蓋的邊界,考慮了更多的使用情境。

維護與升級的問題

這邊補充一個當初微軟技術從 .net 1.0 -> 1.1 ->2.0 的過程,我們一開始使用自動升級元件時出了什麼差錯。

.net 1.0 當初算是一個很陽春的版本,問題還很多,後續推出的 1.1 版本相對穩定很多,從 1.0 升級到 1.1 的過程不算太痛苦,畢竟許多開發工作都還在相對早期。

但 1.1 升級到 2.0 就是個極端麻煩的過程,可以說跟是一種架構上的大升級,不只網頁技術大幅進化,連 .net CLR 也改了許多,剛開始我們試圖仰賴升級工具直接升級。這過程就有想像我們讓 AI 直接幫我們完成程式改版,但我不知道它到底改了些什麼

可一切並沒有那麼順利,程式經過升級後,80% 以上是動不了的,每支程式都有大小不一的錯誤,必須要逐一去處理。運氣好的是,當初的幾位學長都是很有經驗的人,他們帶著我們將這次 CLR 跟 web 框架的改版全部梳理清楚。

後來花了大約 2-3 個月的時間才完成平台與產品的改版。如果當時我們沒有人懂自己的技術底層,也沒有人懂 .net framework 的運作機制,那這個改版是不可能順利的。

所以我會建議,在產品中使用 AI 生成程式,還是得有人能維護,否則風險不小。但如果你是個人應用,那就不用擔心了,請盡情使用。


最後,我會建議大家一定要開始使用 AI 來輔助開發工作,但在使用 AI 的過程,一定要有人對 AI 產生的 code 做 review,也要有人是真的懂得架構設計,那除了可以避免問題外,也可以藉由這位成員來提升其他成員的水平

Senior 的價值,不在於教 junior 怎麼寫 code,而在於傳遞正確的軟體開發概念,包含怎麼理解需求,怎麼開始動手寫 code,怎麼做驗證,怎麼做 code review,怎麼定義問題,怎麼解決問題。當這些好的觀念都能傳遞給 junior 夥伴們,團隊搭配 AI 開發一般就不成問題了。

如果你覺得我內容寫得還不錯,歡迎訂閱我的電子報,我每雙週會發送一封電子報到你的信箱。訂閱連結在這,過往的電子報也在這:Gipi電子報

也鼓勵你可以將我的電子報分享給你認為有需要的朋友們,也許你的舉手之勞,將會改變另一個人的思維與習慣。

Read more

我讀麥肯錫的《注意力方程式》報告

我讀麥肯錫的《注意力方程式》報告

近期花了點時間閱讀麥肯錫的《注意力方程式》(The Attention Equation)報告,從中獲得了一些不錯的啟發,也跟大家分享這篇報告所提到的內容,以及我獲得的收穫。 報告背景 報告的內容大約是 20 多頁的原文,核心放在談論注意力方程式(Attention Equation)這個概念,那什麼是注意力方程式,為什麼麥肯錫要特別談論這個概念呢?首先我們得回到近幾年大家經常在談論的幾個概念: 1. 流量愈來愈貴,數位廣告的 ROI 持續下探。 2. 演算法愈來愈迷,多數的數位廣告媒介都被演算法給操控,不容易破解之虞,還經常更動。 3. 傳統的文字內容不再受到流量青睞,長影音也愈來愈沒人想看,反而短影音似乎成為新的流量王者。 過往我們在看待廣告或其他行銷媒介,或者進一步探討企業獲客(Customer Acquisition)的方式時,我們大多會談論自有媒體(Owned media)、付費媒體(Paid media)與贏來的媒體(Earned media)三者的比例,以及企業應該強化的重點。

By gipi
普通人悖論

普通人悖論

今天跑步時聽了一本書,書中提到一個「普通人悖論」。聽著有趣,因為似乎解答了我這幾年的一些自我認知的疑問。 「我們一般人....」 「對普通家庭來說....」 我們總看著成功人士的故事,閱讀那些不平凡的案例,可到最後,我們還是會回過頭來告訴自己「我們就是個普通人」。 我們渴望不凡,渴望能活出屬於自我的人生,但我們卻又認為自己無法脫離普通人的路徑。20 多歲出社會,謀得一份工作,接著兢兢業業數十年,從基層爬到高層,一輩子在職場上與人競爭。當我們看到那些跳脫這種路徑的人時,我們又說服自己「那是別人」、「那是獨特個案」。 我們心理渴望自己也能是獨特個案,但又不斷說服自己「我只是個普通人」。 這種心境,讓我們沒有勇氣去追求屬於自己的人生。 在聆聽這段時,為什麼我會特別有感觸呢? 在我今年撰寫的新書《用商業思維優化你的人生選擇》中我提到,每個人的人生都是獨一無二的。你不見得要像他人一樣功成名就才算非凡,你能做自己喜歡的是,成為自己想要成為的樣子,活出自己的人生,那你就是個非凡的人。 因為其他人很難活得像你這樣。 我內心是堅定相信這件事的。但我卻又經常在一些時刻,會將「我們一般人」

By gipi
如何快速熟悉一個產業?

如何快速熟悉一個產業?

什麼是產業,什麼又是行業? 有人會說電子業、食品業,也有人會說製造業、零售業、服務業,這兩者指的是相同的概念嗎?其實這邊隱含了兩個概念,也就是業種跟業態。 業種,是行業種類,以販售的「商品種類」區分所屬行業。例如賣建材的建材行、賣文具的文具店、賣水果的水果店或賣米的米店等。這些業種店看招牌名稱就可得知該商店販賣哪種商品。 業態,是行業型態,則是以該店家的「經營型態」區分所屬行業。例如提供即時、方便服務的便利商店;提供專櫃及流行品的百貨公司;提供量大、低價的開架式民生消費品的量販店等。這類商店,無法從其名稱辨別產品。通常是提供「一站式購買服務」為訴求,並提供其他相關的附加服務。 典型的業態,其實分兩大類,製造與流通。製造商負責製造產品,流通商負責將貨物流通到消費者手上,並因應消費者的需求,擴大產品品項,增加服務,而大家常講的零售與批發,其實也歸屬於流通範疇中。 舉例來說,生鮮食品經生鮮處理中心,將生鮮品分類分裝,這是製造的範疇,大盤商集中所有產品,

By gipi
當 vibe coding 已成必然,軟體開發會有什麼變化?

當 vibe coding 已成必然,軟體開發會有什麼變化?

當 Vibe coding 興起後,有愈來愈多的資深工程師的工作重點轉換到修復 AI 寫出的各種 bug。因這個現象,有些資深工程師們打趣地說,他們現在的任務像是專門處理這些 vibe coder 寫出來的爛 code。而這個職務稱為 Vibe Coding Cleanup Specialist。 我個人絕對支持 vibe coding,因為這是軟體開發的典範轉移,用得好的話可以大幅提升生產力,加上 AI 顛覆職場的趨勢幾乎不可逆。擁抱變化會比抗拒變化更明智。 這讓我回想起 2005 年剛出社會時,因為我起步的程式領域是 C#.net,使用的開發工具是 Visual Studio。C# 的好與壞我就不提了,但在當年,Visual Studio 這工具被稱為地表最強 IDE 應該是沒問題的。 它有多方便呢?所見即所得,元件直接拉到畫面上,出來的畫面就長那樣,

By gipi