接下来,让我们搭乘时光机,回到二十世纪 90 年代看看,Java 1.0 在发布前都经历了什么?

Java 险些“夭折”

Java 其实原本只是 Sun 公司(Java 的开发公司,2009 年已被甲骨文收购)在 1990 年 12 月开始研究的一个内部项目。当时,Sun 公司成立了工作小组以研究一个名为“Green 计划”的项目(原名为“Stealth 计划”)。九十年代的他们已很有远见,预料到了未来科技将在家电领域大显身手,因此他们将目标定在了下一代智能家居的程序设计。

最初团队考虑采用 C++ 语言进行设计,但以公司首席科学家比尔·乔伊为首的许多开发者一致认为 C++ 与其 API 并不适用。因此比尔·乔伊决定开发一种集 C 语言和 Mesa 语言优势于一体的新语言,并建议工程师们在 C++ 的基础上开发一种面向对象的环境。

随后,公司的开发者们对 C++ 取其精华,并结合嵌入式系统的实时性要求,创建出名为 Oak 的面向对象的程序语言,并为了将 Oak 语言带入市场,1992 年夏天,团队向硬件开发商演示了 Green 操作系统和 Oak 程序设计语言等。但那时 Oak 刚问世,没有人愿意冒风险在一个并不了解的事物上投资,因此没有硬件支持的 Oak 语言就此被搁置,Java 的前身险些“夭折”。

直到 1994 年 6 月开发团队决定改变目标,将 Oak 应用于万维网。

团队中的帕特里克·诺顿写了一个小型万维网浏览器 WebRunner,后来改名为 HotJava,Oak 也更名为 Java,并在 10 月向 Sun 公司的高层进行演示。恰逢当时互联网蓬勃发展,小巧精简的 Java 又尤为适用于网络的传输系统,Sun 公司终于开始重用,并在 1995 年 5 月 23 日正式对外公布了 Java 和 HotJava 浏览器。

Java 终成为独立开发工具

Java 和 HotJava 浏览器现世后迎来众多支持,苹果、甲骨文和微软等大型公司都转向 Java 并为各自产品开发相应的 Java 平台,同时,Java 也收到越来越多的改进建议,加速了 Java 1.0 的问世。

1996 年 1 月 23 日,Sun 公司新成立的 JavaSoft 公司发布了一则新闻,宣布 Java 1.0 的诞生:Java™1.0 编程环境目前可前往 http://java.sun.com 下载。

彼时,JavaSoft 总裁 Alan Baratz 对外界表示:“Java“一次编译,到处运行”的能力及其易访问性,使多数软件和互联网社区迅速应用于复杂网络的应用程序编写。我们很乐意看到更多的开发者尝试 Java 1.0 去构建下一个杀手级应用程序。”

JavaSoft 的 Java 语言和应用程序总经理 Ruth Hennigar 也说道:“改进 Java ,创建出了这个强大的 1.0 通用版本对我们的团队来说是一个伟大的成就。自从 3 月份发布了第一个 Alpha 版本以来,我们收到了很多开发者的反馈,并就此改进了功能和可靠性。Java 1.0 这个版本包含了软件开发者们所需要的组件——用于运行和测试 Applet 的 Java Applet Viewer;Java 编译器;原型调试器和运行基于 Java 的程序的 Java 虚拟机,还包含了用于图形、音频、动画和网络的类库。”

Sun 公司还表示 Java 1.0 可以用于 Solaris、Windows 95 和 Windows NT,并将在次年年底发布 macOS 版本。

那时的 Java 可谓是众多大型公司追捧的对象,以至于当 Apple 和 NeXT 合并创建 macOS 时,系统默认安装 Java,并将 Objective-C 运行环境桥接到 Java 中,生成一个 Objective-C WebObjects 堆栈的 Java 化端口 JavaWebObjects。

距 Java 1.0 发布至今已有 25 个年头,Java 具备自动垃圾回收机制,还支持跨平台,能在不同操作系统上运行,这些优势在当时都独一无二。

但在流行几年后,Java 在浏览器中的地位逐渐没有那么强势了。Adobe Flash 可以满足简单交互的动画需求,微软在其 Internet Explorer 和 Windows 中也不再附带 Java 平台。不过,Java 在万维网端却得到了长足的发展,很多网站的后端仍在使用 Java。

那么,作为 Java 开发人员,我们应该学习哪些技术?哪些工具能够帮助我们成为更好的 Java 开发人员?Java 开发人员必须学习的框架有哪些?

工具

工具大致分为两类。第一类是 IDE,这是开发人员最主要的工具,它几乎可以满足你所有的要求和目标,包括编译、运行、调试、分析、测试,比较文件和代码重构等等。
第二类是构建工具,你需要利用这些工具来构建和部署 Gradle 项目。我用过 ANT,但是在旧项目中。对于所有的 Java 新项目,应该考虑 Gradle。
JDK API

JDK API 关系到所有 Java 工程师的日常工作。API 可以进一步细分为 Java Collections 框架、Java Concurrency、Java IO 和 Java 8 API 等核心领域。
(1)Java Collections 框架
这是每一位 Java 开发人员都应该学习的最重要的 Java API 之一。该API包含一系列的Java标准数据结构的实现:链表、集合、堆、栈、队列、哈希表、优先级队列等。
你应该对日常工作所需的对象有所了解,例如 ArrayList、HashMap、HashSet、LinkedHashSet、TreeSet 等。每个对象都有不同的结构,例如 ArrayList 是一个可以动态修改的数组,HashMap 是哈希表的标准实现,并且可用于存储键值对。
(2)Java Concurrency
Java 并发是一个关键的 API,涉及多线程与并发,如果你想成为一名合格的Java开发人员,必须对 Java Concurrency API 有扎实的理解和掌握。
你不仅应该对字符串、可运行、对象锁定和同步之类的基本概念有深入的了解,而且还应该熟悉死锁、活动锁、竞争条件等概念。
此外,你还应该了解一些Java的高级概念,例如 Java 5 及其后续版本添加的同步代码块,以及 CyclicBarrier、CountDownLatch、Phaser 和 CompleteableFuture 等,以及如何在 Java 中执行异步操作。
(3)Java IO
与 Java Collections 和 Java Multithreading API 相比,有关 Java IO 和NIO API 的信息非常少。我可以理解,很多人花费了大量时间来学习这两个 API,尽管如此,你仍然离不开这些重要的 API。
如果你需要编写核心 Java 应用程序,则需要使用 java.io 包中的 Documents、InputStream、OutputStream、Reader、Author 等类。
(4)Java 8
此外,你还必须学习 Java 8 的功能,这个版本完全改变了 Java 的编程方式。如果你想成为一名优秀的 Java 开发人员,则必须知道如何使用 Lambda 表达式、Stream API、Optional 类以及新的 Data 与 Time API。
结构
Java 的优势之一就在于,它拥有一个生机勃勃的生态系统,这意味着 Java 拥有大量的框架与库,可以满足所有的需求。通常,我不建议 Java 开发人员主动寻找框架,除非有真正的需要。但是,我认为每一位 Java 开发人员都应该了解一些框架和库,例如 Spring、Spring Boot、Hibernate、Log4j、JUnit 等。
(1)Springtime 框架
Spring 框架可以帮助你编写整洁的代码,该框架提供了依赖注入、控制反转之类的功能,可以减轻测试和维护工作的负担。此外,它还提供了大量日常工作所需的API,所以每一位 Java 开发人员都应该学习 Spring 框架。
此外,如果你想学习 Spring 框架,则 Spring Framework 5:Beginner to Guru 课程是首选。它涵盖了 Spring 5,该课程讲解了 Spring 5 的最新技术,而且包含大量的实践。
(2)Hibernate
我建议每一位 Java 开发人员学习的第二个框架是 Hibernate,它基于 JPA(Java持久性API)。确切地说,Hibernate 早于 JPA,但是由于 JPA 是用于在 Java 中实现持久层的标准 API,因此 Hibernate 也使用了它。
那么,为什么要学习 Hibernate 呢?因为你使用的大量Java应用程序都需要与数据库进行交互,而且在 Java 中,如果没有 Hibernate 这样的框架帮忙,使用 JDBC 来处理数据库是一件非常痛苦的事情。
该框架提供了若干功能,比如缓存和自带的 Deal 对象。使用该框架意味着你有更多的时间专注于应用程序逻辑,然后在应用程序中实现缓存。这可以大幅提高 Java 应用程序的性能,因此也是使用 Hibernate 的主要理由。
(3)Spring Boot
Springtime Boot 继承了 Spring 的简化思想,而且也进一步简化了 Springtime 本身的管理。就像 Springtime 可以简化Java应用程序一样,Springtime Boot 可以让基于 Spring 的 Java 应用程序变得更加容易。
自动设计等特性解决了与配置 Spring 应用程序相关的大部分棘手工作。

测试
测试是所有 Java 开发人员的一项基本技能,尤其是单元测试、集成测试和自动化测试。每一位 Java 开发人员都应该熟悉 JUnit 和 Mockito,这两个是最受欢迎的单元测试工具。
此外,还有一些高级库,比如业务驱动测试 Cucumber,验收测试驱动开发的自动化测试框架 Robotic Framework,但 JUnit 仍然是必不可少的工具。
当涉及到模拟库时,你还可以选择 PowerMock,Mockito 和 EasyMock。

实用程序库
Java 真正的力量来自其充满活力的开源库生态系统。无论遇到怎样的难题和需求,从 Java 日志到机器学习,从发送 HTTP 请求到解析 JSON 等等,你都可以找到相应的库。
除此之外,Java 还拥有很多实用程序库,例如 Apache Commons 和 Google Guava,这两个库有效地补充了 JDK 库。
Java 在去年 9 月 15 日已更新至 Java 15,而外界对 Java 唱衰的声音却不绝于耳,不知你有什么看法?你使用的 Java 又是哪个版本呢?