加完CSDN组织的TUP对话大师系列演讲活动后,27岁的jQuery之父John Resig接受了本刊总编刘江的深度访谈,这篇对话文章,让我们一窥这位著名程序员的人生及技术感悟。
编程初体验
《程序员》:你是如何开始编程的?
John Resig:第一次编程大概是在初中,14、15岁,当时有个朋友带来张软盘,里面有QBASIC。在DOS系统下他向我展示了他自己的程序,我觉得非常有意思。从那时起我就开始想编程了,先后借了很多相关的书。最初是学习编写HTML,之后又转向CGI。
《程序员》:你编写的第一个有意思的程序是什么,还有印象吗?
John Resig:高中时,有一阵我通过编写网站应用来挣钱。我还会做一些诸如网站设计的工作,当然没有专业人员做得那么好。记得曾编写了一个订早餐的网页应 用,让那些熬夜无暇早起买早餐的人通过这个网页应用订餐。不过,这还算不上最有意思的程序。我的第一个最有趣的程序是在大学时编写的。那时我们要建立自己 的时间表,以分配好上课时间,所以我编了一个选课的程序,它可以推荐出最优的选课结果,例如:如果你要选数学、计算机和除此之外的一门科学课程,程序可以 推荐出可在一天内完成三门课程的时间表,这样你就有六天的空闲时间去做自己想做的事情。
jQuery之父John Resig
《程序员》:学生时代的生活和以后的编程生涯,两者之间有没有内在的联系?
John Resig:这说不太清楚,我喜欢编程,它可以让我完全理解一个东西。选择Web编程是因为自己愿意做别人不乐意做的事情。比如很多人不愿意处理同样的网页在不同浏览器下表现各异的问题。但这很有挑战,也很有乐趣。
《程序员》:能不能谈谈你在大学生活中印象最深的事情?
John Resig:对我来说最重要的事情,是那些计算机科学课程。大学期间我并没做很多Web编程,而是做了很多和数据库相关的工作。这是我感兴趣的方面。我还 喜欢研究社区,做数据挖掘研究,其中就包括判断社交网站怎样增长之类,那时我还发表了两篇关于数据挖掘的论文。离开大学后,我又回到Web编程,尽管数据 挖掘很有意思,但我还是觉得Web编程的吸引力更大。
《程序员》:大学最喜欢的计算机课程有哪些?
John Resig:我喜欢有挑战性的课。例如XML,我本来以为课程很简单,可以轻松得个A。结果老师第一堂课就把我知道的东西都讲完了,从第二节课开始所讲内容我完全听不懂,很难学,结果我得了B。但我还是很自豪,因为学了很多东西。
jQurey 背后的故事
《程序员》:向我们透露一些jQuery背后的故事吧。最开始您是怎样做的?
John Resig:做Web编程时,我非常讨厌浏览器的Bug,不同的浏览器有不同的Bug,而且数量非常多。于是我用JavaScript做了CSS选择引 擎,之后还做了个动画引擎,都是自娱自乐。但与此同时我发现自己不能将制作的一些应用放到浏览器里。为了将应用放到Firefox浏览器中,我开始制作相 关的API,以应用那个CSS选择引擎和动画引擎,这些最终成为了jQuery。几个月后,我将那些应用做进Firefox里,之后在IE里也可以运行。 如今这仍是我的目标——让每个人都可以在网页里写点什么,并且写的东西能够在浏览器中顺利运行出来。
《程序员》:支撑jQuery的基本原理有哪些?
John Resig:原则很简单。作为一名程序员,我希望代码简洁,不希望在编程的时候不停地重复某些内容,设计jQuery的目标就是为了简化代码,使程序更高效。
《程序员》:jQuery是如何把简单和高效结合在一起的?
John Resig:很多人想直接做大项目,例如像Gmail、Yahoo!Mail之类。但实际上通过很简单的过程也可以解决大项目中一些很困难的关键点,化大为小,化繁为简,jQuery就是这样
做的。
《程序员》:如果能重新再来一次,你会在哪些方面做出设计改变?
John Resig:我要改一些方法的名称。初期在命名上出现了一些失误,后来我花了很多时间才理解到jQuery应该是现在这样。有些事情如果一开始就做好,可能会少走很多弯路。
《程序员》:谈谈jQuery的研发过程吧。
John Resig:我们主要的资源是jQuery的Bug Tracker,有一个Team专门经营Bug Tracker。我负责修改这些Bug。最终我们有一个需要修改的Bug列表。然后有人改程序,提交给别人通过,并处理这些Bug。大多数时候都是我来改 Bug,发布新版本。
《程序员》:中国的程序员该如何做才能参加到这个项目?
John Resig:直接加入就可以。所有人都可以看到内部的每次代码提交,然后更优秀的程序员会加入Bug Tracker。他们能看到我们发现问题和处理问题的整个过程,从而学会怎样发布补丁。我们的小组一共20个人,只有3个代码的贡献者,其余17人都在做 各种各样其他事情。jQuery网站是世界排名前700位的网站,所以有很多工作需要处理。
《程序员》:在中国有没有正式的文档网站?
John Resig:有jQuery.org.cn,但这不是正式的,不过里面有jQuery文档的翻译资料。我们急需有人帮助翻译这些文档。
《程序员》:jQuery的未来怎样?
John Resig:我们基本不加入新功能,目前大多数工作都是优化,让jQuery变得更快、更强、更容易理解。未来的工作也是优化,使jQuery功能更清晰化。
开源是JavaScript 的出路
《程序员》:说说你学习JavaScript的过程?
John Resig:从高中时我就开始使用Java-Script,具体做什么记不大清了。大学时我加入一个研究工作组做一些商业项目,例如为一些地方公司设计网 页。设计师的工作是用Photoshop处理网页图片,而我的工作是将这些图片用CSS展现在网站上,这需要在Firefox浏览器下呈现出相应的效果。 这期间公司还让我做的事情是在网页上显示一个特殊的卷轴效果,所以必须用JavaScript编写。我一直在琢磨如何写这个脚本,直到有一天我改了脚本中 某个元素属性,这个功能就实现了。我很高兴,开始系统学习JavaScript,之后就用它编程。
《程序员》:最开始你用的是什么库?
John Resig:用Prototype,这是2005年出现的一款非常棒的JavaScript基础类库,对JavaScript做了大量的扩展,而且很好地 支持了Ruby on Rails。Prototype吸引我的一点是代码干净整洁。当我第一次看到Prototype的时候,很难想象JavaScript类库代码可以做到如 此简洁。Prototype非常漂亮,让人产生用它写代码的
欲望。
《程序员》:你认为什么时候是JavaScript库开源的最佳时机?
John Resig:JavaScript与其他浏览器语言有很多不同,它的特点是大家都可以看到源代码,所以我认为从一开始就要开源。如果你注意观察 JavaScript的库,就会发现所有开源的库都挺好,而所有闭源的库都不行。其实现在基本已经没有人再用闭源的JavaScript库了。
《程序员》:我知道有些中国的公司开始设计新的框架和JavaScript库,并打算开源,你对他们有什么建议吗?
John Resig:开源是需要的,但最重要的是知道你的用户是谁,否则就会跟他们有距离。我设计jQuery时就遇到了类似的问题,要考虑究竟哪些人需要用我设 计的类库。目前JavaScript还是有发展的空间,但是如果创造全新的东西就可能没太大必要。我对开源公司的建议是必须放弃自己的公司立场,把这个当 成一个独立的项目,公司只是这个项目的一个用户。比如公司有一个需求,也要走正式的申请、Debug之类的流程。也许有些人会觉得这是公司的资源,但如果 你要开源,就必须放弃控制。
《程序员》:对刚开始使用JavaScript的开发者有什么建议?
John Resig:刚开始使用JavaScript的开发者估计对浏览器方面的了解也很少。我的建议是用库。不要把时间花在那些浏览器的Bug上,一开始就直接用各种库。
《程序员》:你怎样看JavaScript的未来?谈一下服务器端的node.js?
John Resig:我对JavaScript的未来很乐观。因为网络和浏览器会存在很长时间,所以JavaScript和HTML一样会长久存在。20年内大家 肯定会一直用JavaScript写Web应用。它是一种很特别的语言,在服务器端也可以用JavaScript。我喜欢JavaScript的原因是它 可直接用在浏览器上,它跟Python不一样,很少有语言可以直接用在浏览器上。在服务器端的node.js是很酷的东西,它让JavaScript脱离 浏览器而存在。
优秀程序员的标准
《程序员》:谈谈你在Mozilla的工作?
John Resig:我以前是JavaScript程序员,2007年2月加入Mozilla,工作了几年。后来jQuery变得很大,我必须全力来做。所以向 Mozilla的主管说我要做jQuery,他非常支持,认为这是很棒的事情。所以后来,我就可以将全部精力放在jQuery上。
《程序员》:你最常用的工具是什么?
John Resig:用浏览器,12~20种,不同的版本,不同的类型。我还要使用各类系统如Windows、Mac等。
此外Firebug是一款很棒的工具。
《程序员》:你现在是在本地还是在云端工作?
John Resig:我基本还是在本地,在云端工作的确很好,因为设定所有的模拟器是很困难的,所以我们都是设定一次,然后放到云端,这样能避免一些测试的问题。
《程序员》:你觉得好的程序员应该是怎样的?
John Resig:面试JavaScript程序员时,我一般问两类问题,一类是JavaScript的技术问题,另一类是浏览器Bug方面的。比如你最喜欢的 浏览器Bug,要是他不能回答,就说明他做的工作不够。喜欢这个工作的人,都会有花两三天修复一个浏览器Bug的经历。
《程序员》:你觉得学习数学或者理论、算法是不是对程序员很重要?
John Resig:对有些程序员是,但对JavaScript程序员则不一定,这取决于你要做什么工作。在大学时我做数据挖掘方面的工作,需要很强的理论背景。 在用JavaScript时,我学了一些语言基础方面的东西。当然多学知识肯定会让你有更好的理解。算法有时不一定都能用上,但熟悉语言的基础理论会对自 己有很大帮助。
HTML 的未来
《程序员》:HTML、JavaScript在将来是不是会占统治地位?
John Resig:现在已经处于统治地位了,以后浏览器和web只会更流行。它是网络的核心,不像Flash不能运行在iPhone上。
《程序员》:HTML5会成功替代Flash吗?
John Resig:大家要用Flash主要是为了视频、游戏。但现在主要的视频网站都已经转入HTML5,我认为随着更多的浏览器支持HTML5功能,Flash就会更加无关紧要。
《程序员》:越来越多人在用HTML和JavaScript,会不会取代所有的本地应用?
John Resig:是的,因为用它们可以开发很多功能。HTML会不会取代所有的本地应用,关键还是看要用什么功能,比如你不能用HTML编写浏览器,还是要使 用底层的语言。当然不排除但首先Web技术可能变得更厉害,厉害到能开发浏览器的程度,就可以编浏览器。要让所有浏览器都能支持,这是未来的关键。
记者后记:2011年5月,John Resig离职Mozilla,加入在线教育集团Khan Academy。在那里,他仍继续从事jQuery相关工作,同时负责该组织的开源项目及未来的iPad应用的开发。Khan Academy是一个非盈利组织,正在尝试对“学生的学习方法及老师的教育方法”进行一次彻底变革。John Resig的加入,意在为教育提供更好的工具,让更多的人参与到开源中来,为提升教育质量贡献一份力。