我是Beetl的开源作者,叫李家智,网名是闲.大赋。可能很多人更熟悉这个名字,我本意是希望自己又有钱,又很闲,结果事与愿违,尤其是Beetl使用的人多后,又忙又穷了,也许该改名字叫穷.又忙 :)
做什么事情都需要贵人提携,开源也一样,我就碰到了俩个贵人,一个是HP公司,在做移动总部的好几个项目,客户和HP老板安排事情非常合理谨慎,所以空闲时间挺多的,10点到客户那,6点就下班回家,期间还玩玩各种游戏,一点都不忙。但秋季的有一天我觉悟了,不能这么过下去,得给自己留点什么,闲着闲着就琢磨学习一下技术,选了一个看似高大尚的技术--开发一门语言,也就是现在你们知道的Beetl模板语言。我其实挺后悔这个决定的,当时应该搞搞NOSQL,分布式什么的(后来花了一周搞了一个分布式协作的facade技术,确实带了些好处,这是后话了),或者搞个开源商城什么的的也好拿来卖钱,因为搞语言确实不怎么流行了--尽管难度挺大的。 另外一个贵人就是beetl初期使用者,当我做好0.5版本后,就一直放着,也没有人使用,我也没有意愿推广,有一天,一哥们给我发邮件,说beetl很不错,想用一下。我顿时兴奋了,激起了我再接着开发完善的热情,虽然当时从HP出来去了某有态度公司技术部,但仍然废寝忘食的完善Beetl,这哥们后来所有的项目都是用Beetl做的,我也很感谢他,没有他第一个使用,Beetl很难发展
搞了一门语言,国内用的项目还挺多,是不是我变得高大威猛了,我猜到开头,但结局并不是这样。因为需要花很多时间。每天技术支持+开发 需要1,2个小时,周末或者小长假什么的,还得闭关。这闭关自古都有讲究,不吃饭,去一个安静的山洞里。现在beetl闭关也类似,吃很少的东西以免犯困, 迫使大脑亢奋。另外清净地方不好找,还好北京高校多,就去北京交大研究生教学楼大教室,那里偶尔有些情侣外,少有学习者。 总之,技术开发beetl,花了很多业余时间,导致个人技术全面落后,jdk7,8,9 都没有跟进,还有hadoop,spark没有什么概念,很火的手机移动开发也掌握不精通。有时候自己想,要是当初不写beetl,现在肯定是高精尖人才了。事实也确实这样,以前一些技术很普通同事,稍微研究了一下这俩类很火的技术,立刻身价倍增,成为各大公司枪手的人才,成天给我哀叹如何拒绝其他公司的offer,好让人羡慕
再说一下开源中的竞争吧,模板语言是个大众技术,算不上高大上,所以竞争非常激烈。
Freemarker: 这是我的最大竞争对手,开源有10多年了,在国内外非常流行,尤其是国内拥有很多粉丝,每天有数百个下载。如果你百度一下Freemaker,能看到数不清的介绍文章。我很想代替它,因为零零碎碎用过好几个项目,总觉得别扭。Beetl的优势是语法上更容易上手,使用习俗跟程序员思路接近。还有个不算优势的优势是功能赶得上Freemaker(相对于其他模板引擎来说 ,哈哈)。
Velocity: apache的,国内使用者也很多。Beetl的优势是属于脚本语言。因此能优雅的处理复杂的渲染逻辑。最早使用Velocity的时候,记得它有个特性就是如果某变量属性不存在,将在页面中显示出来该属性而不是报错。当时看到这个就对velocity不感冒了,试想一下,如果系统重构,导致属性名更改或者不存在,页面都不会报错。这是很不友好的。不知道现在有改进没有
HTTL,JetbrickTemplate,TinyTemplate, 都是国产的类似Veclotiy的模板引擎,改良了很多velocity不足的地方。JT 以前帮助过HTTL开发,后来基于antlr4自己又开发了一套。TT模仿了JT,也按照自己的理念做了些改进。他们作为国内的开源模板引擎,同样是后起之秀,Beetl优势不大。唯一的优势就是能持续开发和改进,以及Beetl未来的技术野心,包括IDE集成支持(语法着色,属性提示,史无前例的重构支持和debug支持)等
Webit,BSL. 同Beetl一样,类似JS语法,俩位作者都在自己独立开发前给Beetl提了很多建议。后来对模板引擎的功能和实现方式有自己的想法,就自己开发了一个。我原本认为这俩个都是Beetl未来最大的竞争对手,但现在看来不是,因为BSL现在不维护了,我知道其作者能力很强,兴趣广泛,现在在做其他的技术。Webit则是野心很大,想把Webit做成一个java版本的PHP,因此跟Beetl完全不是一个东西,也无从竞争。总的来说,国内模板引擎竞争氛围很好,有好想法会交流,也不互相拆台。
angularjs, 很火的JS框架,还有其他富客户端框架爱等,他们跟java模板引擎有很多功能重叠。不过我不担心未来会代替模板引擎。主要是因为js语言技术本身就有缺陷,不适合大规模程序。其次是用js构成的页面不适合SEO,在如火如荼的电商环境下,根本不合适,还有一个问题就是一个页面有过多的页面ajax请求,会成倍的增加服务器负载,这到http2.0流行前,其实是个不合理的设计(当然,对于企业应用来说,用户量小,可以这么搞)。
Node.JS:有些架构师已经把Node.js作为一个视图技术,原因是想让前端工程师专注前端开发,这点与Beetl不某而合,Beetl也是JS语法。也考虑到让前端工程师专注界面并提供配套的工具和框架来完成这一点(参考我的CrossMVC) .我个人直觉上认为Node.js并不比Beetl更适合做前端渲染,道理很简单,因为Beetl从出生之日就是为了这个目的,而Node.js不是这样初衷。另外,还是对JS说的那句话,JS语言不适合大规模的程序开发,他的异步编程模型更不适合大规模程序开发。Node.JS强大容易导致滥用。也许现在,在让js前端人员开发模板到底使用Beetl+CrossMVC,还是采用Node.JS,很难判断,但时间会证明采用Beetl是对项目一个正确的选择。
再讨论一下如何推广开源吧。我认识的开源作者并不是为了钱和名而去做开源。目的很纯粹,就是为了兴趣。但是如果自己做的开源并没有使用者,也许就让开愿者失望了,如何推广开源呢,我觉得有点心得体会
第一:农村包围城市策略。你的开源也许比别人的先进,但作为后来者,很难一时被其他人接受。尽管我们希望有BAT这样的领头羊公司使用是最好的,但刚开始推广的时候不应该做次奢望。最好从一些小公司,个人用户开始做起,然后慢慢推广到中型公式,大型公司。Beetl最初使用者是个人用户,经过3年发展现在已经有B,A 领头羊公司在使用了。
第二:要有噱头。想让其他人记住你,必须有噱头。这点跟炒作明星没有什么区别,对于开源来说。有些现成的噱头可以使用,比如,体积最小的开源模板引擎,我见过一个开源模板引擎仅仅200行,尽管我不屑于此,但确实给我留下了深刻映像。 再比如,性能最好的模板引擎,这个在当今软件行业似乎是更好的噱头,Beetl期初并不太在意性能,但后期发现此噱头确实是开发者喜欢的一个因素。因此在1.x后期,2.0版本做了很多性能改进,现在EBM测试 是Freemarker性能4倍多。很多最初的开发多是因为这个原因选择试用beetl
第三: 要有完善的售后支持。重视任何使用者,视他们为客户。如果他们认为文档不够详细,应该尝试去完善文档,如果他们认为缺少例子,那就应该提供更多的例子。如果他们认为Freemaker有的功能,Beetl也应该具有,那就去完成。老实讲,Beetl初期功能都是自己设计完成的的,但是到了后期,很多特性都是使用者推动的,他们不仅仅是Beetl客户,而且也是Beetl实际的推动者。
第四:拥有一颗淡定的心,在推广过程中,会遭遇各种质疑和拒绝,甚至是打击。我一直宣称要代替Freemaker,从而遭受到很多Freemaker粉丝的打击。我自己公司的项目,Freemarker已经有过技术生态圈,我也难以说服其他人使用Beetl,自己不得不一边恶心,一边用Freemarker继续完成自己的工作。
最后,我想说说开源Beetl这几年得失吧。
如前面说的,开源Beetl,这是公司外的一个项目,花去了我业余很多时间,有时候上班也不得不去做一些支持,和Bug的修补。这在HP,还说的过去,但去了有态度公司后,就极大的影响了我工作,我从一个干事麻利的人,变成工作上一个“磨叽”的程序员。我自己也很难接受我这样状态就很快辞职了。后来的创业我也受到这样影响,因此,从事业上来说,做Beetl并没有得到任何利益。我有时候想,如果用这些时间干任何一件其他事情,都或许比这个更值得。Beetl只是我现在一个不得不继续做的事情。我想,这也是很多同样中国的开源作者的想法吧
然而,Beetl的开发开始实现了我的初衷,代替难用的Freemaker,同时熟悉一门我不熟悉的技术(语言开发)。还有就是,通过Beetl开源,认识了很多朋友。每天跟这些朋友聊天,打逗逗,很有意思,又长了见识。有时候一些人会写信给我,说Beetl帮助他顺利完成了项目开发,或者帮助他找到了工作的时候,每当想到这些我认为开发Beetl是一个正确的决定和一件值得坚持的事情。