人(rén)
已閱讀(dú)
已閱讀(dú)
APP開(kāi)發公司的(de)前端團隊如(rú)何技(jì)'±✘術(shù)積累?
來(lái)源:lexintech.com 發布時(shí)₩¥↕♣間(jiān):2017-08-24
在APP開(kāi)發公司中,前端是(shì)必不(bù)可(kě≤©)缺的(de)崗位。有(yǒu)的(de)深圳APP開(kāi)發公司比較重視(shì)前端設計(jì),前端團隊實力還(há©'i)是(shì)比較強的(de)。樂(yuè)信科(kē)技(jì)lexintech就(jiù)是(shì)一(yī)≈α♥家(jiā)注重産品設計(jì)的(de)深圳APP開(kāi)發公司。下(xià)面樂(yuè)信小(xiǎo)編"Ω 跟大(dà)家(jiā)聊一(yī)聊前端團隊如(rú)何進行(xíng)技≥♦★(jì)術(shù)積累。

前端是(shì)個(gè)挺特别的(d∏∏e)崗位,一(yī)方面它的(de)技(jì)術(shù)棧α®α更新幾乎是(shì)軟件(jiàn)開(kāi)發領域中₩♦最快(kuài)的(de),但(dàn)另一(yī)≤≈方面它的(de)不(bù)可(kě)替代性相(xiàng↓βπ)對(duì)而言卻并不(bù)算(suàn)高(gāo)。×₽"并且,雖然多(duō)數(shù)APP開(k<× āi)發公司都(dōu)有(yǒu)相(xiàng)對(duì)獨立的(≤♣de)前端團隊,但(dàn)團隊多(duō)半都(dōu)有(yǒu★♦✔♥)不(bù)少(shǎo)業(yè)務負擔,加上(shàng)前>'端較高(gāo)的(de)叠代速度,一(yī)線業(yè)₩☆™©務同學的(de)成長(cháng)多(duō)少(γ¥"shǎo)容易遇到(dào)些(xiē)瓶頸:•↓需求都(dōu)做(zuò)不(bù)完了(le),還(hái)有(yǒu)₽β時(shí)間(jiān)讀(dú)源碼解析嗎β(ma)?
其實我們都(dōu)知(zhī)道(dào),個(gè↔Ω)人(rén)成長(cháng)和(hé)團隊成長(≈₹cháng)是(shì)分(fēn)不(bù)開(kā©ε←✘i)的(de)。一(yī)方面在技(jì)術(shù) €¶✘氛圍較好(hǎo)的(de)團隊中個(gè)人(rén)的(dβ€☆πe)進步會(huì)更快(kuài),另一(yīφ☆)方面團隊的(de)技(jì)術(shù)積累也φ¶(yě)是(shì)由一(yī)個(gè)個(gè)成員(yuán∏β)們貢獻出來(lái)的(de)。這(zhè)就(jiù∞λ)引出了(le)我們的(de)問(wèn)題:在業(yè)務團隊中∞¶,有(yǒu)什(shén)麽方法能(néng)讓個(gè)人£★(rén)和(hé)團隊在叠代中都(dōu)得(de)到(dào)更好(hǎo↔ ≥)的(de)成長(cháng)呢(ne)?
能(néng)想到(dào)最簡單的(de)答(dá)案應該就(jiù)是♥ ≥(shì)「定期技(jì)術(shù)分(fēn)享」和(Ω♠× hé)「不(bù)加班,給大(dà)家(jiā)更≥☆♦多(duō)的(de)學習(xí)時(shí)間(j ×λεiān)」這(zhè)樣的(de)吧(ba)。不♠∏& (bù)隻是(shì)前端,相(xiàng)信這(zhè)肯定也(♣¶yě)是(shì)廣大(dà)開(kāi)發同學們喜聞樂(yuè)見(jλ✘iàn)的(de)。可(kě)惜業(yè)務壓 ∞力擺在那(nà)裡(lǐ),如(rú)果個(gè)人(rén)學習®$(xí)影(yǐng)響了(le)短(du₹>∑$ǎn)期內(nèi)的(de)團隊産出,那(nà)麽老(φ∞¶lǎo)闆們的(de)臉色也(yě)許會(huì)♣有(yǒu)些(xiē)微(wēi)妙…&h¶δ≠ellip;從(cóng)另一(yī)個®γ>(gè)角度上(shàng)來(lái)說(shuō),前端同學提升技(∞♣jì)能(néng)水(shuǐ)平所需學習(xí)的(de)各種模式、框∞§架、類庫、工(gōng)具,在開(kāi)源社區(qū↕→ ™)都(dōu)有(yǒu)非常詳盡的(de)文(wén)檔和(hé)教程,σ♥α如(rú)何提升個(gè)人(rén)能(néng)力的(de)★'話(huà)題也(yě)更不(bù)是(shì)本文(wén)所能(n∞÷éng)覆蓋的(de)。不(bù)過,如(rú)果一(yī)個(→λgè)前端團隊能(néng)夠通(tōng)過一(yī)些(xiδ$✔₹ē)技(jì)術(shù)層面上(shàng)的(de)方式,培養出由團隊成←™☆員(yuán)共建的(de)良好(hǎo)技(jì)術(φ shù)基礎的(de)話(huà),相(♣ ≈₽xiàng)信老(lǎo)闆們和(hé)開★☆(kāi)發同學們都(dōu)可(kě)以接受∞©≤©吧(ba)。這(zhè)其實也(yě)正是(sh♥ ₹∞ì)本文(wén)所關注的(de)。
在介紹「怎麽做(zuò)」之前,我們不>÷(bù)妨考慮下(xià)「做(zuò)什(shén)麽」,即在什(shén)&♠Ω麽方向上(shàng)去(qù)培養技(jì)術(shù)積↔"™累呢(ne)?
我們知(zhī)道(dào) Full Stack Deve₹→ §loper 的(de)概念一(yī)直很(hěn)火(huǒ),那(nà)麽→φ•按照(zhào) Full Stack 的(de)概念<↑€,前端團隊的(de)所需的(de)技(jì)術(shù)積累是(shì•"♣)怎樣的(de)呢(ne)?這(zhè)意味著(zhe)前端團隊需要(yào )橫向地(dì)擴展自(zì)己的(de)能(néng)力,拉通(tōng)≥Ω DB 到(dào) HTML 的(de≥₽)流程。技(jì)術(shù)棧覆蓋面廣自(zì)然是(shì)好•> (hǎo)事(shì),可(kě)是(shì)為(wèi)什(shén)麽≥Ω§還(hái)是(shì)經常能(néng)夠聽(tīng)©σ✘見(jiàn)對(duì)全棧的(de)争議(y↓ ì)呢(ne)?
在很(hěn)多(duō)需要(yào)快(kuài)速叠代實現(xiàn£♣)原型的(de)場(chǎng)合,這(zhè♦δπ')樣的(de)能(néng)力模型是(shì)很(hěn)合适的(de)。₹®¶問(wèn)題在于在一(yī)個(gè)系統的(d∑φ≥e)開(kāi)發中,多(duō)數(shùλ↑§™)情況下(xià)團隊成員(yuán)負責開≈γ(kāi)發的(de)是(shì)獨立的(de)模塊。而按☆"←照(zhào)信息隐藏的(de)理(lǐ)α÷≥念,而隻有(yǒu)在代碼模塊采用(yòng₩ε↓)定義良好(hǎo)的(de)接口來(lái)封裝,模塊'®δ'的(de)內(nèi)部結構對(duì)外(wài)部≈§$β不(bù)可(kě)見(jiàn),複雜(zá)度被屏蔽而非暴露在他(tγ↕ā)人(rén)模塊內(nèi)部結構前的(de)→≤時(shí)候,開(kāi)發的(de)效率才是(shì)最≤'高(gāo)的(de),也(yě)并不(bù)是(shì)團隊✔£中所有(yǒu)成員(yuán)都(dōu)需要(yào)了(le)解系統整體×₩✔≈(tǐ)的(de)技(jì)術(shù)細節。并且,前端本身(sh ₹♦ēn)也(yě)是(shì)對(duì)開(kāi)發♣∞×ε職能(néng)分(fēn)工(gōng)的(de)細化(huà),在後端有(↑βΩyǒu)成熟穩定團隊的(de)前提下(xià),前端在團隊層面按照(zhε ào) Full Stack 的(de)方向♦積累技(jì)術(shù),在投入和(hé)産出上(shàng ♦♥)未必是(shì)最優的(de)。當然,這(zhè)和(hé★φ€₹)許多(duō)大(dà)廠(chǎng)「隻招全棧」✘"的(de)理(lǐ)念并不(bù)矛盾,畢竟在個(gè)人(δ"$rén)開(kāi)發者層面的(de)全棧所真正要(yào)求 ↓™§的(de)并不(bù)是(shì)雜(zá)而→¥∞全,而是(shì)高(gāo)效地(dì)σ≈解決各類問(wèn)題的(de)學習(xí)能♥"γΩ(néng)力,以及對(duì)技(jì)術 €(shù)更加全面的(de)深入。
這(zhè)種模式下(xià),前端的(de)α←£職責并不(bù)僅僅局限在傳統的(de)客戶端♣β♦€ HTML + CSS + JS 中,而是(shì)一(yī)系列與用(y≥ òng)戶交互相(xiàng)關的(de)技(jì)術(shù)合集。這(zh "∑è)個(gè)背景下(xià),可(kě)以∑α$把前端團隊理(lǐ)解為(wèi)一(yī)個(gè)垂直↓♥€的(de)功能(néng)性的(de)團隊,技(jì)術(shù)積♥™累上(shàng)也(yě)是(shì)更多(duō)地(dì)圍繞著(zh•★∞Ωe)我們所面對(duì)的(de)業(yè)務問(wèn)題去(qù)↓™做(zuò)沉澱。套用(yòng)《人(rén)月(yuè)神話(h∑★uà)》裡(lǐ)外(wài)科(kē)手術(>•✘shù)式團隊的(de)概念,如(rú)果說(shuō)全棧的(™<↔de)角色更接近(jìn)于全能(néng)的(de)「外(wài)科(k≈'ē)醫(yī)生(shēng)」的(de™¶)話(huà),那(nà)麽 Full Life Cycle Engineer 則更接近(jìn)于縱向深入的(de)「代碼專↔ λ家(jiā)」。
圍繞著(zhe)這(zhè)個(gè)理(lǐ)念展開©✘(kāi),不(bù)難發現(xiàn)許多(duō)技(jì∏∞)術(shù)點是(shì)在團隊層面上(shànβλγg)可(kě)以去(qù)做(zuò)積累的(de)。那(n€£à)麽是(shì)否有(yǒu)必要(yào)去(qù)積累團隊內(↑&nèi)部的(de)輪子(zǐ),又(yòu)在什(shén₩←♠γ)麽方向去(qù)做(zuò)呢(ne)?
這(zhè)其實視(shì)團隊情況不(bù)同,是(shì)非× ∏↔常業(yè)務驅動的(de)。比如(rú),維護 C 端産品的(de)♠∏團隊,可(kě)能(néng)更需要(yào)性能(né∑✔ ×ng)優化(huà)、監測告警方向的(de)輪子(zǐ),而¶£¥開(kāi)發 B 端中後台産品的(de)團隊,對(duì)狀态管理(lǐλ)、統一(yī)組件(jiàn)庫一(yī)類的(de)±≠♣輪子(zǐ)需求度則會(huì)更高(gāo)。在深入業(yè→"→≤)務的(de)過程中,幾乎總能(néng)找到(d§φ ào)特定的(de)場(chǎng)景能™γ☆(néng)夠抽取出特定的(de)複用(yòng)模塊,÷♣®或找到(dào)适合針對(duì)性優化(huà)的(d¶σe)地(dì)方,這(zhè)其實就(jiù)相(xiàng)當于技(♠¶ ¥jì)術(shù)積累的(de)起點了(le):在業(yè)務驅動下(x>∏©≤ià)開(kāi)始造(甚至發明(míng))團隊•☆¥$內(nèi)部的(de)輪子(zǐ)。其實造±♣>輪子(zǐ)對(duì)技(jì)術(shù)積累的(π♣≤φde)促進,并不(bù)僅僅體(tǐ)現(x€✘iàn)在實現(xiàn)輪子(zǐ)這(zhè)件(jiàn)事(s∏↑♥↓hì)本身(shēn)。比如(rú),即便是(shì)一(yī)個(gè)ש非常簡單的(de) UI 按鈕,在将它實現(☆₩λλxiàn)為(wèi)可(kě)複用(yòng•)的(de)代碼時(shí),所需要(yào)做(zuò)出的(de)工λ→∏(gōng)程化(huà)努力都(dōu)可(₩$™kě)以是(shì)很(hěn)深度的(de)。比如(rú),即便一(yī)ε↑開(kāi)始隻在團隊內(nèi)部使用(yòng),AP∏₹↔I 設計(jì)得(de)簡單沒有(yǒu)關系♥✔,但(dàn)作(zuò)為(wèi)一(yī)個(gè)可(kě)複用("₽•yòng)的(de)模塊,怎麽樣讓使用(yòng)者不(bù)需要(&♦¶yào)讀(dú)源碼就(jiù)能(né♥♥"ng)用(yòng)呢(ne)?這(zhè)時(shí)候我們需要(yà≈φo)最基本的(de)文(wén)檔;怎麽樣保證升級後σ" API 穩定呢(ne)?這(zhè)時(shí)Ω ★β候單元測試就(jiù)體(tǐ)現(xiàn)出了(le)意義;↓₽★β發布為(wèi)模塊的(de)話(huà♥ ),樣式怎樣和(hé)組件(jiàn)一(yī)起提供呢(ne★¥→)?這(zhè)時(shí)候需要(yào)的(de)是(sh♣→ì)構建流程……這(₽β€zhè)些(xiē)和(hé)基本業(yè)務邏輯并不(bù)直接'≠ε≈相(xiàng)關的(de)工(gōng)程化(huδ₹à)內(nèi)容,即便隻是(shì)開(kā♣" i)發出一(yī)個(gè)簡單的(deφ)內(nèi)部輪子(zǐ)時(shí)都(dō±γπu)可(kě)以漸進地(dì)去(qù)考慮和(hé)實現(xiàn)。并↔§ 且,這(zhè)些(xiē)工(gōng)程化(δ huà)的(de)特性也(yě)正是(shì)做(zuò)技(j¥÷✘ì)術(shù)積累的(de)良好(hǎ→♥₽§o)切入點。
如(rú)果編寫的(de)代碼都(dōu)是(shì✘™)不(bù)需要(yào)複用(yòng)的(de)「一σ≠(yī)次性」代碼,那(nà)麽文(wén)檔就(jiù)是(s>αhì)多(duō)餘的(de);如(rú)果實現(xià©¶•♣n) UI 邏輯隻是(shì)為(wèi)了✔←(le)滿足基本的(de)業(yè)務需要(yào),那σ₹ (nà)麽實際上(shàng)是(shì)沒≈<∏有(yǒu)什(shén)麽機(jī)會(huì)和(hé)必要( ÷yào)去(qù)将單元測試落地(dì)的(de)π ;如(rú)果最終打出的(de)包始終隻是(shì)面向用(yòng)戶而非>≤ε面向開(kāi)發者,那(nà)麽甚至也(yě)不(bù)→×需要(yào)考慮 dependency 和(hé) devDepen>♠&dency 的(de)區(qū)别…工(gōng)作(z≥$"φuò)內(nèi)容限制(zhì)在一(yī)個(gè)狹窄的(d®<÷>e)子(zǐ)集內(nèi)的(de)時(shí)候,成→★®¶長(cháng)顯然是(shì)會(huì)受限的(de)。
當然,以上(shàng)引入的(de)工(g☆">ōng)程化(huà)特性客觀上(shàng)都(dōu)需要(yào)時(≈•shí)間(jiān)投入,也(yě)不(bù)免會(huì)有(y≥β&ǒu)重複造輪子(zǐ)浪費(fèi)人(rén)力之嫌βδγ₹。這(zhè)時(shí)如(rú)何去(qù)♠≈φβ做(zuò)權衡和(hé)取舍呢(ne)?&∞
我們不(bù)妨評估一(yī)下(xià)引入新↔φ輪子(zǐ)的(de)投入和(hé)産出。比如(≠§↓rú),分(fēn)析一(yī)個(gè)沒有₹×☆$(yǒu)積累公共組件(jiàn)或依賴第三方組件(ji♠ £àn)庫的(de)團隊,是(shì)否有(yǒu)開(k>$→āi)源項目中未能(néng)提供的(de) UI 組件$φ(jiàn),這(zhè)些(xiē)組件(jiàn)是(shì)否有(yǒu↑>)複用(yòng)的(de)可(kě)能(néng)性¶•和(hé)條件(jiàn)呢(ne)?如(rú)果有(yǒu)的(de)≠←話(huà),引入工(gōng)程化(huà)的(de)發布流程會( ∞huì)帶來(lái)多(duō)少(sh₩↓φ"ǎo)時(shí)間(jiān)成本,是(shì)否Ω↕能(néng)夠方便其他(tā)同學在後續的(de)使用(yòn←±g)中節約回來(lái)呢(ne)?再比如(rú),是(shì)否存在業(y↕↕è)務場(chǎng)景是(shì)現(¶∞xiàn)有(yǒu)的(de)開(kāi)源輪©♣子(zǐ)不(bù)能(néng)完全符合需求的(de)?如(rú)果自(γ♦®'zì)己動手,能(néng)夠收獲多(duō)少(sh☆ ǎo)易用(yòng)性或性能(néng)上γ±(shàng)的(de)提升呢(ne)?畢竟造輪子(zǐ)也(yě↑∑₩)是(shì)工(gōng)程,而工(gōng)程問(wèn)題總是(shì)$>¥可(kě)以評估、分(fēn)析和(hé) T✘£radeoff 的(de)。
實際上(shàng),前端領域中,由于業(yè)務場(chǎn₹×>♠g)景的(de)多(duō)樣性,開(kāi)源輪子(zǐ)不(≥"♦bù)能(néng)完全匹配實際需求的(∏ de)情況是(shì)很(hěn)常見(jiàn)的(de)。比如(rγ✔φú),Redux 是(shì)個(gè)用(yòng)來(láiα&€)支持複雜(zá)應用(yòng)的(de)狀态管理(lǐ)↑♣Ω≠庫,在增查改删的(de)後台應用(yòng)中使用(yòng)起來(lái)ε≠≠★十分(fēn)沉重;實現(xiàn)不(bù)需考γπ 慮兼容的(de)簡單頁面時(shí),自♥≤ (zì)己封裝出的(de)簡單 DOM 操作(zuò)庫肯₽→定比 jQuery 或 Zepto 更加輕量σ♦;封裝登錄認證庫時(shí)如(rú)果全部交互都®≥ (dōu)通(tōng)過 JSONP,那(nà)麽依賴 fetch poly↕∏"fill 或 axios 的(de)成本還(há®εφi)不(bù)如(rú)直接實現(xiàn)&hel§>₹lip;…熟悉業(yè)務後,這(zhè)樣的(d>π$e)場(chǎng)景總是(shì)容易發現(x∞ €iàn)的(de)。
- 上(shàng)一(yī)篇:APP開(kāi)發如(rú)何基于場(chǎng)景做(≥•zuò)設計(jì)?
- 下(xià)一(yī)篇:APP開(kāi)發如(rú)何選擇合适的(de)技(jì)術(shù)¥δ★架構?
- > 開(kāi)發網站(zhàn)或APP是(shì)用(yòng)JAVA好($ hǎo)還(hái)是(shì)PHP好☆× (hǎo)?
- > 找外(wài)包公司開(kāi)發APP有(yǒu)哪∞$§些(xiē)注意事(shì)項?
- > 想創業(yè),别再盲目開(kāi)發APP了(←§le)!
- > 開(kāi)發一(yī)個(gè)APP多(duō)少(shǎo)錢(qi♦♠án)?
- > 開(kāi)發一(yī)個(gè)APP多(du®$ ō)少(shǎo)錢(qián)?
- > 跟外(wài)包公司合作(zuò)怎麽樣才能(néng)做φ★≈(zuò)好(hǎo)一(yī)款APP?