【转载】对话《JavaScript高级程序设计》作者 Nicholas C. Zakas(中文版)

标签: HTML5前沿技术 HTML5学习资源 HTML5最新动态 HTML5热点关注 业界新闻 | 发表时间:2012-05-16 17:11 | 作者:HTML5研究小组
出处:http://www.mhtml5.com

enter image description here

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

转自:  http://www.ituring.com.cn/article/1791

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

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 程序设计] 推荐:

【转载】对话《JavaScript高级程序设计》作者 Nicholas C. Zakas(中文版)

- - HTML5研究小组
注:以下根据Nicholas C. Zakas回复图灵社区访谈邮件的原文翻译. 很高兴收到你的邮件,而且听说我的书那么受欢迎也很开心. Q1:对各种JavaScript库的优点和缺点一直存在很多争论. 在您看来,开发人员应该怎么选择合适的库. Zakas:在选择JavaScript库的时候,有几个非常重要的方面要考虑.

网易前端云课堂,JavaScript程序设计:JS调试

- - CSDN博客推荐文章
本节主要通过一个加法器,介绍JS如何调试. 计算器
. . 1,一般调试JS,打印信息有如下三种:. a,用alert,缺点是每次都弹框. b,用console.log,这个数据量小还可以.

最隐晦的程序设计指引

- Sirius - Dev in Nightmare
    俗话说,程序员半年不学新东西,就变奥特曼(out man,过时之人)了. IT行业可以说是变化最快的行业,每年都有大量的新概念、新术语、新技术被创造出来,在多数人还在一头雾水时,“更好的”替代品又被创造出来.     想当年静态类型系统是王道,谁要是搞点运行时动态绑定、用点VB什么的,经常会被鄙视.

高性能LAMP程序设计

- Kevin - 超群.com的博客
周六分享的PPT,一些比较common的大杂烩,看不到slides的同学在这里查看.

炮轰老谭的<<C程序设计>>

- 世博 - 博客园-首页原创精华区
  本人不学无术, 生财无方, 下作无品, 见园里一小女初学C#的文章都能上评论头条, 实在眼红得不知所谓, 于是写下此随笔, 绝不敢效仿hax, 只为吸引眼球而已, 读者诸君就当看小丑跳梁好了.. #188楼2011-09-27 03:27 | 陈梓瀚(vczh)      . 为了免去翻阅旧评论的痛苦,“62楼”不辞辛苦复制一遍winter-cn给的地址,你们一定要看啊…….

并发程序设计详解

- - 企业架构 - ITeye博客
Java性能优化系列之三--并发程序设计详解. 线程安全 设计模式 多线程 并行计算 并发.   (1)、Future-Callable模式:FutureTask类实现了Runnable接口,可以作为单独的线程运行,其Run方法中通过Sync内部类调用Callable接口,并维护Callable接口的返回值.

Javascript诞生记

- Milido - 阮一峰的网络日志
二周前,我谈了一点Javascript的历史. 今天把这部分补全,从历史的角度,说明Javascript到底是如何设计出来的. 只有了解这段历史,才能明白Javascript为什么是现在的样子. 我依据的资料,主要是Brendan Eich的自述. "1994年,网景公司(Netscape)发布了Navigator浏览器0.9版.

JavaScript,你懂的

- dylan - keakon的涂鸦馆
经常有人问我,JavaScript应该怎么学. 先学基本语法,如果曾学过C等语言,应该1小时内就能掌握了. 再去使用内置的函数、方法和DOM API,熟悉它能干什么;而在学习DOM API的过程中,你还不得不与HTML和CSS打交道. 然后弄懂匿名函数和闭包,学会至少一个常用的JavaScript库(例如jQuery).

Javascript 里跑Linux

- rockmaple - Shellex&#39;s Blog
牛逼到暴的大拿 Fabrice Bellard,用Javascript实现了一个x86 PC 模拟器,然后成功在这个模拟器里面跑Linux(请用Firefox 4 / Google Chrome 11打开,Chome 12有BUG). 关于这个东西… 伊说 “I did it for fun“,大大啊大大啊….

高效 JavaScript

- xtps - ITeye论坛最新讨论
传统上,网页中不会有大量的脚本,至少脚本很少会影响网页的性能. 但随着网页越来越像 Web 应用程序,脚本的效率对网页性能影响越来越大. 而且使用 Web 技术开发的应用程序现在越来越多,因此提高脚本的性能变得很重要. 对于桌面应用程序,通常使用编译器将源代码转换为二进制程序. 编译器可以花费大量时间优化最终二进制程序的效率.