一、前端通用學習方法
前端開發(fā)上手快,又容易得到反饋(頁面效果是可見的),我推薦學習一點內(nèi)容后快速實戰(zhàn),在實戰(zhàn)中找到成就感,發(fā)現(xiàn)問題,然后再帶著問題回去系統(tǒng)學習,如此往復。
二、基礎
html + css
這部分建議在 w3school 在線教程 上學習,邊學邊練,每章后還有小測試。 學習過程中請打開chrome瀏覽器調(diào)試工具,直接命令行在內(nèi)做些練習。
javascript
要學的內(nèi)容實在很多,如果沒有其他編程語言的基礎的話,學起來可能要費些力,還是建議先在 w3school上學習。之后建議馬上看《javascript語言精粹》,js是一門很混亂的語言,這本書能夠幫助你區(qū)分哪些是語言的精華,哪些是糟粕,對于語言精華,應該深入學習。糟粕部分能看懂別人寫的代碼就行,自己就不用嘗試了。
對于習慣看視頻學習的同學,以上內(nèi)容也可以在 慕課網(wǎng)-國內(nèi)*大的IT技能學習平臺 上學習。雖然我沒用過,但好幾位同學推薦過了,大概看了下,內(nèi)容還不錯。
數(shù)據(jù)結(jié)構(gòu)和算法(2019年4月新增)
正如開篇的分析,目前市場缺的是高級前端,初級到高級的門檻不在未來,而是在過去的大學基礎課。
前端為什么要學這些?因為這些都是稍微復雜一點的場景解決問題的必備武器。比如,把一個列表形式的地址數(shù)據(jù),以樹形渲染到頁面,或者反過來;又比如,把一個多級嵌套的數(shù)據(jù)對象,轉(zhuǎn)化成扁平的map結(jié)構(gòu)再提交到服務器。更關鍵的,數(shù)據(jù)結(jié)構(gòu)和算法,是計算機的思維方式,尤其是分治遞歸的思想,影響到代碼實現(xiàn)、模塊設計、乃至到系統(tǒng)設計。
三、初級
有了以上基礎,就可以進行一般的靜態(tài)網(wǎng)頁設計,不過對于復雜的頁面還需要進一步學習。
1. css
對于css的學習,我推薦分三塊:“基礎概念”,“css2.1規(guī)范”,“css3規(guī)范”。必看 精通CSS(第2版) (豆瓣),看完這本書你應該對:盒子模型,流動,block,inline,層疊,樣式優(yōu)先級,等概念非常了解了。這本確實有些年頭了,但基礎概念部分講述非常清晰,可以稱之為經(jīng)典。ie6,7相關的內(nèi)容可以不看。css3的部分可以參考:CSS3實用指南 (豆瓣)。這本書同樣有些老,只是最新出版的書中沒發(fā)現(xiàn)有特別好的。
關于瀏覽器兼容性。webkit內(nèi)核已成為市場主流,ie6、7已成為歷史,ie8、9的市場份額在進一步縮小,總之兼容IE已不在是前端工程師面試需要考察的點。
2. javascript
上面提到內(nèi)容還不足以讓你勝任js編程。在有了基礎之后,進一步學習內(nèi)容包括:
2.1. 簡單框架。推薦先學 zepto,簡單易用,在w3school簡單學習js后,直接上手 zepto 即可完成一些簡單的項目。zepto 源碼簡單清晰,也適合新手閱讀。補充: 可以使用 codecademy 學習 javascript,zepto,用戶體驗真的很好(感謝 TonyOuyang )。學習zepto只是為了快速上手開發(fā)項目,獲得成就感。同時還是要關注JS原生編程的能力,尤其隨著低端瀏覽器份額的下降,很多 zepto API 已經(jīng)可以被原生瀏覽器api替代。以天貓消費者端 h5頁面為例,主要就是靠 原生JS + 少量 zepto api 的方式開發(fā)完成,配合pwa等瀏覽器最新api就可以開發(fā)出的用戶體驗。
2.2. 復雜框架。是指 react、vue、angular 等不直接操作dom的框架。這類框架建議js基礎打扎實后再學習。復雜框架是用來解決復雜問題的。對于電商無線端導購頁面來說原生JS足以。對于類似商家管理系統(tǒng)這類交互復雜,開發(fā)量大的系統(tǒng),才適合用這類框架。對于這些框架核心在于理解理念,不要只停留在會用的層面。
2.3. javascript 語言范式 。這個名字可能并不恰當,只是我找不到可以描述“面向?qū)ο蟆?,“函?shù)式”這個兩個概念的概念。javascript不完全是一個面向?qū)ο蟮恼Z言,它的很多設計理念都有函數(shù)編程語言的影子,甚至說如果你不用面向?qū)ο?,完全可以把它理解成一門函數(shù)式編程語言。javascript的很多語言特性,都是因為他具有函數(shù)式語言的特點才存在的。這部分推薦先學習面向?qū)ο蟮幕纠碚摚瑢Ψ庋b,繼承,多態(tài)等概念要理解,維基百科,百度百科會是你的幫手,另外推薦《object oriented javascript》,應該有中文版。對與函數(shù)式編程可以參考這篇文章:JavaScript 中的函數(shù)式編程實踐
2.4. javascript 語言內(nèi)部機制。必須弄清如下概念:js中變量的作用域,變量傳遞方式,函數(shù)的定義環(huán)境與執(zhí)行環(huán)境,閉包,函數(shù)的四種調(diào)用方式(一般函數(shù),對象的方法,apply,call),以及四種調(diào)用方式下,‘this'指向的是誰。這部分內(nèi)容你會在《javascript語言精粹》中詳細了解。
2.5. dom編程,這個web前端工程師的核心技能之一。必讀《dom編程藝術》,另外《高性能javascript》這本書中關于dom編程的部分講的也很好。
2.6. 網(wǎng)絡編程,這部分相對簡單,就這些關鍵字,自己搜索學習即可:fetch,websocket,jsonp,cors,formData。另外,Ajax已經(jīng)被 Fetch Standard 取代,學習 fetch api 即可,如果遇到不靠譜面試官還在問 ajax 的事情,直接跟他講你對fetch的理解即可。
2.7. es5, es6?,F(xiàn)在開發(fā)js大部分基于es5的,ie8以下通過es5-shim。但利用一些工具,現(xiàn)在已經(jīng)可以直接寫es6代碼了,尤其在reactjs,nodejs類型的項目中。對于從es5,es6每個階段js發(fā)生了哪些變化都需要系統(tǒng)學習,學習順序建議是 JavaScript基礎 -> es5 -> es6,越靠前的越重要。一些參考鏈接:ECMAScript 5 compatibility tableECMAScript 6入門ES5 « 張鑫旭
3. html5
需要了解html都提供了哪些api,然后項目中用起來。這部分沒有什么難理解的,關鍵在于能用html5解決業(yè)務問題,以及不支持html5的瀏覽器的降級方案。這部分體現(xiàn)了前端的一個思想:面向未來編程,盡早將新技術引入業(yè)務中來,而不是過分考慮兼容性問題,進而導致面向過去編程。
四、中級
初級階段的目標是能寫出可以運行頁面。中級階段的目標則是以更快的速度,寫出體驗更好的頁面。
1. 高內(nèi)聚、低耦合
如果說數(shù)據(jù)結(jié)構(gòu)和算法是從初級到高級的第*道門檻,能否寫出高內(nèi)聚、低耦合的代碼,則是第二道門檻。
這部分是《設計模式》課程的主要內(nèi)容,在《敏捷軟件開發(fā)-模式、原則與實戰(zhàn)》這部分書中也有更好解讀,這里只能簡單說下我的理解:
高內(nèi)聚和低耦合的核心是內(nèi)聚什么?解耦什么?簡單來說就是一個分類問題,展開來說分類的原則包括:變化的角度,未來可能變化和不太可能變化的代碼需要解耦;功能的角度,不同職能的代碼必須解耦。從變化的角度理解,對應的原則包括:開放—封閉原則(OCP)、Liskov替換原則(LSP)、依賴倒置原則(DIP)、接口隔離原則(ISP);從功能的角度理解對應的原則是:單一責任原則(SRP)。至于單例、工廠、模板、代理等等設計模式,只是這些原則之下的具體解決方案。
所以如果再有面試官去考察你的設計模式功底,要先去跟他講你對模式之上的原則的理解。具體的模式,在不通語言范式下的用法可能不同,甚至壓根沒用。但模式背后的原則,卻在哪都能用。
2. 的用戶體驗
在 webkit + v8 組合出現(xiàn)之后,瀏覽器的性能得到很大提升,以至于在多數(shù)場景下前端工程師都不會面臨的什么性能問題。這其實是從初級到中級的一道隱形的門檻,很多工作多年,由于工作場景的限制,接觸不到什么問題,自己也沒主動學習,導致在性能優(yōu)化維度一片空白。
遺憾的是業(yè)務在發(fā)展,為了更高的開發(fā)效率,前端工程和組件體系的復雜度也在提升。很多場景下,我們依然要面臨性能優(yōu)化的問題?!陡咝阅躩avascript》依然是這個領域的經(jīng)典,部分過時內(nèi)容(第五章,字符串和數(shù)組相關操作,V8已經(jīng)做優(yōu)化;第九章,構(gòu)建部分,現(xiàn)在基于webpack已經(jīng)有很成熟的方案了;第十章工具不用看,直接去看chrome的devtool文檔)自己忽略一下即可。
總結(jié)一下:對于前端頁面的用戶體驗圍繞這三方面:加載體驗、渲染體驗、操作體驗。千萬不可以只知道優(yōu)化加載體驗,5G時代即將來臨,網(wǎng)絡速度回得到進一步提升,但CPU處理速度,貌似還沒看到突破性進展,未來的用戶體驗問題,會更加聚焦到渲染體驗和操作體驗。
3. 工程效率
前端項目同樣面臨軟件生命周期的各個環(huán)節(jié),首先是代碼管理,你必須學會使用git。其次是代碼的構(gòu)建,如今前端代碼構(gòu)建已經(jīng)不是簡單的壓縮一下了,需要進行依賴管理、模塊合并、各種編譯,必須要學會使用webpack、rollup等前端構(gòu)建工具,以及前端模塊管理的方式,amd,cmd,es6 module 等等。
五、高級
從初級、到中級是可以根據(jù)教程(比如本文)或者參加培訓而快速達到的。但進入高級只能靠自己,就算你找到一個“高級前端研修班”,學到了高級前端的技巧,也學不到靈魂。這里只提供一個前端知識結(jié)構(gòu),僅供進一步學習的同學參考:JacksonTian/fks · GitHub
*文章內(nèi)容和圖片均來源于網(wǎng)絡,如有侵權,請聯(lián)系刪除。
點贊
收藏
稍后學習規(guī)劃師會與您聯(lián)系,請保證手機暢通