這期全端雙週報的正式內容開始前,想跟大家分享一個消息,那就是 ExplainThis 的網站改版上線了! 從去年十二月對外公開後,ExplainThis 網站在過去的十個月累積超過五百萬次瀏覽,完全超乎我們當初的預料。
真的非常感謝大家,在過去十個月不論對於網站、粉專、電子報或是《ChatGPT 指令大全與創新應用》一書的支持。感謝雖然電子報完全免費訂閱,但仍付費支持的讀者、感謝過去透過 Buy Me a Coffee 請我們喝咖啡的人。此外,也感謝邀請過我們給講座、工作坊、課程的機構;以及感謝其他在商務上合作過的夥伴。
新版網站有優化過的資訊架構,推薦對全端開發有興趣的讀者,可以到「軟體前後端」以及「科技業職涯」這兩個專區逛逛。新版網站上線後,我們會持續盡力將深澀難懂的概念,變成白話易懂的內容;同時,我們會維持免費開放網站中的內容,期望能幫助到每個讓想學習與精進的人。
總之歡迎大家逛逛 👉 explainthis.io
[前端工程] Bun 1.0 正式發佈
對於前端工程師來說,JavaScript 可說是吃飯的工具。而在這週,JavaScript 過去兩年呼聲一直很高的執行環境 Bun,正式發表了 1.0 版本 [連結]。在這次的發表,Bun 團隊用很清晰的方式,闡述了 Bun 的優勢。在這期的電子報,我們為大家摘要,也非常推薦大家可以試試,比起 Node.js 的速度與開發者體驗真的有明顯提升。
Bun 是 JavaScript 的執行環境,也就是能跑 JavaScript 程式的地方。目前社群最多人用的 JavaScript 執行環境莫過於 Node.js。但因為 Node.js 在設計上有些問題,但打掉重練的成本太大,所以他的創作者 Ryan Dahl 後來另外開發了 Deno 這個新的執行環境,來解決那些問題。而 Bun 則是由 Oven 團隊開發的執行環境。
Bun 的一大賣點是速度快。舉例來說,Deno 每秒能處理的 React SSR 請求量是 Node.js 的兩倍多,但是 Bun 更進一步做到能處理 Deno 兩倍多的請求量。同樣在 WebSocket 的訊息傳遞量,Bun 也是 Deno 的兩倍多。在跟其他套件管理工具 (例如 npm 與 Yarn) 比,Bun 的套件安裝速度超過十倍快。而在跑測試上,也比目前社群最快的 Vitest 還快不少。
除此之外,Bun 原生支援 TypeScript,讓現在社群中多數人選擇的 TypeScript,在使用上可以省去轉譯 (transpile)。在過去 Node.js,需要先把 TypeScript 轉譯成 JavaScript 後才能跑,Bun 原生支持就不需要額外轉譯,速度也就比較快。
速度之外,開發體驗也是 Bun 的一大賣點。舉例來說,Bun 的一個特點是,兼容 CommonJS 與 ESM,意即在 Bun 可以直接一起用這兩者。換句話說,你可以同時用 import 與 require。假如有維護過又大又老的專案,會知道要把 CommonJS 搬移到 ESM 的痛苦程度不是一般。能兼容對許多人來說是一大福音。
另外,現在寫 JavaScript 的一大痛點是有非常多的配置檔案 (config files)。Bun 跟 Deno 一樣,解決了這個痛點。因為原生支援 TypeScript 的關係,你不再需要 Babel 這類的轉譯工具配置;因為 Bun 本身是打包工具,你不需要 Webpack 這類工具 (現在社群有人開課專門在教 Webpack,可以得知這東西不夠簡單,不然根本就不需要額外課程教人處理這些寫程式以外的工具)。
甚至你也可以直接把 Bun 當成套件管理工具,就像是 pnpm、npm、yarn 那樣,它的速度不僅更快,也讓你不用有 package-lock.json 那類的檔案。同時 Bun 本身可以跑測試,所以你也不用 Jest 或 Vitest,自然不用 jest.config.js 這類配置檔案。總之這樣數下來,用 Bun 時程式碼庫可以少掉非常多讓人煩惱的配置檔案。
假如讀到這邊你有點被推坑,可能仍會有個遲疑點,那就是過去用 Bun 在 Node.js 的兼容性上做得如何? 當初 Deno 推出時,在 Node.js 的可兼容性上做得不是太好,這是有些想搬移到 Deno 的人會遇到的痛點。而 Bun 幾乎做到 Node.js 的完全兼容 (除了少數幾乎不會被人用的 Node.js 功能外)。所以你現在用 Node.js 的專案,直接拿 Bun 跑也完全沒問題。
一個好的工具到被大眾採用,通常需要不少時間。現在還不明朗 Bun 是否能真的取代 Node.js 成為主流。但不得不說,Bun 絕對是值得觀望的 JavaScript 新勢力。
[系統設計] 從蛋糕店學習系統設計 (下)
在前兩期電子報我們用蛋糕店的比喻,來了解軟體系統設計。在這一期電子報,我們將繼續用經營蛋糕店的比喻,進一步聊現實世界中的系統設計決策。
在經營蛋糕店時,會需要思考該是自己買下店面,還是跟別人租店面來經營? 假如要租店面,是只租店面剩下自己打理,還是租那種會連裝潢、清潔也一起包下來的? 會需要思考蛋糕師傅的招募是要委外還是自己培訓? 甚至需要思考,到底要純手工做蛋糕,還是由機器來生產? 上面這一系列的問題,都是在真實世界的系統設計中要考量的。
以買店面或租店面為來說,在真實世界需要考量,要自己建機房 (就像買),還是用雲端廠商提供的服務 (就像租)。買跟租都有各自的好處,自己建機房就需要自己團隊內有專業的人,來處理機房可能遇到的各種狀況,這是一種成本;而使用 AWS、GCP、Azure 這類廠商提供的 IaaS (基礎架構即服務),可以省去很多麻煩,但是成本會高一點 (37signals 今年從雲端改回自建,估計一年省一百五十萬美元)。
至於要選擇只租店面自己打理細節,還是租那種裝潢、清潔管理通包的? 這就像選擇 IaaS 與 PaaS (平台即服務) 之間的選擇。選擇 PaaS 就像租來店面後,有出現漏水、要換燈泡等問題,都有人會來修好,不用自己擔心。IaaS 具體就像用 AWS 的 EC2,你租了別人的服務,但遇到運算不足,要自己升級或加開機器;而 PaaS 就像用 Lamda,你租的同時,後面那些資源擴容、修補的問題你都不用煩惱,都由 AWS 煩惱就好。
而要找外面現成的蛋糕師傅,或是自己培訓,這就像選擇 SaaS 服務,或者自己從零造輪子。找現成的蛋糕師傅好處是快速方便,省去培訓的麻煩;但是壞處是外面找來的師傅,可能有些做蛋糕的方式或習慣,跟你理想中的不符合。自己培訓則是要花時間與成本,但可以讓培訓出來的師傅更貼近你的理想。用 SaaS 或自己做,也是相似的概念。 SaaS 提供現成的功能讓你直接用,但很可能沒辦法完全依照你的需求客製化;自己從零做,雖然能高度客製化,但要花時間與成本。
至於要選擇手作蛋糕,還是工廠生產蛋糕,這就像思考是否選擇 FaaS (函式即服務) 一樣。用蛋糕工廠生產,然後下游的蛋糕店需要時就叫貨,這就像用 FaaS 一樣,你呼叫所需的函式,不須用自己一個一個生產。
以上透過蛋糕店的例子,希望大家有更清楚在 IaaS、PaaS、SaaS,以及 FaaS 之間的區別。在真實世界的系統設計,要選擇用什麼服務,或者是自建,是必需要意識決定的。就如同蛋糕店的經營,不同的選擇都有其利弊,沒有所謂最好的選擇,只有最適合你的系統的選擇。
[軟體業職涯] 軟體業回暖,聊聊在新加坡軟體業工作
在經歷今年上半年的全球軟體業裁員潮後,目前感覺市場有慢慢回暖的趨勢。一些先前大批裁員的公司,在半年多後也重新開始招募。假如你最近有在思考換工作,除了在台灣的職缺外,或許也可以考慮其他亞洲區的職缺。以軟體業來說,日本與新加坡是許多台灣人會選擇的海外就職地。
日本近期有幾家公司有在台灣舉辦招募說明會,例如先前的 Mercari (日本最大的二手電商),以及最近即將舉辦說明會的 PayPay (日本最大的行動支付服務)。日本對許多人來說有吸引力的點,莫過於生活品質的提升;但在財務角度上相對吸引力比較不足,主要原因是日本的稅率比較高,以及日幣貶值。
對軟體業來說,想要留亞洲區,同時想要存多一點錢的人,新加坡是個很不錯的選項。因為 ExplainThis 有團隊成員在新加坡工作,過去有寫一系列的新加坡求職相關文章。例如《在新加坡當工程師薪水有多少?》有提到目前新加坡薪資的普遍行情,文中也有附上資料比較齊全的薪資相關網站。一言以蔽之的話,新加坡軟體大廠機會相對多,整體薪水高、稅率低,要存錢會快很多。
當然在思考要不要到新加坡的軟體業工作,不能只看稅後薪水這點。因為你實際上能存多少,還需要把你的生活成本考量進去;假如是有家庭的人,小孩的養育也是需要思考的重點。更進一步說,是否要長期留在一個地方又是另個問題。
對於非超級有錢人的一般上班族來說,新加坡可能適合想來待幾年存錢後就走的人。除非你下定決心來拿永居或轉為公民,不然在新加坡因為的房價很高,而且外國人買房還有額外的 60% 買家印花稅,如果只是想過著一般存錢買房的生活,來這裡不會比較好;但反之來存幾年錢後,去亞洲其他地方 (例如曼谷、東京) 或回台灣就會覺得買房變可負擔。
最後想說,選擇到哪工作是很主觀的,因為每個人看重的點不同,沒有哪個地方就絕對的好或絕對的壞。在網路上看不同國家工作經驗的分享時,務必回過頭好好問自己,對你自己來說,到底什麼最重要?
本期推薦
上週有幸收到 Substack 通知,ExplainThis 全端雙週報被另一個電子報《本質思維》推薦。查看後發現是個相當有觀點的電子報,舉例來說,分析 Vercel 的《Vercel:開放原始碼專案,如何成長為估值 25 億美元的新創?》寫的精闢且引人入勝,推薦給對科技與商業有興趣的讀者。
Astro 推出了 3.0 版本 [連結]。在 2023 年的今天,如果要選擇自行架設一個以內容為主的網站 (例如部落格、電商),Astro 絕對是最推薦的框架之一了,因為可以用你熟悉的工具,寫出效能極高的網站 (現今主流的 React、Vue、Solid 都能搭 Astro 來寫)。不過假如你原本不是用 Astro,在網站改版時考慮是否遷移到 Astro,可以參考我們決定不遷移的原因 (見此)
除了 Bun 1.0發表外,這週在社群同樣掀起重大討論的發表,是 Mojo 正式支援本地開發了。這個號稱專為 AI 時代量身打造的高性能版 Python 程式語言, 值得持續關注 [連結]
OpenAI 在接下來的 11 月 6 號,要辦給專門給開發者的 Dev Conference,假如你人在美國或願意飛去舊金山,推薦可以報名現場的。就算人不在舊金山,到時候也可以跟線上直播 [連結]
Ruby on Rails 的發明者 DHH,一直有著與主流意見不同的觀點。他過去一週再度於社群掀起了一波大浪。這次他宣布了兩件與主流相反的事,一個是把 Turbo8 專案從 TypeScript 搬移到 JavaScript (多數團隊從 JavaScript 搬移到 TypeScript,但是 Turbo8 反其道而行)。以及與 SaaS 反其道而行的商業模式 Once (見此)。雖然他的觀點經常在社群被攻擊,但必須說很感謝社群中有像 DHH 這種不同的觀點,而他的成功也說明著你不必然要跟著主流走。
Addy Osimani 又出了一本免費的書《The Stoic Mind》,這本是專注在生產力提升的主題上。許多人以為想成為 10x 工程師,就要把技術能力點滿。技術固然重要,但提高生產力還有許多不同方法,推薦給有想要往 10x 工程師邁進的人一讀這本《The Stoic Mind》 [連結]
ExplainThis 致力讓全端雙週報保持永久免費閱讀。為了能更永續經營這份電子報,我們開放電子報開頭的版面贊助。目前電子報有超過 1100+ 位讀者,平均開信率 > 60%,受眾主要是對軟體全端開發感興趣的讀者。如果你有認識合適的廠商,還請推薦給我們 🤝
另外,雖然電子報為免費訂閱,但我們將留言發問保留給付費訂閱的讀者,在電子報的留言我們都一定會回覆。如果你有任何問題或想交流的,都歡迎在留言區發問 🙂