讓 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

看漫畫借鑑 AI 普及後可能產生的影響

看漫畫借鑑 AI 普及後可能產生的影響

現在武俠漫畫的系統中都會內建 AI 功能,昨天在看《天魔玩家》。主角可以身上的系統會隨時提供他故事劇情推進的選項,而在戰鬥選項中有一個進階的選擇,是讓 AI 代替他戰鬥。 而 AI 的戰鬥能力比主角更強,因為用各種招數的成功率都比主角高,連招也接得很順,甚至經常都是以輾壓對手的方式取得勝利。以弱勝強的狀況也經常發生,久而久之,主角愈來愈仰賴 AI。每次只要覺得打不贏,就想叫 AI 出來打。 殊不知,這個 AI 是有意識地,他總是以廢物來稱呼主角,並告訴他,他太過仰賴系統,太過仰賴 AI,這並不是好事。他只是一個看起來戰鬥力高的廢物,碰到基礎比自己好的人很容易就輸了,碰到比自己強的人更不用說,根本不敢自己應戰,只能託管給 AI。 剛開始主角並不覺得這有什麼,有系統這麼好用的東西幹嘛不用,只要戰鬥力可以提升就好,基礎的內力跟體力有那麼重要嗎?然後託管給 AI 就能贏,這也是我能力的一部分,為什麼不用呢? 直到一次出任務,

By gipi
內部歸因,解決問題的答案往往在自己身上

內部歸因,解決問題的答案往往在自己身上

在 2015 年,我剛空降到新公司,當時我花了一個禮拜的時間了解公司跟部門當下的狀況,也跟相關的利害關係人們聊過了一輪。 我跟團隊說,我們需要協助業務團隊解決他們的問題,我要 PM 去參加業務部門的週會,並且準備報告去跟業務主管們同步狀況。 PM 告訴我:「這好像不是我們可以做的事?」 我還跟團隊說,現在整個公司的研發流程或系統非常混亂,我要從你們之中調派人選去導入合適的工具跟建立流程,解決現在我們遭遇的問題。 團隊成員問我:「我們可以自己做這件事嗎?不需要公司更高層的主管決定嗎?這責任應該在高層。」 我的說法是:「等待不會帶來好結果,過去你們已經等待夠久了,這些事都沒有發生過,所以我們先思考我們可以做些什麼來改變現況。」 上述兩件事,後來得到的結果都是好的,即便過程中有遭遇了一些阻礙,但都能被一一克服。 而在當時我又看到公司的產品沒有人專責開發與維護,尤其是關於用戶使用體驗的部分更是有很大的改進空間。那時我跟業務部門主管提到說要挪動一部份資源去改善產品,他雖然認為有必要性,但他也告訴我:「我覺得這應該是客服部門要想的問題。」 我告訴他:「現在產品的體驗已經影響到業務銷

By gipi
我人生的四氣

我人生的四氣

我一直覺得自己是個幸運的人,因為我的職涯尚稱順遂,雖然挫折不少,但貴人更多,雖然挑戰很多,但我也大多一一克服。即便在 2022 年生了一場病,但幸運的是發生的早,動了手術後倒也沒有明顯的大礙。 我的人生走到現在,稱不上有多了不起的成就,但一步步走來,我還算很清楚自己到底在做些什麼,也有一些核心觀念在我心中支撐著我一路走來。 本篇文章是我在 2022 年時在學院開的一門課,我在課程的發刊詞上與大家分享的內容。 「剛好」的運氣 有些人喜歡用「倖存者偏差」來形容那些職場成功人士的經驗分享,覺得他們只是剛好成功了,而不是他們做對了什麼。 我常說自己是個幸運的人,所以我完全不否認自己的經驗帶有運氣成份,因為如果不是我遇到了對的人,如果不是我盯著的機會剛好出現,如果不是那個當下我是最適合的人選,如果不是我年紀更輕體力更好,如果不是我過去剛好有過類似經驗,很多事都輪不到我。 這些「如果...剛好」是運氣,可算起來也是一種個人的累積。 26 歲時,我成為當時公司最年輕的產品開發單位主管並兼任技術架構師,靠的是我前面三年的努力,如果我沒有花足夠多的時間去了解產品,也沒有站到一線去處理客戶

By gipi
4 種產品訂價方法與訂價策略

4 種產品訂價方法與訂價策略

過去幾年不論是顧問案,或者授課過程,在講授營收成長或利潤提升的過程,總會跟大家聊到關於產品訂價的議題。 因為產品的價格,基本決定了好幾件事: 1. 客群,100 元的餐點跟 400 元的餐點,滿足的需求不同。 2. 銷售通路與銷售策略,客群不同,銷售的方法也會有很大的差異,100 元的便當可以開便當店,甚至透過餐車銷售。但 400 元的餐點,你可能得開一間餐廳。 3. 利潤,能拉高價格應該沒人想賣低,如果拉高價格的同時又不會減少銷量,那何樂而不為。但許多經營者腦袋裡擔心的問題經常是「賣太貴沒人買怎麼辦?」。 4. 營運方式,為了賣更高的價位,通常需要思考這種「溢價」的價值到底從何而來,也就是我們憑什麼賣更貴?通常是因為品牌、稀缺性、獨特性、服務、體驗等為產品附加了價值,讓客戶心甘情願花更多錢。但為了創造額外價值,公司也需要去調整營運方式。 新產品的訂價很重要,既有產品的價格調整也一樣是一門學問。很多時候公司賺不到錢,或者賺得很辛苦,

By gipi