??Java技术诞生于1995年的5月23日,这样一个在程序设计领域长时间占据统治地位并且拥有最好的生态系统的语言起初只是太阳微系统公司(Sun Microsystems)一个失败的机顶盒项目的附产品。Java的第一个正式版本发布于1996年1月23日,在这个最原始的Java版本中,类和接口加起来总共只有211个,那时候的Java并不完美也不强大,但是由于它紧紧的抓住了当时最时髦的两样东西——互联网和浏览器,并拥有完美的平台可移植性,再加上计算机领域的全能奇才James Gosling(Java技术的创始人之一,被誉为Java之父)对它的炒作和推广,这个语言用了大约5年的时间就在TIOBE发布的编程语言排行榜上坐上了头把交椅,达到了它的人生最巅峰。盛开得再绚烂的花也免不了有凋谢的时候,日中则昃月满则亏,Java这朵程序设计语言中的奇葩也摆脱不了自然的规律,从下面的图中你可以发现,Java语言在经历了它的人生巅峰以后已经走了很长时间的下坡路,尤其是在甲骨文公司(Oracle)收购了太阳微系统公司以后,虽然Java的生态系统依然良好,但是语言本身已经江河日下。今年是Java诞生的第20年,写这样的一篇文章纪念那个曾经让我执着和疯狂的Java,也纪念那个从单纯到复杂再回归单纯的我。
Java的编年史
1995年
1996年
- Java版本:JDK 1.0
- 发布时间:1996年1月23日
- 开发代号:Oak
- 类和接口的数量:211
- 新特性或功能:初始版本
- 我的故事:1996年我以全校第二的成绩考入了我们当地的省重点高中,小地方的重点中学其硬件条件也是没法跟大城市比的,但是值得庆幸的是我们学校还是为高一学生开设了计算机课。那时候上计算课纯粹是好奇和好玩(能在DOS系统下玩拷贝在3.5寸软盘中的游戏),说实在的连打字都没有怎么练好,但是那一年我第一次接触到了程序设计的概念,知道我可以用命令或代码控制计算机做我想让它做的事情。还记得有一次上课的时候,老师出了一个BASIC的编程题让大家写代码,要用穷举法找出一个问题的解,当时全班就我和我的同桌(此君大学选择的专业以及现在从事的工作都和计算机相关,目前是深圳卫视做后期制作的负责人,这也算是三岁看老)写出了正确的代码。在期末的计算机考试中,我和同桌都获得了A级(好像有ABCD四等,A当然是最好的),这个A成为了我后来填写高考自愿时选择了计算机专业的原因之一。
1997年
- Java版本:JDK 1.1
- 发布时间:1997年2月19日
- 开发代号:无
- 类和接口的数量:477
- 新特性或功能:
- 改进AWT事件模型
- JavaBean
- JDBC(Java数据库连接)
- 内部类
- RMI(远程方法调用)
- 反射(只支持内省)
1998年
- Java 2企业平台发布
- Java版本:JDK 1.2 (Java 2)
- 发布时间:1998年12月8日
- 开发代号:Playground
- 类和接口数量:1524
- 新特性或功能:
- 集合框架
- JIT编译器
- JFC(Java基础类库)
- JDBC可滚动结果集、BLOB、CLOB、批处理
1999年
- SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)、微缩版(J2ME)
- 我的故事:这一年,我参加了在中国几乎算得上是人生分水岭的高考。那年对个别老师的反感,对填鸭式教学的叛逆以及对某女生的暗恋让我的内心非常的浮躁,在这种状态下错过了第一志愿,被四川大学录取,专业是计算机科学与技术。高考结束后,为了度过这个漫长的没有作业的假期,我朋友介绍我去了一家计算机培训的学校学习,学费100元。说是学校,其实就是一个老师两个房间的环境。那时候,计算机对我以及周围的很多人仍然是神秘的,不会经常触碰到的东西,在那里学习的东西基本上就是五笔打字而已。但是那是一段愉快的经历,因为我很快和那家培训学校的唯一的老师“王哥”成为了朋友,因为我去了两天后基本上就能解决其他学员的所有问题,成为了他最好的助手并经常帮他看店。“王哥”是个非常聪明的人,逻辑思维能力极强,这一点从他的象棋水平就能看出来。他用一年的时间自学了七门计算机课程,然后就在这家学校当了老师。一个月后,当我离开家乡到成都上大学的时候,我从他那里学到了如何用程序控制计算机发出声音。
2000年
- Java版本:JDK 1.3
- 发布时间:2000年5月8日
- 产品代号:Kestrel
- 类和接口的数量:1840
- 新特性或功能:
- 内置HotSpot JVM
- 改进RMI对CORBA的兼容性
- 动态代理相关类
- Sound API
- JNDI
- JPDA(Java平台调试器体系)
- 我的故事:2000年,我在大学里面学习了第一个有生产力的编程语言——C语言。学习C语言的过程并不轻松愉快,原因一:以前学到的一点点BASIC对学习C语言基本没有帮助,原因二:教C语言的老师的水平实在不敢恭维,很多时候我们有问题都更愿意请教我们班的高手(他现在在国家安全局工作,在我眼中他算得上是一名真正的黑客,他老婆也是我们的同班同学,现在在百度任职)。我现在都清楚的记得最后一次C语言课的时候,老师直接从教材的85页讲到了216页,这一百多页中包括了二维数组、函数、指针、结构体等重要内容,是的,他就用了一节课把这些东西强加给我们,当时我们的教材是谭浩强老师的《C程序设计》(当然我个人对这本书的评价比较低,因为这本书确实没有教给我有用的东西)。在这一年的下半年,我和同班的一位女生谈恋爱了,那是我的初恋,她希望我好好学习编程并把我学会的东西教给她,于是有一次逛书店的时候,我找到了一本叫《Java 2傻瓜书》的书,就是这本书带着我步入了Java的殿堂。那个年代同学们关注更多的是一个叫MFC(微软基础类库)的东西,认为那是在我们毕业时能够给我们以高薪的技术,但是我只看了半天就被那些丑陋的API和恶心的宏给搞晕了,于是我下定决心不走寻常路(直到现在,我都认为当时的决策是非常正确的)。那时候我对Java的了解其实很少很少,但是那本傻瓜书中所罗列的Java代码却深深的吸引了我。
2001年
- Nokia宣布到2003年将出售1亿部支持Java的手机
- 9月24日,J2EE 1.3发布
2002年
2003年
- 我的故事:这一年我被保送到西南交通大学读硕士研究生,本来是一件挺高兴的事情,但是由于家里的经济状况出现了严重的问题,让我怎么也高兴不起来。于是我开始寻思着出去做点事情来赚一些外快。这一年的暑假,我接下了第一个私单,为一家名为“LiTong Communication”的公司写一个做数据处理的程序,用的是J2ME中的kXML API在手机上处理语音数据的编码和解码。至始至终我都没有和这家公司的任何人见过面,以至于我其实并不能准确拼写出它的名字,所有的需求和代码都是通过邮箱来传递的,遗憾的是当时用的邮箱以及当时写的代码已经再也找不回来,不然还能留下一些美好的回忆。那一年,我结交了第二位女友,她把她的电脑和PDA都给了我,让我有了谋生的工具,并且帮助我度过了经济上最困难的时候。
2004年
2005年
- SUN公司宣布,Java三个版本更名为Java SE、Java EE和Java ME
- 我的故事:这一年我被保送继续攻读博士研究生,我总是希望能找到我的Java程序和我的科研工作的交集,我试图用Java为我们当时要做的路由器测试系统写一个测试配置和管理平台,但是老板否决了我的方案,因为他更信任有效率的C语言以及平台无关的测试语言TTCN-3。现在想起来,当时我并不应该放弃我的想法,我应该做一个快速原型然后展示给老板看,并说服他接受我的方案。很多时候,我们缺少的并不是idea,我们缺少的是执行力。这一年我继续着学习、科研和兼职工作,并从中获益良多,当然给我启发最多的是我的室友“小胖子”,当时他的专业是密码学,我的专业是计算机网络,我们经常“秉烛夜谈”,交换我们在自己领域的一些研究心得,同时谈人生、谈理想、谈情感、也谈国家大事,就如同很多的知识分子那样,位卑未敢忘忧国,那是一段非常美好的时光。“小胖子”现在是中科院研究生院的老师,他现在应该不经常写代码了,但他仍然是我很佩服的科研工作者和程序员。他的乒乓球技术一直都没有超过我,就如同我的编程技术从来没有超过他。
2006年
2009年
- SUN公司发布Java EE 6
- SUN公司被Oracle公司收购
- 我的故事:这一年是我从最好走向最糟糕的一年。
2010年
- Apache宣布退出JCP(Java执行委员会)
- 我的故事:这一年生活给我的打击就如同Apache退出JCP给Java世界的打击一样,不过都是过去的事情了,过去的不愉快也是一种幸福!
2011年
- Java版本:Java 7
- 发布时间:2011年7月28日
- 产品代号:Dolphin
- 类和接口的数量:4042
新特性或功能:
- switch的增强
- 钻石语法(泛型推断)
- 异常的改进
- JVM多语言支持
- TWR(try-with-resources)
- NIO.2
我的故事:
2014年
- 发布时间:2014年3月18日
- 产品代号:无
- 类和接口的数量:尚不清楚
- 新特性或功能:
对Java技术的一些思考
对自己的一些思考
致谢