又好久没写东西了 ,写上一篇的时候还以为接下来的工作会轻松一些 ,结果未从我所愿呐 ,又是一阵忙碌。而这段时间穿插着做了很多12年淘宝校园招聘的前端面试 ,很多同学都有问到 ,学校里没有前端的课程 ,那如何学习JavaScript?
我的回答是:读书吧!相对于在网上学习 ,在项目中学习和跟着有经验的同事学习 ,书中有着相对完整的知识体系 ,每读一本好书都会带来一次全面的提高。而如果深一脚浅一脚的学习 ,写出代码的质量会参差不齐。初学者的首要任务是成为靠谱的熟练开发者 ,能够稳定的输出有一定质量的代码 ,这样才能让人放心的把任务交给你。从这个角度来看 ,跟着w3school类成体系的网络教程学习也是不错的选择 ,只不过我没有亲自实践过。
在07年之前 ,我是在做IEonly的企业级B/S应用 ,虽然当时项目的JScript就已经非常复杂 ,但当时团队里有很多经验丰富的同事 ,多是跟他们请教 ,或者再MSDN和网上找答案。07年进入阿里之后 ,开始直面兼容性问题 ,同时开始单打独斗 ,这个阶段开始接触相关的前端书籍 ,最先购买的是《JavaScript高级程序设计》和《JavaScript DOM 编程艺术》。可以说比较幸运 ,挑中了这两本很靠谱的书(其实当时市面上书籍并不多 ,感谢选择出版这些书和翻译这些书的同学们) ,近来这两本书都出了第二版其生命力可见一斑。
这几年来 ,自认读的前端方面的书不算少 ,校招同学们问到有什么书推荐 ,我还是会列几个批次的书籍出来给大家 ,在这里公布一下 ,没法说这是最优学习路线 ,但真看进去了获得一个IT民工从业资格是没啥问题的。咱也先秀下书架吧(喜欢纸质书 ,可以翻旧 ,可以涂涂写写 ,可以折上几个页角 ,可以歪在一边用任何得劲儿的姿势看):
说说我对于书的选择 ,在从高级程序设计以及DOM编程艺术获得了较好的用户体验之后 ,基本上延续了选择译著的路子 ,属顺势而为倒没有什么特殊的因素在里头。而我一般不会推荐英文原版书 ,中文更具亲和力 ,JavaScript并不是一门多么高深的语言 ,我相信译者是可以在深刻理解原文的基础上做翻译的。我也会读一些外文书 ,而往往当我知道一本不错的书籍有了出版计划 ,就会停止精读 ,等译作出版(比如不久前的《高性能JavaScript》)。不过确实有时会遇到术语翻译不一致甚至翻译的不通顺的情况 ,好在多书网上可以找到英文电子版 ,实在不解之处对照一下也就可以了。
下面都是我精读过且觉得不错的书 ,先分分类再逐本分享下我的读书心得:
第一批次:入门级 ,也适合想掌握一些前端技能的非前端工程师。
第二批次:成为一名合格的前端工程师
《JavaScript高级程序设计》(或《JavaScript权威指南》)
第三批次:更优秀的代码 ,更优良的设计
第四批次:从语言细节到复杂工程实践 ,想开发靠谱的各类底层代码 ,应该看看
《Secrets of the JavaScript Ninja》
《ECMA-262 in Detail》
应该重视跟踪阅读一些大牛们的Blog了(伯乐在线编注:这篇文章《**你得学JavaScript**》中有推荐两位大牛的博客,Douglas Crick的博客 和 Angus Croll的JavaScript博客。)
一直在等待:一本JavaScript语言作者或引擎实现者写的书。
番外篇:各类专题书籍 ,读好第二批次书籍之后 ,有精力就接触下
《Ajax实战》
《jQuery实战》
《正则表达式必知必会》(或《正则表达式权威指南》)
应该选择:一本HTML5方面的书
应该选择:一本NodeJS方面的书
话说这本书的中文标题有一些标题党的 ,当初如果知道这仅是一本入门书籍 ,我是不会买来的。拿到后一天就看完了 ,对我来说没有太多技能上的实质帮助。不过这个书语言很流畅 ,重要的是对知识深浅度把握的很好 ,html/js/css/dom各个方面都把握在一个合适的度 ,这很符合我对书籍期望 ,一步步走 ,每一步都踏踏实实。
这本书通过几个实例 ,循序渐进的介绍了前端开发的方方面面 ,让大家能够了解前端的技术体系概况 ,又能具备了一些简单的动手能力。如果大家对我之前写过的浏览器端技术体系概览 — 前端开发的七种武器有些感觉 ,那读读这本书正好能上手实践一把。
去年淘宝前端懒懒交流会的豆瓣小站上做了一个调查 ,如果非要您推荐一本适合新人学习的js方面的书,您的推荐是什么?虽然投票的人不多 ,但这本书却是遥遥领先。
这本书的第一版很全面且不枯燥的书籍 ,年纪轻轻的NCZ有这样的大作难能可贵。读懂这本书 ,前端技能又可以上一个台阶 ,基本上可以成为专业的前端工程师了。
对于当时的我来讲 ,这本书及时的补充了浏览器兼容性方面的知识 ,特别是事件相关的知识 ,这个浏览器间差别最大。有些内容讲的非常简单明了 ,比如call和apply的用法 ,之前总是理解不好 ,NCZ几句话+一个例子就说明白了。
然而作为全面型的书籍 ,第一版也是有一些问题的:
1. 闭包只半页篇幅 ,没说清楚。
2. 匿名函数没怎么讲。
3. 全书没提到constructor ,更别说hasOwnProperty ,__proto__。
这带来了我之前说的深一脚浅一脚的困扰 ,这些知识基本上是通过《JavaScript权威指南》阅读中补充的 ,当然当时版本的权威指南也有同样的问题 ,比如它没解释instanceof。也没提到__proto__。这造成了我对面向对象理解的不全面 ,当时在做了N多测试后还很蛋疼的写了一篇博文<JavaScript constructor和instanceof,JSOO中的一对欢喜冤家> ,后来接触到《JavaScript设计模式》关于OO的全面论述之后 ,果断删掉了这篇JY。
相信这本书的第二版 ,以及权威指南的第六版肯定会在这些方面进行补充。不过这两本书都是十足的大部头 ,高级程序设计第二版已经比权威指南去除附录要厚了。
一本全面且不枯燥的书太难找了 ,所以我还是喜欢第一版。对我技术上的提升帮助非常之大。忍不住再秀一张图(当时在封闭开发Alimama。com ,马云时常来 ,他不肯在书的第一页签名搞得好像他写的 ,于是把签名画在了第二页。)
我会把书籍分成两类 ,一类是全面型 ,一类是犀利型。前面介绍了一本全面型的书籍 ,接下来介绍的这本的特点是非常犀利 ,这类书籍的特点是作者能找对重点(2/8原则掌握的很好) ,在重点位置深入挖掘。这本书的作者John Resig也是jQuery的作者 ,他显然是个足够犀利的人儿。
jQuery从未承诺解决所有问题 ,但再一些重点部位的突破 ,让这个类库如此流行。这本书并没有着重介绍jQuery ,还是基于原生的JavaScript和DOM API。
列一些这本书的重点话题 ,能够很好的看出作者为什么会开发出jQuery ,或者说jQuery为什么是现在的样子:
1. 如何创建可复用的代码?如何调试 ,测试?(这是基础)
2. 如何判断DOM何时加载完毕?如何遍历 ,修改DOM?(jQuery以DOM为核心 ,节点的增删改查 ,事件响应是重点)
3. 如何确定元素的位置 ,相对于页面/屏幕?如何做平滑的动画?(思考下CSS相关的话题很多 ,作者为什么选了这两个?)
4. 如何改进表单验证 ,封装完整的Ajax程序?(涉及数据交互 ,是另一个重中之重。)
不算厚的一本书 ,基本上就是以上的话题+几个实例。当我们看过了一本全面型的书籍 ,对前端的知识有了深入的了解之后 ,这本书的作者指出了今后的重点 ,并告诉大家如何把知识用到解决重点问题上。
推荐大家看看阮一峰老师的博文《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到底是不是一个面向对象的语言 ,从本质说一定是的 ,从表象来说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设计模式》重复了 ,开始没有仔细关注。今年拔赤推荐了它 ,才发现者并不仅仅介绍GoF的设计模式而是涵盖前端开发各个方面的先进理论。虽然是09年的书,这两年前端的很多较深刻变化在这边书里都能看到雏形。上一本书犀利,这本更全面。
作者Stoyan Stefanov是Yahoo的前端技术专家 ,从这本书中可以看到很多YUI3设计上的本源 ,比如在对象创建模式中介绍的模块模式/沙箱模式。近来CommonJS Loader的流行在这之上的继续深入发掘。这本书还包括代码测试 ,打包 ,部署 ,加载策略等各个流程中的诸多细节 ,这些构成了完整的体系在Yahoo在YUI3都有非常好的实践。
听说我们的同事拔赤和一舟在翻译这个本书 ,非常期待。
这不是一本书 ,是俄罗斯小伙子写的一系列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方面的书籍 ,尽快引入。
写在最后
我只能推荐我看过的书对吧 ,所以大家懂的。我们不去对比各种电子产品 ,就是对比鸡蛋大米 ,书籍都是非常廉价的。
当有了领域内一定的实践经验之后 ,阅读一本相关的书籍并不是难事 ,也并不会耗费很多时间。
全面型的书籍可以让大家技能水平一步一步地稳步提高 ,让大家站得高也站得稳。
犀利型的书籍可以让大家了解重点 ,了解别人是怎么运用那些你也会的知识的。
专题类的书籍是拓宽眼界 ,帮助大家完成工作任务的好手。
对于非英文专业的同学 ,如果有中译本 ,不用非得纠结着去看原版 ,我们要最快学到知识 ,最快进入思考与实践。
感谢作者 ,译者(我的同事中有很多译者 ,都说指望这个赚钱是不可能的) ,以及选择运作这些书出版的各位老师。