注:以下根据Nicholas C. Zakas回复图灵社区访谈邮件的原文翻译。译者:李松峰。
Zakas:很高兴收到你的邮件,而且听说我的书那么受欢迎也很开心。以下是对问题的回答。
Zakas:选择JavaScript库的时候,有几个非常重要的方面要考虑。首先,就是时间问题,也就是你的项目多长时间必须做完?如果时间很短,那最好选择你最熟悉的JavaScript库。如果时间不那么紧迫,那你可以研究一下别的库。此时,必须要回答几个问题。还有谁在使用这个JavaScript库?这个库有人在不断完善吗?这个库的文档是否完整详细?这个库的背后有没有一个社区,假如你遇到了问题,能不能获得该社区的支持?是否容易找到具有使用这个库经验的工程师?这个库能不能解决你的所有问题,还是只能解决其中一部分?所有这些都是在选择某个JavaScript库时需要考虑的重要因素。
Zakas:HTML5对Web发展是一件好事儿。但不好的是,一些外行的非技术人员,不分青红皂白地给很多无关的东西都扣上“HTML5”的帽子,这才搞得HTML5这个概念满天飞。这与几年前“Ajax”的情况非常相似。从某种角度看,确实宣传上有点过了,仿佛HTML5会彻底改变每个人的生活。事实并非如此。HTML5的意义在于为开发人员提供了更多的工具,利用这些工具能够创建更有吸引力的用户体验。
Zakas:移动互联网开发已经是焦点了。今天,谁不关注移动用户,谁就要被时代抛弃。移动互联网可不是昙花一现,它将是一个时代。如果你真是在开发Web应用,那么就必须考虑移动体验,否则就会让别人抢占先机。
Zakas:我没觉得JavaScript有一天只会被当成一个中间层。Dart和CoffeeScript很引人关注,这说明开发人员可能更希望JavaScript能多适应一些应用场景。最终,我想JavaScript会博采众长,吸纳其他语言中更流行的范式,从而使语言核心更完善。但我不认为将来的Web开发人员会只用Dart或CoffeeScript或者其他能编译为JavaScript的语言写代码。
Zakas:我认为Node.js对未来Web应用的重要性难以估量。开发人员一直在寻找一个可以替代PHP的方案,以便更迅速、更容易地介入服务器端开发。而在服务器上写JavaScript代码就是一种方案。Node.js不只是一个服务器端的JavaScript引擎,它更为高性能、高扩缩的Web应用提供了一个解决方案。正因为如此,很多JavaScript爱好者可能会转型为后端开发工程师。这样一来,前、后端的沟通会更加顺畅、直接,无论是面对面沟通,还是通过代码交流。
Zakas:不仅可行,而且已经有人做到了!斯图尔特•奈特利(Stuart Knightley)就创建了一个叫JSZip(http://stuartk.com/jszip/)的项目,让我们能够用JavaScript来压缩文件。我认为未来还会出现很多类似实用算法的JavaScript实现。在实现某些复杂的算法时,可以不使用JavaScript,但这种可能性是永远存在的。
Zakas:我觉得任何语言都需要强调编码风格的一致性。只要是团队开发,每个人都以相同方式编写代码就是至关重要的。这样大家才能方便地互相看懂和维护对方的代码。在一个团队中,HTML、CSS和JavaScript的编码风格都应该保持一致。这也是我为什么要写《可维护JavaScript》(Maintainable JavaScript)这本新书的原因,这本书里就解释了作为团队一分子,应该怎么写JavaScript。不过,同样的原则也适用于任何语言。
Zakas:经常有人提出建议,希望添加一些语言特性来简化异步编程工作。JavaScript语言层面到底会不会增加这种特性,现在还说不好,只能拭目以待。目前,有很多人认为回调和异步编程值得提倡,但我不那么认为(这句话这样译,对否?——译者注)。如果几乎所有方法都需要一个回调,那会导致代码很难调试和维护。我确实希望在不久的将来,JavaScript能在语言层面给出一些解决方案。
Zakas:我进入这一行,纯属误打误撞。上大学的时候,我的专业是计算机科学,但Pascal和C语言这些课让我感觉很无聊。我讨厌整天坐在黑底白字的电脑屏幕前。当时,我想跟高中同学保持联系,有人告诉我有一种新技术,说是叫Web。于是 ,1996年我在AOL上建立了自己的第一个网页,然后把网址发给同学,以便他们知道我的近况。我还想知道大家希望通过这个网页了解点其他什么情况,结果维护这个网页就成了我的业余工作。我不断研究、尝试,在此期间自学了JavaScript。结果大学一毕业,我就知道自己得在互联网行业谋份差事了。
我对Web开发人员最大的建议就是:热爱你的工作。热爱跨浏览器开发带来的挑战、热爱互联网技术的种种异端,热爱业内的同行,热爱你的工具。互联网发展太快了,如果你不热爱它的话,不可能跟上它的步伐。这意味着你必须多阅读,多动手,保证自己的才能与日俱增。下了班也不能闲着,要做一些对自己有用的事儿。可以参与一些开源软件的开发,读读好书,看看牛人的博客。经常参加一些会议,看看别人都在干什么。要想让自己快速成长,有很多事儿可以去做,而且付出一定会有回报。
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月份剩下的时间我都花在了写书上,结果不到一个月就写完了这本书。
目前,我还没有再写书的计划。我准备先搁笔一段时间,因为最近我一直都在写,都连续写了一年多了。确实有几个主题值得写书,但在此之前,我得等待灵感爆发的那一刻。
Zakas:我的咨询公司实际上只有我一个人。我依靠自己的经验为互联网公司提供前端技术建议,包括性能评估、架构设计与评审、推行最佳实践等专业Web开发公司可能需要的各方面帮助。这为我积累了宝贵的经验,让我得以接触各式各样的公司,结识他们的团队,了解他们正在做哪些激动人心的事情。
对于想自己开公司的人,我可以给出的最好建议,就是要有自知之明。你必须得知道一些事儿,比如自己开公司没有工资,有时候一连几个月可能都没有收入。自己开公司要应对很多风险,如果你后面有家人支持,可能风险会小得多。我创业的时机很好,因为我还没有成家,也没有其他经济负担,所以我可以承受创业不成功再回头找工作的风险。但并不是所有人都像我一样。如果你真心喜欢做点什么,坚信朝哪个方向努力一定成功,觉得自己能承受得了风险,那就不要犹豫。
Zakas:我最近没怎么上网上社区,我是Twitter控,关注那些能告诉我Web技术发展走向的人。我很愿意多花时间在线下跟人交流,比如在公司里,或者在会场上,这样可以了解到最前沿的东西。
我泡GitHub的时间非常多,有时候是看别人的项目,有时候是弄自己的。我在上面经常看到有人讨论代码该怎么写,这样写是为什么之类的讨论,都非常精彩。而通过看别人的代码真的能学习到很多东西。在碰巧遇见自己有感觉的项目,而又认为自己可以提供一些不同思路时,我甚至会为这些项目贡献一些代码。