一個老牌程序員推薦的JavaScript的書籍,看了真的不後悔!

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

當然,對於小白或者根本看不懂書的開發者來說,我認為可以報個培訓班,畢竟有著完善的體系,如果老師很負責的話,但是我認為程序員最重要的是學習能力和努力程度

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

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

一個老牌程序員推薦的JavaScript的書籍,看了真的不後悔!

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

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

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

  • 《JavaScript DOM 編程藝術》

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

  • 《JavaScript高級程序設計》(或《JavaScript權威指南》)
  • 《精通JavaScript》

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

  • 《JavaScript語言精粹》
  • 《JavaScript設計模式》

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

  • 《Secrets of the JavaScript Ninja》
  • 《JavaScript Patterns》
  • 《ECMA-262 in Detail》

應該重視跟蹤閱讀一些大牛們的Blog了。

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

專業篇:各類專題書籍,讀好第二批次書籍之後,有精力就接觸下。

  • 《高性能網站建設指南》
  • 《高性能網站建設進階指南》
  • 《高性能JavaScript》
  • 《Ajax實戰》
  • 《jQuery實戰》
  • 《精通CSS》(或《CSS權威指南》)
  • 《正則表達式必知必會》(或《正則表達式權威指南》)
  • 應該選擇:一本HTML5方面的書
  • 應該選擇:一本NodeJS方面的書

《JavaScript DOM 編程藝術》

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

這本書通過幾個實例,循序漸進的介紹了前端開發的方方面面,讓大家能夠了解前端的技術體系概況,又能具備了一些簡單的動手能力。如果大家對我之前寫過的瀏覽器端技術體系概覽 — 前端開發的七種武器有些感覺,那讀讀這本書正好能上手實踐一把。

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

《JavaScript高級程序設計》

一個老牌程序員推薦的JavaScript的書籍,看了真的不後悔!

這本書的第一版很全面且不枯燥的書籍,年紀輕輕的NCZ有這樣的大作難能可貴。讀懂這本書,前端技能又可以上一個臺階,基本上可以成為專業的前端工程師了。

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

然而作為全面型的書籍,第一版也是有一些問題的:

  1. 閉包只半頁篇幅,沒說清楚。
  2. 匿名函數沒怎麼講。
  3. 全書沒提到constructor,更別說hasOwnProperty ,__proto__。

這帶來了我之前說的深一腳淺一腳的困擾,這些知識基本上是通過《JavaScript權威指南》閱讀中補充的,當然當時版本的權威指南也有同樣的問題,比如它沒解釋instanceof。也沒提到__proto__。這造成了我對面向對象理解的不全面,當時在做了N多測試後,還很蛋疼的寫了一篇博文,面論述之後,果斷刪掉了這篇JY。

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

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

《精通JavaScript》

一個老牌程序員推薦的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誕生記》,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面向對象編程以及設計模式非常好的書籍。相對於又一本全面型書籍語言精粹,犀利型書籍登場了。我對面向對象的看法是:隱藏細節,方便做大。基於良好的抽象和封裝,我們可以方便的自頂而下的設計,自底而上的開發。面向對象的優缺點不是本文的重點,這裡不討論 ,只能說這是一個非常不錯的代碼設計實現方法論。

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的書籍,看了真的不後悔!

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

一個老牌程序員推薦的JavaScript的書籍,看了真的不後悔!

《高性能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用的不是很深入,不做特殊介紹。
  • 《正則表達式必知必會》:一定需要一本正則方面的書籍,這本小冊子查起來蠻方便。
一個老牌程序員推薦的JavaScript的書籍,看了真的不後悔!

一個老牌程序員推薦的JavaScript的書籍,看了真的不後悔!

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

一個老牌程序員推薦的JavaScript的書籍,看了真的不後悔!

希望看到NodeJS方面的書籍 ,儘快引入。

寫在最後

  • 我只能推薦我看過的書對吧,所以大家懂的。我們不去對比各種電子產品,就是對比雞蛋大米,書籍都是非常廉價的。
  • 當有了領域內一定的實踐經驗之後,閱讀一本相關的書籍並不是難事,也並不會耗費很多時間。
  • 全面型的書籍,可以讓大家技能水平一步一步地穩步提高,讓大家站得高也站得穩。
  • 犀利型的書籍,可以讓大家瞭解重點,瞭解別人是怎麼運用那些你也會的知識的。
  • 專題類的書籍是拓寬眼界,幫助大家完成工作任務的好手。
  • 對於非英文專業的同學,如果有中譯本,不用非得糾結著去看原版,我們要最快學到知識,最快進入思考與實踐。
    感謝大家的閱讀,希望大家可以給個關注,點個贊.



分享到:


相關文章: