本週使用 Windsurf AI 工具與 Android Studio 整合式開發環境,在完全無製作手機應用程式知識基礎的前提下,使用提示詞開發手機 App 。我的心得是,無知識無經驗的人,要使用 AI 進行開發的確可行,但是很難開發出可用的產品,只能當作學習開發的管道之一,仍須學習基礎知識。
如果什麼都不懂,能直接用 AI 寫程式嗎?
上週我在網路上看到一位 YouTuber ,叫做花生,聲稱他在無程式撰寫經驗的前提下,使用 Cursor 這種 AI 工具開發手機應用程式(見此連結)。並且開發了一度在 App Store 付費排行版上名列第一的產品:小貓補光燈。
看了讓我興致勃勃,也想嘗試看看。
畢竟,雖然很多人都說 AI 出現後,將會搶走程式設計師的工作,可是到目前為止,就算有了 Cursor 、 Windsurf 等幫忙寫程式的 AI 工具,也沒見到程式設計師的大量失業潮。
如果真的如同這位 YouTuber 所言,能夠在無知識基礎的前提下,能讓一個新手無痛開發程式,的確有許多程式設計師該擔憂他們的飯碗。
我自己是從來沒開發過手機 App ,對我來說,如果不用 AI 開發 ,我大概只能寫個秀出 Hello World 的畫面吧。
所以,倘若我也能使用 AI 工具開發出手機 App ,就代表這條路的確可行。
那就來試試看吧!
環境安裝與提示詞
我自己是拿 Android 手機,因此我的第一個作品也想開發能在 Android 系統上運行的 App 。
既然要開發 Android App , Android Studio 整合式開發環境,就是當然的不二選擇。這是免費軟體,直接到官網下載就可以了。安裝過程就不描述了,一直按下一步即可。
我的 AI 開發思維,是以 Windsurf AI 工具結合 Android Studio 進行開發,使用 Android Studio 創建專案,再用 Windsurf 生成程式碼,最後再回到 Android Studio 進行模擬測試。
使用 Android Studio 建立新專案
使用 Android Studio 創建新專案很簡單,照著路徑 File → New → New Project ,跳出新視窗後,選擇 Empty Activity
,會生成基礎的 Android 專案結構,包含但不限:
啟動應用程式最基礎的程式碼:
MainActivity.kt
介面配置檔案:
activity_main.xml
應用程式的宣告檔案:
AndroidManifest.xml
設定套件相依性、編譯版本等應用程式模組的
build.gradle
檔案以及整個專案層級的build.gradle
上述這些我當然都不懂啊,也是先問 AI 的。
撰寫提示詞
下一步就是撰寫提示詞,這部分我就有經驗了。依據我的經驗,我會先寫一個 Readme.md
,這是一種以 Markdown 格式(副檔名 .md)撰寫的說明文件。一般放在專案的根目錄,介紹專案的用途、功能、安裝方式、使用說明、版本資訊、作者聯絡方式等資訊。
有了 Readme.md
,使用 Windsurf 等 AI 工具寫提示詞時,只要提供它這份文件就可以了。
順道一提,本週我練習開發的手機 App 是重訓組間計時器,理由是我沒看到坊間的計時器有適合我的,所以決定自己開發一款專屬於我的 App。
我先在將我的需求與功能提供給 AI ,讓它幫我生成適合放在 Readme.md
的文字,如下:
# 重訓組間休息計時器
## 專案簡介
一個簡單易用的計時器應用程式,專為重訓時的組間休息設計。讓使用者輕鬆設定倒數計時,並提供直覺的操作體驗。
## 核心功能
1. **倒數計時器設置**:倒數計時器預設為1分鐘,可通過滾動數字進行快速調整。
2. **直觀啟動與停止**:雙擊畫面即可啟動或停止倒數計時。
3. **顏色提醒**:
- 倒數進行中:背景變為黃色。
- 倒數結束:背景變為紅色,並發出響鈴提示。
4. **鈴聲自訂**:可選擇手機中的聲音檔案更換響鈴。
## 使用方式
1. 開啟程式後,默認倒數計時為1分鐘。
2. 通過滾軸調整時間:
- **向上滾動**:時間增加1分鐘。
- **向下滾動**:時間減少1分鐘。
- 無操作3秒後,自動儲存新設定。
3. 雙擊空白處啟動倒數,再次雙擊停止倒數。
4. 倒數結束後,背景變紅,響鈴提示,計時器正數至15秒後重置。
5. 點擊右下角的 **+ 按鈕**,選擇自訂鈴聲。
## 預期畫面
- **初始畫面**:淺綠背景,黑色倒數計時器數字。
- **倒數計時中**:黃色背景,數字更新。
- **倒數結束**:紅色背景,響鈴提示。
## 系統需求
- Android 9.0 或以上
- 或 iOS 13.0 或以上(未來可擴展至雙平台)
## 專案結構
- `src/`:核心程式碼
- `assets/`:圖片與鈴聲檔案
- `docs/`:文件與用戶指南
## 未來規劃
1. 支援更精確的倒數計時(如秒數設置)。
2. 加入倒數時間歷史記錄。
3. 自訂主題顏色或背景圖片。
安裝 Windsurf 編輯器
我之前在開發武俠小說生成器時,就是用 Windsurf 編輯器輔助開發的,它是 Codeium 推出的產品,功用與 Android Studio 相似,都是整合式開發環境,但是 Windsurf 追加了 AI 功能,專門用於程式設計。
如果使用 ChatGPT 、 Claude 網頁版,讓 AI 生成程式,則你還必須得將程式複製起來貼到專案內的程式碼中,如果後續需要修改, AI 生成程式後,你光是要找到修改位置,就得費一般功夫。
但是使用 Cursor 、 Windsurf 等 AI 工具,它會讀取專案內容,直接修改在程式內,省得複製貼上。
花生使用的 AI 工具是 Cursor ,我個人認為這兩款工具差不多,據說 Cursor 要再強一些,但是兩者相差不大。
Cursor 目前月費是一個月 20 元美金, Windsurf 早期價位是一個月 10 元美金,目前漲價到 15 美元。幸好我適用於 Codeium 的方案,只要是早期的使用者,價位仍維持 10 元美金。
Windsurf 開啟後,選定剛剛用 Android Studio 建立的專案資料夾。在 Windsurf 畫面右側會有視窗稱為 Cascade ,這是用來與語言模型溝通的對話框。預設是使用 Claude 3.5 Sonnet ,目前公認寫程式最好的語言模型。
在對話框輸入 @ ,就可以選擇你要指定語言模型閱讀的文檔,在這邊就輸入我寫的 Readme.md
。
使用 AI 寫程式的困難
輸入提示詞,就解決了嗎?
才沒有。
AI 很快地根據我的功能吐出程式碼,我也很快發現編譯錯誤,錯誤的原因跟環境設定有關。
環境設定是第一道門檻
是的,開發時第一個要解決的問題通常是環境設定。
這就是我對於新手能否以無知識基礎開發程式的疑惑。
首先,新手不可能知道什麼叫做編譯錯誤,他連編譯的概念都不會有。雖然編譯是什麼,只要查 AI 就會知道,但是沒有編譯的概念,則可能造成開發前期遇到問題不知所措。
另外,雖然環境設定是程式設計師的常識,但是新手是不可能知道的,所以我猜這位 YouTuber 花生,在前期一定是要努力地去向 ChatGPT 、 Claude 等語言模型挖掘相關知識。
我在開發前期,遇到了許多錯誤訊息,例如以下這個:
[error] [gradle-server] The supplied build action failed with an exception.
我採取的方法,就是讓 AI 自行斟錯, Windsurf 在這個部分卡了很久,大致的情況是修好了 A ,壞了 B ,修好了 C ,結果 A 又出問題。
我其實也不知道問題在哪,我連錯誤訊息的 Gradle Server 是什麼都不知道。
最後解決的辦法,發現是版本設定的問題,這也是 AI 發現的,它表示我使用的 JDK-23 版本與 Gradle 8.9 不相容。
最後雖然搞定了,但是已經半天過去了。
在除錯時, AI 會提供許多建議,可是 AI 有機率出錯,它提供的建議都僅能做為參考。必須要自己多方檢查。
AI 有機率產出錯誤的程式,但是你不會知道在哪裡
環境的問題搞定後,我原本以為沒事了,但是問題還在後頭。
在整個開發過程中, AI 產出的程式碼有一定的機率會是錯誤的,例如我希望讓使用者雙擊畫面,會將計時器重置,恢復成使用者上一次設定的時間。效果跟計時器結束,正在播放提示音,此時雙擊畫面的效果一樣。
雖然 AI 產出的程式碼,這次沒有發生編譯錯誤,但是邏輯錯了。例如我將時間設定為10秒,讓秒數倒數到5秒後,再雙擊畫面,此時居然數字變成9,並不是我上次設定的10秒。
為了秉持無知識開發的過程,畢竟新手怎麼可能讀得懂程式碼,連什麼是 if-else 都不會知道。所以我全程都不讀程式,僅讓 AI 自行檢查,我再運行它重新寫的程式,這行為來回好幾次, AI 才終於把邏輯給搞對。
是的,我成功了。的確在無知識基礎的情況下,新手有可能只靠 AI 開發一個小型應用程式。
可是我認為這只是一個在手機上運行的小 App,如果規模大一點,例如要連網、加個資料庫什麼的,問題會更多。
順道說一下在 Android Studio 測試的方式 ,測試之前你可能會需要執行 Build → Clean Project ,以及 Build → Rebuild Project ,確保專案編譯後的都是最新的程式碼。
接著點擊畫面上方的 View → Tool Windows → Device Manager ,開啟虛擬設備管理工具,挑選你想要測試的手機,就可以在你的電腦上模擬手機畫面。
再來執行 Run → Run ‘app’ ,就可以測試了。
在 AI 時代,新手利用大型語言模型開發應該具備的概念
我從上個月開始著手開發武俠小說生成器,以及這次的手機 App ,都是用 AI 開發的。
我相信使用自然語言開發軟體,一定是未來的主流,可是坦白說,就我的經驗來看, AI 要取代程式設計師,還早了一點。
如果新手在完全無任何知識基礎的情況下,想要以 AI 工具進行開發,可能犯幾種錯誤:
對 AI 有過多期待:提示詞過於模糊,或者一次給 AI 過多的修改需求, AI 可能會發生錯誤,誤刪關鍵程式碼。如果沒有程式控管的概念,恐怕難以輕易回溯。
只依賴 AI 產生程式,卻不理解程式碼的流程與結構:在開發前期還沒什麼問題,後續在維護或新增功能時,難度會越來越高。因為程式碼越來越多,如果要讓 AI 閱讀大量文本,或者進行功能複雜的程式開發,則有機率出錯。
只依賴 AI 修復程式 :如果出現 Bug ,開發者如果功力不夠,也只能反覆地讓 AI 修復。如果是小錯誤還有辦法這樣做,但是從事系統開發,常遇到的情況就是功能互相綁在一起,修了這個 Bug ,另一個又出現問題,轉頭去修另一個問題,之前的 Bug 又再度產生。這個情況也在本次開發重複發生。
把程式都放在同一頁面:現在幾乎沒有一頁就寫完的程式,通常都要做模組化的結構,例如把功能另外放在另一個檔案,由主程式去呼叫。這樣才能方便後續擴充功能。這點 AI 也無法協助。
其實我自己也是初階程式開發者,所以自己對於能否不用再學程式設計,僅用 AI 開發軟體的展望頗感興趣。
如果能夠輕易地使用 AI 開發軟體,那我不就可以專心於產品發想,無須思考程式面的問題了嗎?但是最近的使用經驗,卻告訴我情況絕非如此。
我認為在 AI 時代,新手利用大型語言模型開發應該具備的概念有:
仍要學習基礎概念:在 AI 時代,開發者的確不再需要死記程式語法。但是仍需要對於程式語言、資料庫、網路協定、演算法、資料結構有基礎認知。才能夠判斷 AI 生成的程式是否合理,或者效能是否順暢。
人腦可用於更高層次的問題:雖然寫程式的門檻降低,但是要如何整合需求、設計系統架構、規劃功能,仍然必須由人類來判斷。開發者必須要理解使用者的需求,確認系統要解決的問題,這些功能如何模組化,要使用哪些服務或資料庫。
AI 只是工具: AI 不是終極解答,它是協助人類程式開發的工具,人類必須要透過持續測試、驗證來迭代優化程式。
永遠只做最小步驟開發:盡可能讓 AI 修改或新增單一模組或功能,像我這樣一口氣寫好
Readme.md
的核心功能,讓 AI 一次產出程式碼,有非常高的機率出錯。做好版本控制:主流的 IDE 都有整合版本控制功能,你也可以把程式碼推送到 Github 上,因為 AI 經常發生亂改程式的現象,所以一定要做版本控制,善用分支管理功能。
最後我要說,其實我不懷疑 YouTuber 花生,在全然無知識的情況下開發出排行版第一名的手機 App 。但是這不代表整個開發過程中不需要學習。
在 AI 時代仍要學習,只是學習程式的流程改變了,過去我們要先上課,跟著課程練習,等到整套課程上完後,才開始練習自己的專案。
可是現在不需要這樣,只需要你有基本的程式概念,就可以馬上利用 AI 進行開發,遇到有什麼概念不清楚,就再學習即可。
學一點,做一點,再學一點,再做一點。
我們不需要丟下 AI 重新苦練「從無到有手寫程式碼」,反而應把 AI 當作助力,專注在思考問題、設計架構、除錯與測試。
然後應該建立產品思維,先想清楚要解決什麼問題、要做什麼功能,再搭配 AI 快速生程式,並藉由閱讀與除錯來吸收程式知識。
今天又是文章過長的一天,就先說到這裡了。下週就要恢復 RAG 系統的學習以及武俠小說生成器專案了。