前沿
算算時間今年(2016年)是進入前端開發這個領域第五個年頭,自從上次總結完《我的程式設計之路》後,還想從更細節的方向上寫一寫自己是如何學習前端開發,并且還能夠保持進步和對技術的敏感。
對于現在進入這個領域的朋友們來說,很多東西其實你都可以選擇放棄了,因為你的起點比之以前要提高了不少,但相對來說知識點又多了很多。PS:至少你不用去相容IE6了。
來看一看JavaScript的趨勢圖:
JavaScript 2016年5月 TOP 10
JavaScript 趨勢圖
Github 2008-2015統計
雖然前端領域屬于一個比較新的領域,但是至少它也發展了有很多年了。回顧從前,Web前端開發最基礎核心的三劍客:HTML,CSS,JavaScript,可能還需要包括Flash系列,而現在除了Flash(如果你不是直播視訊領域的話),基本上還擴充了HTML5,CSS3,ES2015,以及各種架構(backbone,react,angular等)。
角色的定義
前端開發也應該是軟體開發工程,是以優秀的軟體開發工程需要具備的知識,你也應該需要具備。
良好的數學邏輯
良好的資料結構與算法
作業系統
編譯原理
計算機系統體系
當你具備良好的基礎知識時,對于程式設計二字才可能了解的更透徹。後續你才能進一步的去學習軟體設計模式,标準,這些哲學範疇的思想,就好比你認識了漢字,才能閱讀完一篇文章。
當然如果你在學校學習的非常好,下列的學習資源推薦就當是複習吧。
學習資源推薦
數學邏輯(web前端學習交流群:291851189 禁止閑聊,非喜勿進!)
作業系統,我建議你閱讀 《作業系統精髓與設計原理》 即可,如果了解起來費勁你可以繼續去公開課 或者 iTunes U上搜尋視訊資源。PS:放心吧,肯定有。
編譯原理,推薦在 iTunes U 搜尋 馮博琴老師 的教學視訊。
計算機系統體系有非常多的知識點,你可以繼續搜尋教學視訊來觀看。
無論何時你都不能丢掉 HTML,CSS,這個問題在我的身上也出現過,過去很長的時間内我基本不怎麼會 CSS,這也意味着當我需要去繪制UI時往往效率不高。
當你渡過了入門階段之後,如何提升可能會是你目前迫在眉睫的需求。回到Web領域,我們來看它的本質。本質是你所有的工作都在圍繞着 請求 在處理邏輯。我認為提升的第一步是去研究 HTTP ,當你熟練掌握了 HTTP 以及它身後的 TCP之後,你才會真正了解Web開發的含義。(多線程處理,事件循環,緩存等等這些手段,不都是在如何處理請求麼?)沒事翻一翻《HTTP權威指南》還是有好處的。
套用一句老話,如果你的基礎不紮實,一切都是“浮雲”。
具備良好的視野
良好的視野是你能看清楚趨勢
如果你現在還準備去學習 Flash ,那我隻能說你的視野都被狗吃了。至少你可以通過社群來了解 前端 的發展動态,去了解出現了哪些新的架構,更新了哪些新的Api或者屬性。未來一段時間内,國内或者國際廠商會使用哪些技術等等。
瞧瞧這些年裡前端發展的變化:
從架構層面開始:backbone -> angular -> react
工具生态:grunt -> gulp -> webpack
語言:JavaScript 1.3 -> ECMA 5 -> ECMA 2015,CSS2.1 -> CSS3.0,XHTML -> HTML4.0 -> HTML5.0
Firefox OS (雖然它挂了)
桌面應用:NW.js -> Electron
出現了Node.js和Mongodb
服務端架構:Express -> koa
移動應用:PhoneGap -> Cordova | ionic -> React Native | weex
文法檢查:jslint -> eslint
子產品化:AMD | CMD -> Commonjs -> import export
文法增強:CoffeeScript -> Dart -> TypeScript
… 舊技術雖然消亡了,但它們留下的思維啟發永在。說不完的變化與發展,擁抱變化用心去體會吧。
戒浮躁,定乾坤
随着前端生态圈的繁榮出産了更多的架構和解決方案。
更久遠之前我們是這樣寫前端的:
使用jQuery來編寫大量的業務邏輯和效果,圓角我需要四個圖來拼接。
2010-2016年的三個階段:
使用backbone的MVC組織源代碼,大量的使用jQuery插件的形式來建構UI界面,那個年代僅用了Grunt 來處理一些合并,壓縮的事情。
建構工具換成了Gulp,對于業務進行了子產品化分層(requirejs),研究angular.js來編寫富應用程式。
通過元件(react)來建構我們的Web頁面,使用webpack來構模組化塊化和優化,平台向移動遷移,研究React Native這樣的混合開發方式,并且使用上了ES6。
如果你想學習前端可以來這個群,首先是291,中間是851,最後是189,裡面可以學習和交流,也有資料可以下載下傳
生态圈的繁榮也容易讓人産生選擇困難症,東西越多越難選擇,害怕今天剛學習了就被淘汰的心理。這個時候,我想最好的方式就是要戒浮躁,看着東西很多,其實選擇一項,也足以。當你成為一個架構的大師時,你還害怕不能成為另一架構的大師嗎?專業這個東西除了經驗的積累和沉澱,最重要的本質是它們都是互相通順的。
目前,我選擇了研究和使用react這樣的生态做為自己的架構技術棧,從中學習也應用在公司的産品中,随着深挖它的源碼,反而發現自己對于技術的了解又有了一次提升。
做事更要學會思考
對于剛剛參加工作的同學來說,思考比做事更重要。如果你為了業務而業務,不停的去堆積,隻能說過些年你還是如此。去好好的想一想,程式設計到底是在做什麼?
提出問題自問
怎麼才能寫好代碼,有時候潔癖或者說強迫症很可能會是你的原動力。
是不是該主動的去重構代碼
我們需要對于業務代碼進行一些分層嗎?
我寫的代碼有沒有符合團隊制定的程式設計風格
我是不是該使用語言提供的Api,比如數組中的push,pop等。
公司使用的架構,我了解了嗎?
隻有自己主動了,去思考了,才可能發現自己的很多問題,有時候自省也非常的重要。
學習Node
重要的是你應該一無既往的深入學習服務端的思想與知識。
堅持寫作
堅持寫作,是沉澱經驗的最好機會
所謂的溫故而知新,專業在向前發展,接收的大量資訊,在人腦中是有局限性的。很多知識,隻會存在于一個印象或者一個引子,而寫作不僅僅是分享,也是在沉澱你自己的經驗。(這一個部分就不浪費篇幅了,我相信做為一個技術專業者,你應該懂的。)
而且寫作還能讓你和其他開發者針對一個問題展開讨論,何樂而不為呢?
提高工作或者學習的效率