Beetl作者談開源過程中那些事
我是Beetl的開源作者,叫李家智,網(wǎng)名是閑.大賦??赡芎芏嗳烁煜み@個名字,我本意是希望自己又有錢,又很閑,結(jié)果事與愿違,尤其是Beetl使用的人多后,又忙又窮了,也許該改名字叫窮.又忙 :)
做什么事情都需要貴人提攜,開源也一樣,我就碰到了倆個貴人,一個是HP公司,在做移動總部的好幾個項目,客戶和HP老板安排事情非常合理謹慎,所以空閑時間挺多的,10點到客戶那,6點就下班回家,期間還玩玩各種游戲,一點都不忙。但秋季的有一天我覺悟了,不能這么過下去,得給自己留點什么,閑著閑著就琢磨學習一下技術(shù),選了一個看似高大尚的技術(shù)--開發(fā)一門語言,也就是現(xiàn)在你們知道的Beetl模板語言。我其實挺后悔這個決定的,當時應(yīng)該搞搞NOSQL,分布式什么的(后來花了一周搞了一個分布式協(xié)作的facade技術(shù),確實帶了些好處,這是后話了),或者搞個開源商城什么的的也好拿來賣錢,因為搞語言確實不怎么流行了--盡管難度挺大的。 另外一個貴人就是beetl初期使用者,當我做好0.5版本后,就一直放著,也沒有人使用,我也沒有意愿推廣,有一天,一哥們給我發(fā)郵件,說beetl很不錯,想用一下。我頓時興奮了,激起了我再接著開發(fā)完善的熱情,雖然當時從HP出來去了某有態(tài)度公司技術(shù)部,但仍然廢寢忘食的完善Beetl,這哥們后來所有的項目都是用Beetl做的,我也很感謝他,沒有他***個使用,Beetl很難發(fā)展
搞了一門語言,國內(nèi)用的項目還挺多,是不是我變得高大威猛了,我猜到開頭,但結(jié)局并不是這樣。因為需要花很多時間。每天技術(shù)支持+開發(fā) 需要1,2個小時,周末或者小長假什么的,還得閉關(guān)。這閉關(guān)自古都有講究,不吃飯,去一個安靜的山洞里?,F(xiàn)在beetl閉關(guān)也類似,吃很少的東西以免犯困, 迫使大腦亢奮。另外清凈地方不好找,還好北京高校多,就去北京交大研究生教學樓大教室,那里偶爾有些情侶外,少有學習者。 總之,技術(shù)開發(fā)beetl,花了很多業(yè)余時間,導致個人技術(shù)全面落后,jdk7,8,9 都沒有跟進,還有hadoop,spark沒有什么概念,很火的手機移動開發(fā)也掌握不精通。有時候自己想,要是當初不寫beetl,現(xiàn)在肯定是高精尖人才了。事實也確實這樣,以前一些技術(shù)很普通同事,稍微研究了一下這倆類很火的技術(shù),立刻身價倍增,成為各大公司槍手的人才,成天給我哀嘆如何拒絕其他公司的offer,好讓人羨慕
再說一下開源中的競爭吧,模板語言是個大眾技術(shù),算不上高大上,所以競爭非常激烈。
Freemarker: 這是我的***競爭對手,開源有10多年了,在國內(nèi)外非常流行,尤其是國內(nèi)擁有很多粉絲,每天有數(shù)百個下載。如果你百度一下Freemaker,能看到數(shù)不清的介紹文章。我很想代替它,因為零零碎碎用過好幾個項目,總覺得別扭。Beetl的優(yōu)勢是語法上更容易上手,使用習俗跟程序員思路接近。還有個不算優(yōu)勢的優(yōu)勢是功能趕得上Freemaker(相對于其他模板引擎來說 ,哈哈)。
Velocity: apache的,國內(nèi)使用者也很多。Beetl的優(yōu)勢是屬于腳本語言。因此能優(yōu)雅的處理復(fù)雜的渲染邏輯。最早使用Velocity的時候,記得它有個特性就是如果某變量屬性不存在,將在頁面中顯示出來該屬性而不是報錯。當時看到這個就對velocity不感冒了,試想一下,如果系統(tǒng)重構(gòu),導致屬性名更改或者不存在,頁面都不會報錯。這是很不友好的。不知道現(xiàn)在有改進沒有
HTTL,JetbrickTemplate,TinyTemplate, 都是國產(chǎn)的類似Veclotiy的模板引擎,改良了很多velocity不足的地方。JT 以前幫助過HTTL開發(fā),后來基于antlr4自己又開發(fā)了一套。TT模仿了JT,也按照自己的理念做了些改進。他們作為國內(nèi)的開源模板引擎,同樣是后起之秀,Beetl優(yōu)勢不大。唯一的優(yōu)勢就是能持續(xù)開發(fā)和改進,以及Beetl未來的技術(shù)野心,包括IDE集成支持(語法著色,屬性提示,史無前例的重構(gòu)支持和debug支持)等
Webit,BSL. 同Beetl一樣,類似JS語法,倆位作者都在自己獨立開發(fā)前給Beetl提了很多建議。后來對模板引擎的功能和實現(xiàn)方式有自己的想法,就自己開發(fā)了一個。我原本認為這倆個都是Beetl未來***的競爭對手,但現(xiàn)在看來不是,因為BSL現(xiàn)在不維護了,我知道其作者能力很強,興趣廣泛,現(xiàn)在在做其他的技術(shù)。Webit則是野心很大,想把Webit做成一個java版本的PHP,因此跟Beetl完全不是一個東西,也無從競爭??偟膩碚f,國內(nèi)模板引擎競爭氛圍很好,有好想法會交流,也不互相拆臺。
angularjs, 很火的JS框架,還有其他富客戶端框架愛等,他們跟java模板引擎有很多功能重疊。不過我不擔心未來會代替模板引擎。主要是因為js語言技術(shù)本身就有缺陷,不適合大規(guī)模程序。其次是用js構(gòu)成的頁面不適合SEO,在如火如荼的電商環(huán)境下,根本不合適,還有一個問題就是一個頁面有過多的頁面ajax請求,會成倍的增加服務(wù)器負載,這到http2.0流行前,其實是個不合理的設(shè)計(當然,對于企業(yè)應(yīng)用來說,用戶量小,可以這么搞)。
Node.JS:有些架構(gòu)師已經(jīng)把Node.js作為一個視圖技術(shù),原因是想讓前端工程師專注前端開發(fā),這點與Beetl不某而合,Beetl也是JS語法。也考慮到讓前端工程師專注界面并提供配套的工具和框架來完成這一點(參考我的CrossMVC) .我個人直覺上認為Node.js并不比Beetl更適合做前端渲染,道理很簡單,因為Beetl從出生之日就是為了這個目的,而Node.js不是這樣初衷。另外,還是對JS說的那句話,JS語言不適合大規(guī)模的程序開發(fā),他的異步編程模型更不適合大規(guī)模程序開發(fā)。Node.JS強大容易導致濫用。也許現(xiàn)在,在讓js前端人員開發(fā)模板到底使用Beetl+CrossMVC,還是采用Node.JS,很難判斷,但時間會證明采用Beetl是對項目一個正確的選擇。
再討論一下如何推廣開源吧。我認識的開源作者并不是為了錢和名而去做開源。目的很純粹,就是為了興趣。但是如果自己做的開源并沒有使用者,也許就讓開愿者失望了,如何推廣開源呢,我覺得有點心得體會
***:農(nóng)村包圍城市策略。你的開源也許比別人的先進,但作為后來者,很難一時被其他人接受。盡管我們希望有BAT這樣的領(lǐng)頭羊公司使用是***的,但剛開始推廣的時候不應(yīng)該做次奢望。***從一些小公司,個人用戶開始做起,然后慢慢推廣到中型公式,大型公司。Beetl最初使用者是個人用戶,經(jīng)過3年發(fā)展現(xiàn)在已經(jīng)有B,A 領(lǐng)頭羊公司在使用了。
第二:要有噱頭。想讓其他人記住你,必須有噱頭。這點跟炒作明星沒有什么區(qū)別,對于開源來說。有些現(xiàn)成的噱頭可以使用,比如,體積最小的開源模板引擎,我見過一個開源模板引擎僅僅200行,盡管我不屑于此,但確實給我留下了深刻映像。 再比如,性能***的模板引擎,這個在當今軟件行業(yè)似乎是更好的噱頭,Beetl期初并不太在意性能,但后期發(fā)現(xiàn)此噱頭確實是開發(fā)者喜歡的一個因素。因此在1.x后期,2.0版本做了很多性能改進,現(xiàn)在EBM測試 是Freemarker性能4倍多。很多最初的開發(fā)多是因為這個原因選擇試用beetl
第三: 要有完善的售后支持。重視任何使用者,視他們?yōu)榭蛻?。如果他們認為文檔不夠詳細,應(yīng)該嘗試去完善文檔,如果他們認為缺少例子,那就應(yīng)該提供更多的例子。如果他們認為Freemaker有的功能,Beetl也應(yīng)該具有,那就去完成。老實講,Beetl初期功能都是自己設(shè)計完成的的,但是到了后期,很多特性都是使用者推動的,他們不僅僅是Beetl客戶,而且也是Beetl實際的推動者。
第四:擁有一顆淡定的心,在推廣過程中,會遭遇各種質(zhì)疑和拒絕,甚至是打擊。我一直宣稱要代替Freemaker,從而遭受到很多Freemaker粉絲的打擊。我自己公司的項目,F(xiàn)reemarker已經(jīng)有過技術(shù)生態(tài)圈,我也難以說服其他人使用Beetl,自己不得不一邊惡心,一邊用Freemarker繼續(xù)完成自己的工作。
***,我想說說開源Beetl這幾年得失吧。
如前面說的,開源Beetl,這是公司外的一個項目,花去了我業(yè)余很多時間,有時候上班也不得不去做一些支持,和Bug的修補。這在HP,還說的過去,但去了有態(tài)度公司后,就極大的影響了我工作,我從一個干事麻利的人,變成工作上一個“磨嘰”的程序員。我自己也很難接受我這樣狀態(tài)就很快辭職了。后來的創(chuàng)業(yè)我也受到這樣影響,因此,從事業(yè)上來說,做Beetl并沒有得到任何利益。我有時候想,如果用這些時間干任何一件其他事情,都或許比這個更值得。Beetl只是我現(xiàn)在一個不得不繼續(xù)做的事情。我想,這也是很多同樣中國的開源作者的想法吧
然而,Beetl的開發(fā)開始實現(xiàn)了我的初衷,代替難用的Freemaker,同時熟悉一門我不熟悉的技術(shù)(語言開發(fā))。還有就是,通過Beetl開源,認識了很多朋友。每天跟這些朋友聊天,打逗逗,很有意思,又長了見識。有時候一些人會寫信給我,說Beetl幫助他順利完成了項目開發(fā),或者幫助他找到了工作的時候,每當想到這些我認為開發(fā)Beetl是一個正確的決定和一件值得堅持的事情。