Java,20岁了。从我写下第一行Java代码,迄今已有十余年了,眼见Java——这个当年刚刚找到自己成长方向的懵懂少年,成长为如今当之无愧的业界。它已拥有世界上庞大的开发者社区,以及无可匹敌的生态系统。这也意味着,选用Java做任何应用,都有着强有力的业界支撑,而无需担心自己孤独前行。
  崩坍的“标准”
  我刚成为Java程序员时,还是一个蛮荒年代,什么东西都鼓励自己动手丰衣足食,虽然开源的苗头已有星火,但大多数企业的态度是,非我族类,其心必异。我依然记得自己的第一个正式Java程序是实现一个SMTP服务器
  我从SocketAPI一路写了上来,先是实现了粗略的SMTP协议,然后,再实现我们的应用协议。虽然这种做法对于个人从下到上理解知识体系是有好处的,但每个人都从头造轮子,对于工程开发而言,只是在浪费时间。
  那也是Java企业级开发大行其道的年代。背靠着Sun这棵大树生长起来,这几乎也意味着初的Java是Sun销售服务器的附赠品。而有能力为这些服务器买单的几乎都是些不差钱的大企业。Sun也瞅准了这些金主,大力地推动着“复杂”的企业级标准,的J2EE。在那个年代,写Java程序不写EJB,不谈几句分布式事务,你都不好意思说自己是做Java程序的。几乎主流的声音都在大谈企业开发的复杂度,不断拓展着想象的边界,似乎每个Java程序员面对的都是世界上复杂的问题。即便应用只是一个简单的管理系统,或是仅仅做消息转发,我们需要的也一定是一个价格昂贵的应用服务器,编写只有部署到上面才能运行的EJB,因为这是官方推荐的做法,只有这么做才正宗,只有这么干,才叫企业级。
  有一次出差在外,临近下班,我发现了程序的一个Bug。实际上,我们的程序是一个按照官方推荐做法编写的EJB,只有部署到应用服务器才能运行。我的调试方案是加上一些打印语句,然后部署到应用服务器上,看输出的结果,再加上另外一些语句,再部署,如此往复。那时我们用的是Sun的应用服务器,只有用它的发布工具将应用打包,然后把几百兆的程序上传到服务器上,每一次上传都要至少十几分钟。终,我定位到了问题,只修改了一行代码,问题解决,但时间已经晚上九点多,三个多小时的时间多半都在等待部署中浪费。
  我不认为我所喜欢的软件开发应该是无意义的消耗,一定是哪里出了错。周边的人给不了我答案,我只有到网上搜寻,于是,我知道了敏捷、知道了开源、知道了软件设计,也知道了世界上有一堆Java程序员对官方说法的不满。那段时间,我疯狂补习着各种各样的软件开发知识,我越发觉得“简单”开发才应该是软件开发的本来面目。
  那段时间恰逢软件开发理念变革的年代,SpringFramework、Hibernate等如今还在影响Java程序员的框架刚刚发轫,企业级开发“WithoutEJB”理念初出茅庐。倍受J2EE开发模式折磨的程序员大量地讨论着各种方法的优劣。那时,我也开始带队做项目,于是,我便笨拙地践行着这些新理念。我用的第一个SpringFramework的版本是0.8,我开始用设计去隔离数据库访问,尝试把EJB踢出我的项目,努力在本地完成所有的开发测试,尽量少用应用服务器。如今想来,还真要感谢我当年的项目经理,那么信任我,让我放手折腾。
  幸运的是,没过多长时间,大多数Java程序员跟上了先行者的步伐,于是,我们看到更多的人拥抱开源理念,探索敏捷,SSH(Spring、Struts和Hibernate)成了业界的主流。所谓官方标准已经失去了公信力,加之像JBoss、Tomcat这样的开源服务器的兴起,那些靠卖应用服务器当年大赚的厂商开始凋零,拥有WebLogic的BEA早早投靠了Oracle,IBM的WebSphere已成明日黄花,可惜的是官方的Sun,生了Java,却挣不到Java的钱,现在也成了Oracle的一部分。