Web前端開發推薦閱讀書籍
前言
前端工程師在中國興起也就5年左右,以前公司里沒有專門前端工程師的這個職位,很多前端方面的任務都是由全棧工程師來完成,有的基礎一點的后臺或者設計的幫助分擔一些。但是隨著互聯網的快速發展,特別是所謂的Web2.0的發展,前端業務變得復雜起來,需要有專業的前端工程師來滿足用戶多樣化的需求。
然而,高校的計算機教育并沒有跟上互聯網快速發展步伐,現在高等學校里沒有的前端課程,對于需要打基礎的前端同學來說學習起來比較困難。 學校里沒有前端的課程,那如何學習JavaScript,又如何使自己成為一個合格的前端工程師呢? 如果入職了,可以在項目中學習和跟著有經驗的同事學習,而對于還沒有入職的同學,書中就有著相對完整的知識體系,每讀一本好書都會帶來一次全面的提高。但如果深一腳淺一腳的學習,寫出代碼的質量會參差不齊。初學者的首要任務是成為靠譜的熟練開發者,能夠穩定的輸出有一定質量的代碼,這樣才能讓人放心的把任務交給你。不過前端本來就是一門雜而多的領域,剛進入前端,可能難度不大,但是要進一步系統深入放入學習,思路就不會那么清晰。前端書籍又難以正確挑選,很容易就會迷茫。廢話不多說,入正題。介紹一下前端學習的一些書籍(后面附有前端海量資源,點擊訪問)
學習路線
大部分技術,熟讀下列四類書籍,就是一個很好的學習提升
- 入門,用淺顯的語言和方式講述正確的道理和方法
- 全面,巨細無遺地探討每個細節,遇到疑難問題時往往可以在這里得到理論解答
- 實踐,結合實際中經常遇到的情景環境,來描述如何設計和解決問題
- 深入,講解一些文化,思路,甚至于哲學上的東西,真正做到深入一種語言去編程,如unix編程藝術,程序員修煉之道等等
接下來介紹的這些書籍,沒法說這是前端學習最優路線,但真看進去了獲得一個IT民工從業資格是沒啥問題的。(HTML和Web標準這里就不介紹書籍了,這個書籍的話也沒有什么代表性的。HTML知識不多,主要就是要領悟Web語義化的精髓,結構決定上層建筑。Web標注大家去W3C中國官網去查找,按照標準來,寫多了,自然就理解標準了,背下來沒用。) 
書籍推薦(CSS系列)
推薦書籍:
css那些事兒,精通css(高級Web標準解決方案)。
書籍推薦(JS系列)
第一批次
入門級,也適合想掌握一些前端技能的非前端工程師 <JavaScript Dom編程藝術>
第二批次
成為一名合格的前端工程師 <JavaScript高級程序設計>(或<JavaScript權威指南>) <精通JavaScript>
第三批次
更優秀的代碼,更優良的設計 <JavaScript語言精粹> <JavaScript設計模式>
第四批次
從語言細節到復雜工程實踐,想開發靠譜的各類底層代碼,應該看看 <Secrets of the JavaScript Ninja> <JavaScript Patterns> <ECMA-262 in Detail> 應該重視跟蹤閱讀一些大牛們的Blog了
番外篇
各類專題書籍,讀好第二批次書籍之后,有精力就接觸下
- <高性能網站建設指南>
- <高性能網站建設進階指南>
- <高性能JavaScript>
- <Ajax實戰>
- <JQuery實戰>
- <精通CSS>(或<CSS權威指南>)
- <正則表達式必知必會>(或<正則表達式權威指南>)
- <HTML5與CSS3權威指南>
- <NodeJS開發指南>
- <深入淺出Node.js>
- <鋒利的jquery>
找書技巧
關于一個主題的書很多,那我們怎么找到一本合適我們閱讀的書呢?因為適合自己的才是最好的。下面是一些些小技巧:
- 在各大圖書網(如當當、亞馬遜、京東等)上搜索關鍵詞,如jQuery,可以選擇按照銷量或好評排序,一般排在前面的就是很搶手的好書,值得閱讀
- 如果想看一本書的評價怎么樣,那就去豆瓣讀書搜索吧,那里的評論還是值得參考的
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語言的K&R這樣的大作,最近也在讀計算機系統概論補一些大學時沒學好的知識,非常認同書中"自底而上"的學習路線.我想對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方面的書籍,盡快引入.
寫在最后
只能針對我了解的書,在網站找一些參考推薦給大家。
當有了領域內一定的實踐經驗之后,閱讀一本相關的書籍并不是難事,也并不會耗費很多時間.
全面型的書籍可以讓大家技能水平Step By Step的穩步提高,讓大家站得高也站得穩.
犀利型的書籍可以讓大家了解重點,了解別人是怎么運用那些你也會的知識的.
專題類的書籍是拓寬眼界,幫助大家完成工作任務的好手.
對于非英文專業的同學,如果有中譯本,不用非得糾結著去看原版,我們要最快學到知識,最快進入思考與實踐.
前端領域學習曲線,相信進入這個領域的,都大概了解一些吧。入門是比較快的,HTML標記語言準確來說算不上編程語言,學起來快(不過HTML是最用不好的),但是越到后面,曲線越來越陡峭,因此,有必要做一個清晰的規劃,比如前端書籍,以及視頻資源。本文先介紹一些紙質的書籍,后面還附有海量的前端資源。有了領域內一定的實踐經驗之后,閱讀一本相關的書籍并不是難事,也并不會耗費很多時間.所以閱讀書籍的同時不要忘記動手,經驗來自手下,熟能生巧嘛……
浙公網安備 33010602011771號