天天看點

如何正确學習JavaScript

既然你找到這篇文章來,說明你是真心想學好JavaScript的。你沒有想錯,當今如果要開發現代網站或web應用(包括網際網路創業),都要學會JavaScript。而面對泛濫的JavaScript線上學習資源,卻是很難找到一份高效而實用的方法去學習這個“web時代的語言”。

有一點需要注意,幾年前我們需要知道一個真正的伺服器端語言(比如PHP,Rails,Java,Python 或者 Perl)去開發可擴充,動态的,資料庫驅動的web應用,而現在隻用JavaScript就可以實作了。

學習時長:6~8周

學習前提:中學水準,無需程式設計經驗

在Reddit上建立了一個學習小組

January 2014, “Learn JavaScript” Study Group on Reddit

目錄

上面的課程大綱提供了一個結構化和富有啟發性的學習線路,從初學者到有所建樹,把JavaScript學對學透。

不要一開始就埋頭在成堆的JavaScript線上教程裡 ,這是最糟糕的學習方法。或許在看過無數個教程後會有點成效,但這樣不分層次結構地學習一個東西實在是十分低效,在實際用JavaScript建立網站或web應用時你還是會頻繁的卡住。總的來說,這種學習方法會讓人不知道如何将語言當做工具來使用——當做個人工具來用。

另外,也許有人會建議從尊敬的JavaScript教父Douglas Crockford寫的《JavaScript語言精粹》開始學習JavaScript。然而,雖然Crockford先生對JavaScript無所不知,被譽為JavaScript世界的愛因斯坦,但他的《JavaScript語言精粹》并不适合初學者學習。這本書沒有通透、清晰、明了的闡述JavaScript的核心概念。但對于更進階的學習路線,我倒會建議你看看Crockford先生的視訊。

還有,不要隻從Codecademy等網站學習JavaScript,因為即使知道怎麼編寫一大堆JavaScript代碼小片段,還是不能學會怎麼建立一個web應用程式。即便如此,在後面我還是會建議把Codecademy當做補充的學習資源。

更新:Reddit使用者

d0gsbody

4月8号在Reddit上建立了一個學習小組。他和其他組員都非常積極和樂于助人。我建議你加入這個小組,他們會讓你保持積極性且幫助你更好的學習JavaScript。畢竟獨自折騰JavaScript還是有點難度的。連結:

Learning JS Properly – Study Group on Reddit
  • 請在以下兩本書中選一本,第一本比較适合有程式設計經驗的人,而另一本則适合完全沒有程式設計經驗的初學者。我個人推薦第一本書,因為作者對各個知識點都闡述得非常好且涵蓋了一些進階JavaScript知識點。但是,要看懂這本書你至少要對web開發有一定的基本了解。是以,如果你有一點點程式設計經驗或者web開發經驗(不一定是JavaScript),那就買這本書吧。
  • 如果你沒有程式設計經驗,可以買這本:
  • 免費注冊 Stack Overflow ,這是一個程式設計領域的問答論壇。在這裡提問題得到的回答比Codecademy要好,哪怕你的問題非常基礎,看起來很傻(記住,從來沒有愚蠢的問題)。
  • Codecademy ,這是一個線上學習平台,你可以直接在浏覽器裡面寫代碼。
  • JavaScriptIsSexy 上的一些博文,包括對象,閉包,變量的作用域和提升,函數等等。

JavaSctipt學習路線

完成整個課程大綱需要花上6~8周的時間,将學會完整的JavaScript語言(包括jQuery和一些HTML5)。如果你沒有時間在6個星期裡完成所有的課程(确實比較有挑戰性),盡量不要超過8個星期。花的時間越長,掌握和記憶各種知識點的難度就越大。

  1. 如果你還不是很了解HTML和CSS,完成Codecademy上的 web基礎 任務。
  2. 閱讀《JavaScript權威指南》或者《JavaScript進階程式設計》的前言和第1~2章。
  3. 十分重要:在書中遇到的每個樣例代碼都要動手敲出來并且在火狐或Chrome浏覽器控制台中跑起來、盡量蹂躏它(做各種試驗)。也可以用 jsfiddle ,但不要用Safari浏覽器。我建議用火狐搭配 Firebug插件 去測試和調試代碼。浏覽器控制台就是可以讓你編寫和運作JavaScript代碼的地方。
  4. 完成Codecademy JavaScript Track 上的

    Introduction to JavaScript

    部分。
  5. 閱讀《JavaScript權威指南》第3~4章。或者閱讀《JavaScript進階程式設計》第3~4章。你可以跳過

    位操作

    部分,在你的JavaScript生涯中一般不會用上這個。

再次說明,記得要不時停下來把書本的代碼敲到浏覽器控制台裡(或者JSFiddle)做各種測試,可以改變幾個變量或者把代碼結構修改一番。

  1. 閱讀《JavaScript權威指南》第5章。至于《JavaScript進階程式設計》則暫時沒有閱讀任務,因為前面已經把相關知識覆寫了。
  2. 上的2~5部分。

  1. 以下三選一:
    • 閱讀我的博文 JavaScript 對象詳解 .
    • 閱讀《JavaScript權威指南》第6章。
    • 閱讀《JavaScript進階程式設計》第6章。注意:隻需要看“了解對象”(Understanding Objects)部分。

兩本書會涉及更多的一些細節,但隻要看完我的博文,你可以完全放心地跳過這些細節。

  1. 閱讀《JavaScript權威指南》第7~8章或者《JavaScript進階程式設計》第5和7章。
  2. 此時,你應該花大量時間在浏覽器控制台上寫代碼,測試if-else語句,for循環,數組,函數,對象等等。更重要的是,你要鍛煉和掌握獨立寫代碼,不用借助Codecademy。在Codecademy上做題時,每個任務對你來說應該都很簡單,不需要點幫助和提示。如果你還卡在Codecademy上,繼續回到浏覽器上練習,這是最好的學習方法。就像詹姆斯年輕時在鄰居的籃球場上練球,比爾蓋茨在地下室裡學習程式設計。

持續地練習,這一點點的進步積累起來效果會非常驚人。你要看到這個政策的價值,相信它是可行的,全心投入進去。

**Codecademy會造成已掌握的錯覺。**

使用Codecademy最大的問題是,它的提示和代碼小片段會讓人很容易就把答案做出來,造成一種已經掌握這個知識點的錯覺。你可能一時看不出來,但這樣做你的代碼就不是獨立完成的了。

但目前為止,Codecademy依然是學習程式設計的好幫手。特别是從一些基本的代碼結構如if語句,for循環,函數和變量去指導你了解小項目和小應用的開發過程。

  1. 回到Codecademy完成JavaScript路線。做完6~8部分(資料結構做到Object 2)。
  2. 實作Codecademy上 Projects 路線的5個基礎小項目(Basic Projects)。做完之後,你已不再需要Codecademy了。這是一件好事,因為自己做的越多,學得就越快,就能更好準備開始獨立程式設計。
  3. 閱讀《JavaScript權威指南》第13,15,16和19章。或者閱讀《JavaScript進階程式設計》第8,9,10,11,13和14章。這本書沒有涉及到jQuery,而Codecademy上的jQuery知識也覆寫得不夠。可以看看jQuery的官方教程,免費的: http://try.jquery.com/ http://try.jquery.com/

你也可以在《JavaScript權威指南》第19章了解更多的jQuery知識。

  1. 完成全部的jQuery教程 http://try.jquery.com/

  • 在你實作第一個項目之前,如果打算以後做JavaScript開發者或者經常用到JavaScript,最好現在就去下載下傳 WebStorm 的試用版。 這裡 可以學習怎麼使用WebStorm(專門為這個課程寫的)。毋庸置疑,WebStorm是JavaScript程式設計最好的編輯器(或IDE)。30天試用後要付$49.00,但作為JavaScript開發者,這應該是除了買書以外最明智的投資了。
  • 確定在WebStorm中啟用JSHint。JSHint是一個檢查JavaScript代碼錯誤和潛在問題的工具,強制你的團隊按照規範寫代碼。用WebStorm最爽的地方是JSHint會自動在錯誤的代碼下顯示紅線,就像文字處理程式中的拼寫檢查。JSHint會顯示一切的代碼錯誤(包括HTML),促使你養成良好的習慣,成為更好的JavaScript程式員。這很重要,當你真正意識到WebStrom和JSHint對你的巨大幫助時,你會回來感謝我的。
  • 此外,WebStorm是一個世界級,專業人員使用的IDE,用來編寫專業的JavaScript web應用,是以你以後會經常用到它。它還結合了Node.js,Git和其它JavaScript架構,是以即使你成為了明星級的JavaScript開發者,你還是會用到它的。除非以後出現了更多的JavaScript IDE。
  • 公平起見,我在這裡提一下 Sublime Text 2 ,這是僅次于WebStorm的JavaScript編輯器。它的功能不及WebStorm豐富和完整(即使添加了一堆插件)。做小修改的時候我會用到Sublime Text 2,它支援很多語言,包括JavaScript,但我不會用它來建構完整的JavaScript Web應用。

此時,你已經掌握了足夠的知識去建立一個穩固的,可維護的web應用。在做完我為你設計的這個應用之前不要看後面的章節。如果你卡住了,去Stack Overflow提問并且把書上相關的内容重新看一遍直到完全了解這些概念。

接下來開始建立一個JavaScript問答應用(還會用到HTML和CSS),功能如下:

// 這裡隻示範一個問題,你要把所有問題都添加進去

   var allQuestions = [

       {

          question: "Who is Prime Minister of the United Kingdom?",

          choices: [

              "David Cameron",

              "Gordon Brown",

              "Winston Churchill",

              "Tony Blair"],

          correctAnswer: 0

       }

   ];

  • 當使用者點選“Next”時,使用document.getElementById或jQuery動态的添加下一個問題,并且移去目前問題。在這個版本裡“Next”是唯一的導航按鈕。
  • 你可以在本文下方評論求助,最好是去Stack Overflow提問,在那裡會有及時而準确的回答。

  1. 閱讀《JavaScript權威指南》第10,14,17,20章。

或者閱讀《JavaScript進階程式設計》第20,23章。

  1. 記得要把樣例代碼敲到浏覽器控制台上,盡可能蹂躏它,做各種測試,直到完全了解它是怎麼工作,它能幹些什麼。
  2. 此時,你用起JavaScript來應該很順手,有點像武林高手要出山了。但你還不能成為高手,你要把新學到的知識反複使用,不停的學習和提升。
  3. 更新之前做的問答應用
    • 添加用戶端資料驗證:保證使用者回答了目前問題才能進入下個問題。
    • 添加“Back”按鈕,允許使用者傳回修改答案。最多可以傳回到第一個問題。注意對于使用者回答過的問題,選擇按鈕要顯示被選中。這樣使用者就無需重新回答已經答過的問題。
    • 用jQuery添加動畫(淡出目前問題,淡入下個問題)
    • 在IE8和IE9下測試,修改bug,這裡應該會有得你忙了。 ;D
    • 把問題導出JSON檔案
    • 添加使用者認證,允許使用者登陸,把使用者認證資訊儲存在

      本地存儲

      (local storage,HTML5浏覽器存儲)。
    • 使用cookies記住使用者,當使用者再次登陸時顯示“歡迎

      使用者名

      回來”。

  1. 閱讀《JavaScript權威指南》第9,18,21,22章。

或者閱讀我的博文

JavaScript面向對象必知必會

或者閱讀《JavaScript進階程式設計》第6,16,22,24章,第6章隻讀“建立對象”(Object Creation)和“繼承”(Inheritance)部分。注意:這部分是本課程中技術性強度最大的閱讀,要根據自身的狀況考慮要不要全部讀完。你至少要知道原型模式(Prototype Pattern),工廠模式(Factory Pattern)和原型繼承(Prototypal Inheritance),其它的不作要求。

  1. 繼續更新你的問答應用:
    • 頁面布局使用 Twitter Bootstrap ,把問答的元素弄得看起來專業一些。而作為額外獎勵,用Twitter Bootstrap的 标簽控件 (譯者注:原文位址失效,已改)顯示問題,每個标簽顯示一個問題。
    • 學習 Handlebars.js ,将Handlebars.js模闆用在問答應用上。你的JavaScript代碼中不應該再出現HTML代碼了。我們的問答應用現在越來越進階啦。
    • 記錄參加問答的使用者成績,展示使用者在問答應用中與其他使用者的排名比較。
  1. 在學完Backbone.js和Node.js後,你會用這兩種最新的JavaScript架構重構問答應用的代碼,使之變成複雜的單頁面現代web應用。你還要把使用者的認證資訊和成績儲存在MongoDB資料庫上。
  2. 接下來:構思一個項目,趁熱打鐵迅速的去開發。卡住的時候參考《JavaScript權威指南》或者《JavaScript進階程式設計》。當然,還要成為Stack Overflow的活躍使用者,多問問題,也要盡量回答其它人的提問。

  1. 精通backbone.js
  2. 中進階JavaScript進階
  3. 不側漏精通Node.js

祝你學習順利,永不放棄!當你做不下去覺得自己很蠢的時候(你會時不時這麼想的),請記住,世界各地的其他初學者,甚至是有經驗的程式員,也會不時産生這種想法的。

如果你是完全的初學者,特别是過了青少年時期的人,開始寫代碼的時候也許很困難。年輕人無所畏懼,也沒有什麼負擔,他們可以花大量的時間在喜歡的東西上。是以各種挑戰對他們來說也不過是短暫的障礙罷了。

但過了青少年期後你會希望快速的見到成效。因為你沒有這麼多的時間去花上幾個小時就為了搞清楚一些細節的東西。但這些東西你必須深入去了解它,不要是以沮喪,堅持完成課程的任務,把bug都找出來,直到你完全了解。當你到達勝利的彼岸時,你會知道這一切都是值得的,你會發現程式設計非常有趣而且在上面花的時間都會得到可觀的回報。

一個人必須去感受和領悟建構程式帶來的強烈快感。當你一步步的掌握知識點,一點點的将程式搭建起來時,就會對自己産生激勵與肯定,帶來十分美妙的滿足感。

總有一天你會意識到之前忍受的所有困難都是值得的。因為你将要成為一名光榮的程式員,你也清楚作為JavaScript開發者,你的前途一片光明。就像在你之前成千上萬的程式員一樣,你打敗了最難的bug,你沒有退步,你沒有放手,你沒有找任何借口讓自己放棄。

當你學有所成的時候,放心的将你的成果分享給我們吧,哪怕是個微不足道的,小到顯微鏡都看不到的小項目。