【小(xiǎo)編推薦】ThoughtWork<ε•s黃(huáng)峰達:利用(yòng)✔≥∏橫向擴展方式,快(kuài)速學習(xí)前端新框架∞♠δ™

2015-07-18  &nbs £↓p;|   發布者 ×☆÷:梁國(guó)芳   | ★→ ;  查看(kàn):3320次

IT新聞
 黃(huáng)峰達,ThoughtWorks軟件(®∑jiàn)開(kāi)發工(gōng)程師(shī),自(zì)小(xiǎ‌$≠ o)開(kāi)始接觸軟件(jiàn)編程,目前主要(yào)專注↑£ε​于物(wù)聯網、前端開(kāi)發領域。喜歡寫技(jì)術(∏αshù)文(wén)章(zhāng),分(fēn)享研發收獲,長(chángπ€​)期活躍于CSDN、SegmentFault、Github等網€↑♥™站(zhàn)。現(xiàn)在正發起一(yī)個(gè)∞±' 旨在幫助前端人(rén)員(yuán)進步的(de)項目(https://github.com/artisan£☆₩stack),歡迎圍觀。

該采訪中,黃(huáng)峰達介紹了(le€δ↑>)他(tā)在前端開(kāi)發領域的(de)學習(xí)經驗和(hé)方法§×β 技(jì)巧,他(tā)表示前端是(shì)一(yī)個(gè)入門(¥<mén)簡單、精通(tōng)愈難、競争激烈的(de)領域,前端開(kāi)發≤' §人(rén)員(yuán)除掌握前端知(zα"→☆hī)識外(wài),也(yě)應了(le)解& λ後端技(jì)術(shù),代碼整潔、測試更是(shì)前端開β←(kāi)發人(rén)員(yuán)實現(xiàn)進階的(☆•≤∑de)重要(yào)技(jì)能(néng)σ±↓&。


可(kě)聯系chenqg@csdn.net,接受【前✘♠端人(rén)生(shēng)】欄目專訪

 

CSDN:首先請(qǐng)做(zuò)一(yī)個(gè)自(zì)>∏±我介紹

黃(huáng)峰達:大(dà)家(jiā)好(hǎo),我叫黃(huáng)÷ ™峰達,畢業(yè)于西(xī)安文(wén)理(lǐ)學院電(d₹α∏iàn)子(zǐ)信息工(gōng)程專業(yè),現(xiàn)就(ji∏♥ ✘ù)職于ThoughtWorks軟件(jiàn)公司。我是(sh★δ♠λì)一(yī)個(gè)從(cóng)小(xiǎo)& ♣ 學就(jiù)開(kāi)始玩(wán)編程(logo語言)≈§β的(de)程序員(yuán),興趣比較廣泛,目前主要(yào)專注于物 £ (wù)聯網、前端開(kāi)發。長(cháng)期活躍于C♦<≥SDN、SegmentFault,常常寫寫技(jìφ¥)術(shù)文(wén)章(zhāng),刷刷Github。

CSDN:您什(shén)麽時(shí)候開(♥÷kāi)始投入到(dào)前端開(kāi)發φ↓領域?背後有(yǒu)什(shén)麽樣的(de ✔↓)故事(shì)?

黃(huáng)峰達:大(dà)一(yī)時(shí)認識了(le)一(yδ♦ī)個(gè)朋(péng)友(yǒu),在後來(lái)的(de)大(<≤dà)學期間(jiān)裡(lǐ)我們常常搭檔拉一(yī≤ε☆)些(xiē)私活、做(zuò)一(yī)些(xλ•iē)網站(zhàn)。大(dà)一(yī)暑假時(shí),我就(jiù>£)嘗試向幾家(jiā)網絡公司投了(le)簡曆,并獲得(<αde)了(le)一(yī)個(gè)關于前端的(de)實習(xí)機(jī)♥γ會(huì)。大(dà)二時(shí),γπ¶我們開(kāi)始租用(yòng)Linux服務‌Ω器(qì),做(zuò)一(yī)些(xiē)Web應用(y¶↓∑òng),正式踏上(shàng)了(le​★₽)我們的(de)旅途。由于自(zì)己有(yǒ>♥÷¶u)一(yī)些(xiē)美(měi)術(shù)基礎,能"β‍✘(néng)同時(shí)勝任設計(jì)及頁面實現λ₩(xiàn)工(gōng)作(zuò),便做(zuò)起了(le)前端的♣ε&σ(de)工(gōng)作(zuò)。再後來(lái)開(k£βāi)始關注Node.js,由衷的(de)感受到(dào)前端技(jì)術✔&±±(shù)猶如(rú)百花(huā)齊放ε✘♥(fàng),便開(kāi)始深入技(jì)術(shù)基礎。

CSDN:您是(shì)如(rú)何積極參與推動前↔£™端技(jì)術(shù)發展的(de)?如(rú)有(yǒu)↓¶®無相(xiàng)關演講、書(shū)籍、博文(wén)、社區(qū)活動 σ等。

黃(huáng)峰達:說(shuō)到(dào)貢獻,大(dà)的(de)怕是¥β→(shì)還(hái)沒有(yǒu),也(yě)就(jiù)是(shìε&)寫寫一(yī)些(xiē)關于前端測試、φ✔開(kāi)發的(de)文(wén)章(zhāng),在一(yī)些✘±(xiē)社區(qū)寫寫新的(de)框架入門$©↓(mén)知(zhī)識等等,也(yě)會(huì)在Githubδβ∞δ上(shàng)寫一(yī)些(xiē)Demo并結合博客輸出。除此之外(π←§✔wài)正在發起一(yī)個(gè)旨在幫助前≥​>端人(rén)員(yuán)進步的(de)項目( ✘£'https://github.com/artisaλ÷φ♣nstack),該項目的(de)初衷是(shì)尋找♥"一(yī)些(xiē)代碼寫得(de)不(bù)整潔的(de)一(yī×♣★ )些(xiē)前端項目,添加測試而後對(duì)其重構。通(‌ ↕αtōng)過反複的(de)項目練習(xí)來(lái)提高(gāo)JS的(d✔£•e)代碼水(shuǐ)準。前端技(jì)術(♣ shù)在最近(jìn)幾年(nián)發展迅猛,←<☆但(dàn)很(hěn)多(duō)開(k★♥ε‌āi)發人(rén)員(yuán)并沒有(yǒ±α'‌u)與之相(xiàng)匹配的(de)項目能φ♥(néng)力。

CSDN:您目前比較關注前端的(de)哪些(xiē)技(jì)術(shù&λ♠)?平時(shí)主要(yào)通(tōng)過哪些(xiē)渠道(dào)獲∞☆$得(de)前端技(jì)術(shù)的(÷'Ω♠de)相(xiàng)關信息。

黃(huáng)峰達:目前我比較關注的(de)前端技(jì)術(shù)有(yǒu):€÷DSL、ES6 Proxy、Hybird應用(yòng•'•)。對(duì)于DSL來(lái)說(shuō)♦α™ ,我可(kě)能(néng)更關注的(de)是(♦&§§shì)抽象出領域相(xiàng)關代碼,而不(bù)是(shì)DSL本身(₽Ωshēn)。一(yī)是(shì)前端框架層出不(bù)窮,二是(shì)每隔♣♥幾年(nián)系統就(jiù)需要(yào)被重構。JavaS¥¶cript由于本身(shēn)的(de)靈活性♣γ + 函數(shù)式編程,實現(xiàn)內(nèi÷←)部DSL變得(de)比較簡單,同時(shí)在實現(xiàn)外(wài€↔☆←)部DSL方面有(yǒu)了(le)很(hěn)多(duō)的(de)參考 $Ω示例。如(rú)果我們的(de)領域層和(hé)基礎層緊耦合,那(nà)麽我♥↓β★們采用(yòng)新技(jì)術(shù)的(de)可(kě)能₽ ©(néng)性就(jiù)比較低(dī)。ES6有(yǒu)很≥σ(hěn)多(duō)新的(de)特性,但(dàn)是(sh​≈₩εì)讓人(rén)眼前一(yī)亮(liàng)的(de)就‍¶♥(jiù)是(shì)Proxy,這(zhè)門(mén)語言從(c₹ €δóng)此有(yǒu)了(le)元編程的(de)特性₽€ 。Ionic在Cordova上(shàng)封裝了(le)一(φδyī)層讓開(kāi)發變得(de)更快(kuài)捷,這(zhè)就₩ε(jiù)使得(de)越來(lái)越多(duō™©)的(de)公司開(kāi)始采用(yòn£γg)Ionic框架來(lái)開(kāi)發Hybird應用(yòng)。

關于前端技(jì)術(shù)的(de)相$α≠(xiàng)關信息的(de)來(lái)源,可(kě)能(néng↕>)會(huì)讓人(rén)有(yǒu)點失望¥ ↕™,畢竟新的(de)技(jì)術(shù)層出不(bù)窮。從$<↔(cóng)幾年(nián)前Backbone的(de)流行(x≈§≤☆íng)就(jiù)意味著(zhe),技(jì)術(shù)的(dφ‌ e)創新會(huì)基于原來(lái)的(de)技(jì)術(shù)。我會(₩‍huì)經常學習(xí)一(yī)些(x≈®iē)後端的(de)知(zhī)識,如(rú)OSGi、N'δ✔≤LP,再将這(zhè)些(xiē)知(zhī)識帶到(d←&∏γào)前端試用(yòng)。不(bù)過大(dà)抵上(shàng'​)會(huì)有(yǒu)這(zhè)樣的(••∞>de)三個(gè)來(lái)源:ThoughtWorks技γ♠☆€(jì)術(shù)雷達、公司郵件(jiàn)、Github。公司郵件(®≠φjiàn)就(jiù)不(bù)方便討(tǎo)♦∑ 論了(le),大(dà)抵就(jiù)是(shì)一(yī)些(©♠©xiē)項目的(de)Release,會(huì)附帶一(yī)∑≥些(xiē)技(jì)術(shù)棧的(de)使用(yòng)。™•™ΩGithub上(shàng)通(tōng)常會(hu×™ ì)有(yǒu)一(yī)些(xiē)趨∏'§ 勢等等,但(dàn)是(shì)都(dōu)不(bù)實用(yòng)。

在ThoughtWorks技(jì)術(sh≈λ'αù)雷達中,如(rú)果有(yǒu)一(yī)個(gè)框架處于評估的(d∞©e)狀态,那(nà)麽很(hěn)大(dà)程度上(shàng)♠→•₽意味著(zhe)這(zhè)個(gè)框架已經被公β ♦司的(de)某個(gè)項目使用(yòng)上(shàng)了(↓©Ωle)。如(rú)果有(yǒu)一(yī)個(gè)框β>架處于試驗狀态,那(nà)可(kě)能(★α§↔néng)說(shuō)明(míng)這✔±‌Ω(zhè)個(gè)框架已經在多(duō)個(gè)♠≈項目上(shàng)使用(yòng)了(le)φ≈$,如(rú)現(xiàn)在的(de)Hybird框架Ionic在♥☆÷雷達中的(de)試驗狀态,還(hái)有(yǒu)Re↕ ¥↔act.js在去(qù)年(nián)已經有(yǒu)多(du'π>ō)個(gè)項目使用(yòng)了(le)。總≈₹±的(de)來(lái)說(shuō),在技(jì)術(shù♠™)雷達中的(de)技(jì)術(shù)會(huì)α←比國(guó)內(nèi)大(dà)公司的(de)試用(yòng)£ γ$快(kuài)半年(nián)左右。

CSDN:能(néng)否談談您獲得(de)今天的(de)成就(jiù),自↕$ ¶(zì)己的(de)一(yī)些(xiē)學習(xí)方法或技(→‌jì)巧

黃(huáng)峰達:對(duì)于前端開(kāi)發人(rén)員(yuán™¥®✔)來(lái)說(shuō),大(dà)多(d>λuō)數(shù)的(de)傳統CS課程都(§'dōu)在有(yǒu)意弱化(huà)這(zhè)方面的(de$€ε)知(zhī)識,大(dà)部分(fēn)的(de)前端知(zhī)™÷λ識隻能(néng)來(lái)自(zì)于網上‍✔(shàng)的(de)內(nèi)容。

在學習(xí)新框架的(de)時(shí)候,我習(≥•∏¶xí)慣用(yòng)橫向擴展的(de)方式來(lái)學,即基于原&©Ω來(lái)相(xiàng)同領域內(nèi✔♦)的(de)知(zhī)識。如(rú)剛開(kāi)始接觸Re>'act的(de)時(shí)候,我會(hu‌♣<ì)基于原來(lái)的(de)Backbone的(d€÷¥¶e)項目代換掉View層,而後再起一(yī)個(gè)新的(de)項目用(y‌♥βòng)全新的(de)技(jì)術(shù)棧。優點是(shì)這(zhè)會Ω∑☆(huì)在某種程度上(shàng)降低(dī)學習(xí)的(de)難‌ ☆←度,同時(shí)學習(xí)速度比較快(kuà≠ i),缺點是(shì)這(zhè)依賴于原來(lái)的(de)知(zhī λ)識儲備。

在深入了(le)解代碼原理(lǐ)的(d≤ε✘φe)時(shí)候,我會(huì)從(cóng)第Ω•一(yī)個(gè)Commit開(kāi)始看( ¶<♥kàn)代碼,然後間(jiān)隔看(kàn)Relea¶‍≈se。這(zhè)比任何的(de)文(wén)檔都(dōu)清楚,同時(shí©λ×')我們在創造新輪子(zǐ)的(de)時(shí)候,會(huì)有(yǒu)一‍ε(yī)個(gè)更清晰的(de)思路(lù)。

CSDN:您目前就(jiù)職于哪家(jiā)公司?貴公司在α©研發時(shí)主要(yào)使用(yòn↔©g)哪些(xiē)前端技(jì)術(shù)?前端技(jì)術×"↔δ(shù)架構是(shì)怎樣的(de)。

黃(huáng)峰達:我在ThoughtWorks擔任軟件(jiàn)開(kāi÷↓)發工(gōng)程師(shī)。公司在 <§研發時(shí)用(yòng)到(dào)的(de)前端×δ‍§技(jì)術(shù)五花(huā)八門(mén),就(jiùφ€♣)說(shuō)說(shuō)我們項目吧(ba)。當前在我★¥σ'們項目有(yǒu)一(yī)個(gè)移動站(zhàn)點,使用(y∞↔±>òng)RequireJS來(lái)管理(lǐ)依賴,前≤Ωπ®台Backbone,後台提供API的(de)前後端分(©↕fēn)離(lí)構架。在測試方面,我們用(yòng)Jasmine來(lái® €)完成單元測試,用(yòng)Selenium作(✔↓σzuò)為(wèi)項目的(de)功能(néng)測試。↑≥

CSDN:目前公司有(yǒu)沒有(yǒu)嘗試使用(φ♣yòng)一(yī)些(xiē)熱(rè)門(mén)/新的(de)前÷÷♥端技(jì)術(shù)?公司嘗試這(zhè)些(xiē)技(jì)術(shδδ‌εù)的(de)原因是(shì)什(shén)麽?通€✔ε(tōng)過您的(de)研究,覺得(de)這(zhè)些(xiē)技(jì) ←術(shù)的(de)優缺點是(shì)什(shén)麽?

黃(huáng)峰達:由于我們在一(yī)些(xiē)子(zǐ)項目&←→×上(shàng)采用(yòng)了(le)微(wēi)≈↕‍₽服務架構,這(zhè)就(jiù)意味著(zhe ≠↔¶),框架及語言對(duì)我們業(yè)務的(de≥‍®)限制(zhì)已經微(wēi)乎其微(wēi)。換句©¶Ω話(huà)說(shuō),采用(yòng)新的(de)框架不✘ (bù)再像原來(lái)那(nà)麽困難。最近 λ÷(jìn)我們在項目上(shàng)嘗試使用(yòng≥₩)React與響應式設計(jì),來(lái)整合現(xiàn)在的('&>®de)桌面版與移動版,同時(shí)考慮嘗試用÷∏'(yòng)React Native構建App。我們✘★覺得(de)比較有(yǒu)意思的(de)是(shì),我們可 ≤‍(kě)以嘗試一(yī)次構建我們的(de)應用(yòng)₩π>。React讓人(rén)值得(de)憂慮的(×₽<‌de)一(yī)點是(shì)代碼變得(de)緊耦合。在整合的(de)過•ε≠<程中,代碼邏輯變得(de)複雜(zá),同時(shí♦♥)難以維護。

CSDN:現(xiàn)在前端新技(jì)術π✘"(shù)不(bù)斷推新,您覺得(de)前端開(kāi) φ發者/公司該如(rú)何選擇新的(de)前端 ✘¥₹技(jì)術(shù)?

黃(huáng)峰達:目前前端可(kě)選的(de)技(jì)術(shù)棧太多(duō)了(γ¶le),如(rú)Backbone、React、Anglu →ar、Vue等等。對(duì)個(gè)人(rén)而言,除非有(yǒu)像類₽∞似于React引入Virtual Dom的(de)≥$ $新概念的(de)框架出現(xiàn),要(yào)不(bù)就(jiù)很¶§£™(hěn)難引起我的(de)興趣。畢竟一(yī)•>門(mén)技(jì)術(shù)是(shì)基于原來(l₽®ái)技(jì)術(shù)的(de)基礎上(shàng)而發展的(÷α de),從(cóng)來(lái)不(bù) ∑​會(huì)憑空(kōng)出現(xiàn★↓∞)一(yī)門(mén)新的(de)技(jì)☆↓術(shù)。對(duì)于前端開(kā‌σαi)發者來(lái)說(shuō),如(rú)果隻是(shì)學習(xí),♣​®那(nà)麽學習(xí)相(xiàng)仿的(ααde)框架隻是(shì)在浪費(fèi)時(shí)★×σ©間(jiān)。對(duì)于公司來(lái↓₽✘')說(shuō)這(zhè)是(shì)大(dà)有(yǒu)益處的(de),∞↑畢竟對(duì)以後來(lái)說(shuō)遷移成本比較低(dī)。

在進行(xíng)技(jì)術(shù)選型的(de)時(shí)候,↑₩←現(xiàn)階段主要(yào)要(yào)考慮的(deελ←)是(shì)選擇客戶端渲染還(hái)是(s™₹™hì)服務端渲染的(de)問(wèn)題。如(rú)果∏φ↑要(yào)采用(yòng)服務端渲染,很(hěn)重要(yào)的σ≥£(de)一(yī)點是(shì)嘗試去(qù)采用(yòng)微(wēi☆↑☆₩)服務架構,這(zhè)樣做(zuò)可(kě)以減少(™±∑shǎo)代碼的(de)耦合。對(duì)β₹于客戶端渲染來(lái)說(shuō),前後端本身(s>≈♠‌hēn)就(jiù)是(shì)分(fēn)離(lí)的(dεαe),不(bù)存在這(zhè)樣的(de)問(wèβ& n)題。

CSDN:您覺得(de)優秀的(de)前端開(kāi)發人(rén)<δ員(yuán)必須具備哪些(xiē)技(jì)能(néng)?™Ω 該如(rú)何提升自(zì)己的(de)前端技(jì)能(néng)?♦♣∞‌

黃(huáng)峰達:我覺得(de)代碼整潔、測試是(shì)非常重要(yào)的(de)基本技​"₹(jì)能(néng)。畢竟對(duì)于普通(tō'$σng)的(de)前端開(kāi)發人(rén)∏δ↕→員(yuán)來(lái)說(shuō),完成工(gōng)作(zuò)已σ♥經不(bù)是(shì)一(yī)件(jiàn)困πγ∑•難的(de)事(shì)。但(dàn)是(shì)≥≤由于代碼寫得(de)不(bù)規範,我們很₽♦(hěn)容易看(kàn)到(dào)長(cháng)的(de)函數(δ•shù)、magic number等等壞味道(dào)的(de)代碼,結果導≈♣±緻這(zhè)樣的(de)代碼難以讀(dú)懂(dǒng),需要(y•‍÷ào)更多(duō)的(de)調試。測試本©Ω身(shēn)就(jiù)是(shì)一(yī)門(mén)藝術(s'☆hù),如(rú)果我們可(kě)以讓每個(gè)測試用(yòn≠ >g)例僅測試一(yī)個(gè)功能(néng),那(nλγ☆à)麽我們會(huì)發現(xiàn)我們的(de)代碼變得♥±✔(de)更容易閱讀(dú)。在這(zhè)個(gè)過程上(shàn₽≠g)不(bù)僅可(kě)以删除一(yī)些(xiē"‍₹)無用(yòng)的(de)代碼,而且在那(nà)之後我們有(yǒu)更大(™₹± dà)的(de)信心對(duì)代碼進行(xíng)重構。

除此之外(wài)還(hái)有(yǒu)Ω→ ↕模式,無論是(shì)面向對(duì)象,還(hái)是(shì)函'₽↓數(shù)式編程都(dōu)存在模式。↔↕≠模式在某種程度上(shàng)是(shì)更高(gāo)層次的(₹βde)抽象,在面向對(duì)象中會(huì)有(yγ₽∏​ǒu)很(hěn)多(duō)設計(jì)模 ‌式和(hé)設計(jì)原則,在函數(shù)≈±₽式編程中亦是(shì)如(rú)此。

CSDN:請(qǐng)分(fēn)析一(yī)下(xià)前端開(kāi)發人(>₩>rén)員(yuán)的(de)未來(lái)職業(y✔>γβè)發展前景

黃(huáng)峰達:作(zuò)為(wèi)一(yī)個(gè)≤ 從(cóng)前端人(rén)員(yuán)走向全×<棧的(de)程序員(yuán),我還(hái)是(shì)蠻看(kàn)好(h×§λǎo)前端開(kāi)發人(rén)員(yuán)≤®的(de)。依賴于Web本身(shēn)強大(d£σà)的(de)跨平台能(néng)力,我們可(kě)以開(kāi$​±)發Hybird應用(yòng)。加之JavaScript可(kě)以作≥≤₹(zuò)為(wèi)後端服務的(de)優π>$♥勢,前端開(kāi)發人(rén)員(yuán)≈↕可(kě)以不(bù)再局限于前端開(kāi)發。換句話(huà)說(÷♣✘←shuō),這(zhè)個(gè)年(nián)代你(nǐ)可(k≥→≠ě)以拿(ná)JavaScript幹以前不(b↔≠β ù)同領域的(de)人(rén)們幹的(de)事(shì)。而在不(bù)久¥✘≈×的(de)将來(lái),隻需要(yào)一( ♦ yī)個(gè)repo就(jiù)可(kě)以Run Everywhere。✘'≤

但(dàn)是(shì),作(zuò)為(wèi)一(yī)個(g♣✔è)入門(mén)簡單但(dàn)是(shì)精通(tφ•♣ōng)愈難的(de)領域,競争會(huì)變得(de)愈加激烈。