摘要:只是抱怨事物的狀態(tài)并沒有什么卵用,我打算給你一個實實在在的一步一步征服生態(tài)圈的學習計劃。好消息是,這剛好是本學習計劃關注的問題。比如,一個不錯的出發(fā)點是的課。是一個由創(chuàng)建和開源的庫。我個人推薦的初學者課程。而個人項目是嘗試新技術的完美時機。
本文轉載自:眾成翻譯
譯者:網絡埋伏紀事
鏈接:http://www.zcfy.cc/article/1617
原文:https://medium.freecodecamp.com/a-study-plan-to-cure-javascript-fatigue-8ad3a54f2eb1#.d39y4izhb
像其他人一樣,我最近偶然看到 Jose Aguinaga 的文章《在 2016 年學 JavaScript 是一種什么樣的體驗》”。
譯者注:中文翻譯在此。
很顯然,這篇文章觸到了很多人的痛點:我看到它兩次榮登 Hacker News 的榜首。它也是 /r/javascript 上最熱門的文章,并且截至目前它在 Medium 上有超過 10K 個喜歡 - 可能比我自己所有文章加在一起還要多。但是誰在乎呢?
不過這不足為奇:我早就知道 JavaScript 生態(tài)圈會讓人困惑。實際上,我做 JavaScript 2016年的概況調查的最大原因就是想找到哪些庫是真正流行的,去蕪存菁。
但是今天,我想更進一步。只是抱怨事物的狀態(tài)并沒有什么卵用,我打算給你一個實實在在的、一步一步征服 JavaScript 生態(tài)圈的學習計劃。
目標人群如果你是如下之一,那么本學習計劃就是為你定制的:
你已經熟悉了基礎編程概念,比如變量和函數(shù)。
你可能已經用諸如 PHP 和 Python 之類的語言做過后臺的工作,并且可能為一些簡單技巧用過諸如 jQuery 這種前端庫。
你現(xiàn)在想從事一些更正規(guī)的前端開發(fā),但是在開始之前就被框架和庫淹沒。
我們將講解的事情一個現(xiàn)代 JavaScript Web 應用看起來像什么樣子
為什么你不能只用 jQuery
為什么 React 是最安全的選擇
為什么你也許不需要先“正確地學習 JavaScript“
如何學習 ES6 語法
為什么要以及如何學習 Redux
GraphQL 是什么以及為什么它是一個大事
之后該學什么
這里提到的資源聲明:本文將包含一些對 Wes Bos 所做課程的附屬鏈接,但是我推薦他的素材是因為我真心認為不錯,而不是為了推廣。
如果你想找其它資源,那么可以看看 Mark Erikson 維護的一份 React、ES6 和 Redux 的長長鏈接列表。
此 JavaScript 非彼 JavaScript在開始之前,我們需要確保我們談論的是同一件事情。如果你搜索 "學習 JavaScript" 或者 "JavaScript 學習計劃",會找到大量教你如何學習 JavaScript 語言 的資源。
但是這實際上是 簡單的 部分。你肯定可以深入挖掘和學習這門語言中復雜的部分,然而事實是大多數(shù) web 應用只用了相對簡單的代碼。換句話說,為編寫 web 應用,你所需的 80% 知識通常只涉及標準 JavaScript 書的前幾章。
最難搞定的是掌握 JavaScript 生態(tài)圈,這個生態(tài)圈有不計其數(shù)的競爭性的框架和庫。好消息是,這剛好是本學習計劃關注的問題。
JavaScript 應用的構建單元要理解為什么現(xiàn)代 JavaScript 應用好像如此復雜,你首先得理解它們的工作機制。
對于初學者,我們來看看大約在 2008 年的“傳統(tǒng)” web 應用:
數(shù)據(jù)庫發(fā)送數(shù)據(jù)給你的后臺(比如你的 PHP 或者 Rails 應用)。
后臺讀取該數(shù)據(jù),并輸出 HTML。
HTML 被發(fā)送給瀏覽器,瀏覽器將其顯示為 DOM(即,網頁)
現(xiàn)在很多這種應用也會在客戶端塞進一些 JavaScript 代碼來添加交互性,比如標簽和模態(tài)窗口。但是從本質上講,瀏覽器依然是接收 HTML 并且從這里開始。
現(xiàn)在把它與“現(xiàn)代" 2016年的 Web 應用(也稱為"單頁應用“)比較:
注意到區(qū)別沒有?服務器現(xiàn)在是發(fā)送數(shù)據(jù),而不是發(fā)送 HTML,并且“數(shù)據(jù)到HTML"轉換步驟發(fā)生在客戶端 (這也是為什么你要把數(shù)據(jù)與代碼一起發(fā)送,告訴客戶端如何執(zhí)行所說的轉換)。
這有很多含義。首先,好的部分是:
對于給定內容塊,只發(fā)送數(shù)據(jù)比發(fā)送整個 HTML 頁面更快。
客戶端可以立即切換內容,而不需要像以前那樣刷新瀏覽器窗口(這也是術語“單頁應用”的由來)。
壞的部分是:
首次加載更長,因為"數(shù)據(jù)到 HTML”代碼庫會變得很大。
你現(xiàn)在也需要一個地方來存儲和管理客戶端上的數(shù)據(jù),從而方便緩存或者檢查它。
而惡心的部分是:
恭喜 - 你現(xiàn)在不得不處理客戶端技術棧,這會變得跟服務器端技術棧一樣復雜。
客戶端-服務器光譜那么,既然有這么多缺點,為什么要受這種罪呢?為什么不就沿襲過去 PHP 應用的老套路呢?
好吧,假設你正在寫一個計算器。如果用戶想知道 2 + 2 是多少,那么當瀏覽器完全有能力做這種事情的時候,回到服務器執(zhí)行這種操作然后再返回過來就很毫無意義了。
另一方面,如果你只是創(chuàng)建一個純靜態(tài)網站,比如博客,那么直接在服務器上生成最終的 HTML 就挺合適的。
事實是,大多數(shù) web 應用介于光譜的中間地帶。問題是要知道在哪里。
但是關鍵的事情是 這個光譜是不連續(xù)的 :你不能從一個純服務器端應用開始,慢慢走向一個純客戶端應用。在某個點(分水線 divide),你會被強制停下來,重構所有東西,否則會以一大堆不可維護的意大利面條式的代碼而告終。
這就是為什么你不應該不管做什么都只用 jQuery 的原因。你可以把 jQuery 當作是牛皮膠布。用它對付家里的小修小補還是很方便,但是如果你到處貼就很難看了。
另一方面,現(xiàn)代 JavaScript 框架更像 3D 打印的一個替換零件:要花更長時間,但是結果是更干凈更堅固。
也就是說,掌握現(xiàn)代 JavaScript 技術棧是個賭注,不管從哪里開始,大多數(shù) web 應用 可能 遲早都會出現(xiàn)在分水線的右邊。所以,是的,要干的活更多了,但是有備無患更好。
第 0 周: JavaScript 基礎除非你是一名純后臺開發(fā)者,否則你可能會了解點 JavaScript。當然,即使你不了解,如果你是一名 PHP 或者 Java 開發(fā)者,JavaScript 的類 C 語法也會看起來有點熟悉。
但是如果 JavaScript 對你來說是完全摸不著頭腦,也不要灰心。有很多免費資源在那,可以快速讓你了解最新情況。比如,一個不錯的出發(fā)點是 Codecademy 的 JavaScript 課。
第 1 周: 從 React 開始現(xiàn)在知道了基礎 JavaScript 語法,而且你理解了為什么 Javascript 應用顯得那么復雜,下面我們詳談。到底要從哪里開始呢?
我相信答案是 React。
React 是一個由 Facebook 創(chuàng)建和開源的 UI 庫。也就是說,它負責“數(shù)據(jù)到HTML"這一步(視圖層)。
現(xiàn)在不要誤會我:我不是告訴你因為 React 是 最好 的庫,所以要選它(因為這太主觀了),而是因為它是 相當不錯 。
React 也許不是最流行的庫,但是它是相當流行的。
React 也許不是最輕量級的庫,但是它是相當輕量級的。
React 也許不是最容易學的,但是它是相當容易學的。
React 也許不是最優(yōu)雅的庫,但是它是相當優(yōu)雅的。
也就是說,React 也許并非是所有情況的 最佳 選擇,但是我相信它是最 安全 的。相信我,"就在你剛開始的時候"并不是承擔技術選擇風險的最佳時間。
React 也會給你介紹一些有用的概念,比如組件、應用程序狀態(tài)、無狀態(tài)函數(shù)。不管在你職業(yè)生涯期間最終使用哪個框架或者庫,這些概念都會被證明是有用的。
最后,React 有一個很大的生態(tài)圈,這個生態(tài)圈還包括其它可以與 React 配合得很好的包和庫。并且它的完全普及意味著你可以在 Stackoverflow 這類網站上找到很多幫助。
我個人推薦 We Bos 的 React初學者課程。我自己就是看這個課程學的,而且它剛剛用最新的 React 最佳實踐徹底修訂過。
你應該首先“正確地學習 JavaScript” 嗎?如果你是一個按部就班的學習者,你可能想在做其它事情之前很好地掌握 JavaScript 的基本原理。
但是對于其它人來說,這就好像是學游泳的時候學習人體解剖學和流體動力學一樣。確實,這二者都在游泳中起了很大的作用,但是跳到游泳池里會更好玩!
這里沒有正確或者錯誤的答案,一切都取決于你的學習方式。事實是,反正最基礎的 React 教程可能會只用到 JavaScript 很小的一個子集,所以只關注你現(xiàn)在需要的,剩下的以后再說,這樣會更好。
這也適用于整個 JavaScript 生態(tài)圈。現(xiàn)在先不要對理解像 Webpack 或者 Babel 這些東西的來龍去脈操太多心。實際上 React 最近推出了它自己的小命令行工具,用這個工具你完全不需要構建任何配置,就可以創(chuàng)建應用。
第 2 周: 你的第一個 React 項目下面我們假設你剛完成了一個 React 課程。如果你跟我一樣,那么兩件事情可能是真的:
你已經把你剛學的內容忘掉了一半。
你迫不及待要把你記得的一半用于實踐。
我相信學習一個框架或者一門語言的最好方式是馬上就用它。而個人項目是嘗試新技術的完美時機。
個人項目可以是任何東西,小到一個簡單頁面,大到一個復雜的 Web 應用,但是我認為重新設計你的個人網站可能是一個剛剛好。并且,我知道你可能已經把你的個人網站擱置多年了!
我之前提到過,用單頁應用模式開發(fā)靜態(tài)內容確實有點大材小用,不過 React 實際上有一款秘密武器:Gatsby。這是一個 React 靜態(tài)網站生成器,可以體驗一下 React 的所有優(yōu)點。
使用 Gatsby 來上手 React 有如下幾個好處:
預先配置好的 Webpack,意味著你要省下來很多麻煩事。
基于目錄結構自動生成路由。
所有 HTML 內容也是由服務器端生成的,所以你得到了兩全其美的結果。
靜態(tài)內容意味著不需要服務器,可以很簡單的托管在 GitHub Pages上。
我就是用 Gatsby 搞定 State Of JavaScript 網站,完全不需要操心路由、構建工具的配置,以及服務器端渲染,為我節(jié)省了大把時間。
第 3 周: 掌握 ES6在我自己學習 React 的探索中,我很快就發(fā)現(xiàn)我可以很輕松地復制粘貼代碼示例,但是有很多東西我仍然不懂。
特別是,我對 ES6 引入的一些新功能不太熟悉,比如:
箭頭函數(shù)
對象解構
類
展開運算符
如果你處境相同,那么可能到了要花幾天學習一下 ES6 的時候了。如果你喜歡 React 初學者課程,你可能想掏錢看看 Wes 的優(yōu)秀視頻 ES6 for Everybody。
或者如果你喜歡免費資源的話,那就看看 Nicolas Bevacqua 的書《Practical ES6》。
掌握 ES6 的一個好練習是翻一下較早的代碼庫(比如你在第一周創(chuàng)建的!),盡可能將代碼轉換為 ES6 的更短、更簡潔的語法。
第 4 周: 掌握狀態(tài)管理到了這里,你應該有能力創(chuàng)建一個支持靜態(tài)內容的簡單 React 前端了。
但是真正的 Web 應用不會是靜態(tài)的:它們需要從某個地方獲取數(shù)據(jù),通常是某種類型的數(shù)據(jù)庫。
現(xiàn)在你只能向一個組件發(fā)送數(shù)據(jù),但是這很快會變得很糟糕。比如,如果兩個組件需要顯示同一塊數(shù)據(jù)該怎么辦?或者二者兩個組件需要相互對話該怎么辦?
這就是狀態(tài)管理起作用的地方。你可以把狀態(tài)(換句話說,就是數(shù)據(jù))存儲到一個全局的倉庫中,然后將其分發(fā)到你的 React 組件中,而不是一點一點存儲在每個組件中:
在 React 陣營中,最熱門的狀態(tài)管理庫是 Redux。Redux 不僅可以幫助你集中管理數(shù)據(jù),還可以對數(shù)據(jù)的操作制定嚴格的協(xié)議。
可以地把 Redux 當作是一個銀行:你不能到本地的分行,手動修改你的賬戶總額(“嘿,就讓我多加幾個零吧!”)。而是填寫一個存款單,然后把它交給授權執(zhí)行該操作的銀行出納員。
同樣,Redux 也不允許你直接修改全局狀態(tài)。而是將 action 傳遞給 reducer。reducer 是一個特殊的函數(shù),它執(zhí)行修改狀態(tài)的操作,返回新的更新了的狀態(tài)為結果。
所有這些額外工作帶來的是整個應用中高度標準化和可維護的數(shù)據(jù)流,并且數(shù)據(jù)流可以通過訪問 Redux Devtools 這類工具來可視化:
你可以再次與我們的朋友 Wes 在一起,用他的 Redux 課程來學習 Redux,這套課程是完全免費的。
或者,你可以用 Redux 的發(fā)明人 Dan Abramov 在 egghead.io 上的視頻課程來學習。這套課程也是免費的。
第 5 周: 用 GraphQL 創(chuàng)建 API迄今為止,我們差不多只談及了客戶端,這只是等式的一半。即使你不需要完全掌握整個 Node 生態(tài)圈,也需要了解對于任何 Web 應用都很關鍵的一點:數(shù)據(jù)是如何從服務器到客戶端的。
毫不奇怪,這個環(huán)節(jié)也是快速變化的。此時,F(xiàn)acebook 的另一個開源項目 GraphQL 應運而生,成為傳統(tǒng) REST API 的一個重要替代物。
REST API 暴露多個 REST 路由,每個路由讓你可以訪問一個預定義的數(shù)據(jù)集(比如,/api/post、/api/comments 等等)。而 GraphQL 只暴露一個端點,讓客戶端可以通過這一個端點查詢它所需的數(shù)據(jù)。
就好像你要買很多東西,REST API 就是多次來回肉店、面包店、小賣部,而 GraphQL 就是給某人一個購物清單,然后把他送到這三個地方。
當你需要查詢多個數(shù)據(jù)源的時候,這種新策略就變得特別有意義了。就像購物清單示例一樣,現(xiàn)在你可以用一個請求,從所有這些數(shù)據(jù)源獲取數(shù)據(jù)。
GraphQL 在過去一年左右的時間已經日益受歡迎,很多項目(比如我們第二周所用的 Gatsby)都在計劃采用它。
GraphQL 本身只是一個協(xié)議,但是目前它的最佳實現(xiàn)可能是 Apollo 庫。這個庫能與 Redux 很好地配合。有關 GraphSQL 和 Apollo 的教學材料依然很少,但是希望 Apollo 文檔 能幫你開始。
除了 React 及其生態(tài)圈外我推薦你從 React 生態(tài)圈開始,是因為它是安全的選擇。但是,它絕非是唯一有效的前端技術棧。如果你想繼續(xù)探索的話,這里還有兩個推薦:
VueVue 是一個相對比較新的庫,但是它正以創(chuàng)記錄的速度增長,而且已經被大公司采納。特別在中國,它正被像百度和阿里巴巴(被認為是中國的谷歌和中國的亞馬遜)這樣的公司采用。并且它還是 PHP 框架 Laravel 的官方前端層。
與 React 相比,它的一些關鍵賣點是:
官方維護的路由和狀態(tài)管理庫。
關注于性能。
較低的學習曲線(由于使用的是基于 HTML 的模板)。
較少的樣板代碼。
按照現(xiàn)在的情況,依然讓 React 比 Vue 占優(yōu)勢的兩個主要因素是 React 生態(tài)圈的大小,以及 React Native (稍后會詳細介紹)。但是我會好不吃驚地看到 Vue 會很快趕上!
Elm如果說 Vue 是更平易近人的選項,那么 Elm 就是更前沿的選項。Elm 不僅是一個框架,還是一個編譯到 JavaScript 的全新語言。
這帶來不少優(yōu)點,比如性能提升、強制語義版本控制以及無運行時異常。
我本人還沒有試過 Elm,但是我的朋友們都給我熱烈推薦它。并且 Elm 用戶通常看起來對它很滿意(JavaScript 2016的概況調查中展示 Elm 有 84% 的滿意度)。
下一步到這里你應該已經很好地掌握了整個 React 前端技術棧,并且有希望用它帶來相當?shù)漠a出。
但是這并不意味著這就完事了!這只是 JavaScript 生態(tài)圈旅程的開端。你會逐漸遇到一些其它主題,包括:
服務器端的 JavaScript (Node、Express…)
JavaScript 測試 (Jest、Enzyme…)
構建工具 (Webpack…)
類型系統(tǒng) (TypeScript、Flow…)
處理 JavaScript 應用中的 CSS (CSS 模塊、樣式化的組件Styled Components…)
JavaScript 移動應用開發(fā) (React Native…)
JavaScript 桌面應用開發(fā) (Electron…)
我不可能在這里就涵蓋所有這些內容,但是不要灰心!第一步總是最艱難的,你猜怎么著:你已經通過閱讀本學習計劃,跨出了第一步。
現(xiàn)在你理解了如何把生態(tài)圈中不同部分組合在一起,這不過就是將你下一步想學習的內容排隊,并且每個月搞定一個新技術。
保持聯(lián)系這個學習計劃對你有幫助嗎?你希望我下一次寫 JavaScript 的哪一塊?請在這里,或者在 我的推特 上留下評論,讓我知道。
如果你想知道下一次我要發(fā)表什么文章,也可以注冊 the State Of JavaScript 郵件列表。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/84883.html
摘要:前端日報精選理解的專題之偏函數(shù)譯理解事件驅動機制游戲開發(fā)前端面試中的常見的算法問題發(fā)布中文前端頁面?zhèn)鲄⑸袏y產品技術刊讀基礎系列二之實現(xiàn)大轉盤抽獎掘金指南眾成翻譯編程插入排序眾成翻譯源碼講解函數(shù)技術風暴初體驗個人文 2017-08-16 前端日報 精選 理解 JavaScript 的 async/awaitJavaScript專題之偏函數(shù)[譯]理解 Node.js 事件驅動機制Pokem...
摘要:理解承諾有兩個部分。如果異步操作成功,則通過的創(chuàng)建者調用函數(shù)返回預期結果,同樣,如果出現(xiàn)意外錯誤,則通過調用函數(shù)傳遞錯誤具體信息。這將與理解對象密切相關。這個函數(shù)將創(chuàng)建一個,該將在到秒之間的隨機數(shù)秒后執(zhí)行或。 想閱讀更多優(yōu)質文章請猛戳GitHub博客,一年百來篇優(yōu)質文章等著你! showImg(https://segmentfault.com/img/bVbkNvF?w=1280&h=...
摘要:理解承諾有兩個部分。如果異步操作成功,則通過的創(chuàng)建者調用函數(shù)返回預期結果,同樣,如果出現(xiàn)意外錯誤,則通過調用函數(shù)傳遞錯誤具體信息。這將與理解對象密切相關。這個函數(shù)將創(chuàng)建一個,該將在到秒之間的隨機數(shù)秒后執(zhí)行或。 想閱讀更多優(yōu)質文章請猛戳GitHub博客,一年百來篇優(yōu)質文章等著你! showImg(https://segmentfault.com/img/bVbkNvF?w=1280&h=...
摘要:編者按本文作者為,主要介紹告警疲勞的產生原因與對抗告警疲勞的種方法。告警疲勞不僅會影響團隊成員的工作情緒,而且會阻礙軟件交付鏈的成長。利用工具事件管理工具對抵抗告警疲勞大有幫助。 【編者按】本文作者為 Chris Riley,主要介紹告警疲勞的產生原因與對抗告警疲勞的8種方法。文章系國內 ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。 各司其職、孤軍作戰(zhàn)非常不利于團隊溝通,一旦發(fā)生重大事...
摘要:年月日,正式開始了前端編程生涯,距今恰好一年。關注的話題卻不再是純粹的編程,而是從編程變成了養(yǎng)生編程,畢竟生活不能只有代碼,還有健康家庭和未來。編程本就是份高危行業(yè),的風波影響至今猶在。2018 年 5 月 2 日,jsliang 正式開始了前端編程生涯,距今恰好一年。 關注的話題卻不再是純粹的編程,而是從編程變成了養(yǎng)生編程,畢竟生活不能只有代碼,還有健康、家庭和未來。 一 目錄 目錄...
閱讀 2864·2021-09-22 15:43
閱讀 4781·2021-09-06 15:02
閱讀 854·2019-08-29 13:55
閱讀 1687·2019-08-29 12:58
閱讀 3074·2019-08-29 12:38
閱讀 1257·2019-08-26 12:20
閱讀 2272·2019-08-26 12:12
閱讀 3321·2019-08-23 18:35