讓我描述一個你可能會有共鳴的時刻。
你有了一個 App 的點子。你其實不知道怎麼把它做出來——真的不知道——但你打開了一個 AI 聊天視窗,描述你想要的東西,它就給了你能跑的程式碼。你執行了它。它 真的能用。那感覺像魔法,因為它就是魔法:一個你一個月前還寫不出來的東西,現在就在你的螢幕上跑起來了。
於是你又加了一個功能。再加一個。到了第五個左右,事情開始壞掉了。你修好一個地方,另外兩個地方又不能用了。你請 AI 幫忙,但你甚至沒辦法清楚說明哪裡出錯,因為你自己也已經看不懂這個專案了。每一次修改,都像在黑暗中拆炸彈。
那道牆——不是寫程式本身——才是大多數人卡住的地方。而有件事沒人會告訴你:AI 降低了「撰寫」程式碼的門檻,但沒有降低「組織」程式碼的門檻。 這是兩種不同的能力,而現在決定你能不能繼續做下去、還是只能眼睜睜看著專案崩掉的,就是第二種。
這是一份專門為那道牆準備的生存指南。不需要電腦科學學位。你只需要幾個習慣,就能避免 AI 做出來的專案變成義大利麵——這是給從零開始的人看的。
在講怎麼做之前,先理解到底哪裡出了問題,因為這跟新手想的不一樣。
問題幾乎從來不是 AI 寫了「很爛」的程式碼。真正的問題是,AI 讓你在還沒理解整個系統怎麼連在一起之前,就先做出了一個可以運作的 App。你像是在駕駛一架看不到控制台的飛機。只要自動駕駛還穩著,你就沒事;但只要有地方需要調整,你就會立刻迷路——因為你從來沒學過控制項在哪裡。
「架構」聽起來像很可怕、很進階、很電腦科學的東西。其實不是。用白話說,架構其實就是你的專案長什麼樣子——有哪些部分、每個部分做什麼、它們怎麼彼此連接。結構才是讓專案看得懂的關鍵。能看懂,你才有辦法繼續做,而不是被淹沒。
所以,這整份指南其實只有一個目標:在專案變大的過程中,讓你仍然能看懂自己的專案。 下面所有內容都是為了這件事。
這是最重要的習慣,所以要特別重視。
如果放任不管,AI 常常會把所有東西都塞進同一個超大檔案裡——畫面顯示的部分、真正執行工作的部分、以及跟資料庫溝通的部分,全都糾纏在一起。一開始它可以正常運作。但當所有東西都放在同一處時,任何修改都可能讓全部壞掉,因為沒有任何東西是彼此分開的。
解法是把三種東西分開:
當這些部分分開之後,你就可以改變某個東西長什麼樣子,而不碰它實際做什麼;也可以改變它實際做什麼,而不破壞它跟資料的溝通方式。問題會被限制在局部,而不是一路擴散。
可以貼給 AI 的指令: 「請把介面、商業邏輯和資料存取分開成不同檔案,不要混在一起。」
這一句話只要持續使用,就能避免比這份指南其他任何內容都多的崩壞。
這條規則簡單到你可以直接記在腦中:一個檔案或一個函式,應該只做一件你能用一句話說清楚的事。
如果你在描述某個檔案的功能時,必須說「它做這個、還做那個、而且還做別的」——那它做太多事了,之後它就會變成 bug 躲藏、修改出錯的地方。
小而且用途單一的部分是可生存的。你找得到、看得懂,也能安心改其中一個。那種什麼都做的大檔案就像流沙:它裝得越多,每次編輯就越像在賭博。
可以貼給 AI 的指令: 「每個檔案和函式都應該只有一個清楚的責任。如果有做超過一件事的內容,請拆開。」
這是新手專案最容易壞掉的方式,所以要特別注意。
隨著你的 App 長大,同一份資訊——例如登入使用者、購物車裡的專案,等等——可能會被複製並在好幾個地方各自追蹤。接著這些複本就開始不同步了。App 的一部分以為購物車有三個專案,另一部分卻以為只有一個,你的 App 會開始出現一些完全說不通、而且幾乎不可能除錯的行為。
生存原則是:每一份資料只存在於一個地方,其他所有地方都從那裡讀取。 這叫做單一事實來源(single source of truth)。不要讓 AI 隨便在專案各處複製你的狀態。
可以貼給 AI 的指令: 「這份資料應該只有一個單一事實來源。不要在不同元件之間重複複製,所有地方都從同一處讀取。」
這條能防止最讓人抓狂的 bug 類型:技術上沒有壞,但所有東西都對不起來。
大多數新手的做法是這樣:想到一個功能,就叫 AI 幫忙做,然後重複。AI 每次都即興產生結構,但各個部分根本接不起來——因為從來沒有人先決定它們應該怎麼長。
真正能改變一切的做法是:在開始做之前,先把 App 的各個部分命名出來。
在生成程式碼之前,先寫下主要部分,以及每個部分的責任。對一個簡單的 App 來說,可能是:登入、使用者個人檔案、主儀表板、付款。 四個部分,每個都有明確工作。那份清單——事先知道你的各個部分,以及它們各自負責什麼——用白話說,就是架構。你其實已經在做了,並沒有那麼可怕。
然後一次只做一個部分,完整做好,再進下一個。不要叫 AI 一次生成整個 App——你只會得到一團你看不懂的糾結。先做登入,讓它能跑,理解它,再做下一塊。
可以貼給 AI 的指令: 「這是我的 App 主要元件,以及每個元件的用途:[你的清單]。請一次做一個部分,先從[X]開始。」
這個習慣會把「做東西」變成「學東西」——而且它會慢慢把新手變成真的懂結構的人。
不要只是接受 AI 給你的程式碼然後往下走。你要問它:
你是在把 AI 當成家教,不是自動販賣機。每一次回答,都會讓你更了解你的專案是怎麼拼起來的——而這正是你一開始所缺少的知識。如果持續這樣做,隨著一個又一個專案累積,你就不再只是會生成程式碼的人,而是會理解程式碼的人。這種理解才是整個遊戲的核心。
可以貼給 AI 的指令: 「在我使用之前,請用簡單的方式解釋它的結構和原因——我想要理解它,不只是讓它能跑。」
這兩個習慣要放在一起,因為它們是搭配使用的。
無聊比聰明更好。 當 AI 提出一個很炫、很複雜、看起來很厲害的解法時,先問自己:有沒有更簡單的版本?對一個還不是架構師的人來說,花俏的版本不是優勢,而是負擔,因為你不理解的複雜度,就是你無法維護或修復的複雜度。簡單、直觀的版本,才是你下個月還能繼續使用的版本。永遠優先選它。
一致比多樣更好。 如果你做功能 A 用一種方式、做功能 B 又用完全不同的方式(這在分開的 AI 對話中很容易發生),你的專案就會變成拼布,每個部分都不遵循同樣規則,整體看起來混亂不堪。讓新功能跟現有功能的模式一致。
可以貼給 AI 的指令: 「請給我能運作的最簡單版本,不要最聰明的版本。而且請符合我專案裡既有的結構與模式。」
這裡是你的煙霧警報。當你開始有以下任何感覺時,先停止加功能,先整理結構:
這些都不代表你失敗了。它們只代表你的專案已經長大到超出原本的結構——這種事每個人都會遇到,包括專業人士。差別在於,現在你知道這種感覺代表什麼,也知道該怎麼做:先停一下,把各個部分分開,在繼續往上堆東西之前,先把理解找回來。
你不需要電腦科學學位,也能用 AI 做出真正的軟體。那道門檻確實已經消失了,而且不會再回來。
但「我可以生成程式碼」和「我可以做出能承受自己成長的東西」是兩回事,而兩者之間的差距就是結構——也就是 AI 無法替你提供的那一部分,因為它取決於你這個專案的決策,而只有你能做那些決策。AI 給你程式碼;你必須給它形狀。
好訊息是,這個形狀並不難。它只是一組習慣:把各部分分開、每個東西只做一件事、每份資料只有一個家、先規劃再生成、讓 AI 教你、保持簡單。只要這樣做,並且在過程中持續理解你正在打造的東西,你能做出的成果會比你想像的多得多——而且不會看著它崩塌。
從簡單開始。讓自己始終看得懂它。這就是生存。