訪MOCO創(chuàng)始人鄭曄:談MOCO框架技術和Java未來發(fā)展
原創(chuàng)MOCO是一款基于Java開發(fā)、用來簡單搭建模擬服務器的程序庫。MOCO的目的,旨在解決企業(yè)級系統(tǒng)集成測試等方面的問題。簡化傳統(tǒng)Jetty或Tomcat等應用服務器上部署一個新的JAR所需要的耗時工序,同時,MOCO的API設計采用了內(nèi)部 Domain Specific Language (DSL)的 方式,提升了代碼的可讀性。與此同時,還將新的Java編程風格融入其中、并不斷加入新的功能來滿足更多企業(yè)項目需求。
為此,51CTO記者采訪到了Moco框架創(chuàng)始人鄭曄。關于Moco,和記者分享了更多的其誕生過程的設計理念、成長過程的思考、未來發(fā)展的期望。還對未來幾年Java技術的發(fā)展情況和Java編程風格的現(xiàn)狀和未來趨勢闡述了自己的觀點和期盼,讓我們對未來幾年如何提升和把握企業(yè)Java項目開發(fā)有了新的認識。
鄭曄,ThoughtWorks公司首席咨詢師,MOCO框架創(chuàng)始人。JavaOne 2013大會上,首屆中國“Duke選擇獎”得主之一。對Java和Ruby等方面的開發(fā)有著深刻的理解,致力于探尋合理的軟件開發(fā)方式。07年加入ThoughtWorks公司后,投入到敏捷開發(fā)方法的實踐之中,為其他公司提供敏捷開發(fā)方法方面的咨詢服務??梢哉fMOCO的誕生,就是在ThoughtWorks創(chuàng)新傳統(tǒng)下催生的。
以下是采訪的具體內(nèi)容:
記者:MOCO項目獲得了今年Duke’s Choice Awards最具創(chuàng)新項目獎,能不能具體的說說MOCO框架在企業(yè)系統(tǒng)的集成測試方面有哪些針對性的優(yōu)勢?
嘉賓:可以說所有的團隊在項目上都會遇到企業(yè)集成問題,但是卻一直沒有做出非常好的解決方案。我們知道,在測試的時候,我們需要一個模擬服務器。十幾年前去做開發(fā)的時候沒有現(xiàn)成的服務器,我們就從Socket最底層開始一層一層寫到應用層,完成一個HTTP級的應用服務器。有過開發(fā)Java經(jīng)驗都知道,一次應用的重新部署,看似簡單,但重復多次會影響整個團隊項目的開發(fā)速度。所以就一直在想,能不能找到更好的解決方案,讓開發(fā)人員在項目中省去這樣的重復環(huán)節(jié)、讓這個過程變得更輕松。這也是我直到現(xiàn)在都在追求的目標。
開始著手去做MOCO之前的一段時間,我翻譯了Martin Fowler的《特定語言》這本書,從書里獲得了很多新的知識和想法。憑借十幾年項目開發(fā)的經(jīng)驗總結(jié),我決定開始自己動手解決這個問題。然后就有了MOCO這樣一個解決方案,可以成功的解決企業(yè)集成問題。
記者:您剛才提到,在實際開發(fā)中很多團隊都會遇到企業(yè)集成的問題,但卻一直沒有好的解決方案提出來。您認為導致這個現(xiàn)象的原因是什么?
嘉賓:目前來說,其實很多的項目開發(fā)團隊都在嘗試去解決這些問題,甚至有些公司還在自己的的開發(fā)團隊里專門設立一個項目組去維護這樣一個類似項目。但他們所做出來的框架僅僅用來解決自身項目,并沒有想過把這樣的框架泛化出來,作為一個通用的解決方案,應用到不同的項目中去。 所以,解決方案就停留在解決某個特定項目的層面上。
現(xiàn)在做技術,不應該僅僅是為了某個人或某個項目去做,而是應將技術成果分享出來,不斷去完善和發(fā)散,使它成為一個通用技術方案,方便更多開發(fā)者使用。最近一段時間,公司一直在談“創(chuàng)新漏斗”這樣一個概念。“創(chuàng)新漏斗”倡導的就是在工作中發(fā)現(xiàn)問題,持續(xù)改進從而解決問題。然后,從中抽象出具有普適性的概念,再去積極地推廣它。發(fā)現(xiàn)痛點、解決問題、泛化橋接、推廣宣傳。這也是MOCO的誕生之道。
記者:除了上述原因,從技術方面講,它的實現(xiàn)有沒有很高的技術要求在里面?抽象出來問題,但是在技術實現(xiàn)的層面會有一些難度?
嘉賓:有這種可能。其實整個軟件開發(fā)過程中最難的事并不是代碼的編寫,而是能提供出一個問題的抽象模型。
在做MOCO解決方案的過程中,遇到的一些技術難點并新鮮。從十幾年前做第一個項目開始就已經(jīng)遇到過的,但一直都沒有很好的解決辦法。原因是無法將這些問題的概念抽象出來。經(jīng)過了這些年的項目經(jīng)驗積累,腦子里才開始有了對這些問題的抽象概念。所以,直到去年才開發(fā)出來MOCO這樣一個解決方案。
記者:有了新的功能以后,會不會把新的功能集成在MOCO框架里面,讓它成為一個通用的功能?
嘉賓:會的。 MOCO去年已經(jīng)基本完成了,但實際上直到現(xiàn)在MOCO框架的內(nèi)容還在不斷的修改和擴充。使用過MOCO框架開發(fā)團隊,很及時的將他們在使用過程中遇到的問題和需求反饋給我,如果提出的需求符合MOCO框架的設計理念,就及時的將新的功能加到框架里,。只有這樣MOCO才會不斷地成長,這也是通用解決方案必須做到的一點。
記者:MOCO的發(fā)展是隨著實際企業(yè)項目的需求而不斷前進的,那么除了企業(yè)級的系統(tǒng)集成測試之外,它還具備了哪些較好的應用場景嗎?
嘉賓: MOCO的設計目的旨在解決企業(yè)級項目系統(tǒng)集成問題。但實際上,MOCO的第一個應用,用在了移動開發(fā)項目里面。當時我們給成都的一家圖書館做一個項目,項目包括手機端和服務器端兩個應用。一開始大家都想去做手機端的項目,而想去做服務器端的人寥寥無幾。當時就在想,如果只有一個手機項目,我們怎么讓他運轉(zhuǎn)起來?后來的辦法是,我們用MOCO搭了服務器,提供各種服務給手機應用。問題就這樣解決了。也就在沒有服務器端應用的情況下,把手機端實現(xiàn)了。后來服務器端的開發(fā)人員就參考MOCO的這套配置,比較輕松的將服務器端做了出來。
在技術交流過程中,很多人給我提出建議,希望MOCO可以支持這樣或是那樣的API。所以慢慢的MOCO應用的場景將會越來越對,功能會更加的豐富,具體還會有哪些方面的應用大家拭目以待。但MOCO的核心目標不會改變,現(xiàn)在的實際應用中,大多數(shù)團隊還是將MOCO用來解決企業(yè)系統(tǒng)的集成測試的問題。
記者:做為一款輕量級解決方案,MOCO擁有很高的工作效率。對于他人提出的功能需求,您怎樣判斷這些需求是否符合框架的主線發(fā)展?
嘉賓:首先MOCO的架構方式確保了這個服務器不會加入特別復雜的東西,因此,不會影響服務器的工作效率。其次,在新的功能加入之前,還要衡量這個需求多大程度上能夠在MOCO框架范圍之內(nèi)去解決。總結(jié)成一句話。如果能幾句話概括清楚這個需求怎么在MOCO中實現(xiàn),那么它就是符合MOCO本身特性的。這樣的話,我就會把它加進來。
#p#
記者:現(xiàn)在國內(nèi)的開發(fā)人員參與MOCO項目維持在什么程度?又是以什么方式進行參與?
嘉賓:開源項目本身是沒有國界的。在使用中,我們不會去特別強調(diào)這個是中國人做的,還是外國人做的。目前,絕大部分的代碼還是我一個人在寫。有些人會提供一些新的功能建議,然后給MOCO做一些調(diào)整和修改,再給我看。大部分人是直接把問題提出來,我和他們就一起來討論這個問題,有了結(jié)果后,功能的實現(xiàn)還是我一個人來完成。。
記者:現(xiàn)在國內(nèi)的大眾點評網(wǎng)在使用MOCO,對他們目前的使用情況有所了解么?還有哪些開發(fā)團隊在使用MOCO框架?
嘉賓:首先我們公司內(nèi)部的很多項目都已經(jīng)開始使用MOCO了。除此之外,我在OpenParty上做過技術分享后,有更多的公司知道MOCO,然后邀請我去給他們公司更加深入的講解MOCO,之后就在他們自己的項目中用MOCO解決問題。大眾點評網(wǎng)開始使用MOCO的,我也是最近才知道。在上海的活動上,和他們項目的負責人簡單的做了了解,他們。他們也說了,有了技術上的問題或需求會及時的溝通反饋。這也正是我所需要的。
記者:對MOCO框架未來的發(fā)展方向,您有怎樣的計劃?
嘉賓:最初的想法沒有變,MOCO還是在實際應用中不斷的進步。只要有好的建議提出來,MOCO就會一直改進。比如MOCO現(xiàn)在是簡單地模擬服務器端,未來,也許MOCO會有客戶端的模擬功能。總之,用的人多了、意見就多了,集思廣益,MOCO就會集成更多的特性,變成一個更強大的模擬服務器。這是我對MOCO未來發(fā)展的一個預期。
記者: MOCO這個框架,最開始的發(fā)行版是3000行代碼,相當輕量級的一個框架。根據(jù)您十幾年的開發(fā)經(jīng)驗,把代碼由多寫到少,其中的關鍵點是什么?
嘉賓: 最近這段時間,雖然在進行MOCO的更新,但是還在做一件更重要的事:總結(jié)關于Java開發(fā)的一些新知識。這里我想說說函數(shù)式編程,這種編程風格已經(jīng)被我用在了MOCO的代碼編寫中,個人認為這種編程方式將會是未來編程發(fā)展的一個重點趨勢,會讓Java程序員對Java世界編程有一個重新的認識。實際上在Java 8里面已經(jīng)有了”Lambda"的引用,”Lambda"就是函數(shù)式編程里面最最基礎的東西。這種編程風格可以大幅度提升Java代碼之間的靈活度,減少對特定API的依賴,讓用戶來決定怎樣使用這個API,縮減代碼的編寫量。 我現(xiàn)在也在對外推廣這種編程方式。
記者: MOCO框架是基于Java編寫的,在剛剛JavaOne的技術大會上,發(fā)布Java EE未來發(fā)展的路線圖,您是怎么看待Java未來發(fā)展的?
嘉賓:Java語言一直是編程語言中的佼佼者。每個月的編程語言排行榜上,Java基本是排在前三的。所以未來很長的一段時間里Java必然還會是軟件開發(fā)語言的核心力量。對于已經(jīng)采用Java平臺的客戶來說,很難在短時間內(nèi)做出拋棄Java的決定,因為Java不僅僅是一種語言,還是一個平臺,我們能看到越來越多的設計語言利用Java平臺,發(fā)揮各自的威力。同時為Java編程帶來新的設計理念。
Java作為一個平臺,所需要的的不是被推翻,而是不斷地更新。不可否認的是Java確實存在自己的弊端,比如Java語言的更新和其他新型語言比起來顯得緩慢。但是我們能看到Java世界里的逐步變化。函數(shù)式編程風格的推廣、Java8的發(fā)布,都會對Java世界產(chǎn)生巨大影響。
記者:基于Java平臺開發(fā)的方式會相對固定,這個現(xiàn)象您怎么看?
嘉賓:Java語言的最大優(yōu)勢在于,編程容易上手、開發(fā)項目比較簡單。但也因為這樣,大多數(shù)人寫Java的風格按照教科書上講的一板一眼,一直保持這鐘傳統(tǒng)的編程風格。但這種傳統(tǒng)編碼風格不適合現(xiàn)代項目開發(fā)。從零二年到現(xiàn)在,軟件開發(fā)的巨大變化,讓我們對敏捷開發(fā)變得不再陌生,讓我們了解了越來越新的編程理念。
Java所需要的新風格,得靠擁有其他開發(fā)經(jīng)驗的人帶進來。GO、Scala等新型語言的出現(xiàn),會讓我們看到Java世界里的東西在慢慢的改變,更多的開發(fā)思想、編程風格會涌入Java。那個時候,Java程序員的設計模式會有新的標配,對編程方式會有一個新的認識。