Skip to main content

工作心得 - 關於前後端

· 13 min read
Adam You

#關於前後端 #長文

在我們公司內技術的交流和分享算是蠻頻繁的,前一段時間有一些關於前後端差異的討論;畢竟這邊前後端分工的很明確,大家有一些先入為主的想法我也早已習以為常,只是偶爾還是會覺得黑人問號這樣。

我自己本身工作經歷和我同年紀的開發者有些不太一樣,從我出社會第一份工作開始就是寫前後端分離的架構(MVC之類的單體式架構我反而沒寫過)。由於需要同時寫前端框架和後端框架,所以不太會覺得是兩件事情,雖然有些問題比較適合只在後端或只在前端解決,但也有些問題是在哪邊寫都可以。再外加後來我也有一點的接案經驗,和朋友分工的時候也是輪流這次我寫前端他寫後端,下次我寫後端他寫前端,當然大家擅長的工具或技術不太一樣,但好像也從來沒有用前端或者後端去做角色分類的(比如誰是前端誰是後端之類的)。

當然上述時期的技術深度很有限,隨著時代進步專業分工也是一種趨勢,現在軟體開發最粗略的分工很多就是先一分為二再說,但這種奇怪的刻板印象和貼標籤方式也就出現。

以往被同事問到說前端和後端差別在哪裡,通常我的回答就是說一個程式的執行環境在瀏覽器上,另一個執行環境在server上,都一樣是寫程式這樣。會這樣回答是我真心這樣覺得 XD 至於會寫什麼也是要看你解決的問題是什麼也會不同啊,形象網頁、電商、或各種的SI,做的事情和需要的技術也都完全不同。就比如我寫前端也寫過需要一次處理幾百mb資料、然後還寫一大端演算法和數學去計算,你以為只有後端會做這種事嗎 XD

我講一下我的版本的前端和後端:

1.商業上

就商業上後端通常會更接近 Domain Know How,不管是哪一個領域的 Know How都會不太一樣,而且都會反映到資料結構和流程上面。再來就是不同 Scale的使用量在 infrastructure上又是完全不同的世界。很多東西也只能在業界中特定的level裡才能夠接觸的到。由於世界就是這麼大,在中型以上公司中後端這個詞會顯得很模糊,可能就會出現SRE、DevOps、DBA、MIS 叭啦叭啦。

從這個角度看前端就單純得多,通常前端已經透過 api 來取得資料,離 Domain Know How就比較遠了,但是會直接面對 End User,也就是說重點其實是在 UI 和 UX。UI/UX是一個比較新一點的名詞,古早時期講的是「切版」和「接API」,用最簡單的語言(省略掉一千字)來講現代和古代的差異就是差在「複雜度」而已,當複雜度到一定程度就可以把網頁當作是一種 app了,差別只在於應用程式使用 OS 的 API 而網頁使用 Web API,而且根據統計現在前端工程師的平均薪資也比手機app工程師還要來得高,可見其複雜度不可同日而語(我自己也寫過一點 app也上架過 app所以也不完全是鍵盤俠 XD)。再回到 UI/UX,當公司有重視到使用者體驗或一些門面問題,前端角色必然就會變得更重要,隨著重視程度增加,就會開始獨立出 Designer、UX Designer、UX Researcher等。

2.技術上

從技術上來看,後端的重點在「資料結構」和「系統設計」,這些知識對於本科系出身的人來說確實更有優勢,但實際上來說多靠工作經驗中學習,本科系優勢隨著出社會幾年後很快就會不見了。由於後端範圍廣泛,每個人走的路都會不太一樣,以我有限經驗沒辦法提出什麼精闢的見解 XD,但就我的觀察通常來說在小公司會比較著重整體系統架構和維運的知識,對技術的要求也沒那麼深入,在大公司很多也不見得能負責到什麼很重要的工作;所以通常來說很多人會選擇2~3年換一次工作來累積自己在不同面向的工作技能和實力。但我的意思也不是說前端不需要2~3年換一次工作,比較像是後端的職涯發展上多元一些會需要更多不同的角色變換來累積經驗,以及走出自己的道路。

從技術上來看前端的話,前端比較像是大家看的到的那個冰山,後端像是水面下看不到的冰塊。雖然水面上的冰山體積沒有水面下來得大,但是拋頭露面的代價是要能應付這個變化愈來愈快的世界,每一年都有新的設計趨勢,每一年都有新的商業應用,要怎麼討好使用者前端都首當其衝,也就因此前端會更著重在於「工具使用」的技能,在幾年前前端框架的戰國時期有人就戲稱每一天起床都會有新的前端框架誕生,畢竟什麼都要自己來造輪胎就太慢了,積極使用最新技術才跟得上時代進步速度。再來還有一個比較少人注意到的就是軟實力的部份,前端工程師不是要寫 code而已,前端是和後端、和設計師之間的橋樑,除了溝通能力外、還會需要一些設計思維,才能夠和設計師緊密合作。

3.比較

很多人對於前端工程師的印象會停留在前端很多轉職、非本科系等等,就覺得技術門檻沒那麼高,但真的是這樣嗎?就我前面提到的前端更著重在「工具使用」上,為跟上時代快速變化加上社群的發達,多數人思想上都比較開放多元一些,會更鼓勵和包容不同背景一人一起加入學習。但你如果想要進一步提升自己的時候就會遇到見山不是山的問題,要更進步還是需要去學習底層的知識。寫程式的本質是一樣的,軟體工程中常見的名詞前端所要學的和後端可能不太一樣,卻不會少,我第一份工作學 Angular.js 從第一天開始就被主管要求學什麼是 MVVM,什麼是依賴注入,因為這兩個都是 Angular.js 的核心邏輯;Vue有用到 Observer Pattern;React 主打 Functional Programing,Angular 喜歡寫 OOP(OOP和FP的戰爭就是這樣開始);為提高邏輯的 reuse 最新的 Vue3和 React 也用各自的方式實作 Composition Pattern;再來前端使用狀態機幾乎都是標配,你後端有用到狀態機嗎(怒 XD)。這樣你要說軟工的東西是後端工程師在學的我是黑人問號。

因為分工上已經把互動的部份切到前端來做,所以前端有一大堆狀態管理上衍生出來的 issue,但後端 API 基本上主流的寫法通常都是 stateless的,一個input就會有同樣的output,API Service程式邏輯上反而沒那麼複雜,通常會比較著重在「資料結構」的設計上。但 API service只佔後端的一小塊,背後冰山下infrastructure的那一大塊才是後端奧妙之處,整個抽象化來看也就是所謂「系統設計」。就我有限的後端經驗來看,後端通常比較不喜歡處理變動性的問題,尤其是 Table Schema最好能不動就不要動,資料庫爛掉的話辦公室行李大概可以直接打包回家了,我記得我第一份工作常常待到半夜很多都是為了後端問題,辦公室裡剩下自己一個人拯救資料的的心情還記憶猶新。當然新的開發者也比較不會像以前的老工程師一樣抱著那種能不改就不要改的想法,有很多人開始投入 DevOps,其中 DevOps大多是由後端轉過去或者兼著做的,因為 DevOps裡面很重要的一塊CI/CD需要從整個系統架構來做設計。

4.總結

就整體來說,傳統的後端工程師會顯得較保守一點,相較來說前端因為發展的比較近期一點所以保守派也較少。但每間公司和每個人個體差異其實很大 - 寫前端也很多人只套框架但不學背後知識,很快就停止學習了;寫後端也很多新潮的框架、技術和社群、擁抱變動。如果要說哪個門檻比較低,那也只是因為只看到最低門檻而已,而且這種事情就是互為因果的問題,當你覺得某件事情不重要 → 那他就會變得不重要 → 最後他就真的不重要了。