对话jQuery之父John Resig:JavaScript的开发之路

在参加完CSDN组织的TUP对话大师系列演讲活动后,27岁的jQuery之父John Resig接受了本刊总编刘江的深度访谈,这篇对话文章,让我们一窥这位著名程序员的人生及技术感悟。

编程初体验

《程序员》:你是如何开始编程的?

John Resig:第一次编程大概是在初中,14、15岁,当时有个朋友带来张软盘,里面有QBASIC。在DOS系统下他向我展示了他自己的程序,我觉得非常有意思。从那时起我就开始想编程了,先后借了很多相关的书。最初是学习编写HTML,之后又转向CGI。

《程序员》:你编写的第一个有意思的程序是什么,还有印象吗?

John Resig认为,JavaScript和HTML一样会长久存在,20年内开发者肯定会一直用JavaScript写网页应用程序
John Resig认为,JavaScript和HTML一样会长久存在,20年内开发者肯定会一直用JavaScript写网页应用程序

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的加入,意在为教育提供更好的工具,让更多的人参与到开源中来,为提升教育质量贡献一份力。

本文选自《程序员》杂志2011年08期,更多精彩内容敬请关注08期杂志

《程序员》杂志订阅火热进行中

转载于:https://www.cnblogs.com/solq/archive/2011/08/16/2141462.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网产品研发的典型流程

这张图是互联网产品研发的一种最佳实践,这张图中没有包含异常流的处理。通常异常出现在进入开发甚至测试阶段了还在变更需求,进入封版发版阶段了还在修改代码,所以在这两个时间点都有需求冻结和代码冻结。 转载于:https://www.cnblogs.com/mo…

vscode 预览图片 插件_真的动手写的VSCode的插件(图片浏览)之1

由于本职工作中经常做图像处理,于时大量的图片浏览是不可避免的。怎么样不离开最近经常使用的VSCode,同时去看大量的图像对我来讲就是个不错的需求,尤其是某个目录下的文件。先谈基本的需求吧,显示一个目标下的所有图像&#xff0…

四十三 常用内建模块 base64

Base64是一种用64个字符来表示任意二进制数据的方法。 用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据&#…

Spring中IoC的入门实例[转]

Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用。这一章先从Spring的IoC开始。所谓IoC就是一个用XML来定义生成对象的模式,我们看看如果来使用的。  数据模型  1、如下图所示有三个类,Human(人…

方向gravity_逆转重力方向,更加自由翱翔——GNZ48 - 《gravity》

第二期给大家带来的这首歌出自GNZ48 第二套原创公演《双面偶像》,也是GNZ48 team g 在这套公演中的队歌,一首气势恢宏的歌曲。开头的小提琴就带入我们进入了一种紧张的情绪,随着第一个鼓点敲下,歌词也渐渐揭开面纱:“泥…

06-BCD计数器设计与应用——小梅哥FPGA设计思想与验证方法视频教程配套文档

芯航线——普利斯队长精心奉献 实验目的:1.掌握BCD码的原理、分类以及优缺点 2.设计一个多位的8421码计数器并进行验证 3.学会基本的错误定位以及修改能力 实验平台:无 实验原理: BCD码(Binary-Coded Decimal)又…

Flash基本工具练习

练习一、按钮 练习二、卡通脸 练习三、图标 转载于:https://www.cnblogs.com/staceydesign/p/3313229.html

mysql_query 资源标识符_借助PHP的mysql_query()函数来创建MySQL数据库的教程

以mysql_query()函数作为教程的基础前提,我们先来看一下mysql_query()的用法:mysql_query()函数PHP MySQL 函数库中,mysql_query() 函数用于向 MySQL 发送并执行 SQL 语句。对于没有数据返回结果集的 SQL ,如 UPDATE、DELETE 等在…

ios PNG Crush error (PNG图片错误)

我是这么解决的: I had the same problem. How to fix : Open up image with Preview -> File > Export > Format change to PNG and you are done 其他被采纳的方法: 12 Answers activeoldestvotes up vote41down voteaccepted Did you check …

设计模式之十(外观模式)

前言 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一系统更加容易使用. 结构图 SubSystem Class 子系统类集合 实现子系统的功能,处理Facade对象指派的任务,注意子类中没有Facade的任何信息,即…

sunday java_Sunday算法:最快的字符串匹配算法

之前被KMP的next数组搞的头昏脑胀说不上也是比较烦人的,今天看到还有这么有趣而且高效的算法(比KMP还快),看来有必要做一点笔记了Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配算法,其简单、快速的特点非常好!思路其核…

小波分析实验: 实验1 连续小波变换

实验目的: 在理解连续小波变换原理的基础上,通过编程实现对一维信号进行连续小波变换,(实验中采用的是墨西哥帽小波),从而对连续小波变换增加了理性和感性的认识,并能提高编程能力,为…

java axmlprinter_安卓xml配置文件解析工具-AXMLPrinter2.jar(androidmanifest.xml 反编译)下载官方最新版-西西软件下载...

AXMLPrinter2.jar apk分析APK文件,取得APK文件中的 包名、版本号及图标,很强大的工具,再一次感受到了批处理的牛逼。可以将android安卓编译过的二进制XML文件(binary xml file)反编译明文输出保存。是apk反编译修改的必备工具之一。例如需要查…

UML用例图说明

转自:http://www.360doc.com/content/10/1206/23/3123_75672033.shtml 前些时间参加了潘加宇老师的技术讲座,UML建模技术受益匪浅。我也把平时的一些积累和上次的收获总结在这篇文章中,主要讲解用例图相关的知识。 用例图是软件需求分析…

Android 布局学习之——Layout(布局)详解一

layout(布局)定义了用户界面的可视化结构(visual structure),如Activity的UI,应用窗口的UI。 有两种方式声明layout: 1.在xml文件中声明UI组件。 2.在运行时,实例化布局元素。我们可以以编码的方式创建View或ViewGroup…

Week1 Team Homework #2 Introduction of team member with photos

小组成员介绍 组长:黄剑锟 11061164 组员:顾泽鹏 11061160 组员:周辰光 11061154 组员:龚少波 11061167 组员:赵骞 11061155 组员:孙时 11061146 组员&am…

inttostr java_Delphi和Java实现webservice架构

Webservice现在已经不是什么新技术了,用java建立webservice是快捷的,但是用java在制作客户端的感觉上总是不如 Delphi的(个人感觉,java高手们不要笑话我),那我们就用java实现webservice的服务端程序,delphi制作客户端。…

CentOS系列启动流程和内核原理(5系列,6系列,7系列)

前言,本来让我写博客我是拒绝的然而看见大家都在写,还能不能一起友好的玩耍了? 我要是不写怎能和同大神们一起ZB呢?遂开博客! 一、Linux启动内核文件 1.Linux系统组成 动态视角:内核根文件系统 静态视…

LSTM和GRU vs 循环神经网络RNN

1、考虑下列三种情况下,对比一下普通RNN的表现和LSTM和GRU表现: (1)早期观测值对预测未来观测者具有非常重要的意义。 考虑一个极端情况,其中第一个观测值包含一个校验和, 目标是在序列的末尾辨别校验和是…

java ora-12505_Oracle SQL Developer连接报错(ORA-12505)的解决方案(两种)

用oracle数据库新建连接时遇到ora-12505,此问题解决后又出现ora-12519错误,郁闷的半天,经过一番折腾问题解决,下面小编把我的两种解决方案分享给大家,仅供参考。解决方案一:今天工作时在新建连接的时候遇到…