Limu:JavaScript的那些書

又很久沒寫東西了 ,寫上一篇的時候還覺得接下來的工做會輕鬆一些 ,結果未從我所願吶 ,又是一陣忙碌。而這段時間穿插着作了不少12年淘寶校園招聘的前端面試 ,不少同窗都有問到 ,學校裏沒有前端的課程 ,那如何學習JavaScript?javascript

個人回答是:讀書吧!相對於在網上學習 ,在項目中學習和跟着有經驗的同事學習 ,書中有着相對完整的知識體系 ,每讀一本好書都會帶來一次全面的提升。而若是深一腳淺一腳的學習 ,寫出代碼的質量會良莠不齊。初學者的首要任務是成爲靠譜的熟練開發者 ,可以穩定的輸出有必定質量的代碼 ,這樣才能讓人放心的把任務交給你。從這個角度來看 ,跟着w3school類成體系的網絡教程學習也是不錯的選擇 ,只不過我沒有親自實踐過。css

在07年以前 ,我是在作IEonly的企業級B/S應用 ,雖然當時項目的JScript就已經很是複雜 ,但當時團隊裏有不少經驗豐富的同事 ,可能是跟他們請教 ,或者再MSDN和網上找答案。07年進入阿里以後 ,開始直面兼容性問題 ,同時開始單打獨鬥 ,這個階段開始接觸相關的前端書籍 ,最早購買的是《JavaScript高級程序設計》和《JavaScript DOM 編程藝術》。能夠說比較幸運 ,挑中了這兩本很靠譜的書(其實當時市面上書籍並很少 ,感謝選擇出版這些書和翻譯這些書的同窗們) ,近來這兩本書都出了第二版其生命力可見一斑。html

這幾年來 ,自認讀的前端方面的書不算少 ,校招同窗們問到有什麼書推薦 ,我仍是會列幾個批次的書籍出來給你們 ,在這裏公佈一下 ,無法說這是最優學習路線 ,但真看進去了得到一個IT民工從業資格是沒啥問題的。咱也先秀下書架吧(喜歡紙質書 ,能夠翻舊 ,能夠塗塗寫寫 ,能夠折上幾個頁角 ,能夠歪在一邊用任何得勁兒的姿式看):前端

Limu:JavaScript的那些書

說說我對於書的選擇 ,在從高級程序設計以及DOM編程藝術得到了較好的用戶體驗以後 ,基本上延續了選擇譯著的路子 ,屬順勢而爲倒沒有什麼特殊的因素在裏頭。而我通常不會推薦英文原版書 ,中文更具親和力 ,JavaScript並非一門多麼高深的語言 ,我相信譯者是能夠在深入理解原文的基礎上作翻譯的。我也會讀一些外文書 ,而每每當我知道一本不錯的書籍有了出版計劃 ,就會中止精讀 ,等譯做出版(好比不久前的《高性能JavaScript》)。不過確實有時會遇到術語翻譯不一致甚至翻譯的不通順的狀況 ,好在多書網上能夠找到英文電子版 ,實在不解之處對照一下也就能夠了。java

下面都是我精讀過且以爲不錯的書 ,先分分類再逐本分享下個人讀書心得:web

第一批次:入門級 ,也適合想掌握一些前端技能的非前端工程師。面試

《JavaScript DOM 編程藝術》正則表達式

第二批次:成爲一名合格的前端工程師編程

《JavaScript高級程序設計》(或《JavaScript權威指南》)設計模式

《精通JavaScript》

第三批次:更優秀的代碼 ,更優良的設計

《JavaScript語言精粹》

JavaScript設計模式

第四批次:從語言細節到複雜工程實踐 ,想開發靠譜的各種底層代碼 ,應該看看

《Secrets of the JavaScript Ninja》

《JavaScript Patterns》

《ECMA-262 in Detail》

應該重視跟蹤閱讀一些大牛們的Blog了(伯樂在線編注:這篇文章《你得學JavaScript》中有推薦兩位大牛的博客,Douglas Crick的博客 和 Angus Croll的JavaScript博客。)

一直在等待:一本JavaScript語言做者或引擎實現者寫的書。

番外篇:各種專題書籍 ,讀好第二批次書籍以後 ,有精力就接觸下

《高性能網站建設指南》

高性能網站建設進階指南

《高性能JavaScript》

Ajax實戰

《jQuery實戰》

《精通CSS》(或《CSS權威指南》)

正則表達式必知必會》(或《正則表達式權威指南》)

應該選擇:一本HTML5方面的書

應該選擇:一本NodeJS方面的書

《JavaScript DOM 編程藝術》

話說這本書的中文標題有一些標題黨的 ,當初若是知道這僅是一本入門書籍 ,我是不會買來的。拿到後一天就看完了 ,對我來講沒有太多技能上的實質幫助。不過這個書語言很流暢 ,重要的是對知識深淺度把握的很好 ,html/js/css/dom各個方面都把握在一個合適的度 ,這很符合我對書籍指望 ,一步步走 ,每一步都踏踏實實。

這本書經過幾個實例 ,按部就班的介紹了前端開發的方方面面 ,讓你們可以瞭解前端的技術體系概況 ,又能具有了一些簡單的動手能力。若是你們對我以前寫過的瀏覽器端技術體系概覽 — 前端開發的七種武器有些感受 ,那讀讀這本書正好能上手實踐一把。

去年淘寶前端懶懶交流會的豆瓣小站上作了一個調查 ,若是非要您推薦一本適合新人學習的js方面的書,您的推薦是什麼?雖然投票的人很少 ,但這本書倒是遙遙領先。

《JavaScript高級程序設計》

這本書的初版很全面且不枯燥的書籍 ,年紀輕輕的NCZ有這樣的大做難能難得。讀懂這本書 ,前端技能又能夠上一個臺階 ,基本上能夠成爲專業的前端工程師了。

對於當時的我來說 ,這本書及時的補充了瀏覽器兼容性方面的知識 ,特別是事件相關的知識 ,這個瀏覽器間差異最大。有些內容講的很是簡單明瞭 ,好比call和apply的用法 ,以前老是理解很差 ,NCZ幾句話+一個例子就說明白了。

然而做爲全面型的書籍 ,初版也是有一些問題的:

1. 閉包只半頁篇幅 ,沒說清楚。

2. 匿名函數沒怎麼講。

3. 全書沒提到constructor ,更別說hasOwnProperty ,__proto__。

這帶來了我以前說的深一腳淺一腳的困擾 ,這些知識基本上是經過《JavaScript權威指南》閱讀中補充的 ,固然當時版本的權威指南也有一樣的問題 ,好比它沒解釋instanceof。也沒提到__proto__。這形成了我對面向對象理解的不全面 ,當時在作了N多測試後還很蛋疼的寫了一篇博文<JavaScript constructor和instanceof,JSOO中的一對歡喜冤家> ,後來接觸到《JavaScript設計模式》關於OO的全面論述以後 ,果斷刪掉了這篇JY。

相信這本書的第二版 ,以及權威指南的第六版確定會在這些方面進行補充。不過這兩本書都是十足的大部頭 ,高級程序設計第二版已經比權威指南去除附錄要厚了。

一本全面且不枯燥的書太難找了 ,因此我仍是喜歡初版。對我技術上的提高幫助很是之大。忍不住再秀一張圖(當時在封閉開發Alimama。com ,馬雲時常來 ,他不願在書的第一頁簽名搞得好像他寫的 ,因而把簽名畫在了第二頁。)

精通JavaScript

我會把書籍分紅兩類 ,一類是全面型 ,一類是犀利型。前面介紹了一本全面型的書籍 ,接下來介紹的這本的特色是很是犀利 ,這類書籍的特色是做者能找對重點(2/8原則掌握的很好) ,在重點位置深刻挖掘。這本書的做者John Resig也是jQuery的做者 ,他顯然是個足夠犀利的人兒。

jQuery從未承諾解決全部問題 ,但再一些重點部位的突破 ,讓這個類庫如此流行。這本書並無着重介紹jQuery ,仍是基於原生的JavaScript和DOM API。

列一些這本書的重點話題 ,可以很好的看出做者爲何會開發出jQuery ,或者說jQuery爲何是如今的樣子:

1. 如何建立可複用的代碼?如何調試 ,測試?(這是基礎)

2. 如何判斷DOM什麼時候加載完畢?如何遍歷 ,修改DOM?(jQuery以DOM爲核心 ,節點的增刪改查 ,事件響應是重點)

3. 如何肯定元素的位置 ,相對於頁面/屏幕?如何作平滑的動畫?(思考下CSS相關的話題不少 ,做者爲何選了這兩個?)

4. 如何改進表單驗證 ,封裝完整的Ajax程序?(涉及數據交互 ,是另外一個重中之重。)

不算厚的一本書 ,基本上就是以上的話題+幾個實例。當咱們看過了一本全面型的書籍 ,對前端的知識有了深刻的瞭解以後 ,這本書的做者指出了從此的重點 ,並告訴你們如何把知識用到解決重點問題上。

JavaScript語言精粹

推薦你們看看阮一峯老師的博文《JavaScript誕生記》,JavaScript是Brendan Eich大神10天時間設計出的語言 ,如今成了Web前端領域的惟一語言。

一方面這門語言博採衆家之長 ,也幫助它維繫了長久的生命力:

「1. 借鑑C語言的基本語法;

2. 借鑑Java語言的數據類型和內存管理;

3. 借鑑Scheme語言,將函數提高到」第一等公民」(first class)的地位;

4. 借鑑Self語言,使用基於原型(prototype)的繼承機制。」

另外一方面」因爲設計時間過短,語言的一些細節考慮得不夠嚴謹,致使後來很長一段時間,Javascript寫出來的程序混亂不堪。」Brendan Eich對其這10天工做的評價是:」它的優秀之處並不是原創,它的原創之處並不優秀。」

Douglas Crockford經過《JavaScript: The Good Parts》這本書對JavaScript進行了一次大審判 ,老道認爲JavaScript語言有不少優秀的地方 ,也有一些雞肋和糟粕。老道不反對用這門語言 ,在規避一些雞肋和糟粕以後它天然是優秀的。
老道認爲JavaScript優美的特性以下:

1. 函數是頭等對象(能夠做爲其餘函數的參數和返回值 ,支持閉包)

2. 基於原型繼承的動態對象

3. 對象字面量和數組字面量(構成JSON的基礎)

老道列出了不少雞肋和糟粕 ,並提供了JSLint這個工具 ,來校驗代碼是否使用了很差的部分。書中給出的語法圖讓我有深刻學習一下<編譯原理>的衝動 ,也理解了JSLint做爲用JS語言分析JS語言的工具成型的理論基礎。

強烈建議你們使用JSLint來檢測本身的代碼 ,可是咱們沒必要教條 ,能夠違返其中一些的檢測規則 ,只要咱們清楚老道爲何會設置這個規則 ,有什麼風險?若咱們不遵照這個規則 ,是否能迴避相應的風險。

我以爲這本書最重要的意義是告訴咱們爲何」它是雞肋 ,它是糟粕」這是通過前面的學習和大量實踐以後 ,成熟的開發者應該關注的。好比:

1. hasOwnProperty ,老道說它糟粕的緣由是由於這不是一個關鍵字 ,而是一個Object。prototype上能夠被重寫的方法。那麼這個告訴咱們 ,並非不要用hasOwnProperty ,而是要注意不要覆蓋它。

2. eval的主要問題是性能 ,大量的eval(類eval)語句下降了JS引擎的性能。而通過測試少許的eval語句+eval大段的JS文本性能並不差 ,有必要也能夠考慮使用。

JavaScript設計模式

這是一本介紹JavaScript面向對象編程以及設計模式很是好的書籍。相對於又一本全面型書籍語言精粹 ,犀利型書籍登場了。
我對面向對象的見解是:隱藏細節 ,方便作大。基於良好的抽象和封裝 ,咱們能夠方便的自頂而下的設計 ,自底而上的開發。面向對象的優缺點不是本文的重點 ,這裏不討論 ,只能說這是一個很是不錯的代碼設計實現方法論。

JavaScript究竟是不是一個面向對象的語言 ,從本質說必定是的 ,從表象來講OO的不那麼明顯。咱們必須經過一些額外的代碼實現諸如 ,劃分公有/私有 ,接口 ,繼承 ,多態等特性。因爲JavaScript語言的靈活性 ,實現的方式很是多。這本書的第一部分對常見的兩類實現模式:類式繼承和原型繼承都有很是好的最佳實踐總結。因此個人想法是徹底讀懂它 ,而後按照這個來作就行了。若是這裏介紹的實踐足夠強大 ,咱們沒有必要發明新的繼承實現模式了 ,事實上YUI一直是這種模式 ,而新的JavaScript引擎甚至引入了Object。create方法 ,將一些動做寫入標準內置在JS引擎中。

咱們應該將視點放在設計模式上 ,GoF的設計模式那本書裏的例子 ,對於前端開發來講並不都是很好理解 ,而這本書的例子所有是前端相關 ,有助於你們理解設計模式的精妙。還有些同窗說 ,即便我不瞭解GoF的理論 ,我也在默默的用這些模式了。確實是這樣 ,但我想咱們關注設計模式 ,不光要學會各類模式是怎樣的 ,更重要的是學習到各類模式適合什麼場合 ,不適合什麼場合。瞭解有什麼優勢 ,也要了解有什麼缺點 ,你正在默默使用的模式存在隱患麼?系統學習以後會對其更有把握。

前幾天聽同事說這本書全面斷貨 ,不知道是太火 ,仍是印的太少 ,但願能儘快看到上架。

Secrets of the JavaScript Ninja

進入第四個批次 ,這裏的書籍多數沒有中譯本出版。現階段想開發靠譜的底層類庫代碼 ,確實須要啃一些外文書了。英文書不少 ,沒有精力大量閱讀 ,一般讀一些口碑較好的書籍。

另外 ,到了這個批次 ,個人閱讀量也至關的有限 ,因此確定有不少好的內容沒有提到 ,指望你們能繼續推薦。並且到了這個批次 ,書籍產出確定跟不上知識的更新速度 ,跟蹤閱讀一些JS大牛們的Blog應該成爲習慣。
這是jQuery做者的第二本書 ,天然優點犀利型的表明。John Resig已經陸續放出這本書的大部份內容 ,從2008年開始寫 ,計劃2012年5月出版。

若是說JR的第一本書可以看出爲何有jQuery ,那麼這本書能看出讓jQuery發展下去 ,做者關注了哪些。咱們會看到其實一些很細節的內容 ,好比強調測試用例的構建/自動化測試的方法 ,好比如何利用每一個function實例的length屬性 ,好比對with ,eval的思考和發散等等。

關於這本書具體如何的好處 ,我還理不清 ,拿來開開眼界是很是不錯的。記得玉伯大大組織了一波同窗在翻譯 ,不知進展如何了。

《JavaScript Patterns》

乍一看這本書標題 ,覺得又是一本講設計模式的書 ,那和《JavaScript設計模式》重複了 ,開始沒有仔細關注。今年拔赤推薦了它 ,才發現者並不只僅介紹GoF的設計模式而是涵蓋前端開發各個方面的先進理論。雖然是09年的書,這兩年前端的不少較深入變化在這邊書裏都能看到雛形。上一本書犀利,這本更全面。

做者Stoyan Stefanov是Yahoo的前端技術專家 ,從這本書中能夠看到不少YUI3設計上的本源 ,好比在對象建立模式中介紹的模塊模式/沙箱模式。近來CommonJS Loader的流行在這之上的繼續深刻發掘。這本書還包括代碼測試 ,打包 ,部署 ,加載策略等各個流程中的諸多細節 ,這些構成了完整的體系在Yahoo在YUI3都有很是好的實踐。

據說咱們的同事拔赤和一舟在翻譯這個本書 ,很是期待。

ECMA-262

這不是一本書 ,是俄羅斯小夥子寫的一系列ECMA-262標準分析文章 ,ECMA-262-3系列已經很完整。標準像彙編語言同樣枯燥 ,而這系列文章把枯燥的標準轉化爲一系列深刻討論的話題 ,配合恰到好處的示例 ,必定會讓你們對JS引擎的認識再上一層。

網上有一些譯文 ,可是因爲相似文章譯文比較少 ,不少英文還未達成一致表述 ,因此推薦閱讀英原文。另外做者很好 ,遇到的棘手的問題 ,去諮詢他都能很快收到很好的回覆。

期待:一本JavaScript語言做者或引擎實現者寫的書

一直以來期待JavaScript能有一本像《C程序設計語言》這樣的大做,最近也在讀計算機系統概論補一些大學時沒學好的知識 ,很是認同書中」自底而上」的學習路線。我想對JavaScript引擎的透徹分析 ,可以減小你們看着實驗結果 ,猜想着寫書的境況。隨着NodeJS的火爆 ,引擎的技術分析文章愈來愈多 ,期待很快出現集大成者。

《高性能網站建設指南》《高性能網站建設進階指南》《高性能JavaScript》

進入番外篇 ,推薦的書籍都是有針對性的領域之做 ,內容每每並不高深 ,你們根據本身的實際狀況進行選擇閱讀。
高性能的網頁是前端必然的追求 ,Steve Sounders率先在Yahoo開啓了這方面的專題研究 ,伴隨着《高性能網站建設指南》的出版和YSlow工具發佈。網站性能優化 ,特別是前端角度和運維角度的優化方案 ,進入了人們的視野 ,同時得到了巨大的效果 ,甚至造成了名爲WPO(Web Performance Optimization)產業。

第一本書除了介紹了可以立竿見影的規則的同時也開啓了民智。你們開始思考如何作優化 ,如何結合本身的應用實踐作優化。然後兩本書基本上是遵循優化思路的繼續得來的實踐總結。關於優化的工具,思路,方法是我特別強調的。感興趣的同窗能夠看下在Yslow 34 Rules以後 — 網站性能優化思路和進展 這一篇。

其餘領域之做

接下來介紹這些專題類書籍 ,並非特別推薦 ,每每每一個專題都有不少書籍可供選擇 ,隨手寫一些讀書心得吧。

Ajax實戰》:06年的書,很早就購入。書中介紹了不少RIA高級應用的相關話題,很開眼界。

《jQuery實戰》:必定須要一本介紹jQuery的書,這書還能夠,不過如今看來應該比較舊了,jQuery已經更新了不少。我主要從這本書瞭解了jQuery的工具函數擴展機制和插件機制是如何實現的。jQuery讓徹底不瞭解prototype屬性的同窗也能寫出可複用的複雜組件,很是不容易,之後再單獨寫寫對jQuery的一些見解吧。

《精通CSS》:必定須要一本介紹CSS的書,工做中一直以來CSS用的不是很深刻,不作特殊介紹.

正則表達式必知必會》:必定須要一本正則方面的書籍,這本小冊子查起來蠻方便.

HTML5揭祕》和《HTML5高級程序設計》買回來一直沒看,對HTML5的新增特性仍是有了解的,等能用到時再看再評。

但願看到NodeJS方面的書籍 ,儘快引入。

 

寫在最後

我只能推薦我看過的書對吧 ,因此你們懂的。咱們不去對比各類電子產品 ,就是對比雞蛋大米 ,書籍都是很是廉價的。

當有了領域內必定的實踐經驗以後 ,閱讀一本相關的書籍並非難事 ,也並不會耗費不少時間。

全面型的書籍可讓你們技能水平一步一步地穩步提升 ,讓你們站得高也站得穩。

犀利型的書籍可讓你們瞭解重點 ,瞭解別人是怎麼運用那些你也會的知識的。

專題類的書籍是拓寬眼界 ,幫助你們完成工做任務的好手。

對於非英文專業的同窗 ,若是有中譯本 ,不用非得糾結着去看原版 ,咱們要最快學到知識 ,最快進入思考與實踐。

感謝做者 ,譯者(個人同事中有不少譯者 ,都說期望這個賺錢是不可能的) ,以及選擇運做這些書出版的各位老師。

相關文章
相關標籤/搜索