[前端工程] Vercel CTO 談前端到底是指什麼? 與後端的分野在哪?
過去軟體開發多半沒有前後端的區別,但在近年來前後端分離的趨勢下,漸漸有了前端、後端的分野。然而再多演進後,又出現 BFF (Backend For Frontend)、React Server Component 等讓前端與後端分也再次變模糊的設計模式。所以究竟什麼是前端? 與後端的分野在哪? Vercel CTO (前 Google 首席工程師) Malte Ubl 最近發了一篇《Frontend & Backend Defined》來探討這主題
過去多人會定義,前端是 UI、後端是資料庫,但是 Malte 認為這樣定義會有些問題。他的觀點則是,前端是在系統中處理與外部系統的客戶端;而後端則是在系統中提供內部客戶端服務,如果有個服務同時負責內部系統客戶端與外部系統客戶端,那這屬於後端的範疇。
在這個定義下,前端就不只是處理 UI,只要是從反向代理 (reverse proxy) 到使用者端 (外部系統) 之間要處理的,都可以算是前端的範疇。舉例來說,雖然 CDN 伺服器、伺服器端渲染 (server-side rendering) 都是在伺服器中處理,但他們都是屬於前端的範疇,而不是後端的範疇。
我們相當認同 Malte 的觀點,特別是在我們先前在大廠的工作經驗中,後端主要是處理 RPC 與資料庫,而 API Gateway 開始到 UI 往往是由前端負責 (傳統 MVC 架構來說,多數時候 V 與 C 是由前端工程師負責,當然不同專案也會有不同分工)。對於前端工程師來說,假如要往資深邁進,僅會寫 UI 是遠遠不夠的。
假如你有想要在前端領域持續精進,非常推薦可以看《Frontend & Backend Defined》原文當中更具體的例子,如果有你還沒習得的能力,可以再找機會補強。
[系統設計] 從蛋糕店的例子,輕鬆學習軟體系統設計 (上)
前陣子讀到有人以蛋糕店的例子,來比喻一個系統的演進,覺得非常精闢。對於想入門系統設計的人,或許也可以用蛋糕店的例子來學習。我們將在本期與下一期,接連用蛋糕店的例子,來學系統設計。
假如今天你是位手藝了得的蛋糕師傅,你決定自己出來創業開蛋糕店。一開始你只有自己一個人,所以什麼都要自己來,需要自己買材料、做蛋糕、顧店等等。顯然假如只有自己一個人,當客人一多就會忙不過來。這跟軟體系統一樣,假如只有一個單機伺服器,流量一大就會有撐不住的狀況。
這時就要思考如何規模化。一種方式是你每天喝紅牛,讓自己保持滿血狀態一個打十個;在系統設計上這叫垂直擴展,就是把單一機器的性能提升,讓機器能承載更大的流量。然而就像人喝紅牛還是有個極限,單一機器升級也是有其極限所在。因此多數時候,你會需要考慮水平擴展。
所謂的水平擴展是指多加機器,來乘載更大的流量。在蛋糕店中,你可以多雇用更多人,讓每個人分擔你的工作量,這樣你就不需用每天灌紅牛來一打十。然而,當你雇用人來幫你分擔工作,你就需要確保每個人的工作量平均,才不會有人很閒,但有人操得要死做後離職。
選擇水平擴展的方式也是如此,當你有多台機器時,你要確保機器能平均分配到要處理的流量,才不會有的機器閒置沒在運作,但是有的機器處理量爆多導致應付不來。在系統設計中,我們會加入平衡負載器 (Load Balancer) 來解決這件事,透過平衡負載器,能夠有效讓機器平均分擔要處理的量。
從蛋糕師傅晉升蛋糕店長的你,如今顧了人也確保大家不會太閒與太操,好像就可以安心退居幕後了? 當然這樣如意算盤就打得太早,畢竟還有很多要顧及的面向,系統設計也是一樣,而我們將在下一期進一步用蛋糕店的比喻來講其他面向。
[軟體業職涯] Vint Cerf 給開發者的 5 點職涯建議
這週在 IEEE 的網站中看到一篇專訪網路之父 Vint Cerf 的文章 (Vint Cerf 是 TCP/IP 發明者,也是圖靈獎得主),在文章中總結了五點他給開發者的職涯建議。覺得很有啟發性。在這邊翻譯給大家參考
如果你想做大事,務必尋求他人的幫助,最好是向比你聰明的人尋求幫助。
保持謙虛。如果你不抱著「自己並不知道如何讓事情順利運作」的想法做事,你可能會忽略一些可能性。
傾聽他人。我告訴我底下的工程師,如果他們知道我將做一些愚蠢的事情,他們必須告訴我,這樣我就可以免去做蠢事。如果他們知道但沒有告訴我,他們的年終績效報告反而不會好。當你處在具有權威的位置時,其他人可能會以為你已經知道危險在哪裡,但你可能沒有。
努力與每個人保持良好的關係。彬彬有禮是一種重要的特質,燒掉與他人之間的橋樑通常是個壞主意;你永遠不知道你將再次與誰合作,你可能會為誰工作,或者誰可能為你工作。
你可以從每個人身上學到一些東西。舉例來說,我在棕櫚泉的被一位開著豪車的白髮老翁載過。我記得我想「這個可憐的傢伙。在晚上九點開豪車。他現在應該在高爾夫球場上,愉快地打玩高爾夫球」。我們聊了一下後,我才知道他原來已經退休,從芝加哥最大的保險公司的首席財務官位置退下來。他早已厭倦打高爾夫球的日子,所以他決定每週開車三次豪華轎車載人,因為他知道這麼做將會遇到有趣的人。
本期推薦
Google 的資深主任工程師 Addy Osmani 在設計模式一書中提到「好的程式碼,就像一封寫給下一位維護者的情書」,透過這篇貼文一起了解為什麼他這麼形容 [連結]
身為軟體工程師,你知道當你執行程式時,電腦究竟是如何運作來執行程式的? 《Putting the “You” in CPU》是個開源的系列圖文,詳細介紹 CPU 的運作
這週 Google 推出了 AI 雲端整合開發環境 Project IDX,有興趣加入等候名單的人,詳見此連結
2023 年的 State of Database 調查結果出來了。想了解最新資料庫、ORM、BI 趨勢的人,推薦一看 [連結]
很多大公司會將原本是內部自用的工具,打造成對外開放的產品。最近 Spotify 將自家用的實驗平台 Confidence 轉成對外開放。如果你想在團隊中導入 A/B 測試,現在又多一個可以考慮的工具選擇 [連結]
AI.JSX 是由 Fixie.ai 推出的框架,讓開發者可以用熟悉的 JSX,搭配大型語言模型,來開發出可以在執行環境時,動態由大型語言模型生成的 UI [連結]
shadcn 加入 Vercel:shadcn 是近期前端開源界串起的新星,他打造的一系列元件庫,重新定義了前端工程師使用元件的方式。他加入 Vercel 也說明,如果開源專案做的好,工作機會自然會找上門。
🎉《ChatGPT 指令大全與創新應用》電子書上市
最後,假如你有興趣全面性了解 ChatGPT,並且學習如何實作基於 ChatGPT 的應用程式,千萬不要錯過了 《ChatGPT 指令大全與創新應用》目前電子書也全面上市,之前有私訊詢問電子書的朋友,千萬別錯過了 (博客來購買連結在此) 😊