讓 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

西雅圖的夜晚

第二人生的再思考

在從達拉斯飛往西雅圖的飛機上,因為有四個小時的時間,所以我花了些時間思考自己的人生。 起因於我打開了帆書 App,想說要來聽一本書時,剛好看到克里斯汀生多年前的著作《你要如何衡量你的人生?》 我馬上跟同事聊起這本書,聊完後我靜下心來好好思考當下的自己。 以下是我在 2022 年生病期間,跟 Yuki 聚會聊完第二人生後我寫下來的內容,也是當下我對第二人生的體悟。 我覺得第二人生的追求跟第一人生不同,或許不用像人生上半段那樣兢兢業業,也不用那麼目標導向,而是可以有更多的時間留給自己。 需要有份工作,但不要讓工作佔滿生活全部的時間, 需要有收入,但賺錢不該是生活的主要重心, 需要有挑戰,但不再追逐更多的名、利與成就, 需要有目標,但不必逼自己有很精確的時間軸, 需要有朋友,但不是為達成目的而去建立的人脈關係。 第一人生與第二人生不是一種立即性的切換,有時是一種漸進式的調整,甚至是同時發生。 有人說,第二人生有時是彌補第一人生中失去的東西,或者體會第一人生沒有足夠時間去體會的東西。但我想這是屬於 60-70 歲才開始展開第二人生的人的思考邏輯。趁早規劃的人可以不需要用這麼極端的

By gipi
2026 第三次復盤

2026 第三次復盤

原先要在中秋假期時完成今年的第三次復盤,可因故延誤了,但想想這季還是有許多深刻的心得值得跟大家聊聊。 青色組織夢的復興 我當年創辦學院社群時,我心裡有個很濃厚的情懷,我認為最有效的學習就是創造一個環境,讓所有人在這個環境中彼此學習,互相協助。就像一個大同社會一般,你幫我學習,我幫你成長,你貢獻一點,我也貢獻一點,這個環境肯定就會更好,而我們每個人也能獲得更多。 我當年是真心相信這件事,所以學院的第一年,我們在只有兩個正職員工的狀況下,靠著學員擔任志工,我們前前後後舉辦了將近 60 場講座,以及數十場聚會,跟數百場的小組學習活動。 只要你願意成為志工,組織一場講座,而其他的 99 個人也都做了一樣的事,我們每個人投入的是一分力氣,但最終我們會獲得一百分的回報。 這是我心目中理想的社群樣貌,而我到目前仍然相信環境對一個人的影響遠大於一個老師或是一堂課程。 可以當年,我們跌了很大一跤,那次的挫敗甚至讓我有些懷疑我是不是過度理想化了。我忽略了很多現實面的問題,也忽略了自己的身分角色,還忘了很多事,並不是那麼理所當然。那年我也在 MOPCON 分享了這個經驗,有興趣的朋友可以自行觀

By gipi
[徵才]方圓國際誠徵四個新職務

[徵才]方圓國際誠徵四個新職務

我又要來招募了,這次要招募的職缺有四個,工作地點都在台中。 6 月份的時候我啟動了一波招募,那波中我招募了工程師、門市體驗設計師、萃茶系統負責人、小舖成長主管。後來我們也引入了品茶師、珍珠學院培訓師與院長,以及一群儲備幹部們。 目前這些人都已經在職,且一起進行了許多有趣的任務。 我們相信,品牌是由內而外的,需要讓員工先感受到,客戶才會感受到, 我們相信,品牌不只是一種形象,而是一種持續兌現承諾的能力, 我們相信,餐飲不是門苦生意,而是能帶給自己與他人幸福的事業。 這是我在方圓工作這段時間,我堅定不移的信念,也是我們團隊一起前進時重要的信條。 現在,我又要招募幾位夥伴加入我們團隊,如果你對以下職務感興趣,歡迎將你的履歷寄送到我的信箱:gipi@teashop168.com.tw AI-native senior full-stack product engineer 之前已經有招募過工程師,但因為要推進的事項很多,所以想再多找一位開發夥伴加入我們。 AI-native,我希望你現在已經是將大量的工作交給 AI,不論是

By gipi
讓生活變成你喜歡的樣子

讓生活變成你喜歡的樣子

一個人一早在無人的 Stanford 校園散步,在教堂牆上看到 Faith、Hope、Charity、Love 四個詞彙,有點感觸,坐在門口的椅子上,想想這陣子做的一些決策。 管理,是管事理人 這是很多年前古哥跟我說過的一個概念,核心思路是「你得在事情上參與,理解問題的本質,並把時間花在梳理人會卡關的議題,讓人可以朝好的方向前行」。 過往專業經理人時期,我理解這概念,但因為我會有短期的戰功需求,所以我會想盡快把事情解決,對人的耐性也相對有限。當 team member 的調整速度太慢時,我可能會插手處理。這樣的好處是事情會很快有進度,壞處則是對方的學習空間減少,潛力難以激發,工作動機也會在我一次次參與後逐漸減少。 現在我比較沒有短期成果壓力,所以在找出問題根因後會願意花時間去陪一個人成長。因為我相信,只要這人是對的,最終都是先苦後甘,前面慢一點,但後面就會快很多。 就像我以前分享過的培訓概念一樣,早期人的成長不明顯,因為培訓發揮效用要時間。可當培訓的效果開始發酵,他的績效就會逐步展現。而且這人因為被信任,備栽培,所以他的工作心態也會截然不同。長期能帶來的效益是難以估計的。

By gipi