非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/article/199456前端
曾探,2007年毕业于吉林大学软件学院,目前就任于腾讯AlloyTeam前端团队任高级工程师, 著有《JavaScript设计模式与开发实践》一书。他曾参与WebQQ、QQ群、Q+开发者网站、微云、QQ兴趣部落等大型项目的开发。有Java、Python和JavaScript的开发经验,业余做品有HTML5街头霸王等。平时喜欢电影和音乐,业余时间是一名健身教练。程序员
问:你是从何时开始编程的?什么样的契机让你成为了一名前端工程师?web
我是07年大学毕业以后才开始编程。刚工做的时候作的是Java开发,当时几乎尚未公司提供纯粹的前端开发职位。若是作的是web项目,那么在项目中程序员的工做都是从前端到数据库一锅端。数据库
刚接触JavaScript的时候,以为开发很方便,不须要搭建任何环境,新建一个记事本就能够开撸了。第一次接触JavaScript时用2天时间写了个贪食蛇,在IE6上跑的很欢快,当时以为很神奇,也很开心。编程
我09年我开始专职作前端开发,在以前的工做仍是以Java为主,有次恰好看到了一家公司招聘前端开发,就有了后来的事情。虽然如今偶尔还会用其余语言写点东西,但本身自己最喜欢的语言仍是JavaScript,这也是为何我会从事前端开发的缘由。后端
至于为何我会喜欢JavaScript,而不是别的语言,我倒没有认真从语法、语言历史什么的角度去想过。也许就跟四月清晨遇到的百分百女孩同样,总之你一眼就认定是她。设计模式
问:在学习设计模式的过程当中是否遇到过困难?你是如何克服的?对于正在阅读《设计模式》和《JavaScript设计模式与开发实践》的读者,你有什么建议?移动web开发
有时候我在QQ群或者论坛之类的地方听见一些新人说:“接下来1个月我要把设计模式学完。”其实设计模式这种东西很难用学完来做为衡量标准。前端框架
若是你刚成为程序员不久,实际上是没有必要刻意去学习设计模式的。若是没有必定程度的积累,看设计模式那些东西跟背书的效果差很少,结果都是无根的浮萍。设计模式自己是从代码中总结而来的一些设计技巧,若是没有代码量的积累,咱们很难去真正理解这些模式。微信
在无数行代码的积累以后,天然而然咱们会发现已经使用过一些模式,但缺乏一些总结,使用的方式和场景或许还有改进的余地。这时候再去看一看设计模式之类的书籍或者文章,才会有一种茅塞顿开的感受。
《设计模式》这本书自己仍是比较难懂的,这本书自己很薄,但字字珠玑,正由于如此,不少重要的知识和思想可能就在一、2句看似不起眼的话中。若是是阅读这本书,建议精读和反复读。暂时看不懂也没有关系,先放着过一段时间再来看,或者是工做中遇到了相似的问题,再来翻翻这本书。
相反的是,《JavaScript设计模式与开发实践》这本书写得很是简单,从读者的反馈来看,这也是一本容易阅读的书。里面举的例子并不复杂,并且大多都是跟实际开发相关的,因此阅读起来也会有种亲切感。这本书没有特别的阅读建议,从第一页开始,或者从某一页开始均可以。但最靠谱的,仍是从前言开始。
问:如何正确地使用设计模式? 如何避免过分设计?
这个问题在《JavaScript设计模式与开发实践》的前言部分已经提到过。设计模式被一些人认为只是夸夸其谈的东西,他们认为设计模式没有太大的用途,毕竟一个彻底没有接触过设计模式的程序员,也许亦经历过许多不错的软件系统开发。他们以为刻意去使用设计模式反而可能会增长程序的复杂度。
对于开发中的一些状况来讲,咱们也许在一些特定的场景里,一眼就能看出来使用什么模式。另一些模式则是在代码重构的时候才加上的。
咱们没必要去纠结一开始就应该使用什么模式,在首先完成功能需求的前提下,若是使用某种模式会在未来的项目维护阶段为咱们带来好处,则能够用这些模式来重构代码。若是之前的代码就完成了需求,并且在维护阶段不会带来大的变化,那咱们就没有必要非得往模式上面套。
若是要避免在程序中形成过分设计,首先得熟悉这些模式的用途和场景。
有时候咱们将一些模式用在了错误的场景中,或者说在不应使用模式的地方刻意使用模式。特别是初学者在刚学会使用一个模式时,巴不得把全部的代码都用这个模式来实现。锤子理论在这里体现得很明显:当咱们有了一把锤子,看什么都是钉子。拿足球比赛的例子来讲,咱们的目标只是进球,“下底传中”这种“模式”仅仅是达到进球目标的一种手段。当咱们面临密集防守时,下底传中或许是一种好的选择;但若是咱们的球员得到了一个直接面对对方守门员的单刀机会,那么是否还要把球先传向边路队友,再由边路队友来一个边路传中呢?答案是显而易见的,模式应该用在正确的地方。而哪些才算正确的地方,只有在咱们深入理解了模式的意图以后,再结合项目的实际场景才会知道。
问:JavaScript设计模式和其余语言设计模式的主要区别是什么?
关于设计模式的大多数讨论都是源自C++,Java这些静态类型语言,而JavaScript是一门动态类型语言。许多设计模式就是为了解开对象之间的类型耦合而生的,而做为动态类型语言的JavaScript没有这种困扰,这说明JavaScript语言中的设计模式和其余语言是很是不一样的,从结构上已经没有什么可借鉴的东西了,可以借鉴的只有思想和解决问题的场景。
人类飞上天空须要借助飞机等工具,而鸟儿天生就有翅膀。在Dota游戏里,牛头人的人生目标是买一把跳刀(跳刀可使用跳跃技能),而敌法师天生就有跳跃技能。由于语言的不一样,一些设计模式在另一些语言中的实现也许跟咱们在《设计模式》一书中看到的截然不同,这一点也不使人意外。
Google的研究总监Peter Norvig早在1996年一篇名为“动态语言设计模式”的演讲中,就指出了GoF所提出的23种设计模式,其中有16种在Lisp语言中已是自然的实现。好比,Command模式在Java中须要一个命令类,一个接收者类,一个调用者类。Command模式把运算块封装在命令对象的方法内,成为该对象的行为,并把命令对象四处传递。但在Lisp或者JavaScript这些把函数看成一等对象的语言中,函数便能封装运算块,而且函数能够被当成对象同样四处传递,这样一来,命令模式在Lisp或者JavaScript中就成为了一种隐形的模式。
在Java这种静态编译型语言中,没法动态地给已存在的对象添加职责,因此通常经过包装类的方式来实现装饰者模式。但在JavaScript这种动态解释型语言中,给对象动态添加职责是再简单不过的事情。这就形成了JavaScript语言的装饰者模式再也不关注于给对象动态添加职责,而是关注于给函数动态添加职责。
问:JavaScript有不少框架和库,对于初级学习者来讲,怎么能在这些资源中选择适合本身的来建立我的技术栈?
相比于其余语言的开发者,JavaScript程序员确实会显得比较“辛苦”。前端框架和库的发展太快了,好像jQuery的流行仍是昨天的事情,今天又涌现了Backbone、Angular、React这些框架。对初学者来讲,很容易让人迷茫,不知道学习哪一个框架。个人建议是,优先根据项目需求选择,若是你接手的项目正在使用Angular.js,那就是学习Angular.js的好机会。
若是还有一些业余时间,能够选择一些最流行的框架来学习,它们之因此可以在浩瀚的框架海洋中脱颖而出,确定是有它们的优势的。好比咱们找准了Angular.js来学习,能够先用Angular.js来作几个demo页面,而后想办法在一个合适的项目中使用。熟悉语法以后能够阅读它的源代码,若是有时间和精力,能够模仿它写一个相似的框架,在这个过程以后,或许你还能够对它加以改进。
问:AlloyTeam如今有多少人?由什么样的工程师组成?
AlloyTeam目前有50多人,团队既有94后的小鲜肉,也有70后的大叔,女前端工程师则既有美丽师姐、也有全民校花,还有萌妹子。你们的技术从Web前端、后端到客户端,端端精通,既有对基础框架有研究的同窗,也有对计算机图形处理感兴趣的同窗,既有喜欢作工具的,也有喜欢作游戏的,技术专长可谓兼容并包。
问:AlloyTeam的名字从何而来?大家团队的主要工做内容是什么?
咱们团队的代号叫AlloyTeam,不少人很好奇腾讯AlloyTeam名字的含义和由来,其实这里还真有一段小历史。2008那年咱们团队开始研发WebQQ,WebQQ是业界首个将WebOS、云计算、AppStore和Web开放平台整合在一块儿的产品,因此咱们就给WebQQ起了一个开发代号——AlloyOS。Alloy是合金、合铸、合成、聚合的意思,正好寓意咱们的WebQQ是将公司内、外的各类互联网服务产品合铸成一个为用户提供一站式的在线生活的WebOS平台。因此咱们的团队也就天然成了AlloyTeam,同时AlloyTeam这名字还有一个寓意:就是将不一样成员的聪明才智,以及不一样技术聚合在一块儿,以产生更强的合金特性,从而成为坚如盘石的团队。
目前咱们团队主要负责手机QQ中的移动Web业务以及Hybrid App的开发工做,好比:兴趣部落、QQ群等等。除了平常业务开发以外,也鼓励你们作一些各个方面的自由开源项目,无论是能够提升你们工做效率的开发工具,仍是能对业界产生影响力的开源项目,小到组件,大到游戏,咱们都很是支持你们去作。团队内部很是平等和自由,也鼓励你们分享、布道、写书。另外,AlloyTeam也随时欢迎优秀的Web前端小伙伴加入。
问:现在,移动互联网已经变得愈来愈重要,在这种状况下前端工程师会面临什么样的机会和挑战?
的确是这样,就我我的而言,除了上班时间已经不多打开电脑了。原先用PC能作的事情,如今手机几乎所有能够完成,能够预见这个趋势在未来还会更加明显。在这种状况下,原先在PC上开发的前端工程师不少都转向了移动web开发。包括AlloyTeam也是这样,如今绝大部分时间都在作移动端开发。对于前端工程师来讲,可能要学习一些新的知识,这不是坏事,也不难,程序员应该保持学习的心态。无论是PC开发仍是移动开发,咱们都在用相同的方式来改变人们的生活。
问:程序员给人的印象一般都是不善交际、不善运动,生活习惯不规律,这些习惯也潜移默化地影响着程序员群体的健康。你在业余时间是一位健身教练,请问运动带给你的好处都有哪些?
我认识许多很是有才的程序员,程序员是一个至关聪明的群体,聪明的人能作好许多事情,而不是仅仅写代码。不过也许大部分人都把太多重心放在了工做上面,这是好事,但也不全是好事。程序员的职业特色注定对健康的损害比较大,从25岁开始人的器官开始不可逆转的老化以后,久坐和不运动带来的危害更大。因此程序员更要有意识地多运动,至少运动会给你一个跳动更强烈的心脏,能够背女友越过某个路上的小水沟。固然,加班赶项目的时候也比别人抗得久。
问:请问对于程序员来讲,工做和运动是否有能够兼顾?对于想要积极锻炼的程序员来讲,你有哪些建议?
IT行业基本上只能在大城市生活和工做。大城市的房价物价注定咱们工做得努力和辛苦。这种状况下,许多人彻底把太多精力放在了工做上面,而忽略了生活自己。工做本该只是生活的一部分,也许咱们应该有一个更加平和的心态,努力工做和享受生活并不矛盾。在业余时间有一些本身的爱好,或是找一点适合本身的运动,不光是为了更好的工做,还由于这些爱好自己也是生活的另外一部分。
对于开始有意识开始锻炼的程序员,这是一个很好的起点。不过现实中的大部分人状况都是三天打鱼两天晒网。若是真想经过运动来改善体质或者丰富业余生活,首先必定要保证本身能坚持下来。不少人刚开始锻炼的时候很是有激情,一段时间后就被本身以各类理由说服放弃了锻炼,好比要加班,有约会,感冒了,有聚餐各类各样的缘由。这些事情确定是会遇到的,但无论怎样,一周抽出5个小时来锻炼身体其实确定是没问题的。
其次,无论什么运动都是一门科学。拿健身来说,首先要搞清楚身体跟新陈代谢有关的基本知识,搞清楚动做标准,这样才会有效果并且不容易弄伤关节和肌肉。若是有条件的话,能够去健身房里面请一个专业教练,有教练和没有教练的区别太大了。相信坚持一段时间后,都能看到本身形貌和精神的改变,直到健身成为一种习惯。