前端難 OR 后端難?八年后端開發(fā)有話說
這個問題我被私信過至少 50 次,每次技術(shù)交流會也必定有人問。今天就從我八年后端開發(fā)的角度,掰扯掰扯這個老生常談的話題。
先說結(jié)論:都不容易,但難的點完全不一樣。
我為什么有資格聊這個話題
2018 年大學(xué)畢業(yè),第一份工作是在一家傳統(tǒng)軟件公司寫 Java。那時候前后端還沒完全分離,我經(jīng)常要寫 JSP 頁面,跟前端的界限很模糊。后來跳槽到互聯(lián)網(wǎng)公司,開始純后端開發(fā),從 Spring Boot 到微服務(wù),從 MySQL 到 Redis 集群,從單機部署到 K8s,該踩的坑基本都踩過了。
這八年里,我跟至少 20 個前端同事合作過,從 90 后到 00 后,從 Vue 黨到 React 粉,也算是見證了前端圈的風(fēng)起云涌。更重要的是,我業(yè)余時間寫項目時也會寫點前端代碼,對兩邊的痛苦都有體感。
前端的難:看得見的復(fù)雜度
技術(shù)棧焦慮是真實存在的。我認(rèn)識一個前端朋友,工作三年換了四次技術(shù)棧:從 Angular.js 到 Vue 2,再到 React,最后到 Vue 3。每次換工作都像重新學(xué)習(xí)一門語言。不像大部分 Java 后端,Spring 那套東西學(xué)會了基本可以吃一輩子。
但前端的難不只是技術(shù)更新快。真正讓我佩服前端同事的是,他們要在有限的瀏覽器環(huán)境里,實現(xiàn)各種"不可能"的需求。產(chǎn)品經(jīng)理拿著 App Store 上的炫酷動效說:"網(wǎng)頁能不能也做成這樣?"然后前端就要用 CSS 和 JavaScript 硬擼出來。
我印象最深的一次,產(chǎn)品要求做一個類似 Excel 的在線表格,支持萬行數(shù)據(jù)的流暢滾動。前端同事為了優(yōu)化虛擬滾動,研究了兩周的瀏覽器渲染機制,最后用 Canvas 重寫了整個組件。那種對性能細(xì)節(jié)的把控,真的不是隨便誰都能做到的。
前端要對用戶體驗負(fù)責(zé)。前端動畫卡頓一下,用戶立馬就能察覺。我們后端寫的 bug,大不了返回個錯誤碼;前端的 bug,用戶截圖就發(fā)到群里了。
后端的難:藏在深處的復(fù)雜度
后端的難是系統(tǒng)性的。從初級開發(fā)到高級開發(fā),每個階段都有不同的坑等著你踩。
- 初級:技術(shù)基礎(chǔ)不扎實,SQL、異常處理、并發(fā)等基本問題
- 中級:業(yè)務(wù)邏輯復(fù)雜,狀態(tài)管理、事務(wù)處理等業(yè)務(wù)相關(guān)問題
- 高級:系統(tǒng)架構(gòu)設(shè)計,微服務(wù)拆分、分布式系統(tǒng)等架構(gòu)問題
- 資深:業(yè)務(wù)架構(gòu)和團隊協(xié)作,平衡各方面需求的綜合能力
復(fù)雜的業(yè)務(wù)邏輯往往比技術(shù)實現(xiàn)更頭疼。一個看似簡單的"轉(zhuǎn)賬"功能,涉及賬戶狀態(tài)檢查、余額校驗、風(fēng)控規(guī)則、手續(xù)費計算、匯率轉(zhuǎn)換、稅務(wù)處理、審計日志,還要考慮各種異常情況:網(wǎng)絡(luò)中斷怎么辦?數(shù)據(jù)庫宕機怎么辦?第三方接口超時怎么辦?
還有運維和數(shù)據(jù)安全的壓力。前端部署就是打個包上傳 CDN,后端部署要考慮數(shù)據(jù)庫遷移、服務(wù)依賴、灰度發(fā)布、回滾策略。安全問題更是如履薄冰,SQL 注入、權(quán)限繞過、數(shù)據(jù)泄露,任何一個疏忽都可能導(dǎo)致嚴(yán)重后果。
其實最大的誤區(qū)是:覺得對方簡單
后端看前端:"不就是寫寫頁面調(diào)調(diào)接口嗎?"這是最大的偏見?,F(xiàn)代前端工程師要掌握的技能棧不比后端少:組件化開發(fā)、狀態(tài)管理、構(gòu)建優(yōu)化、性能監(jiān)控、自動化測試、CI/CD,哪一個都不簡單。
前端看后端:"CRUD boy 天天增刪改查有什么技術(shù)含量?"這也是誤解。業(yè)務(wù)系統(tǒng)的復(fù)雜度往往體現(xiàn)在數(shù)據(jù)流轉(zhuǎn)、狀態(tài)管理、異常處理上,表面的 CRUD 背后可能是復(fù)雜的業(yè)務(wù)規(guī)則和技術(shù)架構(gòu)。
我覺得最好的合作狀態(tài)是互相理解對方的難處。前端理解后端為什么接口設(shè)計會有限制,后端理解前端為什么有些需求實現(xiàn)起來困難。
從市場需求和薪資看:各有機會
前端的優(yōu)勢:需求量大,入門相對容易,能快速出成果。特別是現(xiàn)在大前端的概念,React Native、Flutter、小程序,前端的邊界在不斷擴大。而且前端更容易轉(zhuǎn)向產(chǎn)品、設(shè)計等崗位,職業(yè)道路相對多元。
后端的優(yōu)勢:技術(shù)積累更有持續(xù)性,核心技術(shù)變化相對慢,越老越值錢。而且后端更容易理解業(yè)務(wù)邏輯,在技術(shù)管理和架構(gòu)設(shè)計方面有優(yōu)勢。從我身邊的情況看,后端轉(zhuǎn)技術(shù)管理的比例確實更高一些。
薪資方面,其實都差不多。前端在一二線城市需求旺盛,薪資漲得快;后端在傳統(tǒng)行業(yè)和 B 端市場更有優(yōu)勢。真正拉開差距的不是技術(shù)棧,而是個人能力和機遇。
我的建議:選擇比努力更重要
如果你還在糾結(jié)選哪個方向,我建議你問自己幾個問題:
你是愿意每隔幾年就學(xué)習(xí)新技術(shù),還是希望在一個技術(shù)棧上深耕? 你是喜歡看到即時的視覺反饋,還是更享受解決復(fù)雜邏輯問題的成就感? 你是外向型喜歡跟產(chǎn)品設(shè)計打交道,還是內(nèi)向型更適合專注于技術(shù)本身?
如果你已經(jīng)選定了方向,我的建議是:不要只做增刪改查,要主動尋找有挑戰(zhàn)性的項目。前端可以深入研究性能優(yōu)化、工程化建設(shè);后端可以關(guān)注分布式系統(tǒng)、高并發(fā)架構(gòu)。技術(shù)深度比技術(shù)廣度更重要。
最重要的是:保持學(xué)習(xí)的熱情。這行最不缺的就是新技術(shù),最需要的是持續(xù)學(xué)習(xí)的能力。我見過寫了十年代碼還在用五年前技術(shù)的"老油條",也見過工作兩年就能獨當(dāng)一面的"技術(shù)新星"。差距在哪?在于是否保持了對技術(shù)的好奇心和學(xué)習(xí)動力。
寫在最后
八年后端開發(fā)經(jīng)歷讓我明白,技術(shù)選擇沒有對錯,只有適不適合。前端和后端都是為了解決實際問題而存在,都有自己的價值和意義。
與其糾結(jié)哪個更難,不如想想自己能為這個行業(yè)創(chuàng)造什么價值。技術(shù)是手段,解決問題才是目的。無論選擇前端還是后端,都要記住我們的使命:用代碼讓世界變得更美好一點。