2016 前端個人回顧

關於整個前端的,就不怎麼說了,別人總結了很多,個人也感覺寫那種太折騰。

  • 關於 React 全家桶:大概也就是 16 年才開始從之前的 Backbone 轉向 React,也用上了全家桶(webpack + babel + react + redux + 這些框架的開源生態),而且可能比別人更徹底(包括 React Native 陣營)。看到很多人很反感全家桶,但其實個人沒這種感覺,大概是我對全家桶的選型是水到渠成的過程,比如 webpack 前就有經歷過 requirejs + grunt -> gulp 這樣的過渡,然後 webpack 的 HMR 用了以後真的會上癮,babel + es6 對於 coffee-script 過來的我而言完全沒有成本等等。可能全家桶的確對於新人有點不太友善,但現在不是也有了 create-react-app 嘛,所以其實還好。
  • 關於 React 還是 Vue:其實我之前研究 Riotjs 比較多,感覺更符合我的審美……不過之前 Riot 2.0 的時候感覺在組件命名空間上控制得沒有 React 好(似乎 Vue 也有類似的問題,不過 Vue 似乎稍微好一點,至少能傳自定義子組件對象)。之所以最後定型在 React 感覺還是收到 redux 作者 Dan Abramov 影響比較多,開始大量關注函數式編程的內容,而 React 在這方面比較徹底; Vue 2.0 之後似乎也支持了 JSX,大概也是在這個趨勢下做出妥協。本來我覺得這兩個框架的核心區別是 js 還是 html 的區別,現在似乎也有靠攏的趨勢, Vue 也更像多範式視圖框架了。但是還是 Dan Abramov 的影響,讓我覺得同一個項目里的開發者收到點設計過的束縛其實是好事情,所以還是繼續堅持 React。
  • redux:剛了解 redux 的時候我還在一個小型項目里嘗試用 Backbone 來實現 redux 的思路,但多少都會有點凌亂,後來明顯感覺出來 redux 作為一個框架還是其次的,關鍵是失去了很多自由以後很多事情你都得去考慮如何設計,這個過程對於應用的持續擴展與規模化而言至關重要。還有就是帶來的調試流程上的區別非常大,對於問題的定位與調試比之前方便太多。但是,我覺得 redux 不是隨便什麼人都可以輕鬆駕馭的,其中需要有大量的探索實踐與經驗沉澱,年後可能我會寫一系列關於 redux 實踐經驗的沉澱文章出來。
  • eslint 與 airbnb 規範:一直在關注,大概年底開始將 airbnb 的 eslint 配置到所有項目里。配合 atom 的自動 eslint,很有可能一個文件就會有上千個不通過的內容,對於強迫症而言屏幕上一堆紅點意味著什麼呵呵呵呵…… 但是的確經過 airbnb 這麼變態的規範 lint 過後的代碼是非常賞心悅目的,而且經常會倒逼著人去做代碼重構(比如一個文件只能有一個 class 定義……)。
  • 單元測試:今年從 mocha 開始慢慢轉向到 jest。主要是之前團隊一直沒有任何的單元測試這個挺神奇的,而且更加神奇的是 leader 們對於這個東西也都是不太關心的態度。當然,他們只想看到穩定高可用、BUG不復現的結果,但是都是不願意支付似乎有點高昂的代價的。當然,我也不願意為了測試付出太多代價,所以只能做更多的研究學習和探索,而不能硬上追求測試覆蓋。現在有了初步的一些實踐經驗,有待進一步整理。
  • 函數式編程:似乎 16 年我研究的很多技術方向的東西都跟函數式編程(簡稱 fp)相關,比如 react / redux / lodash-fp / immutable / 單元測試等等。嚴格來說 js 並不是太好的 fp 的土壤,但 fp 在 js 中可以崛起也說明了很多——函數式編程對於複雜的 UI 和交互邏輯開發而言是個不錯的思路,可以解決很多問題。
  • 代碼重構:重新把之前墊桌腳落灰的 Martin Fowler 的 《重構》翻出來讀了一遍,發現果然之前有很多看不進去但挺核心的內容的。關於重構的目標、時機、顆粒度、具體實施的方案等等有太多細節,而這些細節往往短期內看不到成效,所以我看到的是身邊大多數人都不會去關注漸進式重構,都是一個項目縫縫補補到一定程度以後就整個推翻重來,或者就是自然死。對於很多項目而言,因為代碼沒有持續重構,給項目維護與新特性的開發帶來了巨大的成本,這個是我真實看到的問題,而且我覺得重構能夠延長項目的生存周期,也能極大的提高自己的編碼能力。
  • 靜態類型:今年似乎 flowtype 還是 typescript 之間帶來很多爭議,我更多也都只是泛泛地去了解了一點點皮毛,暫時沒有這個動力去實踐,大概如果有核心庫需要維護的時候才會考慮吧。個人可能比較傾向於 flow type, 一方面類型是可選的,另一方面是不需要學多一門新語言,保持關注。
  • Immutable App Architecture:今年在 youtube 上看到這個概念及其介紹後有做一些學習,不過網上資料很少,也在知乎上跟人討論過 《如何看待 Immutable App Architecture?》。實際應用起來感覺技術還是其次,關鍵是與交互設計耦合的影響非常多,保持關注。

  • Material Design: Google 在這方面真是做得相當漂亮,規範里真是細節滿滿,簡直就是一份視覺品牌標註文檔,而且文檔看起來相當賞心悅目,讓我這種遊離在前端與設計師之間的人看得如痴如醉。從今以後我都不怕做 MVP 的 UI 了,直接應用規範就好,不用操心太多色值選擇、間距控制、界面語言應用等等,因為裡面已經很詳盡了。
  • 順利晉陞了 T3-2:大概在16 年中下旬吧,挺順利的。感覺對自己要求應該更高一點了。可能花更多心思在難點問題的解決與新人能力培訓上,而把一些基礎的業務性質的開發工作交給培訓後的新人們。感覺這樣的話能讓自己能繼續成長不落伍的同時,也能給整個團隊帶來更高的生產力。感覺有時候職級與真是能力之間會有水漲船高的關係,說不上究竟是哪個帶動了哪個的提高。但不管怎樣,對自己要求高一點總是好事,面對他人的審視時能更遊刃有餘。

總而言之,2016 的前端發展相當快,以後可能發展得更快;但是如果只關注其他人關注的那些熱點(比如全家桶問題)的話會讓自己的成長收到局限。而 React 和 Redux 的應用的過程中,讓我在編程語言基礎的應用、代碼設計、業務具體問題的解決方面花了更多的精力。我覺得一些可以說是基礎但又不是基礎的能力非常重要,比編譯器優化什麼的重要多了。

下一年會怎樣?我也還沒完全想好,走著瞧吧。


推薦閱讀:

為什麼 Dustin Diaz 倡導將 Doctype 寫成 <!DOCTYPE html> ?
基於Webpack 2的React組件懶載入
js是不是在自我分化,演變成一個個不相兼容的技術棧?
奇舞周刊第 232 期:響應式腦電波

TAG:前端开发 | React | 函数式编程 |