读完前10章有感

这篇书评可能有关键情节透露
我从第一章介绍看到第十章模块,从第十一章异步开始,我准备切换主要参考书,而把这边书作为辅助参考了。
优点
此书前九章可以看作是第一部分,主要聚焦于 JavaScript (JS) 的基础,包括变量声明、数据类型、函数、循环语句、条件语句、错误调试、正则表达式、面向对象编程等。
从第十章模块开始,作者涉及的话题就是 JS 里相对高级的特性了,比如模块的创建和调用,异步编程等等。然后逐步过渡到将 JS 和浏览器以及 Node.js 串起来。
首先,作者在网站上公开了三版书的全部内容,网站还支持在线代码运行。此外,书的 PDF 版也可以免费下载,甚至还提供了更适合手机阅读的小尺寸版。考虑到作者如此用心和慷慨,这本书本身就值得满分了。此外,书中的闪光点还包括:
1. 作者的讲解不是机械式引入 JS 有什么, 长什么样,能干什么。而是坚持通过一些启发式的引导来引入一个主题,然后铺展开讲。
2. 作者会穿插一些个人观点,这对经验尚浅的编程学习者是很有特色的资源,就像是哈利波特在阅读混血王子的那本带笔记的教材一样。一个令我印象深刻的例子是,在一个函数开头的上方一行,可以用注释写:
// input>> ... output>>
相当于 Python Docstrings,清楚直观地提示自己这个函数的主要功能。
3. 每一章都有练习题和提示。毕竟不是所有的书都有练习题,比如大名鼎鼎的 The Good Parts。
4. 由于 JS 是一个不断发展变化的语言,所以它的历史包袱比较多。作者在讲解时一般是按照时间顺序来逐个揭示这种变化的。这一点也有弊端,下面讲。
缺点
1. JS 不断发展,作者又要展示这种变化,导致没有意识到这点的初学者,比如我,会很懵啊。特别是,我先学习了Python 3.X 版本。3.X 版本这里年里,就算有什么变化,也对我这种水平的学习者无甚影响。而作者讲解 JS 时,届时了不少历经多年的重要变化,我会很不习惯:怎么变来变去的,到底用哪个?这里面的思维差异还是很大的。对于变化不算大的语言,有些特性是很固定的,比如 Python 的面向对象编程,就是要用到 class 关键字和相关的语句。但是 JS 不一样。它一开始用得是 function 来构建,后来又引入了 class 关键字。这么多的新概念一次性塞到一章里,是我特别不擅长处理的情况。忽然想起阮一峰还是哪位前辈说过的(大意):JS 给人的感觉是,针对一个问题,代码有很多种写法。
对初学者来说,这是缺点。对有一些经验的人来说,这是闪光点,再一次理清语言的变化痕迹。
2. 作者的母语是德语,写起英语来喜欢用长句子,长句子还喜欢用插入语打断。我是学翻译出身的,雅思阅读也是裸考满分,算是有一些英语功底的人,读起来依然时不时觉得有些句子云里雾里的。总之,零基础的新手读这本书的英文版时,很难速读。速读就很难扎实。
3. 前10章都在讲 JS 的特性,不论是讲解思路和举例说明,都是把 JS 当作一门纯粹的编程语言来对待的。一点都没有提到 DOM。我有一位同事,CS 出身,主攻前端。我问他有没有用 JS 写过不包含 DOM 的代码。他说没有。从他第一天学习 JS 开始到现在,也有近10年了,全都是用来做网页开发的。所以,如果新手学这本书,要等到很后面才能把 JS 和前端的联系起来。如果去看 MDN 网站的 JS 教程,一开始就引入了 DOM,一开始就是奔着和 HTML/CSS 结合去的。这样学 JS,好处是聚焦于语言半身,缺点是与现实环境有些脱钩。好在基础讲完后作者就全面转向 DOM 和浏览器了。
以上的优缺点是相对于我个人的情况而言,仅供参考。一本书适不适合自己学习,总要亲自阅读体会才能有结论。