跟AI學寫程式 來素描世界

畫素描觀察物體會快速進入長期記憶,「素描」對象是邏輯、系統、組織… 呢? 跟AI學寫程式 就是你瞭解複雜系…

Claude 很好,只是不會畫圖,而 WordPress 的 AI 生成圖片以為 Claude 是個法國中年人,好吧!Claude 正在教一群學生學寫程式,這是 AI 心目中的 跟AI學寫程式
Claude 很好,只是不會畫圖,而 WordPress 的 AI 生成圖片以為 Claude 是個法國中年人,好吧!Claude 正在教一群學生學寫程式,這是 AI 心目中的 跟AI學寫程式

亞馬遜高層主管外泄錄音說要用 AI 取代工程師,都要取代了還學什麼?學程式不只為了成為工程師,可以靠寫程式學習。想把資訊轉為知識,要對它「作功」,多次經過大腦處理,就像畫素描時被迫多次觀察物體,就會進入長期記憶。但如果想「素描」的對象是沒有外形的邏輯、系統、組織… 呢?程式就是你瞭解複雜系統的鉛筆。不會寫程式怎麼辦?沒關係, 跟AI學寫程式 ,它既然可以取代人成為工程師,當我的程式老師也是剛好!

需求:開發有會員系統的網站

閒話少說開始觀察吧!我懂網站有前端、後端,跟工程師長期合作,知道有哪些技術,不過沒親手做不知道具體串接細節,想瞭解它就蓋一個網站吧!:

  • 有會員系統,可以登入、登出、忘記密碼… 等:會員系統也是一直想理解的;
  • 以 Python 為基礎:想專注比較人性的 Python,熟練後平時各種工作都能用到,學「演算法素養」,熟練一種就夠了;
  • 有會員限定功能:還不需要串接金流,但有會員登入後才提供服務的機制;
  • 服務內容:本來想做筆記軟體,還沒規劃細節,先做個 Todo測試吧!因為它可以測試資訊的 CRUD(增、刪、查、改)。

我的經驗是,如果想學技術,上課、讀書都比不上動手做,但 AI 之前,做這個專案得先學半年吧!所以沒 AI 我真不敢挑戰複雜的系統建置!

我主力的 AI 助理是 Claude,它「性格」老實、誠懇,畢竟助理要選有緣分的。接下來就是我跟 Claude 協力的過程。

行動:找個合適的系統

Python 的特色就是有太多現成模組,不需從零開發,把別人模組裡的功能用你自己的程式碼「黏起來」就好,所以第一步想的是找現成模組。

會員認證系統不但複雜,而且有安全疑慮,如果亂寫造成會員個資流失我賠不起,所以希望在會員這塊有現成架構可套。當然問見多識廣的 AI 了。

跟AI學寫程式

Claude 目前有 3 種模型:

  1. 最強大的 Sonnet:它的特色是聰明,理解力很強,很有禮貌,很周到,壞處是話太多;
  2. 可以處理複雜事務的 Opus;它比 Sonnet 不聰明一些,但是也可以處理複雜事物;
  3. 處理日常事務的 Haiku:它是省話一姐(有人說 Claude 聽起來像金髮美女),回答簡短,處理小問答沒問題。

既然有個最聰明的,為什麼不統統找它就好了?因為付費用戶也有上限,回答太長就禁言,要休息幾小時才能繼續,所以簡單工作交給 Haiku,比如思考合適模組。

Haiku 說可以用 Google Firebase,不但可以搞定複雜的登入,也可以自己寫任務處理邏輯,可以幫你通知用戶手機,連資料庫都架好了!唯一缺點是 Firebase 跟 Google Cloud 深度綁定,要付企業級費用。

我沒有打算付企業級費用學習軟體,有沒有 Firebase 替代品?有,Supabase 是開源系統,目的就是當 Google Firebase 的便宜替代品,自己架設免費,雲端系統也便宜。

架構 1| SUPABASE + PYTHON

跟AI學寫程式

開發過程

Supabase 可以使用雲端,也可以自架伺服器安裝,如果只是測試,雲端就足夠了。

Claude Sonnet 只花幾分鐘就把程式寫完,我還搞不清楚在幹嘛呢!於是只是貼上程式碼,跳出一個有會員認證的網站,真是快速啊驚人!

學到什麼?

跟AI學寫程式:「前/後端」,可以想像電腦裡裝了 2 個軟體,Serverless 的 Supabase 讓我完全不用管後端,快速完成
「前/後端」,可以想像電腦裡裝了 2 個軟體,Serverless 的 Supabase 讓我完全不用管後端,快速完成

「前端」(網頁、手機 App、電腦 App 等客人接觸到的)與「後端」(資料庫、處理事情的邏輯),現代系統用 API 串接的,網站上開啓新頁面、按下按鈕… 都會觸發一個 API,而 API 的背後就是程式在處理事情。

例如在計算機 App 前端輸入 100 x 500 就把輸入的數字送到後端的「乘法 API」,後端算出結果再「返回」(return)給你。或者,去某購物網站想知道過去買了哪些東西,打開「歷史」頁,前端會把你登入帳號送去後端查詢,再把購物歷史「返回」到網頁。

API 行動快速,在你按下的一瞬間就完成了很多工作。

既然是 2 個軟體,當然也可以放在 2 台電腦。我在我自己的伺服器架設前端,後端則由 Supabase 出了(以後加倍要回),這叫「Serverless」就是架網站不用自己租伺服器。

下一步

  • 我:「你上次說要做筆記 App 用「No-SQL」資料庫比較好,Supabase 支持 No-SQL 嗎?」
  • Claude:「Supabase 只綁定 PosgreSQL 結構性資料庫,別種不支援,不過你可以考慮 Appwrite。」
  • 好吧!那重做!

架構 2| APPWRITE + PYTHON

跟AI學寫程式

Appwrite 跟 Supabase 幾乎一樣,它是開(沒)源(錢)的計劃,支撐不起 Supabase 那樣讓你基本免費用以後再收錢,但還是咬牙提供了非常少的雲端免費,少到把程式放上去測試就超過了(額度也太少了吧,都還沒開始測呢)!

開發過程

人家免費提供程式已經很了不起了,於是我打開 Linode 建一個伺服器,有一鍵架設 Appwrite,幾分鐘搞定,它厲害到打開系統看不到裝在哪,連系統都找不到怎麼設定?

跟AI學寫程式:用 Docker 把 Appwrite 搭建在自己租用的 Linode 上,付費也可以改成 Serverless
用 Docker 把 Appwrite 搭建在自己租用的 Linode 上,付費也可以改成 Serverless

測試一番,結論是需要用 Docker 重新安裝,但 Docker 太複雜,現在不想學,就請 Claude 指示,改來改去都不成功,灰心喪志時:

  • 我:「這麼複雜,乾脆從零建起好了?」
  • Claude:「我知道你的灰心,不過已經快要成功了,讓我們再來……」身為人類需要 AI 來安慰,實在丟臉,只能鼓起勇氣。

結果這一次就成了!

我想把前後端裝在同一台伺服器省錢,要設定「反向代理」,很複雜,正打算開始學時,發現 Appwrite 很胖,把我租的 USD$ 5/月 便宜伺服器塞爆,不得已升級到 USD$10/月。

這還只是後端已經塞爆,前端要再租一臺,又是 USD$5/月,加起來每月 15 美刀,對個人學習小專案太貴了,我根本用不到完整高級功能啊!

學到什麼

  • 很多複雜的系統用 Docker 建立,就是某人把電腦上要安裝的軟體打包,你可以在你的電腦實現跟他的電腦一模一樣的環境。
  • 後端平台自己有一個網址,你的網站也有個網址,兩個網站要裝在一台伺服器上,就要設定複雜的反向代理。
  • 這種完整的大平臺對小網站來說是殺雞用牛刀了,如果只是簡單服務,不需要用到 Appwrite。

下一步

  • 我跟 Claude 商量:「還是搬到 FastAPI 從零做起吧?有沒有合適套件?」
  • 它欣然同意:「可以用 FastAPI 加上『FastAPI Users』這個套件,它可以幫你處理會員認證功能。」當然有教訓我不需要用到大平臺。

架構 3| FASTAPI + FASTAPI USERS

跟AI學寫程式

FastAPI 是個 Python 的 Web 框架。什麼是框架?

Python 是語言,算數字什麼都很容易,但要用它蓋完整網站就工程浩大,要組合非常多的程式庫,有人把 Web App 需要的程式庫全組合起來打包給你用就是「框架」,FastAPI 的特徵就是「快」!

Python 的「慢」為人詬病,工程師說是一動作在 A 語言 0.5 毫秒(0.5/1000 秒),B 要 3 毫秒(3/1000 秒),A 是 B 的 6 倍快!什麼!對我來說,開網頁不超過 3 秒就很快了!所以雖然「慢」,但 Python 卻一直活得好好的

開發過程

前兩次用 AI 的動作太快,我都無腦貼程式,雖然走了 2 輪但不累(累的不是我),不過花時間貼程式多可惜,這次我想學起來。

  • 我:「我想要好好學,這次請你提示我教我,除非我卡住要求,不然不要一下就把程式碼全部寫出來。」
  • Claude:「好的,那麼在這裡關於XXX的架構你認為應該怎麼寫呢?」它立刻換成老師口吻,不給答案讓我做題。

換成教學模式後,token 用得少很多,變成我寫程式,卡住了問它,就理解了框架的設計和運作方式。

前面很快,直到開始寫 FastAPI Users 認證時,突然卡住 3 天,因為 FastAPI 寫法複雜、網站安全認證觀念也複雜,而 FastAPI Users 只是套件,不像平台都幫你寫好好,而是要自己寫 API,從不清晰的文件中找線索,讀書、失敗,花了 3 天寫了會員註冊、會員登入、忘記密碼、重設密碼幾個 API,但還有很多啊,比如忘記認證信箱、用戶個人頁面、架設郵件伺服器…。

跟AI學寫程式
自己用 Python 寫 FastAPI 程式碼,有認證部分就呼叫 FastAPI Users,其實也要自己寫

學到什麼

本階段不再 copy & paste,知識快速成長,之前都安裝買來的引擎,這次是自己用零件拼出一台引擎:

  • 認證的過程:分成前端認證、後端認證,有時候去購物網站把商品放入購物車但沒註冊,回來那商品還在購物車裡,原來是 cookie 的作用啊!
  • 後端用什麼方式接收前端送來的參數
  • 前端網頁如何讓按不同按鈕觸發不同後端 API,如何獲取後端發送來的回覆,如何把回覆呈現在網頁上讓你看到
  • 以及其他很多很多

前面說到要一直看網站的開發文件,這時突然在首頁看到「Fief」,好奇點進去一看,居然是個用 FastAPI Users 開發的,擁有跟 Supabase, Appwrite 類似功能的「平台」,意思就是它會把登入、登出、註冊會員、會員管理… 各種完整的 API 寫好,甚至登入頁面都做好,太省力了,想到前兩次的快樂結果:

  • 我:「你知道什麼是 Fief 嗎?」
  • Claude:「誠實的說不知道,我的知識只到 2022 年 4 月…」
  • 我:「如果我把它的文件貼給你,你可以幫我嗎?」
  • Claude:「當然可以!」不愧是兄弟,Gemini 直接說辦不到。

架構 4| FASTAPI + FIEF

跟AI學寫程式

前後端像是在 2 個辦公室不停打電話的同事,如果都是自己寫,何必寫成 2 個房間,直接讓他們坐在左右兩個座位上,吼一聲就好了還打什麼電話?FastAPI + FastAPI Users 就可以做到。

開發過程

Fief 要用很令我挫折的 Docker 安裝,如果要把前後端硬裝在一台電腦,就要複雜的網路設定(反向代理 Reverse Proxy),只有 1 台電腦,但你要騙所有人它們在 2 台不同電腦上,騙人最累了,是吧!

  • 我:「能不能把 Fief 裝在 FastAPI 下面但是不要網路設定?」
  • Claude:「可以的(你前面怎麼不說?),你把 Fief 的 Docker 容器安裝在 FastAPI 目錄下,在主程式裡讓它們同時啓動,就可以把 Docker 做為 FastAPI 的模組,只需要內部通訊」
跟AI學寫程式
Fief 是用快速的 FastAPI 做的認證服務平台,用 Python 內建功能把它變成套件,在單一伺服器就可以安裝

FastAPI 要架構複雜的 Web App,內含很多支程式及很多規定的子檔案夾,還要建立設定檔,但最後會把這所有的檔案夾和程式全部當作「App」的一部分,所以我只要把 Fief 偷偷裝在其中一個檔案夾裡,讓它以為是身體一部分,誰移動自己腳還要打電話?(其實這隻腳是義肢)

跟AI學寫程式

學到什麼

  • 不得已下功夫學 Docker,因為聽起來太厲害了(能省 5 美刀),Docker 就像是你新買電腦要安裝一堆軟體,而它把所有要裝的軟體全部打成一大包,變成超大軟體,就像個貨櫃,搬到另一臺電腦,接上管線就可以運作了。
  • 原來 Python 可以把任何的平台變成它的「模組」,不透過網路,在一台電腦內部就可以互相通信。
  • 如果多個軟體都安裝在 Docker 中,它們會建立快速通信管道(所以得要學)。

下一步

這應該就是終點了,經過 4 次迭代,得到想要的。

原本看規格覺得這些平台、套件的功能及安裝方法差不多,因為花了 2 週連續撞牆,深刻體會了這些看似差不多的計劃其實各有特色,學到的比起把每個軟體的文件讀遍好太多了,畢竟從理想的想法到實際做出來,距離很遠的。

下次有人說到網站前後端時,我就變成內行人了!

怎麼向 CLAUDE 拜師 跟AI學寫程式

跟AI學寫程式

這是我個人寫過最複雜的專案,問每個 AI,但 Appwrite, FastAPI, FastAPI Users, Fief 都很新、很冷門,同一個問題問了 Google Gemini、ChatGPT、Perplaxity、Claude,卻只有 Claude 答對(它是唯一老實說它不懂的),而且指導你時它會記下 Context(哪個程式擺在哪裡),這可能是它除錯比較強的原因。

後來我只問 Claude Sonnet,別的對這種複雜計劃都不夠聰明,綜合上面的祕訣:

  1. 用 Claude 的 Project 功能:可以把參考檔案都傳上去,同專案中文件互通,免得它每次都跟你要;
  2. 用引導避免一次吐出所有答案:問 Sonnet 一次回答字數夠大學生的期末作業,很快就把額度用光。用引導很省,逼你自己動腦思考;
  3. 要它寫「接關 prompt」:聊太長時會提醒你對話長消耗太多 token(因為它要把前面聊的都記下來回答你),方法是換到新對話,我請它針對本對話目前進度做了什麼,待辦事項、下一段要解決的問題、要提供它哪些資料… 等,寫成「Prompt」,到新對話貼上接着聊;
  4. 懂就對談不要 copy & paste:完全不懂的領域,先跟它學一點,可基本判斷錯誤訊息,就可「討論」,如果全部要它自己寫,錯誤很多,而且你什麼也沒學到浪費時間;
  5. 文科生類比:文科生更適合用大模型,因為它也是個文科生啊!我常用「類比」問它,例如「Docker 就像打包軟體,而 Docker-compose 就像把軟體安裝到電腦上,對嗎?」它很懂類比,會告訴你哪部分正確,不正確的原因,提取舊有知識庫類比新知,新知就藉機刻到長期記憶中了;
  6. 儘量說英文:它們每一個英文都比中文好,簡中又比正體中文好,影響回答品質;
  7. 用插件聊勝過用網頁:程式專案最難是除錯,會這樣寫因為你覺得對,bug 表示你覺得對的事不對了,改自己的大腦很難,要 AI 抓蟲就要貼一堆檔案給它,VScode 裡有插件可以不用離開就用 AI,你可以很容易讓它看到架構不用貼給它,不然如果你有 20 支程式時要如何貼?(自動化工具可以考慮的,如 VScode 的 ClaudeDev 插件,或最近新上市用 VScode 為基礎的 Cursor);
  8. 所有文件打包成文字檔提供給它:在 Python 裡可以寫一支簡單的程式,把所有的程式碼全部串起來印成一份純文字檔,提供這份文字檔就可以讓它知道什麼是什麼(請 Claude 幫你寫);
  9. 用 tree 印出檔案夾架構:要讓它知道你把什麼東西搬到哪裡去,可以用終端機的 tree 功能,它會把你的檔案夾畫成一棵樹,就不迷路了。

做中學靠 AI 是聰明又敏銳的老師(除了 Gemini 聽不太懂人話),如果你學得快也很聰明,進步就會很快,曾經遇過一些聰明人,跟他講話時雙方理解速度都很快,很不容易跟上,感覺像高手打乒乓球,球速快,飛來飛去而且不掉,真是種大腦按摩。反之,如果只是 copy & paste,課堂氣氛就非常糟糕。這就像打乒乓球時,發球過去就掉了,一直撿球,這段談話一定不歡而散。

不過,問聰明的 AI 老師,你要有計劃、學習力、還要睡好覺反應才快,不然可能不會是愉快的經驗。

讓我們保持聯繫

推送 Push:有個資疑慮的您,按下網址列左方「鎖頭」開啟「通知」會收到通知

電子報 Subscribe:在上方框或側邊欄框中訂閱電子報,我會看到信箱,但不會發垃圾郵件。

合作 Cooperation:行銷、課程合作 請到 About 中填寫表單,留言、臉書專頁聯繫也可以

臉書專頁:疑問或聊天,請留言,或到臉書專頁「Simpro 學習控」關注及留言

訂閱電子報

約雙週更新,絕無垃圾郵件|記得到信箱查看驗證信

最有人氣

探索更多來自 六叔觀察站 | Uncle6 Observer 的內容

立即訂閱即可持續閱讀,還能取得所有封存文章。

Continue reading