背景
我一直對創造事物很感興趣。寫程式正好能滿足這一點。
我從今年四月開始用 100 Days Of SwiftUI 學習 Swift(iOS),一路跟到第 7x 天,做了幾個 app,也上架到 App Store。Swift 很棒,因為它用同一種語言同時處理 UI 和邏輯。
但後來我意識到,網頁的潛力可能更大,因為網頁更自由。你的 app 不需要經過審核,不需要付費購買開發者帳號,還能自由選擇自己的技術堆疊等等。尤其當你希望應用程式能跨平台時更是如此。
網頁開發學習
在為 iPhone 做了幾個小 app 之後,過去 3–4 個月我開始用 freeCodeCamp 學習網頁開發,也稍微碰了一點 Odin project。
我需要網頁開發,是因為我想為我的行動專案做一個 app 落地頁,以及一些供行動 app 使用的 REST API。
- FreeCodeCamp
- 大量動手實作,我其實覺得有點吃不消又有點重複。
- The Odin project
- 更多理論,也更深入理解程式設計的「為什麼」和「怎麼運作」。
所以我會建議大家兩者同時進行,相輔相成。
目前為止,我在 freeCodeCamp 只完成了「Responsive Web」、「Basic JavaScript」和一半的「React」。
我的學習主要建立在文字資訊和官方文件上。我很享受 React 和 NextJS 的官方教學。
我完全沒有付費上任何線上課程。
我的學習大多是任務導向——學會我想做的那件事,然後繼續前進到下一件事。
我目前的程式設計之路
Swift 與一點本地 SQLite > 簡單的 Flask REST API > HTML/CSS > JavaScript > 11ty(靜態網站產生器)> React(官方教學)與 NodeJS > Next.js(官方教學)> ExpressJS > REST API 安全性(CORS 與環境變數)> 重溫 React(freeCodeCamp)> ……
大家都說做專案很重要,我非常同意
如果那不是我真心想做的東西,我早就失去興趣了。當我長時間投入某個專案而感到疲倦時,我會換成另一個用不同語言寫的專案來刺激自己。任務導向的學習最適合我。
我用過一些對初學者友善的免費主機
- GitHub page
免費方案下,你必須把 repo 設為公開才能發布。但你仍然可以將自己的網域對應到它。
非常容易與 GitHub 連接,內建聯絡表單支援,意思是你不必自己架伺服器。你也可以整合 Netlify CMS 驗證,讓你登入自己的靜態部落格,全部免費。(缺點是不支援 Next Image——也就是無法利用 <Image> 最佳化。為此你可以改用 Vercel,但就會失去表單支援,所以看你取捨。我知道這件事,是因為我把 NextJS 網站推上 Netlify 時遇到了錯誤。)
相較於 Netlify,UI 沒那麼酷、也沒那麼對初學者友善,但它有無限頻寬、免費主機,甚至還有一些可用的有限雲端函式。它不像 Netlify 那麼對初學者友善,但也不算太難。它免費提供你所需與想要的一切基本功能。而且我的網域是在那裡買的,所以它現在是我首選的靜態主機。
免費後端主機
這是我的第一個後端。對基本用途來說非常容易上手。它有 CPU 計算時間限制,意思是免費方案下你無法在這台伺服器上執行大型處理任務。不過,它非常適合 RESTful API,因為它會一直運行。
這是我託管 express.js 的新選擇——缺點是閒置 15 分鐘就會自動休眠。我還沒找到一個免費、永遠在線、又能託管 JavaScript 伺服器的主機。不過,不會休眠的伺服器每月約 $7,不算太貴,而且它接受簽帳金融卡,這點我很喜歡。UI 也很容易上手。
不行,對我來說太複雜了,但它似乎是兼顧可擴展性與合理價格的最佳選擇之一,我還沒碰,因為網站 UI 對初學者不友善,而且我對 VPS 了解不多。
Google Cloud 即使要使用免費方案也需要信用卡才能開始,我剛好沒有。Firebase 很適合免費輕鬆建立驗證系統。我之後會再探索這個。
學習整個網站發布流程
在用 HTML/CSS 和基本 JS 做了幾個簡單網站之後,我想做一個部落格。發現有大量靜態網站產生器可以做到這件事。我用 Hugo、11ty 等搜尋範本。這對我理解如何操作 NodeJS 非常有幫助,因為這些範本只需要一點程式邏輯就能運作,但你會練習到建立網站的整個流程:
Creating a new git repository > create the site with NodeJS > connect & auto push to 3rd party host > manage your domain > compare the features & price for each web host to best suits your objective or language.大多數專案中唯一不同的部分只是「用 NodeJS 建立網站」,這裡你也可以用 python,但你學到的其他東西仍然適用。
更多關於建立部落格
最大的困難不是部落格功能本身,而是留言區。如果你是初學者,想寫部落格並專注在內容上,我建議你直接用 WordPress,它什麼都幫你準備好了,省事又輕鬆。
否則,要為靜態部落格整合留言區,你可以用 Disqus(在隱私問題上名聲不太好,而且載入時很吃記憶體)。或者你可以用一些開源的 GitHub 登入替代方案。但據我所知,目前還沒有任何一個免費又支援 Google 登入的。或者你可以自己架後端留言伺服器,但那樣你還得處理垃圾留言過濾之類的事。對我來說不太理想。我最後就用了 Disqus,但它不會自動載入,要等使用者點「Show comments」才載入,以節省載入時間。
關於 ChatGPT
它只在某種程度上有所幫助。千萬別用它處理複雜邏輯,通常會出問題。有些惱人的問題包括它改了你的程式碼卻沒通知你。它對初稿有幫助。如果你想要沒有 bug 的程式碼,它並不適合,它從來做不到。我也發現,你越要求它重新審查你的程式碼,它出的錯就越多。這比直接學會那件事並自己寫還更惱人、更耗時。
接下來
學習如何建立真正的後端,包含註冊/登入驗證、SQL 資料庫伺服器。也許這次我會試試 Django,並嘗試建立一個能供跨平台 app 使用的後端。
目標
持續學習並打造有趣的專案。
感謝閱讀!