对话《JavaScript高级程序设计》作者 Nicholas C. Zakas

前端技术专家Nicholas C. Zakas分享了他对JavaScript库的选择建议、HTML5的前景、移动Web的重要性、Node.js的应用潜力及JavaScript未来的发展方向。他还讨论了异步编程的挑战及JavaScript在算法实现上的可能性。

enter image description here

注:以下根据Nicholas C. Zakas回复图灵社区访谈邮件的原文翻译。译者:李松峰。

Zakas:很高兴收到你的邮件,而且听说我的书那么受欢迎也很开心。以下是对问题的回答。

Q1:对各种JavaScript库的优点和缺点一直存在很多争论。在您看来,开发人员应该怎么选择合适的库?

Zakas:选择JavaScript库的时候,有几个非常重要的方面要考虑。首先,就是时间问题,也就是你的项目多长时间必须做完?如果时间很短,那最好选择你最熟悉的JavaScript库。如果时间不那么紧迫,那你可以研究一下别的库。此时,必须要回答几个问题。还有谁在使用这个JavaScript库?这个库有人在不断完善吗?这个库的文档是否完整详细?这个库的背后有没有一个社区,假如你遇到了问题,能不能获得该社区的支持?是否容易找到具有使用这个库经验的工程师?这个库能不能解决你的所有问题,还是只能解决其中一部分?所有这些都是在选择某个JavaScript库时需要考虑的重要因素。

Q2:你对HTML5的未来怎么看?现在的宣传是不是太过分了?

Zakas:HTML5对Web发展是一件好事儿。但不好的是,一些外行的非技术人员,不分青红皂白地给很多无关的东西都扣上”HTML5“的帽子,这才搞得HTML5这个概念满天飞。这与几年前“Ajax”的情况非常相似。从某种角度看,确实宣传上有点过了,仿佛HTML5会彻底改变每个人的生活。事实并非如此。HTML5的意义在于为开发人员提供了更多的工具,利用这些工具能够创建更有吸引力的用户体验。

Q3:看来,Mobile Web(移动互联网)开发会成为下一行业焦点,你觉得呢?

Zakas:移动互联网开发已经是焦点了。今天,谁不关注移动用户,谁就要被时代抛弃。移动互联网可不是昙花一现,它将是一个时代。如果你真是在开发Web应用,那么就必须考虑移动体验,否则就会让别人让抢占先机。

Q4:现在有很多基于JavaScript改进的语言,比如Dart、 CoffeeScript,等等。你认为JavaScript今后的路会朝着哪方面发展呢?是更加类似于JVM这种的中间层,还是仍然维持一个强大灵活的编程语言存在?或者说,对于专注于JavaScript的前端工程师来说,是否应该投入大精力去研究和使用CoffeeScript这种语言来简化工作,而不是纠结于JavaScript本身可能的繁复解决方案呢?

Zakas:我没觉得JavaScript有一天只会被当成一个中间层。Dart和CoffeeScript很引人关注,这说明开发人员可能更希望JavaScript能多适应一些应用场景。最终,我想JavaScript会博采众长,吸纳其他语言中更流行的范式,从而使语言核心更完善。但我不认为将来的Web开发人员会只用Dart或CoffeeScript或者其他能编译为JavaScript的语言写代码。

Q5:你觉得Node.js怎么样?它会在服务器端开发中发挥重要作用吗?将来,Web前、后端开发真能只用一种语言来做吗?

Zakas:我认为Node.js对未来Web应用的重要性难以估量。开发人员一直在寻找一个可以替代PHP的方案,以便更迅速、更容易地介入服务器端开发。而在服务器上写JavaScript代码就是一种方案。Node.js不只是一个服务器端的JavaScript引擎,它更为高性能、高扩缩的Web应用提供了一个解决方案。正因为如此,很多JavaScript爱好者可能会转型为后端开发工程师。这样一来,前、后端的沟通会更加顺畅、直接,无论是面对面沟通,还是通过代码交流。

Q6:请问用JavaScript实现一些实用算法——比如压缩ZIP格式,是否可行?

Zakas:不仅可行,而且已经有人做到了!斯图尔特•奈特利(Stuart Knightley)就创建了一个叫JSZip(http://stuartk.com/jszip/)的项目,让我们能够用JavaScript来压缩文件。我认为未来还会出现很多类似实用算法的JavaScript实现。在实现某些复杂的算法时,可以不使用JavaScript,但这种可能性是永远存在的。

Q7:是否有必要强调JavaScript编码风格的一致性?在构建一个大型B/S系统时,如何以最佳方式划分HTML、CSS和JavaScript人员的职责?

Zakas:我觉得任何语言都需要强调编码风格的一致性。只要是团队开发,每个人都以相同方式编写代码就是至关重要的。这样大家才能方便地互相看懂和维护对方的代码。在一个团队中,HTML、CSS和JavaScript的编码风格都应该保持一致。这也是我为什么要写《可维护JavaScript》(Maintainable JavaScript)这本新书的原因,这本书里就解释了作为团队一分子,应该怎么写JavaScript。不过,同样的原则也适用于任何语言。

Q8:异步、回调编程方式正被广泛使用,但很容易出现复杂的回调函数。虽然有deferred和promise这些模式,但对开发人员还是不小的挑战,请问未来是否有可能在语言层面有所改观?

Zakas:经常有人提出建议,希望添加一些语言特性来简化异步编程工作。JavaScript语言层面到底会不会增加这种特性,现在还说不好,只能拭目以待。目前,有很多人认为回调和异步编程值得提倡,但我不那么认为(这句话这样译,对否?——译者注)。如果几乎所有方法都需要一个回调,那会导致代码很难调试和维护。我确实希望不久的将来,JavaScript能在语言层面给出一些解决方案。

Q9:今天,你涉足Web开发已超过15年,你当初怎么就会选择这个行业呢?能否给中国的开发人员一些职业规划方面的建议(有朝一日也能成为像你一样的专家)?

Zakas:我进入这一行,纯属误打误撞。上大学的时候,我的专业是计算机科学,但Pascal和C语言这些课让我感觉很无聊。我讨厌整天坐在黑底白字的电脑屏幕前。当时,我想跟高中同学保持联系,有人告诉我有一种新技术,说是叫Web。于是 ,1996年我在AOL上建立了自己的第一个网页,然后把网址发给同学,以便他们知道我的近况。我还想知道大家希望通过这个网页了解点其他什么情况,结果维护这个网页就成了我的业余工作。我不断研究、尝试,在此期间自学了JavaScript。结果大学一毕业,我就知道自己得在互联网行业谋份差事了。

我对Web开发人员最大的建议就是:热爱你的工作。热爱跨浏览器开发带来的挑战、热爱互联网技术的种种异端,热爱业内的同行,热爱你的工具。互联网发展太快了,如果你不热爱它的话,不可能跟上它的步伐。这意味着你必须多阅读,多动手,保证自己的才能与日俱增。下了班也不能闲着,要做一些对自己有用的事儿。可以参与一些开源软件的开发,读读好书,看看牛人的博客。经常参加一些会议,看看别人都在干什么。要想让自己快速成长,有很多事儿可以去做,而且付出一定会有回报。

Q10:迄今为止,你已经写了4本JavaScript书。你怎么会想起来写这些书呢,眼下还有没有写书的计划?

Zakas:我从来没有真正有过写书计划。我第一份工作只干了8个月就下岗了(因为公司散伙了)。这就是我当时的处境,大学毕业才8个月,而且又失了业。我感觉真正的学习才刚刚开始。于是我就给自己找事儿做,也就是把以前做过的事儿都写出来。写一篇,就在我的网站(http://nczonline.net)上贴一篇。然后告诉以前的同事都来看。一个朋友回信说:“嘿,你写得非常好,为什么不给杂志投稿呢?“于是,我就上网找到几个征稿的在线杂志。第一篇文章发表在DevX,后来又有几篇投给了WebReference。我的文章很受好评,因此我也非常乐意接着写下去。后来有一天,我看了WebReference的一篇文章,说有另一位作者,她把自己写过的文章集合起来出了一本书。我心想:“等一下,把文章集合在一块就可以出一本书?这事儿我也能干呐!”于是,我就给自己定了一个目标,坚持写,写本书出来。这就是后来的《JavaScript高级程序设计》(Professional JavaScript for Web Developers)。

写另外三本书则隔了很久。《Ajax高级程序设计》(Professional Ajax)实际上是Wrox的编辑策划的一个选题,因为我出版过一本书,所以他就找到了我。一开始我拒绝了,因为觉得可写的东西还不够多。但他坚持让我写,我最终还是应承下来。我很高兴又写了这本书,因为它后来也非常受欢迎。《高性能JavaScript》(High Performance JavaScript)是通过雅虎出版的,当时是雅虎内部人员联系我写的。显然,另外一些人也希望写点相关的东西放在书里,但当时大家都没有时间动笔。所以,我就在他们已有成果的基础上做些修改,改到自己觉得舒服为止。后来又找了几位合著者,共同完成了这本书。

《可维护JavaScript》(Maintainable JavaScript)是我最近才出版的一本书,内容源于6年前的一次演讲。我一直都认为这个主题很值得写,写成一本书都没问题,但就是不知道从何写起。去年12月的一个周六,我一觉醒来,突然觉得才思泉涌,满脑子都是写这本书的想法。我干脆起床,在电脑前坐了一整天,终于把脑子里的想法都落实成了文字。那一天,我写了大约45页。12月份剩下的时间我都花在了写书上,结果不到一个月就写完了这本书。

目前,我还没有再写书的计划。我准备先搁笔一段时间,因为最近我一直都在写,都连续写了一年多了。确实有几个主题值得写书,但在此之前,我得等待灵感爆发的那一刻。

Q11:能否谈谈你的公司Nicholas C. Zakas Consulting?很多中国程序员也有创业的梦想,能分享一下你的经验吗?

Zakas:我的咨询公司实际上只有我一个人。我依靠自己的经验为互联网公司提供前端技术建议,包括性能评估、架构设计与评审、推行最佳实践等专业Web开发公司可能需要的各方面帮助。这为我积累了宝贵的经验,让我得以接触各式各样的公司,结识他们的团队,了解他们正在做哪些激动人心的事情。

对于想自己开公司的人,我可以给出的最好建议,就是要有自知之明。你必须得知道一些事儿,比如自己开公司没有工资,有时候一连几个月可能都没有收入。自己开公司要应对很多风险,如果你后面有家人支持,可能风险会小得多。我创业的时机很好,因为我还没有成家,也没有其他经济负担,所以我可以承受创业不成功再回头找工作的风险。但并不是所有人都像我一样。如果你真心喜欢做点什么,坚信朝哪个方向努力一定成功,觉得自己能承受得了风险,那就不要犹豫。

Q12:你经常上哪些在线社区?请给中国读者推荐一些有用的在线资源。

Zakas:我最近没怎么上网上社区,我是Twitter控,关注那些能告诉我Web技术发展走向的人。我很愿意多花时间在线下跟人交流,比如在公司里,或者在会场上,这样可以了解到最前沿的东西。

我泡GitHub的时间非常多,有时候是看别人的项目,有时候是弄自己的。我在上面经常看到有人讨论代码该怎么写,这样写是为什么之类的讨论,都非常精彩。而通过看别人的代码真的能学习到很多东西。在碰巧遇见自己有感觉的项目,而又认为自己可以提供一些不同思路时,我甚至会为这些项目贡献一些代码。


对话《JavaScript高级程序设计》作者 Nicholas C. Zakas(英文版)
第1章 简介   模式   JavaScript:基本概念   ECMAScript 5   JSLint   Console   第2章 基本技巧   编可维护的代码   尽量少用全局变量   for循环   for-in循环   不要增加内置的原型   SWitch模式   避免使用隐式类型转换   使用parseInt()的数值约定   编码约定   命名约定   编注释   编API文档   编可读性强的代码   同行互查   在正式发布时精简代码   运行JSLint   小结   第3章 字面量和构造函数   对象字面量   自定义构造函数   强制使用new的模式   数组字面量   JSON   正则表达式字面量   基本值类型包装器   错误对象   小结   第4章 函数   背景   回调模式   返回函数   自定义函数   即时函数   即时对象初始化   初始化时分支   函数属性——备忘模式   配置对象   Curry   小结   第5章 对象创建模式   命名空间模式   声明依赖关系   私有属性和方法   模块模式   沙箱模式   静态成员   对象常量   链模式   method()方法   小结   第6章 代码复用模式   传统与现代继承模式的比较   使用类式继承时的预期结果   类式继承模式#1——默认模式   类式继承模式#2——借用构造函数   类式继承模式#3——借用和设置原型   类式继承模式#4——共享原型   类式继承模式#5——临时构造函数   Klass   原型继承   通过复制属性实现继承   借用方法   小结   第7章 设计模式   单体模式   工厂模式   迭代器模式   装饰者模式   策略模式   外观模式   代理模式   中介者模式   观察者模式   小结   第8章 DOM和浏览器模式   关注分离   DOM脚本   事件   长期运行脚本   远程脚本   配置JavaScript   载入策略
Introduction to Data Compression Fourth Edition Morgan Kaufmann 本书的中文版由图灵社区翻译出版 (资源是英文本) 享誉世界的数据压缩经典著作 内容全面新颖 示例精彩丰富 理论联系实践 方便学以致用 本书是数据压缩方面的经典著作 目前已经出到了第4版 数据压缩技术及其应用从未停止前进的步伐 图像 语音 文本 音频 视频等新的应用领域层出不穷 本书也与时俱进 不断更新 这一版基本涵盖了数据压缩领域的最新发展 书中首先介绍了基本压缩方法 包括无损压缩和有损压缩 涉及的数学知识 然后从无损压缩开始 依次讲述了霍夫曼编码 算术编码以及词典编码技术等 对于有损压缩 还描述了标量 矢量以及微分编码和分形压缩技术 本书在上一版的基础上 扩展讨论了基于小波的压缩技术 特别是越来越流行的JPEG 2000标准 还增加了范式霍夫曼码以及更多有关二进制算术编码的信息 本书非常适合从事数据压缩相关工作的专业技术人员 软硬件工程师 学生等阅读 数字图书馆 多媒体等领域的技术人员也可参考 Khalid Sayood 美国内布拉斯加大学工程学教授 分别于1977年和1979年获得罗彻斯特大学电气工程学理学学士和理学硕士学位 并于1982年获得得克萨斯州农工大学电气工程学博士学位 他的主要研究方向包括数据压缩 信源信道联合编码和生物信息学 ">Introduction to Data Compression Fourth Edition Morgan Kaufmann 本书的中文版由图灵社区翻译出版 (资源是英文本) 享誉世界的数据压缩经典著作 内容全面新颖 示例精彩丰富 理论联系实践 方便学以致用 本书是数据压缩方面的经典 [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值