Amos Q. Haviv是一位软件工程师、技术顾问,他还是MEAN.IO和MEAN.JS的创建者。Amos有近十年的全栈开发经验,曾就职于多个创业公司和企业。从2011年起,Amos使用JavaScript的全栈解决方案进行开发,包括Node.js和MongoDB,以及AngularJS一类的前端MVC框架。2013年,他创建了MEAN应用的第一个样板MEAN.IO,目前在www.meanjs.org继续开发MEAN解决方案,另外他还为多家公司的开发团队提供指导。Amos著有《MEAN Web开发》一书。

问:你为什么要创造MEAN?你最开始的想法是什么样的?

在2011年时,我是一位技术顾问。我遇到了很多不错的初创公司和顶尖公司的技术团队,他们中的很多人都有一个相似的问题。到了2013年时,每个人都开始意识到JavaScript的新能力,所以我开始看到各种技术团队使尽浑身解数努力让自己的技术栈适应新技术,特别是Node.js和AngularJS。我注意到他们需要解决的都是相同的设计问题,于是我开始构建一个简单的样板项目来帮助这些团队更好地启动。这个项目最终成为了MEAN的第一个样板。

问:你是如何吸引开发者为MEAN做贡献的?

当我向我的朋友和同事展示这个项目时,有些人建议我开源这个项目。我并没打算吸引任何帮助,我只是提出了自己关于项目构建方式的拙见。MEAN项目获得的帮助的峰值事实上是由Hacker News上的一条推荐产生的,但是推动力背后真正的原因在于:开发者们真的从这个项目中得到了一些价值。

问:为什么JavaScript全栈工程师现在如此重要?你建议前端开发者让自己成为全栈工程师吗?

JavaScript工程师很重要,因为JavaScript在业界的地位不容撼动,几乎没有任何其他语言可以在地球上所有连接的设备上运行,所以自然,开发者们可以借此完成很多令人惊讶的东西。在《MEAN Web开发》中,我解释了JavaScript现状背后的原因,主要和Chrome V8引擎有关,但是无论如何,一门语言最终都要落实在人和人的作品上。我向每个我遇到的开发者建议,一定要掌握尽量多的技能,而前端工程师也绝对应该适应他们的全栈环境。

问:MEAN可以处理企业级或产品级的开发吗?

我见过MEAN的很多实现方式,从小型黑客马拉松到大规模分布式应用。MEAN在很久以前就可以投入生产了,而且根据我的经验,企业开发者相比于普通开发者更喜欢使用MEAN。总之,我见过创业公司和一些很高端的公司都使用了MEAN,而他们也乐在其中。

问:相比于传统Web开发方式,比如JS+Java,MEAN Web开发有什么优势?

简单的答案:一门语言统治一切。JavaScript的开发模式和实践更适合于Web,JS的简洁性和高性能让初学者和专家都欲罢不能。

问:Meteor.js有超过4千个程序包,和Meteor相比,MEAN有什么优势?

Meteor是一个很不错的开源项目。我认识很多开发这个项目的开发者,他们做得很不错。对我来说,这就像比较橙子和苹果,Meteor和MEAN不是竞争对手,因为它们提供了不同的优势。首先,Meteor是一家以盈利为目的的公司,这就意味着你使用的是商业产品,和社区牵头的产品相比商业产品的优势和劣势都是已知的。其次,MEAN里面的所有东西都是开源而且可调节的,就像乐高一样:你的设想,你的责任。

问:MongoDB有一些不错的替代品已经发展得很成熟了,比如TokuMX和Postgre SQL。你在什么场景下会使用MongoDB?你认为MEAN中的MongoDB可以被替换吗?

社区很长时间以来都在讨论是否、以及如何换掉MEAN中的每个部分。有些开发者想要React,而不是AngularJS,有些人倾向于PostgreSQL而不是MongoDB,而这个项目开放的本质和结构让任何开发者都可以根据自己的需求来修改项目。你所欠缺的可能就是官方社区的支持。但是我强烈建议开发者们对MEAN做出调整,并且希望他们也能建立自己的社区。

问:Node.js是一个由众多模块组成的庞大生态系统,为了避免扩展和架构问题,我们该选择哪些模块来使用呢?

NPM现在正在准备一些让人大吃一惊的东西。他们团队充满了才华横溢的工程师,他们正在很好地解决噪信问题。作为一条通用原则,我通常都选择比较老而且大众化的模块,我用抽象层包围这些模块,这样我就能轻松替换模块了。

问:MEAN由四种很丰富的组件组成,内聚耦合情况会不会让正在进行中的项目变成重量级的开发?如何避免这种情况?

这种情况我们从一开始就一直在讨论,所以我们的一条准则就是:用尽可能模块化的方式来做开发。理想的方式就是创造即插即用的插件系统,但是这些努力通常都变得比理想情况更复杂。有一条关键的建议,开发者应该维护组件间清晰的界限,这样才能保证组件可以轻松迁移。

问:对于MEAN的学习者来说,你愿意推荐哪些基于MEAN的开源项目?

我觉得现在的网上信息很不错。开发者们可以轻松找到好的书/文章/演示来帮他们快速启动自己的项目。很难找到大规模的开源MEAN项目,因为公司不愿意和社区分享这类专有资产。我建议所有开发者都直接进来试试,把新技术用在你的一个小想法上。这是一种双赢:你既能创造一个对你来说有意义的东西,还能学习一种新技术。


更多精彩,加入图灵访谈微信!