← 開發日常

Vibe Coding 回顧

Article image

今年 AI 能力大躍進,不斷地在社群或網路看到別人說大部分的 Code 都是由 AI 產生,讓我不禁開始懷疑自己的開發方式。去年我還只是拿著 Github Copilot 當作更智能自動補完工具,完全沒有感覺這東西是能有大改變,覺得 AI 終究只是從上下文來預測結果,終究是有其極限。

在三月的時候,剛好在 Flutter Taipei Meetup 聽了有兩個關於 AI 的主題,這才發現或許 AI 已經進步到超乎我想像的地步了,是時候改變思維,擁抱變化了。至今大約 Vibe Coding 了半年多,剛好最近想法上有轉變(最後會提到),所以先來回顧一下這半年的 AI 使用心得了。

三月那會兒,最流行的 AI 工具大概也就是 Cursor 或 Winsurf,有鑒於之前買了一年的 Github Copilot 的教訓,這次就來一個月、一個月的買 Cursor。那買了 Cursor 要用在什麼地方呢?首先在除了在工作中的產品嘗試之外,當時有個朋友找我弄個小小的自動化工具,想想這也是個挺好的機會,就來用 Vibe Coding 的方式來建立這個小工具吧。

開始 Vibe Coding

在開始這個 Side Project 時,我刻意選擇了自己幾乎不太懂的語言加框架,用 Electron + React + Playwright 來做一個自動化的爬蟲工具,希望自己能在開發的過程中學會這些技能(雖然事後看起來效果並不算太好)。

一開始就像坊間常見的 Vibe Coding 分享一樣,直接開始跟 AI 對話,說明我想要什麼功能,要用什麼技術,從最基礎的畫面,一點一點的增加新功能。由於我對 Electron 也不熟,加上人的惰性,所以大多時候,只要功能正常,且我看的懂它在寫什麼,生成的 Code 我大多都直接接受,不太會進一步修改。

失去動手改的能力

但是這樣有個缺點,那就是我只看得懂,要自己動手改就比較難。變成任何小改動,我都是請AI 來做,而不是自己做。熟悉使用 AI 工具的人也都知道,AI 一跑起來快一點也要三四十秒、一分鐘的,甚至還有更久的。但是如果知道怎麼改而且熟悉工具的話,自己改可能也不到 AI 一半時間。

我在自己的工作中也會使用 AI,常常會在內心評估每個改動到底是自己改比較快,還是 AI 改比較快。但是在不熟悉的技術中,這個評估幾乎變得沒有意義,因為幾乎都是 AI 改比較快。越常讓 AI 來改,就越加不可能出現自己改比較快的情況。

或許看起來有一些負面影響,但我想這應該就是趨勢,單一任務或許 AI 做起來比較慢,但是 AI 可以同步執行多個任務,理論上來說應該會增加生產力(前提是任務沒有相依)。

AI 削弱了開發人員自己實作的能力,但是也開啟工作同步執行的能力。就像手工製作與工廠生產,單一機器的效率中難以跟真人匹敵,但是大量機器 24 小時同時運轉就不是人類可以比較的。

只有一個 AI 不夠

在開發的過程中,碰到一個問題:打包 macOS 應用程式失敗。在本地端打包都沒什麼問題,但是上 CI 打包建置卻一直出錯。由於 Cursor 並無法直接讀到 Github Action 的結果,所以只好手動貼錯誤給 Cursor(或許現在有 MCP 能做到了?),請 Cursor 修復 Github Workflow 腳本。

但即便如此,Cursor 還是一直鬼打牆,無法真正的解決問題。最後只好把 Github Workflow 腳本、Github Action 錯誤,再加上我想做的事情的 Context 通通整理貼到 Claude 與 Gemini 去問,而且兩者的回答還都不同,只好自己交叉比對結果與實驗,最後才讓打包工作能在 CI 上完成。

讓 AI 自動改 Code 非常方便,但也意味著她也只選擇一種方向來處理,方向是對是錯,是好還是壞,還是得要依靠人的判斷。

免不了,也快不了的學習

本想靠著 AI 實際做個東西,藉此在開發的過程中快速學一門新技術,但事後看起來還是有一定的極限,沒有想像中的這麼美好。

Electron 線程的坑

最初是這個工具只有使用 Electron,而沒有 React,程式也是在 Electron 中啟動 Playwright 腳本。後來加入 React 之後,想把啟動 Playwright 腳本的工作也搬到 React 中,卻怎麼一直都無法正常運作。幾過一番折騰才了解 Playwright 只能由 Node.js 啟動,所以只能放在 Electron 中,讓 React 跟 Electron 溝通呼叫腳本,無法放在 React 中。

這件工作也是來來回回請 AI 改了好幾次,每一次改就壞,過程中也出現奇奇怪怪的改法,看著都不太對勁。最後也是直接問了 AI 是否這個任務其實是有問題的,AI 才說了上面提到的問題(但也很有可能這結論也是錯的XD)。

AI 會盡全力滿足你的要求,即便這的要求不合理。如果沒有了人的判斷,可以想像如果開發時間一長,技術債會快速累積。

測試的難處

同樣的問題也發生在測試,自己對測試的概念還算熟悉,本來想模仿工作中測試方式,用比較大粒度的方式來測試這個工具。與常見小粒度的測試方式不同,可能訓練資料比較缺乏,所以無論我怎麼跟 AI 溝通,都得不到理想的結果。

原因可能是自己對技術的理解不夠,無法有效用該技術常見的用語與 AI 溝通,導致 AI 無法完成我想要的結果。另外一種可能是,這根本就是做不到的,但對這個語言與框架理解有限的我,也無法知道這件事。

即便使用了 AI ,我們還是得學習相關技術,否則既限制了上限,也會浪費許多時間。

下一步

最後,我已經對這個 Side Project 失去了興趣,暫時不會在這個 Side Project 上繼續 Vibe Coding。同時最近也從 Cursor 跳槽到 Claude Code,所以就趁這些轉變,回顧一下這半年的過程,總結一下 Vibe Coding 不熟悉技術的體驗。

但這終究不是現實的常態,現在對於大部分開發人員來說,工作中使用的還是自己比較熟悉的技術,只是需要摸索與 AI 如何共生。自己也打算開始另外一個 Side Project,這次會使用自己熟悉的技能模仿實際工作中的流程來 Vibe Coding,看看能否帶來開發上的改變。

小結

透過這次 Vibe Coding 的過程,感受到動口不動手的快感,但也更清楚感受到 AI 的限制。無論如何,AI 已經開始改變了開發人員的工作方式,既要放下成見,接受 AI 的結果,也要持續學習,不斷反思與改善這個過程。