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开发》一书。

iTuring: Why did you create MEAN? What was the original idea like?

In 2011 I started working as a technical consultant. I've met a lot of incredible startups and technical teams in leading companies, and a majority of them had a similar problem. By 2013, everyone started understanding the new capabilities of JavaScript, so I would see teams working relentlessly to adapt their stacks to new technologies, especially Node.js and AngularJS. After noticing many of them deal with the same design problems i've started working on a simple boilerplate project to help teams get a better start. That project eventually became the first MEAN boilerplate.

iTuring: What was your plan to attract developers to contribute to MEAN?

After I showed the project to my friends and colleagues, some of them suggested I should release it as an open-source project. I didn't plan to attract any traction at all, I just wanted to offer my humble opinion on the way I think projects should be built. The major traction peak was actually generated by an HN post, however the real reason for this traction, was the face developers really gained some value from the project.

iTuring: Why are JavaScript full-stack engineers so important in our time? Would you recommend front-end developers to turn into full-stack developers?

By nature, I'm kind of a language agnostic. I believe a good developers should work with as many languages as possible, mainly because it opens your mind to different types of coding styles, patterns,and best practices, but also because its FUN and keeps you fresh and excited about coding. JavaScript engineers are important, because JavaScript is playing a huge role in our industry, there is almost no other language that runs on every single connected device on earth, so naturally developers create amazing new stuff with it. In the book I explain the reasons for this current state of JavaScript, mainly concerning the Chrome V8 engine, but I think it always comes down to people and their creations. I recommend every developer I meet to gain as many skills as possible, so front-end developers should definitely adapt to their full-stack environment.

iTuring: Is MEAN capable of handling product or enterprise level development?

I've seen MEAN implemented in various ways, from small hackathons to large-scale distributed applications. It's been production ready for a while now and in my experience, enterprise developers are usually enjoy using MEAN even more than the average developer. Bottom line, I have seen startups and very high profile companies using MEAN and loving it.

iTuring: What are the advantages of the MEAN Web development comparing to tradional web development such as JS+Java?

Simple answer: One language to rule them all. Also, development patterns and practices with JavaScript are just more suitable for the web, and it's simplicity and high performance, make it an heaven for beginners and experts alike.

iTuring: Meteor has over 4K packages, comparing with MeteorJs, what is the advantage of MEAN?

Meteor is an amazing open-source project. I know many of the developers that work on the project and they're doing an excellent job. To me it's like comparing oranges and apple, Meteor and MEAN are not competitors, because they offer different advantages. To begin with, Meteor is a for-profit company, which means you get a lot of the known advantages and disadvantages of using a commercial product compared to a community lead product. Second, everything in MEAN is open and adjustable, it is meant to be like Legos: Your imagination, your responsibility.

iTuring: Some great alternatives to MongoDB has been around for some days, for example TokuMX and Postgre SQL. What scenes of development would you use MongoDB? Do you think it's possible to replace MongoDB in MEAN?

The community have been talking about replacing every part of MEAN for quite a while now. Some developers wants React instead of AngularJS, some prefer PostgreSQL over MongoDB, and the open nature and structure of the project allows any developer to modify it for its needs. Official community support for those versions is what you'll lack. However, I firmly encourage developers to tweak MEAN and hopefully build their own communities.

iTuring: Node.js is a grand ecosystem consisted of lots of modules, to avoid problems of scaling and architecturing, which modules should we choose?

NPM is doing some amazing stuff right now. The team there is extremely talented and they're dealing with their noise-to-signal problems quite well. As a general rule, I usually choose the older and more popular modules, which I surround with some abstraction layers so I'll be able to replace modules easily.

iTuring: MEAN is combined with four different rich components, is it possible that cohesion and coupling would turn the ongoing project into heavyweight development? How to avoid that?

It's a problem we've been discussing since the beginning, so one of our guidelines was to develop the project in the most modular way possible. The ideal would have been to create a plug&play plugin system, but these efforts usually turns up more complicated than needed. The key advice here is that developers should maintain a clear separation of components to make sure they can migrate easily.

iTuring: Are there any open-source projects based on MEAN that you would like to recommend to people who wants to learn MEAN?

I think the current state of online information is great. So developers can easily find great books/articles/demos that can help jump start their project. It will be quite hard to find a large scale MEAN project that is open-source, since companies tend to not share this kind of proprietary asset with the open-source community. I would recommend any developer to just jump in, pick some small idea you have and work on it with new technologies. It's a win-win situation: You end up creating something meaningful to you and learn a new a technology.