要记住1995年的编程世界是什么样子可不是件容易的事。举例来说,面向对象编程是一种被接受但很少实践的范例,许多所谓的面向对象程序只不过是用C代码重新命名的>>而不是printf和类而不是塑造。我们编写的节目通常由于指针算术错误而定期倾倒核心,或由于泄漏而耗尽内存。源代码几乎无法移植在不同版本的UNIX之间。在不同的处理器和操作系统上运行相同的二进制文件是疯狂的谈话。
+也:爪哇漫长而奇怪的生、死和重生+
Java改变了这一切。尽管依赖于平台、手动分配、过程性的C代码至少在未来20年内还会继续存在,但Java证明了这是一种选择,而不是一种需求。第一次,我们开始用跨平台、垃圾收集、面向对象的语言编写真正的产品代码;我们喜欢它……百万。在Java之后出现的语言,尤其是c#,必须为开发人员的生产力扫除Java所建立的新的更高的障碍。
詹姆斯·戈斯林,迈克谢里丹,帕特里克纳顿和其他Sun的绿色项目的程序员没有发明大多数Java进入广泛使用的重要技术。其中大多数关键特征,它们被称为橡树橡木的起源在其他地方发现:
- 所有类都从其派生的基对象类?Smalltalk。
- Compile Time的强静态类型检查?ada。
- 多界面,单个实现继承?目标-C
- 内联文档吗?CWeb。
- 跨平台虚拟机和字节码即时编译?又闲聊,尤其是孙自己的方言。
- 垃圾收集?Lisp。
- 基本类型和控制结构?C。
- 双类型系统与非对象原始类型的性能?c++。
然而,Java做了新领域。在任何其他语言之前或以来,任何其他语言都没有任何其他语言。Java也是第一个使用Unicode在本机字符串类型和源代码本身中的语言。
但Java的核心实力是它建立了一个实用的工具来完成工作。它通过以普通的C编码者熟悉的格式重新包装它们(与C ++和Objective-C不同)java不仅仅是一个严格的C.,它通过重新包装的格式普及但还删除了使Java更简单,更容易学习的功能,而不是其他面向对象的C后代。
Java以前没有(现在仍然没有)结构体那工会那typedef,头文件。未按要求运行遗留代码的要求束缚的面向对象语言不需要它们。类似地,Java明智地忽略了曾经尝试过的想法,并发现了其他语言的想法:多种实现继承,指针算术和操作员最明显过载。这种良好的味道在一开始意味着即使是20年之后,Java仍然是相对免费的“龙”警告,为其前辈乱丢了风格指南。
但其余的编程世界仍然没有。自从我们首次开始编程Java以来,成千上万的编程语言已经上升,但在最终消失之前,大多数人从未达到过的比集体注意力。将我们销售给我们的Java是小程序,在网页内部运行的小程序,可以与用户交互,而不是显示静态文本,图片和表单。今天,这听起来不像很多,但记住 - 1995年,JavaScript和DOM不存在,并且与在Perl中写的服务器端CGI脚本交谈的HTML表格是最先进的。
讽刺是小东西从来没有顺利。它们完全从页面上的内容中分离出来,无法读取或写入HTML,因为JavaScript最终可以。安全约束阻止小程序与本地文件系统和第三方网络服务器进行交互。这些限制使小程序仅适用于简单的游戏和动画。即使是早期浏览器虚拟机的性能不佳阻碍了这些琐事的概念证明。随着时间的推移,纠正小程序的缺陷,浏览器和前端开发人员从java传递了长期。Flash,JavaScript和最近HTML5捕获了我们的眼睛,更有效地提供动态Web内容Java所承诺的我们但未能提供。
尽管如此,applet还是激发了我们使用Java的灵感,并且我们发现了一种干净的语言,它消除了许多粗糙的边缘和痛点,这些痛点是我们在c++等替代语言中一直在努力解决的。光是自动垃圾收集就值了入场费。applet可能被过度宣传,交付不足,但这并不意味着Java不是解决其他问题的好语言。
最初是作为跨平台客户端库,Java发现了服务器空间中的真正成功。Servlet,Java Server页面和一系列专注的库,它们定期捆绑在一起,并在一个混乱的首字母缩略词或其他解决我们和业务的其他解决的真正问题中重新命名。销售失败,Java在世界各地的IT部门取得了近标准状态。(Quick: What’s the difference between Java 2 Enterprise Edition and Java Platform Enterprise Edition? If you guessed that J2EE is the successor of JEE, you got it exactly backward.) Some of these enterprise-focused products were on the heavyweight side and inspired open source alternatives and supplements such as Spring, Hibernate, and Tomcat, but these all built on top of the foundation Sun set.
可以说,开源对Java和更广泛的编程技术的最重要的贡献是JUnit。测试驱动开发(TDD)已经在Smalltalk中尝试过了。然而,就像该语言的许多其他创新一样,TDD并没有得到广泛的注意和采用,直到它在Java中可用。当Kent Beck和Erich Gamma在2000年发布JUnit时,TDD迅速从少数程序员的实验实践上升为21世纪软件开发的标准方法。正如Martin Fowler所说的,“在软件开发领域中,从来没有这么少的几行代码让这么多人受益”,而这几行代码是用Java编写的。
自诞生20年以来,Java不再是一个斗志昂扬的新贵。它已经成为其他语言所反对的根深蒂固的在位语言。轻量级的语言,像Ruby和Python已经取得了重大进展到Java的领土,尤其是在创业社区开发速度计算鲁棒性和多尺度——权衡Java本身利用在早期当虚拟机的性能严重滞后编译后的代码。
当然,Java并没有停滞不前。Oracle继续从其他语言中吸收经过良好验证的技术,比如泛型、自动装箱、枚举,以及最近的lambda表达式。许多程序员是在Java中第一次遇到这些思想的。并不是每个程序员都知道Java,但是无论他们知道与否,今天的每个程序员都受到了Java的影响。
相关文章
这个故事,“Java的20岁:它是如何永远改变编程的”最初是由infoworld. 。