[心得] 服務業轉後端,全程用 AI 自學的踩坑紀錄

【背景】 30歲,非本科,服務業出身。目前正在求職中,兩個專案已部署上線。 從近年 AI 興起開始接觸軟體,用過 GPT5.3Thinking、Gemini3.1pro、Claude opus4.6。 沒有上過補習班,沒有資工背景,所有的學習判斷都是自己做的。 這篇不是轉職成功心得,是一個還在上岸的人整理自己踩過的坑與選擇。 【怎麼學的】 我的學習方式就一個迴圈:對每個概念問「為什麼」,拆開來驗證自己是不是真的懂,確認了才繼續。AI 只是我的教學工具,但每一步的判斷是我自己做的。 早期常覺得自己是不是不適合寫程式,後來發現那只是「人類的想法轉換成機器邏輯」的過程,走過去之後就沒什麼了,為此我還去Reddit看有沒有人跟我一樣覺得很痛苦。 【為什麼選後端】 一開始學的是前端,用 GPT 自學 HTML/CSS/JS,做了一個互動網站,有按鈕扣血、血條上限、復活功能。做了大概一個月,發現自己對畫面沒什麼驅動力,但對背後的狀態管理和資料邏輯很有感覺,就轉向後端了。 第一個專案:模擬銀行系統(mini-bank) 以 Python 為語言,從 Hello World 開始。 【資料儲存的演變】 這個專案讓我經歷了四種儲存方式,每次換都是因為上一個方案撐不住: txt:最早就是把資料寫進文字檔讓我理解CLI跟儲存的區別。問題是沒辦法查詢特定帳戶,每次都得整個檔案讀進來。 json:結構化了,但沒有事務保護,兩步操作中間出錯資料就不一致。 SQLite:進到關聯式資料庫後學到了 ACID、SSOT,也發現資料庫能原地 UPDATE 不用先搬到 Python 算完再寫回去。從這裡開始理解記憶體和磁碟 I/O 的關係。接著是正規化(1NF-3NF)、FK/PK、1:N 和 M:N 關係、手動建 index、理解B-tree。 從 JSON 換到 SQLite 的時候,重構完發現主程式完全不用改,只動了底層的讀寫邏輯——後來才知道這叫資料層隔離。一開始我還在當搬運工,把資料從資料庫撈出來用 Python 算完再寫回去,後來才發現根本不需要這樣做。 PostgreSQL:第二個專案才換的,從MySQL跟postgresql 兩個中我選擇了後者,原因是跟SQLite語法相差無幾以及市場上使用的公司也不少。 【OOP 重構:最痛苦的一段】 寫完第一版發現所有邏輯塞在一個 .py 裡面,開始重構成 OOP。這是整個學習過程中記憶最深刻的地方。 卡了好幾天,好幾次想放棄。後來才搞懂原因:我一直用寫 function 的線性思維去處理 class 的空間配置問題。寫 function 是「想到什麼寫什麼,從上往下」,寫 class 是「先決定這段 code 住在哪,再寫內容」。 想通之後做了 Manager-Worker 三層架構:Manager 持有資料庫連線負責事務邊界(commit/rollback),Worker 只拿 cursor 做自己那張表的事。這個結構後來接 FastAPI 的時候幾乎不用改。 在處理事務邊界的時候也踩過一個坑:存款功能裡把 input() 放在 transaction 範圍內,等於使用者去泡咖啡十分鐘那個 transaction 就鎖十分鐘。後來把人機互動拉到事務外面,只在真正需要寫入的時候才開 transaction,才解決這個長事務的問題。 【從 GPT 換到 Claude】 有一個轉折點:GPT 告訴我 with conn: 會自動關閉資料庫連線,我照做了。後來用 Claude review code 才發現這是錯的。從這次之後我學到一件事,AI 給的資訊必須自己驗證,不能直接信。也從這次之後我開始用 Claude 當主要的學習工具以及Gemini交叉驗證。 【API 與認證】 進到 FastAPI 之後,學了路由設計、Pydantic 驗證、HTTP 方法、REST 慣例、狀態碼。認證的部分碰到了 bcrypt 加密、python-jose token、HTTPBearer + Depends 依賴注入、verify_owner 授權檢查。 認證是我第一次碰到「不是靠推理就能理解的知識」它是一套外部規範,必須先拆開每個零件才能理解整體怎麼串的。 【測試、Docker、部署】 寫了 11 個 pytest 整合測試,覆蓋從註冊到各種異常情境。沒寫單元測試,因為專案規模小,整合測試更能驗證完整流程。 Docker 階段學了 Dockerfile、.dockerignore、環境變數管理(.env / .env.example / python-dotenv)。Windows 上裝 Docker 踩了一個坑:需要開啟 WSL2 和 VirtualMachinePlatform。 部署到 Render 的時候碰到 passlib 跟新版 bcrypt 不相容,API 直接噴錯。追到根因之後解法是鎖版本 bcrypt==4.0.1。 第二個專案:任務管理系統(task-flow) 為了證明能力不只限於銀行 CRUD,做了第二個不同領域的專案。 .FastAPI + PostgreSQL .五張表(users、tasks、categories、tags、task_tags) .13 個 REST API 端點 .JWT 認證 + 授權 .filtering / sorting / pagination(動態 SQL 組裝) .狀態流轉驗證(done 不可回退) .13 個 pytest 整合測試 .Docker 容器化 + Render 部署 部署時又踩坑:Render 的 PostgreSQL 內部 hostname 在 Docker 環境裡解析不了,最後用 Internal Database URL + sslmode 處理解決。 目前狀態 正在求職中,目標是 junior 後端工程師。 兩個專案都部署在線上。 線上為健康檢查端點,完整文件見 GitHub README GitHub:
mini-bank repo:
task-flow repo:
mini-bank 線上 :
task-flow 線上:
以上就是一個服務業出身、全程用 AI 自學後端的過程。沒有美化,這就是實際走過的經歷。 如果有什麼問題或建議歡迎留言。 感謝您的觀看。 【5/29 更新】:感謝留言區提醒,Swagger 不該在 production 環境公開,已加上環境判斷。這也是我自學過程中沒注意到的踩坑,謝謝給我真實開發過程的經驗判斷。 【5/31 更新】:自己 review 時發現 task-flow 的資料庫連線是全域共用的,單人開發沒問題但併發下會產生 race condition。改成每個請求獨立建立連線(share nothing)。另外也補上了架構圖和 ERD 到 README,感謝留言區的建議。
愛心
哈哈
36
24
全部留言