十年前的一个假期,我开始开发一个小项目,没有太多意义,只是按照自己的兴趣爱好来,也没有打算做得很大很专业。在漫长开发中,我慢慢试图构建一些很酷的工具。今天,Java 规划引擎:optaplanner,应用在很多项目当中,与同领域软件相比处于领先地位。OptaPlanner 优化了商业资源调度和规划。
十年,让我们来看看,我的项目是如何成功的?期间,我做对了什么,我做错了什么?
需要说明的一点
2003毕业后,我曾当了2年的java顾问,负责Multi-Agent系统(MAS)的研究。我的同事,都是一些想改变世界的人,后来证明,他们没能做到。当时,我的一个同事正在优化护士排班问题(nurse rostering problem),对我们的研究小组提出了他的方法。他的解决方案是采用Tabu算法(一个优化算法在80年代发明的)。他的工作进展得很顺利。然而,他花了很多时间和精力去手工实现增量计算每个约束适应度函数。写代码很困难,耗时长且容易出错,但都会取得好成绩。
一年前,我曾在JavaPolis大会听过Mark Proctor的演讲(现在叫DevoxxBE),解释 Drools规则引擎和RETE算法。一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。
我提议在规则引擎中使用Tabu搜索算法,他们嘲笑我,那时候我没有一点算法优化经验。
不能空空其谈,所以,2006年暑假期间,我实现了一个简单课程调度问题的概念认证。我叫它Taseree,这是一个简化Tabu搜索规则引擎的规范。同年晚些时候,我添加了两个例子(N Queens and TTP) ,并且开源到SourceForge。
没有人用过Taseree,更不用说用它在生产环境中。事实证明,如果你不开源它,没有人使用它。
研究比赛
按理说,事情到这就应该结束了,就像我的许多其他项目一样。但是我听说过一些学术研究竞赛:给出一个优化问题,5分钟内找到最好的解决方案。所以在2007我参加了这个竞赛,在200参赛者中,我第四个完成了。
所以我确定我是在做正确的事。但是我也做错了很多事情。我们开源了各自代码,我们开始讨论和比较我们的实现,我们彼此学到了很多。其实有很多方法可以实现Tabu搜索。所以我开始采用替代算法实现。促使我(和Lukaš)写的基准工具包,比较这些算法统计,评估那个算法性能更好、更适合长足发展。理解这些算法需要一个小时,但10 000小时掌握它们,因此我花了很多时间。
动机是关键。找到一种方法来激励自己构建下一个特性,特别是在没有工资的情况下。爱好驱动我继续前进。
另一个优势是,每场比赛都会诞生一个新的例子。我最终做了很多框架改变对我来说更容易实现这些用例。这是一个重要的、旧的项目管理原则:那些创造了痛苦,应该感到疼痛。
没有人是一座孤岛
大约在同一时间我联系到Drools的团队,通过加入他们的IRC频道。我开始发表我的看法,同时,一边学习。2007年9月,马克邀请我让Taseree成为Drools的一个子项目,我们称之为Drools Solver。所以我清理代码,删除了spring核心依赖和写第一章的参考手册。它被作为Drools 5.0的一部分释放。
到2007年12月,在JavaPolis大会上,我给20开发人员第一次讲解了Drools Solver。
在2008年,我听说第一个使用Drools Solver的产品。
毅力
也正是2008年,我开始有了较多的业余时间,我可以在每周花几个小时在Drools Solver上。然而,我和我妻子也买了一所旧房子,我必须得花时间在房子翻修的事情上,因此,项目开始停滞,几乎一个月只能更新一次。
在这期间,我萌生了好几次放弃该项目的想法。不知何故,我觉得我不能。因此我坚持了下来。最后,一切稳步推进。
具有讽刺意味的是,项目开始变得受欢迎,下载量逐渐变多,论坛也变得活跃,我收获越来越多的建议。也正是这样,越来越多的Bug也随之而来。所以,我投入大量的时间进行单元测试、集成测试。到了2009年底,项目改名为Drools Planner。
幸运的是,Red Hat - Drools项目发起人已经注意到我对项目源源不断的贡献。他们很早邀请我为Drools工作,但在2013年才分配我全权负责。Red Hat开始支付工资给项目的贡献者,并且支持该项目进行业务销售、咨询。
产品化:走向企业
到了2012年底,Drools Planner已经不在是一个小项目,变得很庞大。它包括具有较高覆盖率的单元测试、集成和压力测试,完整的参考手册,完备的典例,JavaDocs和不断壮大的社区。当一家世界500强的企业考虑将它应用在重要的生产环境中时,我们发现它的服务是跟不上的。技术上的卓越还是远远不够的。
因此,Red Hat建立了一个专门的QA团队,支持团队,顾问团队,保障团队和产品化建设/文档团队。这使客户能够在大规模生产的情况下,自信地部署我们的开源软件。2013,我们开始这个过程,称为产品化。
通过各个服务团队的加入,产品化日趋成熟。项目成为一个顶级项目,所以我们又重命名了一次,也是最后一次,叫OptaPlanner。同时,也创立了optaplanner.org 。
2014年3月,在红帽的支持下,我们发布了第一个技术预览版本,作为BRMS订阅的一部分。2015年3月,我们全面升级企业支持,销售量增长。今年早些时候,我们雇佣一些核心工程师开发OptaPlanner工作台。与此同时,我们所有的代码仍然是开源的,在Apache许可下,成千上万的项目正使用它。一个双赢的局面。
我们坚信,未来是光明的。
文章转载自 开源中国社区[http://www.oschina.net]