JavaScript的那些书
作者:limu
原文地址:http://limu.iteye.com/blog/1267475
又好久没写东西了,写上一篇的时候还以为接下来的工作会轻松一些 ,结果未从我所愿呐,又是一阵忙碌。而这段时间穿插着做了很多12年淘宝校园招聘的前端面试,很多同学都有问到,学校里没有前端的课程,那如何学习JavaScript?
我的回答是:读书吧!相对于在网上学习,在项目中学习和跟着有经验的同事学习,书中有着相对完整的知识体系,每读一本好书都会带来一次全面的提高。而如果深一脚浅一脚的学习,写出代码的质量会参差不齐。初学者的首要任务是成为靠谱的熟练开发者,能够稳定的输出有一定质量的代码,这样才能让人放心的把任务交给你。从这个角度来看,跟着w3school类成体系的网络教程学习也是不错的选择,只不过我没有亲自实践过。
在07年之前,我是在做IEonly的企业级B/S应用,虽然当时项目的JScript就已经非常复杂,但当时团队里有很多经验丰富的同事,多是跟他们请教 ,或者再MSDN和网上找答案。07年进入阿里之后,开始直面兼容性问题 ,同时开始单打独斗 ,这个阶段开始接触相关的前端书籍 ,最先购买的是《JavaScript高级程序设计》和《JavaScript DOM 编程艺术》。可以说比较幸运 ,挑中了这两本很靠谱的书(其实当时市面上书籍并不多 ,感谢选择出版这些书和翻译这些书的同学们) ,近来这两本书都出了第二版其生命力可见一斑。
这几年来,自认读的前端方面的书不算少,校招同学们问到有什么书推荐 ,我还是会列几个批次的书籍出来给大家,在这里公布一下,没法说这是最优学习路线 ,但真看进去了获得一个IT民工从业资格是没啥问题的。咱也先秀下书架吧(喜欢纸质书,可以翻旧,可以涂涂写写,可以折上几个页角,可以歪在一边用任何得劲儿的姿势看):
说说我对于书的选择,在从高级程序设计以及DOM编程艺术获得了较好的用户体验之后,基本上延续了选择译著的路子,属顺势而为倒没有什么特殊的因素在里头。而我一般不会推荐英文原版书,中文更具亲和力,JavaScript并不是一门多么高深的语言,我相信译者是可以在深刻理解原文的基础上做翻译的。我也会读一些外文书,而往往当我知道一本不错的书籍有了出版计划,就会停止精读,等译作出版( 比如不久前的《高性能JavaScript》)。不过确实有时会遇到术语翻译不一致,甚至翻译的不通顺的情况,好在多书网上可以找到英文电子版,实在不解之处对照一下也就可以了。
下面都是我精读过且觉得不错的书,先分分类再逐本分享下我的读书心得:
第一批次:入门级,也适合想掌握一些前端技能的非前端工程师。
第二批次:成为一名合格的前端工程师
- 《JavaScript高级程序设计》(或《JavaScript权威指南》)
- 《精通JavaScript》
第三批次:更优秀的代码 ,更优良的设计
第四批次:从语言细节到复杂工程实践 ,想开发靠谱的各类底层代码 ,应该看看
应该重视跟踪阅读一些大牛们的Blog了。
一直在等待:一本JavaScript语言作者或引擎实现者写的书。
番外篇:各类专题书籍,读好第二批次书籍之后,有精力就接触下。
- 《高性能网站建设指南》
- 《高性能网站建设进阶指南》
- 《高性能JavaScript》
- 《Ajax实战》
- 《jQuery实战》
- 《精通CSS》(或《CSS权威指南》)
- 《正则表达式必知必会》(或《正则表达式权威指南》)
- 应该选择:一本HTML5方面的书
- 应该选择:一本NodeJS方面的书
我会把书籍分成两类,一类是全面型,一类是犀利型。前面介绍了一本全面型的书籍,接下来介绍的这本的特点是非常犀利,这类书籍的特点是作者能找对重点(2/8原则掌握的很好),在重点位置深入挖掘。这本书的作者John Resig也是jQuery的作者,他显然是个足够犀利的人儿。
jQuery从未承诺解决所有问题,但再一些重点部位的突破,让这个类库如此流行。这本书并没有着重介绍jQuery,还是基于原生的JavaScript和DOM API。
列一些这本书的重点话题 ,能够很好的看出作者为什么会开发出jQuery,或者说,jQuery为什么是现在的样子:
- 如何创建可复用的代码?如何调试 ,测试?(这是基础)
- 如何判断DOM何时加载完毕?如何遍历 ,修改DOM?(jQuery以DOM为核心,节点的增删改查,事件响应是重点)
- 如何确定元素的位置,相对于页面/屏幕?如何做平滑的动画?(思考下CSS相关的话题很多,作者为什么选了这两个?)
- 如何改进表单验证,封装完整的Ajax程序?(涉及数据交互,是另一个重中之重。)
不算厚的一本书,基本上就是以上的话题+几个实例。当我们看过了一本全面型的书籍,对前端的知识有了深入的了解之后,这本书的作者指出了今后的重点,并告诉大家如何把知识用到解决重点问题上。
推荐大家看看阮一峰老师的博文《JavaScript诞生记》,JavaScript是Brendan Eich大神10天时间设计出的语言,现在成了Web前端领域的唯一语言。
一方面,这门语言博采众家之长,也帮助它维系了长久的生命力:
- 借鉴C语言的基本语法;
- 借鉴Java语言的数据类型和内存管理;
- 借鉴Scheme语言,将函数提升到”第一等公民”(first class)的地位;
- 借鉴Self语言,使用基于原型(prototype)的继承机制。”
另一方面,由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript写出来的程序混乱不堪。Brendan Eich对其这10天工作的评价是:“它的优秀之处并非原创,它的原创之处并不优秀。”
Douglas Crockford通过《JavaScript: The Good Parts》这本书对JavaScript进行了一次大审判,老道认为JavaScript语言有很多优秀的地方 ,也有一些鸡肋和糟粕。老道不反对用这门语言,在规避一些鸡肋和糟粕之后它自然是优秀的。老道认为JavaScript优美的特性如下:
- 函数是头等对象(可以作为其他函数的参数和返回值 ,支持闭包)
- 基于原型继承的动态对象
- 对象字面量和数组字面量(构成JSON的基础)
老道列出了很多鸡肋和糟粕,并提供了JSLint这个工具 ,来校验代码是否使用了不好的部分。书中给出的语法图,让我有深入学习一下<编译原理>的冲动 ,也理解了JSLint作为用JS语言分析JS语言的工具成型的理论基础。
强烈建议大家使用JSLint来检测自己的代码 ,但是我们不必教条,可以违返其中一些的检测规则,只要我们清楚老道为什么会设置这个规则,有什么风险?若我们不遵守这个规则,是否能回避相应的风险。
我觉得这本书最重要的意义是告诉我们为什么“它是鸡肋,它是糟粕”。这是经过前面的学习和大量实践之后 ,成熟的开发者应该关注的。比如:
-
hasOwnProperty
,老道说它糟粕的原因是因为这不是一个关键字 ,而是一个Object
。prototype
上可以被重写的方法。那么这个告诉我们 ,并不是不要用hasOwnProperty
,而是要注意不要覆盖它。 - eval的主要问题是性能,大量的eval(类eval)语句降低了JS引擎的性能。而经过测试少量的eval语句+eval大段的JS文本性能并不差,有必要也可以考虑使用。
这是一本介绍JavaScript面向对象编程以及设计模式非常好的书籍。相对于又一本全面型书籍语言精粹,犀利型书籍登场了。我对面向对象的看法是:隐藏细节,方便做大。基于良好的抽象和封装,我们可以方便的自顶而下的设计,自底而上的开发。面向对象的优缺点不是本文的重点,这里不讨论 ,只能说这是一个非常不错的代码设计实现方法论。
JavaScript到底是不是一个面向对象的语言,从本质说一定是的,从表象来说OO的不那么明显。我们必须通过一些额外的代码实现诸如,划分公有/私有,接口,继承,多态等特性。
由于JavaScript语言的灵活性,实现的方式非常多。这本书的第一部分对常见的两类实现模式:类式继承和原型继承,都有非常好的最佳实践总结。所以我的想法是完全读懂它,然后按照这个来做就好了。如果这里介绍的实践足够强大,我们没有必要发明新的继承实现模式了,事实上YUI一直是这种模式,而新的JavaScript引擎甚至引入了Object。create
方法,将一些动作写入标准内置在JS引擎中。
我们应该将视点放在设计模式上,GoF的设计模式那本书里的例子,对于前端开发来说并不都是很好理解,而这本书的例子全部是前端相关,有助于大家理解设计模式的精妙。还有些同学说,即使我不了解GoF的理论,我也在默默的用这些模式了。确实是这样,但我想我们关注设计模式,不光要学会各种模式是怎样的 ,更重要的是学习到各种模式适合什么场合,不适合什么场合。了解有什么优点,也要了解有什么缺点,你正在默默使用的模式存在隐患么?系统学习之后会对其更有把握。
前几天听同事说这本书全面断货,不知道是太火,还是印的太少,希望能尽快看到上架。
Secrets of the JavaScript Ninja
《HTML5揭秘》和《HTML5高级程序设计》买回来一直没看,对HTML5的新增特性还是有了解的,等能用到时再看再评。
希望看到NodeJS方面的书籍 ,尽快引入。
写在最后
- 我只能推荐我看过的书对吧,所以大家懂的。我们不去对比各种电子产品,就是对比鸡蛋大米,书籍都是非常廉价的。
- 当有了领域内一定的实践经验之后,阅读一本相关的书籍并不是难事,也并不会耗费很多时间。
- 全面型的书籍,可以让大家技能水平一步一步地稳步提高,让大家站得高也站得稳。
- 犀利型的书籍,可以让大家了解重点,了解别人是怎么运用那些你也会的知识的。
- 专题类的书籍是拓宽眼界,帮助大家完成工作任务的好手。
- 对于非英文专业的同学,如果有中译本,不用非得纠结着去看原版,我们要最快学到知识,最快进入思考与实践。
感谢作者,译者(我的同事中有很多译者 ,都说指望这个赚钱是不可能的),以及选择运作这些书出版的各位老师。