我原本是一名C程序员。郑业·杜克选择奖获奖作品的创始人Moco最早涉足Java。当我怀着一颗成为优秀程序员的心和一些写C程序的技能进入职场时,我进入了一个以C为主业的部门。就在我大显身手的时候,领导告诉我,一个Java项目缺人。于是,我拿起了一本Java教科书,成为了一名Java程序员。我的第一个正式Java程序是实现一个服务器,其协议是基于SMTP的应用协议。活力是职场新鲜人的基本属性。我是从SocketAPI一路写的。首先实现了粗略的SMTP协议,然后实现了我们的应用协议。从今天开始,这真是浪费时间。找一个开源的SMTP实现,然后直接套用在上面。但是在那个野蛮的年代,什么事都得靠自己来解决,才能丰衣足食。有开源的火花,但大多数公司的态度是,你不是我的种族,你的心一定不一样。但是,这种方法对我建立个人知识体系大有裨益。后来做的项目越来越多,写的代码越来越多,经验越来越多,Java用起来也越来越顺手。但随着经验的增长,困惑就会增加。虽然我在练习Java开发的一些内容,但是我看不懂,比如EJB。这种无知不是技术上的,但我想不通为什么要使用它。或许现在很多Java程序员都不知道EJB是什么,但是十多年前,在Java企业级开发盛行的时代,只要用Java开发服务端应用,就一定要谈企业级标准,也就是当时J2EE风靡全球,EJB是J2EE中的小众。即使是一个很简单的应用程序,也必须要有昂贵的应用服务器来写EJB,部署到上面才能运行,因为这是官方推荐的做法,只有这样做才是正宗的。企业。有一次出差,快下班的时候发现程序有bug。我们的程序是按照官方推荐做法编写的EJB,只有部署到应用服务器上才能运行。我的调试方案是加一些打印语句,然后部署到应用服务器,看输出结果,再加一些其他语句,再部署,等等。当时我们用的是Sun的应用服务器。我们不得不使用它的发布工具将应用程序打包,然后将数百兆的程序上传到服务器。每次上传至少需要十分钟。最后定位到问题,只修改了一行代码,问题就解决了,但是已经是晚上九点多了,三个多小时大部分时间都浪费在等待部署上了。我不认为我喜欢的那种软件开发应该是无意义的浪费,一定是出了问题。身边的人给不了我答案,只好上网搜索,于是学习了敏捷、开源、软件设计,也了解到世界上有很多Java程序员不服与官方声明。那段时间,我疯狂地学习各种软件开发知识,越来越觉得“简单”的开发才是软件开发的真面目。那段时间恰逢软件开发理念变革的时代。还在影响着Java程序员的SpringFramework、Hibernate等框架才刚刚起步,企业级开发“WithoutEJB”的概念才刚刚出现。受过J2EE开发模式折磨的程序员广泛讨论了各种方法的优缺点。那时候我也开始带团队做项目,就笨拙地实践着这些新概念。我使用的第一个SpringFramework版本是0.8。我开始使用设计来隔离数据库访问,试图将EJB踢出我的项目,并试图在本地完成所有开发和测试,尽可能少地使用应用服务器。现在想来,真的要感谢我的项目经理当年对我的信任和放手。新思想的注入,让我在新项目中游刃有余,对软件开发的理解也加深了。正好公司内部举办了Java技术大赛。凭借实力和运气的结合,我一举夺得了冠军。#p#对Java的反思作为一个写C程序的人,总觉得做Java不能满足自己内心的一些需求。因此,我转行并与Java说再见。当时我以为是告别,没想到只是暂时的告别。几年后,我又回来了。那几年,应该是我开阔眼界的一段时间。我做过很多不同类型的项目,用过很多不同的技术,但我真的没有在我的工作项目中使用过Java。但说我完全离开Java也不合适。那是RubyOnRails兴起的时期,人们需要投入到web开发的大浪潮中。而且我对Ruby编程语言更感兴趣。正好网上有人在做一个项目叫XRuby,他想把Ruby编译成Java字节码。出于对语言实现的热情,我怀着极大的热情加入了这个项目,研究Ruby语言的实现和Java字节码的编写。这是我参与的第一个开源项目,因为选择了合适的切入点,很快就有很多人开始关注这个项目,包括ThoughtWorks。ThoughtWorks是软件行业的思想领袖。当时在推Ruby技术栈,当时Ruby开发者还不多。于是我接到了ThoughtWorks的橄榄枝,成为了一名ThoughtWorker,并将接下来的八年奉献给了它。ThoughtWorks确实给了我更多开阔眼界的机会,我也开始思考融合各种语言和技术,当然也包括Java。ThoughtWorks有很多做企业级软件开发的机会,我又回到了Java开发的行列。兜兜转转各种技术,发现自己对Java有了新的认识,也许是更客观的认识。Java拥有世界上最大的社区,各种类库几乎可以满足各种需求;当今计算机领域最具挑战性的问题,无论是大数据还是高并发,Java都走在了前列。对于企业来说,Java程序员的数量是企业采用Java最直接的证据。当我进入职业生涯的第十个年头时,我很认真地思考了一个问题。十年经验,做过很多项目,但我到底能提供什么?我很难回答这个问题。我突然意识到一个关键问题。我需要专注于做一件事。于是,我决定不再四处游荡,专心做Java开发。因此,在之后的项目安排中,我拒绝了所有非Java的项目,开始专心致志。专注于Java的第一个收获,是开启了自己的另一个开源项目Moco,一个模拟服务器的项目,解决软件开发中一直存在的一个痛点,集成。多年的积累让我选择了优雅的方式来解决这个问题,也逐渐被更多的同行所认可。Moco很快在ThoughtWorks内部使用,在一些社区活动中被介绍后,也有很多外部用户。新的一年,甲骨文向中国开放了JavaOne,Moco报名参加了Duke'sChoiceAward的评选。幸运的是,莫科成为了公爵选择奖的获得者。这也让我越来越相信坚持的力量。这段时间,我还在想另外一件事。在摸索了多种软件开发技术后,我发现虽然Java技术日新月异,但Java社区中仍有很多人了解十多年前的Java。因此,我着手将我对现代软件开发的理解与Java结合起来。我首先写了一个名为《你应该更新的Java知识》的系列文章。在ThoughtWorks内部,我组织了一个课程来分享这些需要更新的现代Java开发知识。在2014年北京的QCon上,我分享了这一系列的提纲。本来我也考虑过把这些内容进一步整理成书,因为实在是懒惰又工作忙,就放弃了这个想法。有的没写内容,只好记在心里。今天,我是创业浪潮中的新生。在选择服务器端技术时,我毫不犹豫地投给了Java。一方面,Java语言拥有足够的资源,无论是技术还是人才。另一方面,我也想在自己的项目中实践自己没时间写的新想法。误入Java十几年,至今不后悔。作者简介:郑烨,十余年工作经验程序员,杜克选择奖获奖作品Moco创始人,前ThoughtWorks***顾问,创业潮流新人,目前致力于智能硬件领域,致力于简化智能硬件的发展方式。多次在各种媒体发表文章,在各种技术会议上发表演讲,分享自己对软件开发的理解。他特别愿意吸收新知识,和别人聊软件开发。微博:@dreamhead个人主页:http://dreamhead.blogbus.com/
