我的 2017 年技術回顧

不知不覺一年又過去啦,接觸編程也有兩年半了,第一次感覺有了寫個關於自己的技術回顧的底氣了,哈哈哈,大概這也算是 2017 年技術上的一點小進步吧。

說點廢話

這篇文章為了專註技術,所以其他技術相關的就不準備寫了,但是其實技術帶給我的東西太多了,比如說一幫很棒的朋友,這些有時間另開一篇文章吧。當然,由於這次回顧的是本年度我個人的技術學習,所以從角度上來說不會是某一個方面,相對會雜一點,但是前端肯定是大頭了。


前端

我是個吃??先吃甜葡萄的人,所以讓我們先從前端開始吧~

剛進入十二月的時候,我就萌生了回顧2017前端的念頭,但是思前想後,總感覺沒有什麼驚天動地的事情,但是細細品味,卻有許多小驚喜,咱們一一來看。

首先自然來看看三大前端框架 ARV。Angular 實在不熟悉,就不班門弄斧了,不過 Vue 和 React 倒是可以說道說道。

總算在 2017 年寫了一些 Vue,對這個框架從路轉粉,極快的開發效率給我留下了很深的印象,要是用 React 來肝學校的資料庫怕是早就屍骨無存了??。而且 Vue 的更新速度也是非常之快,在 2.5.0 版本中支持了 TypeScript 和 errorCaptured hook,看樣子是受到了 React 的刺激,這種競爭學習的氛圍相當不錯。

Vue 在國內看來是非常受歡迎了

React 在 2017 年確實有著極大的變化。16 版本的發布,帶來了相當多的令人眼前一亮的新特性,但是年中的協議風波讓人對開源產品的使用又有點心生警惕,這不得不說是相當遺憾的了。不過既然是技術盤點,那咱們的目光就集中於技術層面吧,來聊一聊 React 在 16 版本中帶來的新特性。

  • Fiber,這大概是 16 版本中提到最多的一個特性了。React 團隊基於瀏覽器對 requestIdleCallback 和 requestAnimationFrame 這兩個API的支持,把傳統的順序 stack reconcile 變成了可並發的 fiber,這個在前端中確實是一個很棒的嘗試。但是必須指出的是,想利用 fiber 帶來的肉眼可見的性能優勢需要較為複雜的業務場景,在簡單的諸如活動頁面中使用 fiber 除了徒增複雜度之外,並不會有什麼性能優化。另外,我瞅了瞅源碼,發現 fiber 本質上和我們在 OS 課程上實現的協程並沒有什麼兩樣,甚至 fiber 還沒有去解決 starvation 問題(在 OS 中可以用 aging 或者 round-robin 來解決)。當然,可能是因為瀏覽器這個特殊的環境, React 團隊還沒有解決這些問題,但是我相信,Fiber 在接下來的日子裡會是一個新的前端技術趨勢。
  • Error Boundary,錯誤處理在前端的一個新形象。錯誤邊界組件的 componentDidCatch 方法可以對子組件中的錯誤進行捕獲和處理,這種方式巧妙地實現了抽象和關注點分離,讓錯誤處理的復用粒度更加可控,也更加方便。
  • 其他的變化也有很多, 可以直接參考 React v16.0,不妨在項目中嘗試一下。

React 基本說完了,自然得提一提 React-Native 。今年暑假我在閱文集團實習的時候,負責的是起點讀書 APP 的 RN 開發。話說我最早開發 RN 的時候,還是 2016 年的年中,相比較而言,2017 年的 RN 完全可以說是做好了生產化的準備。我們開發的是 iOS 的版本,開發出來的產品體驗和 native 相比已相差無幾,更兼具開發效率和 hot-update 的優勢。國內現在 比較著名的使用 RN 的 APP 有京東、攜程和阿里的一些產品,RN 在複雜環境下的體驗效果也得到了驗證。希望 RN 在 2018 年能夠發展得越來越好,最好是能優化一下動畫的編寫體驗(orz。

今年的輪子除了前端框架,在打包工具方面也是層出不窮,這可能是人民日益增長的前端開發需要和複雜的 webpack 配置之間的主要矛盾導致的。 rollup 用簡單的配置,卓有成效的 tree shaking 佔領了前端 lib 開發的市場,其實 rollup 的哲學很簡單:前端開發中,還是有那麼一小部分,我們不需要引用複雜的 CSS、image 文件,只需要安安心心把打包做好就行。很明顯這個定位非常準確,現在已經有相當多的 lib 使用了 rollup 來對代碼進行翻譯、打包。

而最近比較火的 parcel 和 microbundle 都強調了 zero-configuration,這一點我覺得值得商榷。面對所謂的「代碼配置化」,我們所寫的 config 文件的複雜度其實並不會因為通用的抽象而降低。試想一下,如果有一個抽象,它能降低幾乎所有的現有配置的複雜度,那麼這個抽象自然很快就會被吸納到 master 中,又何必用一個新的工具呢?話說回來,還是由於現有的前端開發的業務較為多變,需求變更大,所以打包的要求也不盡相同,自然很難產生一個較為廣泛的抽象來降低配置難度。

當然,如果是項目較為簡單,那 parcel 和 microbundle 絕對是非常棒的選擇,但是如果項目比較複雜,那還是老老實實去寫 webpack.config 吧~

關於打包我還想說一句,其實開發環境中的打包流程對於性能要求還是比較高的,複雜的打包流程很可能導致開發體驗較差,喪失了一部分前端開發的優勢(WYSIWYG),而利用其它語言,比如 Go、webAssembly 去重寫工具鏈,說不定可以帶來比較大的性能提升。我用 Go 語言 rewrite 過 rollup 的早期版本,體驗還是相當不錯的,就是生態堪憂,這可能是未來的一個趨勢。

今年前端的變化不是太大,不過倒是有一些趨勢還值得觀察的,比如 github 上 webAssembly 解決方案的大量出現,ReasonML 的爆紅,CSS in JS 的悄悄普及,Rx/Mobx 在國內的逐步推廣... 明年前端說不定有很多有意思的事情會發生~

(Update:12月20日,Safari Release 46 默認打開 service worker,PWA 即將啃下最後一塊骨頭)

DevOps

最初是趕鴨子上架,結果打開新世界的大門

雖然前端是我的「本命」,但是由於學校專業方向的緣故,我在學校中做的大多數項目反而是 server side、distributed system 相關的。最開始是由於任務使然,隨便拿 Java、C#、python 糊出個 monolithic app 了事,但是後來隨著任務的深入,卻發現 DevOps 很有意思,搞得我 17 年的年底都幾乎沒怎麼寫過 FE 的代碼,大部分時間都花在了 BE 上。由於我在這方面還是個不折不扣的菜雞,所以就簡單談一談了。

花了些時間看了看分散式理論,看了看 MapReduce、Paxos、Raft 的論文,感覺對分散式還是模模糊糊,對理論這一塊不是很喜歡,可能是入門方式不對 orz。

Microservices 則不太一樣了,由於專門有一個項目是關於微服務的,所以花了挺多時間去讀了些文章和書籍,正好這次項目是基於之前的一個複雜度較高的 monolithic app,所以也是一次寶貴的項目遷移經歷。這次項目的架構是 NodeJS GraphQL + Java Spring-Cloud + Go-micro,目前的結構還是傳統的 J2EE 的分層貧血模型,不過我也在了解一些 domain design 的知識,看一看能不能去改善一下現有的結構。雖然只是個學校的項目,但是我們依然決定花點時間在一致性上,所以準備撘一套基於 kafka 的 weak multi-phase commit(我胡謅的詞),大概就是去實現一個 Eventual Consistency。

談到了微服務自然離不開 Cloud Native。經過一個兩個星期的摸爬滾打,我堪堪把已有的服務用 Docker Machine 和 Docker Swarm 給管理了起來,不過現在還只是在本機上用 virtual box 來做多節點,過幾天準備去阿里雲買幾個 node 來真機實幹一下。最近還在學習一些 kubernetes 和 service mesh 的知識,準備著手把現有的項目也放到 kubernetes 上跑一跑。

編程語言和範式

面向吹 X 的編程範式

今年認識了一幫非常棒的大佬,加了一個很高大上的幺半群,為了能聽懂大佬們的聊天,我不得不去讀一些晦澀難懂又不知所云的書和代碼,我一點都不喜歡 Common Lisp!

不過這個過程中也是收穫了蠻多,比如終於掌握了學習編程語言的正確姿勢。今年主要開發用的語言還是 JS、Java、C#、Python 這老幾樣,但是各種層出不窮的小項目使用了囊括 Go、elixir、Haskell、Scheme、C、C++、ReasonML、Scala、ClojureScript...當然這些都是簡單的應用了,離熟練還有挺大的距離,2018 年慢慢來唄~

類型系統理論一直有種不得其門的感覺,不過拜讀了垠神的 Pysonar 的源碼,感覺對這塊有了點模模糊糊的認識,這個 flag 也扔給明年吧~

年初的時候收到 R 大的影響(褒義),花了點時間在 VM 和編譯原理上,掃完了 GC 演算法和一部分JVM Analysis,然後鼓搗了個 demo language 來做些 static optimization 的實驗,本來還想實現一個簡單的 stack vm,然而身為鴿派程序員領軍人物的我成功地咕咕咕掉了這個項目,算了也扔給明年~

這麼總結下來,今年在編程語言這一塊的學習有種力尤未逮的感覺,只能明年繼續努力啦~

總結

混混沌沌、忙忙亂亂的2017年就要過去了,明年就是正式的校招啦,還有種沒有準備好的感覺。臨近期末,要開始禿頭爆肝了,先寫這麼多,以後有機會再聊~


推薦閱讀:

赤峰市2017年哪裡買房好?
從長期影響來看,2017 年中國最重要的公共政策是什麼?
2017年有哪些值得加入的科技公司?
2017 年你坐了哪些飛機?
2017 年你心目中最值得看的美劇是哪些?

TAG:前端开发 | 2017年度盘点 |