2016年JavaScript開發者需要了解的技能

英文原文:Skills JavaScript Developers Should Learn in 2016
譯者:xxholly32
譯文地址:http://t.cn/R5HIDVI

JavaScript - 由于它是web開發中最基本的語言,無論你怎么看待它,我們都要去考慮它的"未來"。畢竟,瀏覽器可能是PC和移動設備都在使用的最廣泛的軟件應用程序了。

開發人員都知道,JavaScript世界看上去動蕩不安甚至有些混亂(e.g. the left-pad incident),但這也是說明了這門語言正在不斷的完善。它試著去完善一些老的問題(通常是相關擴展或者復雜的問題)以跟上現在的發展趨勢。

隨著需求的變化,特別是在這技術日新月異的時代。你也許不知道以下這些技術,但想要提高或者完善你的技能,無論是了解Javascript的發展走向,還是讓你更好的進入這個領域,它們都是你需要關注的(尤其是那些初學者)。

那么,到底2016年javascript開發方向是什么(或者2017年又會有什么新的動向)?

javascript 趨勢

node.js已經眾所周知了,后面的內容我們也不會提它,因為它太有名氣了.....

React & Redux

2015年是React獲得肯定的一年,多的開發者在2014年尾聲開始抱怨Angularjs的一些問題,也有新聞說道,Angular2 將會和 Angular1 不兼容。

如今的現狀是,Angular1 仍然在Github上備受關注。同時它的增長也開始放緩,而React正快速的填補這個缺口。

github star 增長圖

圖中的數據基于互聯網。

也許更能說明問題的指標是:reactangularangular2 三者的包在NPM的下載量:

angularjs vs react

出自 NPM 走勢

但是,這些數據并不能真實的代表這些框架的使用情況。有一點要考慮的是自從Angular1被Angular2替代之后,它并沒有任何升級。更不必說,React不是一個框架,不能夠和AngularJS一起用。所以說,這兩者其實是沒法放在一起對比的。

盡管如此,大概在去年一年里,JavaScript社區對React的支持比Angularjs要多一些。

看圖表,你可能會問:在8月后發生了什么?React在npm的下載數量突然以指數倍的方式暴漲,Github的關注數量快要接近AngularJS的數量。

同時,Redux出現,由它的創作人Dan Abramov發布在 ReactEurope2015 7月的會議上。Redux是一個類似flux的實現,讓很多開發者確信這更適合并能夠推動React的發展。

在Redux出現前,React已走過了一段坎坷,大家試圖找出如何最好地實現"Flux"的架構。許多更好的實現方式涌現出來,但對于Javascript開發者來說還是缺少一個全面完整的解決方案。因此,盡管React在DOM表現層處理有多優秀,開發者還是對采用這個技術到項目中保留自己的意見。

如今,隨著越來越多的開發者開始關注和使用Redux,并且認識到測試和debug JavaScript是如此方便。Redux開始替代Flux成為了新的贏家。

由于2016年Javascript在前端領域的地位,同樣的,React 和 Redux也變的炙手可熱了。知名公司如:Netflix,Dropbox, 雅虎都已經開始使用React,并給與其很大的信心。

盡管這樣,Facebook的Relay框架將在2017年成為Redux的最大挑戰者。

你也許會閱讀這篇文章:Getting Started With React & Redux: An Intro

其他感興趣的框架

那么還有什么別的框架?還有一些相對關注低一些的,但被炒作的一些框架。

Angular2

谷歌和微軟合作開發的框架Angular2,或者說是用微軟的 TypeScript 開發的更易管理的Angularjs2。這是什么意思呢?大型公司(一些非技術性的公司)可能會關注Angularjs2,特別是使用了微軟的.NET框架的。從去年開始,微軟也開始推動.NET的開源工作,使開發者能夠更好的使用。

隨著Angular2的重寫,整個過程旨在能夠修改Angular1 app開發存留的一系列問題,目前為止效果明顯。Angular2 也會支持 web 組件開發,使其有能力支持更好的展現。而谷歌也認為它是Web開發的未來。

然而,不管Angular團隊如何努力的帶領開發者從Angular 1 引導向Angular2, Angular社區對Angular的取舍還是分成兩大陣營。重寫導致Angular的停滯不前和React逐漸火熱,而這個勢頭正在加劇。

Angular2 能否和 Angular1 當初一樣成功,并不能完全肯定,在Javascript社區也眾說紛紜。Angular2 還是在Javascript和web開發的"未來"中有成功的可能性,但2016顯然不是Angular2,特別是它還是在beta版本。對于那先不喜歡復雜 react app 需要配置很多東東的開發者來說,Angular2 還是可以選擇的。

Meteor

Meteor在Github的關注和下載始終是穩固上升中,和React,Angular 的發展相似。這是一款輕量級、全棧式,并有鮮明特征的Javascript框架。很多開發者用它從框架中發現很多新穎有趣的地方。meteor被認為是一款原型式框架,而且對初級開發者非常友善,并且上手較快。

然而,當使用Meteor時又是另一種情況。那些學過 Angular1 或者是一些Rails的開發者都掌握了大量隱藏的魔法技巧,而這也會是阻礙Meteor成為主流的一個原因。

Meteor 不像 React 和 AngularJS, 企業中可能會有一些專業的開發人員,而 Meteor 沒有,這也是不被考慮的因素之一。雖然 AngularJS 有很多問題,但有谷歌的技術團隊撐腰。而使用 Meteor 不一樣, 無論是前后端開發,都會存在很多的技術風險。Meteor要更廣泛的被廣大開發者使用,還需要解決很多問題。

更別提那些數據庫問題,由于 Mongodb 是 Meteor 的默認數據庫,而一些開發者對MongoDB的開發模式不是很感興趣(閱后即焚的小型數據庫)。

Meteor運行必須要依賴 SQL,而這點也沒有得到很好的支持。

不用說,Meteor 在2016甚至2017年能夠占到的份額都會比較少。對于構建大型負載的應用,大部分專業開發者對這個技術,還是持保留意見的。

ES6 終于要普及了

2016年,如果你是個Javascript開發人員,而你的應用還沒有采用ES2015開發規范,你要好好問問自己,你到底在干什么?

但為什么用 Babel 和 TypeScript 處理 ES6 app 項目呢?Babel大部分是轉換ES6的ES5,TypeScript 是可選的靜態類型和簡單類型的Javascript的超集。

Facebook創造了Babel,Babel只支持靜態類型檢查的Javascript, 并做轉換,所以這兩者都是以不同目的的方式被創造出來,沒有可比性。因此兩者一般不會同時使用。

Babel是的第一個連接ES5和ES6項目的語言,而TypeScript在ES6的支持也快要趕超ES6了。在github上Babel關注度更高,更不用說還有React開發者會使用Babel + Webpack的組合。

你也許會閱讀這篇文章:Setting Up a React Environment Using Npm, Babel, and Webpack

然而,在最近,如果你看一些Javascript的解決方案,那些代碼庫都是用TypeScript做的,TypeScript也變得越來越火,挑選它的人也越來越多。Javascript曾給人的印象是比較難懂,難調試的。不僅因為它是一門動態語言,而且缺少類型檢查的機制。TypeScript卻很好的支持了一點,而且TypeScript還有一個比Flow更大的社區支持。

除此之外,我們看下在谷歌趨勢上對TypeScript的關注走勢圖:

也許TypeScript在受關注程度上低于Angular2,但隨著Javascript的應用越來越大,它很有可能因此而被關注。同時,Redux使得Javascript應用測試變得更加簡單, 在TypeScript的幫助下,其代碼已更具可維護性(它也能和React的JSX兼容)。除此之外,微軟、谷歌、Facebook共同致力在Javascript上添加靜態類型,最終生成ECMAScript協議。谷歌放棄了AtScript而用TypeScript在AngularJS上,而Facebook的Flow的社區規模并沒有TypeScript那么大。

因此,很可靠地說,不僅靜態類型的Javascript是一種趨勢,而且那些不喜歡Javascript的開發者也因為TypeScript開始接觸JavaScript了。TypeScript極有可能是未來的趨勢。

函數式編程要變成主流

確切的說,大量函數式編程已經以他們的方式緩慢的占據主流的編程領域。但在現在復雜的web apps中,"函數式編程"又再次被關注了。

類似Scala的后端開發者,正慢慢的擁抱函數式編程。Fackbook的React前端開發者也提出了UI的函數式看法。隨著越來越多的贊揚,函數式開發將會成為主流。

如今,前端開發主要是響應式編程和函數式編程。React+Redux的開發模式,通常對于新手開發者來說,面向對象的編程是使用最多的解決方案。另一個角度來說,React需要開發者用一個函數來處理UI,而Redux用一個函數處理數據。所以基本還是OOP的模式。

不管怎樣,那些用函數式編程的開發者,你仍然要堅持使用Javascript,并且學一些RxJS的技巧。RxJS是Javascript的響應式擴展,用于替代Flux框架,可能在小型項目中會有一些負作用,但在一些大型web項目中卻能夠發揮很大作用。Netflix采用RxJS,因為Angular2支持并很好的使用RxJS。由于RxJS是微軟研發的,它也很好的集成了TypeScript,并且在不斷的完善中。

但是,RxJS學起來比較難,不少開發者放棄了做FRP,而在項目中用函數式開發。

值得注意的是另外的一些預測,比如ClojureScript和Elm, 但和React+Redux的函數式編程比起來還是有些遜色。(然而,Redux是受了Elm啟發的,所以有些開發者還是想去關注一下Elm的)

考慮到Javascript龐大的生態,很難說會大規模遷移到Elm的可能(當初有很多人堅信Scala會替代Java,然而最后并沒有)。RxJS, 另一方面,仍然是學習門檻較高的框架,暫時無法變成主流。

隨著函數式編程很好的適應了如今web開發的熱潮,有一點需要強調,函數式編程已經成為當下Javascript開發人員必不可少的技能之一了。

桌面應用的對決:Nw.js vs Electron

如今,大量的軟件需要同步數據到不同的平臺(即,手機和桌面)。大部分都是起源于web app,之后再創建桌面應用, 而為了更好的用戶體驗,web app升級會更快,并且更容易。更何況,用戶在什么都不裝的情況下,都可能會卸載你的產品。由于體驗不好,所以這是個比較大的考驗。

在過去,人們為了那些web技術開發前端UI的桌面app產品,收到了CEF技術的驗證。這并不容易,而且這些應用還沒有真正的跨平臺兼容。自從2014年,Node.js的出現,桌面應用框架可以很好的使用web技術開發,并處理跨平臺的問題。但之后便沒有出現新的東東。

如今,在該領域任有兩個主要的技術:Nw.js(node-webkit原身)和Electron。雖然兩者都是不錯的選擇,有自己的優勢,這篇文章是關于發展趨勢。

因此,讓我們來看看兩個項目在Github上的關注情況:

nwjs vs electron

出自 Star History

雖然Nw.js出道較早,而且較為成熟,但Electron卻以指數形式增長,而nw.js的增長看上去是平穩的線性的。

等等!由于Electron是在GitHub誕生的,考慮到GitHub上關注的公正性,我們去看下Google趨勢,但好像或多或少反映了同樣的情況:

nw.js vs electron

Electron比較新,但已經用在了一些知名公司比如Slack、微軟、WordPress和Sencha.(Codementor 也用了Electron做了它的桌面應用)。Electron的簡單易用,使得它的生態系統和社區平臺也逐漸壯大。它的火熱程度可能會延續到2017,使用Electron框架開發桌面應用,應該是開發者現在最好的選擇。

手機端框架對比:React Native vs Ionic

自從 React Native 橫空出世以來,人們預測2016年將是React Native之年,考慮到跨平臺的開發模式,未來將是手機開發和web技術的時代。如果你谷歌一下React Native app性能 ,你會發現很多贊揚。特別是在對比了HTML5 hybrid app,因為它跑起來更平滑。是否2016屬于React Native之年?在宣傳和關注上,看來它是達到了預期的:

react native vs ionic

但實際是否是這樣呢?當寫這篇文章時,React Native仍然沒有到達1.0版本(現在是0.26)。所以,如果你現在想用React Native需要勇氣和耐心去處理一些app問題,可能需要重構代碼,還會有一些未知的問題(Codementor也僅僅使用在手機端)。因此,我們再看一下React Nativc 和 Ionic 在npm的下載對比:

react native vs ionic

出自 npm trends

從這個圖可以看出,似乎React Naitve正在以它的方式,超越ionic成為最佳的跨平臺移動開發框架。

在如今的就業市場中,掌握React Native技術的人才也變得比ionic更加搶手。

react native vs ionic

出自 indeed.com

在AngelList的招聘列表中我們做了簡單的統計,這個結果體現了同樣的問題:在5月30號左右,有75個關于ionic的招聘,有65個關于react native的招聘數據。

因此,如果在你的簡歷中有熟悉React Native技術。在2016年,雇主們絕對會給你的提供更高的薪資。

webAPI的未來 : GraphQL vs REST

2016年,在Facebook宣布開源GraphQL之后,這使得大量的JavaScript開發人員開始從事它的研究。特別是在開源項目上,Facebook在蘋果的JavaScript領域做了很多貢獻:

GraphQL目標是替代REST API,但REST API已經應用的更加廣泛了,這是不太可能的情況:

rest vs graphql

GraphQL很難取代REST API。充其量,它可以補充REST API所提供不到的東西。而且,GraphQL仍然比較新,還很依賴Facebook,所以它沒有足夠的學習資源來讓開發者來提高。因此,2016年對于GraphQL來說,還是不足以使引起開發者的足夠興趣。2017年也許會改變,但是2016年5月30號在AngelList中可以看到,僅僅只有6個招聘是對GraphQL有需求。所以你可以不必急于學習它。

JavaScript走勢的結論

JavaScript社區總體發展是比較快的。為了保持主流定位,必須有更多的資源和支持等一些相關信息。基于本文的JavaScript的趨勢總結,如今的開發人員需要學習React + Redux,需要熟悉函數式編程,學習TypeScript。此外,還需要關注其他領域,React Native等,同時有一些Electron的經驗可能會更好。(當然,TDD測試驅動開發,無論何時都是你要掌握的技能)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容