Takeaways from Cory Zue's May 2023 Livecoding Session

Michael Lynch

從 Cory Zue(柯瑞·祖伊)2023 年 5 月現場實作直播的心得整理

我的朋友柯瑞·祖伊一直在發表他的現場實作直播,所以我決定觀看其中一場並記錄下我的筆記。

我與柯瑞·祖伊的背景對比

我讀過柯瑞·祖伊部落格的許多文章。我們都是 Python 開發者,但他專精於 Django,而我則一直使用像 Flask 這類更輕量的框架。我沒有使用 Django 的經驗,但在 Python 方面還算得心應手。

開發環境

時間戳記 0:10

  • 作業系統:Ubuntu
    • 我原本以為柯瑞·祖伊會是 OS X 的使用者。
  • 瀏覽器:Firefox
  • IDE:PyCharm(我想是)
    • 我從未使用過 PyCharm,比較習慣使用 VS Code。

模型

時間戳記 2:53

  • 我開始擔心自己會被 Django 的東西搞得迷路。
  • 柯瑞·祖伊展示了 ChatMessage 模型,這似乎是一個 ORM(物件關聯對映) 物件,用來告訴框架如何從資料庫儲存及擷取物件。
    • 對我來說都是全新的,因為我從未使用過 ORM。

遷移

時間戳記 3:35

  • 柯瑞·祖伊執行了 ./manage.py makemigrations chat 這個指令,似乎是產生一個資料庫遷移,讓他的資料庫能夠支援他剛剛定義的兩個模型。
  • 接著柯瑞·祖伊執行 ./manage.py migrate 來套用他剛剛建立的遷移。
  • Django 絕對比我習慣的作法更「神奇」,因為我都是手動建立資料庫遷移。
    • 柯瑞·祖伊的做法比起我每次定義新物件時都要撰寫一堆 SQL 樣板程式碼要省事得多,但也在開發者與資料庫之間增加了一層厚厚的抽象。

建立管理介面

時間戳記 3:50

  • 柯瑞·祖伊使用 ChatGPT,根據他新增的模型來建立管理頁面的樣板定義。
    • ChatGPT 產生了正確的內容,但柯瑞·祖伊仍需微調以符合他偏好的 Django 語法。

時間戳記 5:49

  • 看起來 Django 會利用這些定義來自動產生一個管理介面,用以在資料庫中新增/編輯這些新模型。
    • 這很不錯。我平常都是直接查詢資料庫,但這樣做確實輕鬆多了。

翻譯

時間戳記 10:05

  • 柯瑞·祖伊似乎在為這個應用程式設計在地化支援,這是我大約 15 年來都沒考慮過的事情。
  • 可國際化字串的語法看起來相當直觀。
    • {% translate "Manage your chats here." %}
    • 想必必須在別處提供其他語言的翻譯,所以我很好奇那是如何運作的。

Django 控制流程

時間戳記 14:52

  • Django 真奇怪!你只要呼叫 get_object_or_404,如果找不到物件,它似乎就會直接離開函式並回傳 HTTP 404 錯誤。
    • 這對習慣 Python Flask 或 Go 的我來說相當陌生,這兩個框架都會迫使開發者更明確地回傳 HTTP 錯誤(除了未處理的例外狀況會變成 HTTP 500 錯誤之外)。

Git 圖形介面

時間戳記 25:08

  • 柯瑞·祖伊使用了一個我從未見過的 Git 圖形介面。
    • 他透過執行 git g 來啟動它,我想這是柯瑞·祖伊專用的 Git 別名。
  • 柯瑞·祖伊在檢視時逐一將每個檔案加入提交。
  • 柯瑞·祖伊有一個 pre-commit hook,會在格式不正確時拒絕提交,然後將其重新格式化為所需的風格。
    • 這是我一直不敢做的事情,因為我不信任自動化工具去修改我的程式碼。
    • 以柯瑞·祖伊的做法來說,自動化工具會修改他的程式碼,但他在提交前仍會檢視變更。

在用戶端與伺服器端算繪之間共用程式碼

時間戳記 29:06

  • 柯瑞·祖伊似乎能夠使用 htmx 來解決一個令我困擾的問題:如何在用戶端算繪與伺服器端算繪之間避免重複程式碼。

    • 在網頁應用程式中,我經常遇到想在頁面上新增內容,但又不想完整重新載入頁面的情況。
    • 如果使用者重新整理頁面,他們應該會看到與我們動態新增內容時相同的內容。
    • 我常常在三個糟糕的選項之間進退兩難:
      1. 永遠在用戶端算繪內容,這很複雜且在瀏覽器中渲染較慢。
      2. 永遠在伺服器端算繪內容,這表示我通常必須重新載入整個頁面才能顯示變更。
      3. 實作兩次算繪邏輯:一次用於用戶端算繪,一次用於伺服器端算繪。
  • 在影片中看得不夠清楚,但看起來 htmx 讓柯瑞·祖伊可以在伺服器端定義他的 HTML,然後透過 htmx 屬性讓特定元素自行重新算繪,而無需完整重新載入或讓柯瑞·祖伊重新實作算繪邏輯。

ChatGPT API

時間戳記 36:48

  • ChatGPT API 出乎意料地容易使用。
    • 這個 API 只需要一個模型名稱和對話中的訊息清單。
    • 你在每次 API 呼叫時傳入完整的訊息歷史記錄來維持對話狀態。

結語

我原本就預期 Django 是個重量級框架,但它比我想的還要厚重。Django 甚至為 Python 的 list、dict 和 enum 提供了自己的包裝。Django 與純 Python 之間的差距,感覺就像 React 與原生 JavaScript 之間的差距。

我很難將這些經驗應用到自己的工作中,因為柯瑞·祖伊所做的很多事情都是 Django 特有的。也可能只是我選片運氣不好,因為他在這部影片中做的工作,很大程度上是在把 Django 的不同元件黏合在一起。

不過,能看到在一個從更高抽象層次設計一切的技術堆疊中的開發者體驗,還是很有趣的。

原文由 Michael Lynch 發布

本文章由 muse-spark-1.2-contributor 進行翻譯