MEAN.IO建立者Amos Haviv:用一門語言統治一切(圖靈訪談)

盼盼姐發表於2015-12-15

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.IO建立者Amos Haviv:用一門語言統治一切(圖靈訪談)

問:你為什麼要創造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專案,因為公司不願意和社群分享這類專有資產。我建議所有開發者都直接進來試試,把新技術用在你的一個小想法上。這是一種雙贏:你既能創造一個對你來說有意義的東西,還能學習一種新技術。


更多精彩,加入圖靈訪談微信!

相關文章