前几期我们介绍了一些程序员的创业经历,从不同侧面展示了中国开发人员的智慧和创新。今天我们给大家带来的是一位以销售起步,后来移民加拿大的程序员的一段经历。他能够静下心来做出了独立知识产权的JDO产品实现,的确是非常了不起。尤其在现在的大形式下,全球技术越来越趋向同步,如何从中寻找到程序员发展和创业的契机,本文将给你一个代表性的案例。相信随着世界技术的进步,基于统一标准的产品实现成为了中国软件技术赶超世界水平,进入国际市场的途径。
1995年我从大学毕业,当时是市场经济开放不久,一派全民皆商的景象。我也很快从技术职位转向了销售,还是当年公司的最佳销售奖呢。而一次偶然参加的移民讲座带来了一张加拿大绿卡,为了看看外面的世界,1999年我踏上了枫叶国的土地。
当时正赶上了网络热潮,凭着上学时有过一点基础,再加上原来就职的公司曾是SUN的代理商,也接触过JDK方面的知识。因此,尽管我之前没有真正从事过开发,但还是在一家小公司找到了一份Java程序员的工作,也正式开始了我的程序员生涯。中国人的聪明和勤奋很快使我成为公司的主力,并负责公司第一个J2EE项目的开发。必须承认当时根本不知道如何写正规的代码,完全是牛仔程序员的风格,项目最后能运行实在是很有些运气的成分。戏剧性的是多年后还巧遇一位当年接手我的代码的同事,很是臭骂了我一顿。
第二家公司是我程序员生涯一个转折点。记得面试经历也颇具戏剧性:我第一次被问玩不玩电脑游戏,我也老实回答玩“红色警戒”。更好玩的是在做测试题目的时候,我突然发现犯了一个非常幼稚的错误,不由自主地骂了一声“sh*t”。后来他们告诉我就因这句粗话,我歪打正着加入了加拿大第一个XP开发团队。这个团队的的领导集体全部来之IBM原来写Websphere一个Team。这些人工作很随意,穿着拖鞋,下班就玩游戏,让我非常惊讶。公司的开发用的是XP(敏捷编程),习惯了UP过程和按照详细开发的我第一次拿到上面只有3句话的user story卡的时候直发愣。而敏捷开发的结对编程在开始的时候也实在不是一件让人愉快的事。想象一下,两个陌生人用同一个键盘一起工作,还要交流和讨论,非常累。为了尽快建立起互信和默契,整个团队每天中午和下班都一起玩30分钟的电脑游戏CounterStrike,很快,兄弟连般的战斗情意就在团队间建立起来了。三个月后,整个开发团队就开始默契和高效地运行起来。在XP团队开发中,一个最显著的体验就是工作有平稳的节奏感。这10个月的XP开发经历,让我不但从伙伴们身上学到了丰富的知识,更学会了如何与人相处,合作开发,我也从一个学徒成为合格的Java程序员。
后来,我到了一家新公司,负责产品中JMX框架的设计开发。我还是沿用了原来的XP方法,其实当时也没有意识到这种方法有多好,只是习惯了。开发进行了六个月,我发现每到一个里程碑发布的时候,所有人都需要加班加点的工作,而我却可以准时上下班。我自己和上司都对这样的效率非常惊讶。于是我开始主动研究我的方法和其他人有什么不同。后来发现原来别人不写单元测试等等显著的区别。也正是从这个时候起,我从一个XP的被动执行者成为一个believer。
为了让更多的国内同行分享XP开发的乐趣,我们几个朋友做了一个宣传敏捷编程的网站,这就是
www.chinaxp.org 一方面向国内推广XP的开发方法,同时希望能够依托这样一个网站,做一家咨询公司和外包工作。做咨询,如果没有自己的产品,就与众多的公司很难区分开。于是我们开始开发一些XP工具软件,第一个软件由于技术的原因不是很成功。第二个产品也是现在已开源的测试覆盖工具codespy,虽然做得比较成功,但这个软件太小了,不足以支撑一个公司。不过,codespy的开发涉及很多JVM底层的技术,而这些技术积累在后来JDO开发中起了很大的作用。
2003年,一个很巧的机会,我和几个开发人员一起承接到了一家中国公司的加拿大分公司要开发一套销售系统的项目。项目时间紧逼,为了按时完成,一个开发人员建议使用当时还处在1.0版本的KODO JDO产品。最初,习惯了自己编写SQL的我比较怀疑,担心整个架构架在JDO上,万一出了问题,整个系统就会宕掉。不过后来在队员的极力推荐下,我还是决定采用,我们一边学一边用。采用JDO产品所带来的生产力提高令我非常震惊,系统的代码量少了非常多,也使我们按时优质地完成了这个按常规方法不可能完成的任务。
项目开发完后,在休息期间闲谈时与一位在某研究机构的.NET开发的高手朋友互相交流,提到了JDO给项目开发带来的影响。这位朋友在确认JDO技术和ADO的差别后也大为惊叹,并提出了开发类似产品的想法。这样一个Java程序员和一个.NET程序员作为产品的主力开始实现Liberator JDO产品,很奇妙的组合啊。
当时已经有2个开源JDO产品,一个是Sun的RI,一个是的TJDO。刚开始,我们的想法有些简单,觉得再不济也能把开源产品读一遍学过来吧。但很快我们就发现,JDO的实现非常复杂,底层有很多技术要做,而且开源产品在架构上也有明显的缺陷,于是我们决定自己来从新架构。三个多月的日夜不停,这个产品可以存取第一个对象了,那真是一个令人兴奋的时刻啊。
不过,这时我们两个人也在接下来的架构设计上出现了很严重的分歧,由于想法差距巨大,甚至为此争吵到了要翻脸的地步。后来我们决定五个人分成两批人,各自按照自己的思想来做,于是演变成了一场赌气的比赛。为了获胜,两个团队都昏天黑夜的写。这次赌气对JDO产品的帮助很大,如果没有赌气,我们可能无法坚持下去面对一个又一个的技术难题。三个月后,我的架构赢了。回过头来看看那三个月的代码量和破解的那么多技术难点,真有些不敢相信。而赌气比赛的成果就是至今也没有变化的Liberator JDO内核。
JDO产品的主要技术难点在于内存管理和状态管理,而且调试起来很难,很多时候是不规则的出错,除了单元测试的帮助,有时还需要像理论物理学家那样通过非常深入的冥想和思考来了解内存中对象的关系和状态变化。
当时为什么要选择实现JDO的标准呢?我觉得中国软件业和国外的差距是全方位的,而最重要的就是我们的经验,知识积累相比差距太大。比如,要做一个O/R Mapping框架,需要实现那些功能,哪些注意事项,没有多年的积累说都说不出来。而现在国际组织所制定的一些技术标准的好处就是告诉我们做一个产品需要做到什么。而如何进行实现这是我们可以发挥聪明才智的舞台。通过实现这样的业界标准,我们就可以在O/R Mapping方面有了丰富的知识积累和沉淀,也就有了对技术标准评价和参与制定的能力。
另外选择JDO也是市场的考虑。目前国内的J2EE中间件市场基本被国外的几大品牌占据,作为中国的开发人员,这不是我们乐意看到的。而JDO是一个很好的进入J2EE市场的切入口,因为:
1.目前国外的J2EE中间件厂商都专注于应用服务器。
2.JDO2所采用的轻量级POJO模型已经是J2EE开发的主流模型. JDO2和EJB3标准的合并也能确保我们的产品能平滑的成为J2EE下一代的主流开发技术。
日前,我们产品发布了业界标准的Torpedo性能测试,获得了很好的成绩,比目前国际上其他中间件产品相比毫不逊色。但目前市场对新的O/R Mapping技术的接受和采用还有一个过程,这是我们目前面临的难题。
作为国内中间件市场的一支新军,我们将用优异的产品品质同国际品牌竞争,更打算走出国门,进军亚洲市场。在此也呼吁国内的开发社区关注和使用的我们的中间件,为打造中国自己的国际水准的中间件产品一起努力。