Duke選擇獎獲獎作品Moco創始人鄭曄:十年Java路
原創我原本是個C程序員,陰差陽錯,步入Java大門,轉眼十余年。
鄭燁·Duke選擇獎獲獎作品Moco的創始人
初涉Java
當我抱著一顆成為優秀程序員的心和一些寫C程序的本領步入職場,加入了一個以做C為主業部門,準備大展手腳時,領導通知我,有一個Java項目缺人。于是,我捧起了一本Java教材,成為了一個Java程序員。
我的***個正式Java程序是實現一個服務器,其協議是一個基于SMTP的應用協議。生猛是職場新鮮人的基本屬性,我從Socket API開始一路寫了上來,先是實現了粗略的SMTP協議,然后,再實現我們的應用協議。今天開來,這實在是一種浪費時間的做法,找個開源的SMTP實現,再上面直接做應用就好了。但在那個蠻荒年代,什么東西都要自己動手才能豐衣足食,開源的苗頭已有星火,但大多數企業的態度是,非我族類,其心必異。不過,這種做法對于我建立個人的知識體系來說,卻是大有裨益的。
后來,項目越做越多,代碼越寫越多,經驗也越來越多,Java用起來也就越來越得心應手。但與經驗一同增長的是困惑。Java開發中的一些內容我雖然在實踐,卻無法理解,比如EJB。這種不理解不是技術上的,而是我想不明白為什么要用它。或許今天的Java程序員已經有很多人不知道EJB為何物了,但在十幾年前,那個Java企業級開發大行其道的年代,只要是Java開發服務端應用,必須談到企業級標準,也就是當時名滿天下的J2EE,而EJB又是J2EE中的當紅小生。即便應用只是一個非常簡單的應用,也一定需要一個價格昂貴的應用服務器,編寫只有部署到上面才能運行的EJB,因為這是官方推薦的做法,只有這么做才正宗,這有這么干,才叫企業級。
有一次出差在外,臨近下班,我發現了程序的一個bug。我們的程序就是一個按照官方推薦做法編寫的EJB,只有部署到應用服務器才能運行。我的調試方案就是加上一些打印語句,然后部署到應用服務器上,看輸出的結果,再加上另外一些語句,再部署,如此往復。那時我們用的是Sun的應用服務器,只有用它的發布工具將應用打包,然后把幾百兆的程序上傳到服務器上,每一次上傳都要至少十幾分鐘。最終,我定位到了問題,只修改了一行代碼,問題解決,但時間已經晚上九點多,三個多小時的時間多半都在等待部署中浪費。
我不認為我所喜歡的軟件開發應該是無意義的消耗,一定是哪里出了錯。周邊的人給不了我答案,我只有到網上搜尋,于是,我知道了敏捷、知道了開源、知道了軟件設計,也知道了世界上有一堆Java程序員對官方說法的不滿。那段時間,我瘋狂補習著各種各樣的軟件開發知識,我越發覺得“簡單”開發才應該是軟件開發的本來面目。
那段時間恰逢軟件開發理念變革的年代,SpringFramework、Hibernate等如今還在影響Java程序員的框架剛剛發軔,企業級開發“Without EJB”理念初出茅廬。倍受J2EE開發模式折磨的程序員大量地討論著各種方法的優劣。那時,我也開始帶隊做項目,于是,我便笨拙地踐行著這些新理念。我用的***個SpringFramework的版本是0.8,我開始用設計去隔離數據庫訪問,嘗試把EJB踢出我的項目,努力在本地完成所有的開發測試,盡量少用應用服務器。如今想來,還真要感謝我當年的項目經理,那么信任我,讓我放手折騰。
新理念的注入,讓我在新項目中更加得心應手,對于軟件開發的理解也日益加深。適逢公司內部舉辦了一次Java技術大賽,實力和運氣相加,我一舉拿下了冠軍。
#p#
反思Java
作為一個寫C程序出身的人,做Java總覺得滿足不了我內心的一些需求。所以,我做出了一次職業調整,準備告別Java。當時以為是告別,沒想到只是暫別,幾年后,我又回來了。那幾年,應該是我擴展視野一段時間,我做過很多不同類型的項目,用到了很多不同的技術,但是,工作上的項目真的就沒再動過Java。
但要說我完全離開的Java也不恰當。那是Ruby On Rails興起的一段時間,需要人投身到Web開發的大潮中。而我更感興趣的是Ruby這門程序設計語言。剛好網上有個人在做一個叫XRuby的項目,要把Ruby編譯成Java的字節碼。出于對語言實現的熱衷,我以極大的熱情加入了這個項目,研究Ruby語言的實現,研究Java字節碼的編寫。這是我參與的***個開源項目,因為選擇了一個合適的切入點,所以,很快就有很多人開始關注到這個項目,其中就包括ThoughtWorks。
ThoughtWorks是軟件業界的思想***,當時它正在力推Ruby這個技術棧,而當時的Ruby開發者并不多。因此,我得到了ThoughtWorks公司的橄欖枝,從此成為了一名ThoughtWorker,并將隨后的八年時間貢獻給了它。ThoughtWorks的確給了我更多開眼界的機會,我也開始把各種語言、各種技術融匯在一起思考,當然這其中包括Java。ThoughtWorks有許多機會做企業級軟件的開發,而我也由此重回Java開發的行列。
在周游了各種技術之后,我發現,我對Java有了全新的認識,也許是一個更客觀的認識。Java擁有世界上最龐大的社區,各種程序庫幾乎可以滿足滿足各種需求;當今計算機領域最有挑戰的問題,無論是大數據還是高并發,Java都是走在前頭的。對企業而言,Java程序員的數量是企業采用Java最直接的證據。
當進入到職業生涯的第十個年頭,我很認真地思考了一個問題。十年的經驗,我做過很多項目,但我究竟有什么拿得出手的東西呢?我很難回答這個問題,我突然意識到一個關鍵問題,我需要專注的做一件事。所以,我決定不再四處游蕩,專心把精力放在Java開發上。因此,在后來的項目安排上,我拒絕了所有的非Java項目,開始集中注意力。
專注做Java的***個成績是,我開始了自己的又一個開源項目,Moco,一個模擬服務器的項目,解決軟件開發中一直存在的一個痛點,集成。多年的積累讓我選擇了一種優雅的方式去解決這個問題,而也逐漸得到了更多同行的認可。Moco很快就在ThoughtWorks內部用了起來,在一些社區活動上做過介紹之后,在外部也擁有了很多用戶。轉過年來,Oracle將JavaOne開到了中國,Moco報名參加了Duke選擇獎的評選,幸運的是,Moco成為了Duke選擇獎的獲獎作品。這也讓我越發相信堅持的力量。
這段時間,我還在思考另外一件事情,游歷了多種軟件開發技術之后,我發現,雖然Java技術日新月異,但Java社區還有很多人對Java的理解停留在十幾年前。于是,我著手把自己對于現代軟件開發的理解和Java相結合。我先寫了一個系列的文章,叫做《你應該更新的Java知識》。在ThoughtWorks內部,我組織了一個課程,把這些需要更新的現代Java開發知識一一分享了。在2014年北京的QCon上,我把這一系列的提綱做了一個分享。原本還考慮進一步將這些內容整理成書,因為自己實在懶惰,加之工作的忙碌,這一想法也就作罷了。一些沒有寫出內容,就只好留在腦子里了。
如今,我成了創業大潮新鮮人,在選擇服務器端技術時,我毫不猶豫地給把自己的票投給了Java。一方面,Java語言有足夠多的資源,無論是技術,還是人才,另一方面,我也想把自己來不及寫出來的新思考,在自己的項目上一一實踐。
誤入Java十余載,至今思來心不悔。
鄭曄,十多年工作經驗的程序員,Duke選擇獎獲獎作品Moco的創始人,前ThoughtWorks***咨詢師,創業大潮新鮮人,目前投身于智能硬件領域,致力于簡化智能硬件的開發方式。他多次在各種媒體上發表文章,在各種技術大會上做過演講,分享自己對于軟件開發的理解,特別愿意吸收新的知識,也愿意與人暢聊軟件開發。
微博:@dreamhead 個人主頁頁:http://dreamhead.blogbus.com/