• 「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」
  • 当然 不论新老朋友 我相信您都可以 从中获益。如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力!

Part 1. Java 发展简史

起源:”Green” 项目

20 世纪 90 年代,单片式计算机系统诞生,单片式计算机系统不仅廉价,而且功能强大,使用它可以大幅度提升消费性电子产品的智能化程度。

SUN 公司为了抢占市场先机,在 1991 年成立了一个由詹姆斯·高斯林(James Gosling)领导,名为 “Green” 项目小组,目的是开发一种 能够在各种消费性电子产品上运行的程序架构(主要是像 有线电视转换盒 这一类 处理能力和内存都很有限,并且 CPU 厂商又各不相同 的消费设备)。

由于这些消费设备的处理能力和内存都有限,所以语言必须 非常小且能够生成非常紧凑的代码。另外,由于不同厂商会选择不同的 CPU,因此很重要的一点是这种语言 不应该与任何特定的体系结构绑定。代码短小、紧凑且与平台无关,这些要求促使开发团队设计出一个 可移植的语言,可以为虚拟机生成中间代码。

不过,Sun 公司的人都有 UNIX 的应用背景。因此,所开发的语言以 C++ 为基础,而不是 Lisp/ Smalltalk 或 Pascal。不过,就像 Gosling 在专访中谈道:“毕竟,语言只是实现目标的工具,而不是目标本身。”

Gosling 把这种语言称为 “Oak”(直译为橡树,大概是因为它非常喜欢自己办公室窗外的一颗橡树…)。后来 Sun 公司发现,Oak 是一种已有的计算机语言名字,于是 Gosling 和他的团队进行了一次头脑风暴,多次讨论后,从 Java/ DNA/ SILK/ RUBY 中决定使用 Java 来命名。事实证明这是一个很有灵感的选择。

埋没:没人为 “Green” 项目买单

1992 年,Green 项目发布了它的第一个产品,称之为 「* 7」。这个产品可以提供非常智能的远程控制。遗憾的是,Sun 公司对生产这个产品并不感兴趣。Green 项目组的人员必须找出其他的方法来讲他们的技术推向市场。

然而,仍然没有任何一家标准消费品电子公司对此感兴趣。于是,Green 项目组投标了一个设计有线电视盒的项目,它能提供视频点播等新型有线服务,但他们没能拿到这个合同 (有趣的是,得到这个项目的公司的领导恰恰是开辟 Netscape 公司的 Jim Clark。Netscape 公司后来对 Java 的成功给予了很大的帮助。)

Green 项目 (这时已经换了一个新名字 ———— “First Person 公司”)1993 年一整年以及 1994 年上半年,一直在苦苦寻找买家购买他们的技术。然而,一个也没有找到 (Partick Naughton ———— 项目组的创始人之一,也是完成了大多数营销工作的人,声称为了销售这项技术,已累计飞行了 300,000 英里)

1994 年 First Person 公司解散了。

转机:Internet 的壮大

当这一切在 Sun 公司发生的时候,Internet 的万维网也在日渐发展壮大。万维网的关键是把超文本页面转换到屏幕上的浏览器。

1994 年大多数人都在使用 Mosaic,这是一个 1993 年出自伊利诺斯大学超级计算中心的非商业化的 Web 浏览器( Mosaic 的一部分是由 Marc Andreessen 编写的。当时,他作为一名参加半工半读项目的本科生, 编写了这个软件,每小时的薪水只有 6.85 美元。他后来成了 Netscape 公司的创始人之一和技术总监, 可谓名利双收。)

在接受 SunWorld 采访的时候,Gosling 说在 1994 年中期,Java 语言的开发者意识到: “我们能够建立一个相当酷的浏览器。在客户机/ 服务器主流模型中,浏览器恰好需要我们已经完成的一些工作:体系结构中立、实时、可靠、安全 ———— 这些在工作站环境并不太重要,所以,我们决定开发浏览器”

实际的浏览器是由 Patrick Naughton 和 Jonathan Payne 开发的,并演变为 HotJava 浏览器。为了炫耀 Java 语言超强的能力,HotJava 浏览器采用 Java 编写。设计者让 HotJava 浏览器具有在网页中执行内嵌代码的能力。 这一 “技术证明” 在 1995523 日的 SunWorld’95 上得到展示,同时引发了人们延续至今的对 Java 的狂热追逐。

至此,这一场持续长达 20 多年的「Java 热」开始了。

  • 观察近 20 年的数据,Java 的排名从未跌出过前三,而且有将近一半的年份抢占了透明,不得不令人感叹:「流水的程序员,铁打的 Java 啊!」

Part 2. Java 与 Internet

如果 Java 仅仅只是众多的程序设计语言中的一种,你可能就会问:为什么它如此重要呢?为什么它促使计算机编程语言向前迈进了革命性的一步?

如果从传统的程序设计的角度看,问题的答案似乎不太明显。尽管 Java 对于解决传统的单机程序设计问题非常有用,但同样重要的事,它解决了在万维网(WWW)上的程序设计问题

Web 1.0 时代的程序设计问题

在刚创造 Java 的年代(20 世纪 90 年代),整个互联网还处于 Web 1.0 的网络萌芽阶段。

之前的一篇文章 其实有对 Web 做了一些概念性的描述(概念、发展、体系结构)。

问题一:网页没有交互

Web 1.0 的网站是静态的。最初的互联网只有一种很简单的 单向过程:你 对某一个服务器发起一个请求,然后它 返回 给你一个 文件,你的机器(俗称客户端)上的 浏览器软件 根据本地机器的格式来 解读并展示 这个文件的内容。这期间没有任何的交互发生,因为最初的浏览器只是一个 “展示器”,它甚至不能执行最简单的计算任务。(另一方面,它确是安全的,因为它在你的本地机器上不会执行任何程序,而这些程序可能包含 bug 和病毒)

用户 只能访问 这些站点而不会对它们做出任何贡献。这就像你捧起书架中的一本书一样,它是一种 「只读」 模式的存在,如果你想与创造这本书的出版社也好,作者也好建立链接,只能通过其他的一些方式。(当时的网站也是主要是向消费者展示产品,从感兴趣的消费者那里收钱)

1996 年苹果公司主页

很快人们就不满足于只是从服务器传递回页面,人们希望实现完整的客户/ 服务器能力,使得客户可以将信息反馈给服务器,来完成例如:在服务器上进行数据查找,并将用户提供的新信息加到服务器中,服务器管理人员接受到新信息之后就下发订单的操作。

问题二:响应缓慢

早期的浏览器不仅没有交互,而且它还趋向于让服务器和 Internet 阻塞。因为在任何时候,只要 你需要完成 通过编程 才能实现的 任务,就必须将信息发挥到 服务器处理。然而在互联网中,在任意时刻都有可能会有 成百上千 的客户向服务器发出请求,所以任何小的延迟都会产生重大的影响。

为了解决这个问题,人们采用了各种不同的方法。首先,图形标准得到了加强,这使得在浏览器中可以播放质量更好的动画和视频。剩下的问题通过引入 在客户端浏览器中运行程序 的能力就可以解决,这被称为 「客户端编程」

问题三:客户端编程平台各异

大多数运行 Web 浏览器的机器都是能够执行大型任务的强有力的引擎。在使用原始的静态 HTML 方式的情况下,它们通常只是闲在那里,等着服务器送来下一个页面。

客户端编程意味着 Web 浏览器能够用来执行任何它可以完成的工作,使得返回给用户的结果 更迅速 (不用全部的结果都等着服务器来运算),而且使得你的网站 更加具有交互性 (那些不需要使用服务器数据的操作可以完全在本地完成)

但客户端编程的问题是:它与通常意义上的编程十分不同,参数几乎相同,而平台却不同。在 Web 浏览器中编程就像是使用一台功能受限的操作系统,而每一台功能还略微的有差别。最终,你不仅需要编写程序,还需要处理因为平台不同带来的兼容问题。

小结

因为「没有交互」和「访问缓慢」的问题,所以引入「客户端编程」,因为引入客户端编程,遇到「各种各样不仅仅是平台差异带来的问题」。

Java 的解决方案

插件和脚本语言 “差点意思”

在当时,客户端编程所迈出的最重要的一步就是 插件(plug-in) 的开发。通过这种方式,用户可以下载一段代码,并将其插入到浏览器中适当的位置,以此来为浏览器添加新的功能。

插件又引发了浏览器 脚本语言(scripting language) 的开发。通过使用某种脚本语言,你可以将客户端程序的源代码直接嵌入到 HTML 页面中,解释这种语言的插件在 HTML 页面被显示时自动激活。(脚本语言可以解决客户端编程中遇到的百分之八十的问题) 脚本语言先天就相当易于理解,因为它们只是作为 HTML 页面一部分的简单文本,当服务器收到要获取该页面的请求时,它们可以被快速加载。此方法的缺点是代码会直接暴露给任何浏览(或窃取)的人,但是,通常不会使用脚本语言去做相当复杂的事情,所以这个缺点不会太严重。

如果脚本语言可以解决客户端编程百分之八十的问题的话,那么剩下那百分之二十 (那才是真正难啃的骨头) 又该怎么办呢?

Java 带来了 Applet

Java 带着 Applet 及时出现。

1995 年, Java 之父 James Gosling 和 Sun 公司科学办公室主任 John Gage 一起前往蒙特利,去参加一个 TED 会议,两人要在那里展示一个划时代的技术, 号称向能把枯燥的静态网页变得栩栩如生,美轮美奂。

演示开始了,James Gosling 把鼠标指向了浏览器中的一个 3D 分子模型,来回地旋转它,台下的观众发出阵阵惊叹声,他们被镇住了,从没有人想到在浏览器中也能实现这么 “美轮美奂” 的效果 !

注:这是后来用 Applet Viewer 看到的效果

Java 火了!

这个演示所使用的技术就是 Applet。

Applet 是只在 Web 浏览器中运行的小程序,它是作为网页的一部分而自动下载的 (就像是网站图片被自动下载一样)。当 Applet 被激活时,它变开始执行一个程序,这正是它优雅的地方:它提供了一种分发软件的方式,一旦用户需要客户端软件时,就自动从服务器把客户端软件分发给用户。

用户获取最新版本的客户端软件时不会产生错误,而且也不需要很麻烦的重新安装过程 (有点像现在的小程序)。Java 的这种设计方式,使得程序员只需要创建单一的程序,而只要一台计算机有浏览器,且浏览器具有内置的 Java 解释器 (大部分机器都有),那么这个程序就可以自动在这台计算客户端尽可能地多做事情。例如,不必跨网络地发送一张请求表单来检查自己是否填写了错误的日期或者其他参数,客户端计算机就可以快速地标出错误数据。

这不仅立即就获得了快速的响应能力,而且也降低了网络流量和服务器负载,从而不会使整个网络的速度慢下来。

Java 对服务端编程的加持

当提出对服务器的请求之后,会发生什么呢?大部分时间,请求只是要求「给我发送一个文件」,之后浏览器会以某种适当的形式解释这个文件,例如将其作为 HTML 页面、图片、Java applet 或脚本程序等来解释。

更复杂的对服务器的请求通常涉及数据库,这可能会需要服务器端对请求到的数据进行一定的编排 (例如把数据嵌到一个表格之内) 来最终使其成为一个 HTML 文件发送给客户端 (当然,如果客户端具备更多的只能,你完全可以把原始数据发送给客户端让它自己进行编排工作..)。另一种常见的情形是:你注册账号或者提交订单,这对数据库数据造成了更改,而这些必须通过服务器端的某些代码进行处理,这就是所谓的 服务端编程

Java 后来编写的被称为 Servlet 的程序 (及其衍生物 JSP),是许多开发网站的公司迁移到 Java 上的主要原因。尤其是因为凭借 Java 跨平台的特性 消除了处理具有不同能力的浏览器时所遇到的问题

小结

Java 凭借自身强大、安全、跨平台、国际化的特性,加上解决了当时客户端、服务端开发的诸多 “痛点”,成功搭上 Internet 这列 “国际快车”,一跃成为了时下 20 实际 90 年代中) 最热门的语言之一,并持续火热至今 (这跟 Java 自身不断地成熟有脱不开的关系)

现如今 Applet 和 Servlet 两个技术已经逐步淡出人们的视野,但在 Java 的历史上,是举足轻重的两个突破点。

Part 3. Hello Wrold!

当我们集中注意力 学习一种新的编程语言 时,教程上的 第一个案例 就是如何 在计算机屏幕上显示短语 Hello,world! 也许这条短语最知名的来源是贝尔实验室的备忘录《C 语言编程——一份教程》。这份材料编写于 1974 年。不过在编写于 1972 年的 B 语言教程中,我们同样看到了这条短语的身影。

Hello, World! 是一种伟大的教学方法。这是一项能够轻松完成的小任务,同时也代表着一种标准,体现出不同编程语言之间的重要差异。此外,这也是高级程序员在安装新环境测试一切是否正常的快速简便方法。(有时候,程序员们也会使用「hello world」运行时间来比较不同语言与环境的速度水平。) 也许更重要的是,Hello, world! 具有一种温暖而柔和的力量,对编程新人有着一种莫名的亲和力。

「代码拥有无穷威力,而新的世界已经向你张开怀抱。」 ———— Chris Noessel,IBM 公司 AI 设计负责人

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

以上就是Java 语言版本 Hello World 程序。(现在看不懂也没关系,可以进 https://c.runoob.com/compile/10 这个网站在线运行测试一下看看效果…)

至此,欢迎你进入 Java 的世界。

参考资料

  1. 《Thinking in Java》 第四版;
  2. 《Java 核心技术 卷 I》 第 11 版;
  3. The complete History of Java Programming Language - https://www.geeksforgeeks.org/the-complete-history-of-java-programming-language/
  4. Java 发展简史:初生遇低谷,崛起于互联网 - https://www.chainnews.com/articles/628715645859.htm
  5. 永别了,Java的“小苹果”! - https://zhuanlan.51cto.com/art/201911/606791.htm
  6. 改变世界的代码行 - https://www.infoq.cn/article/5CaYH8NbS6BmptWKRgkX

往期精彩

  1. 「MoreThanJava」当大学选择了计算机之后应该知道的
  2. 「MoreThanJava」计算机发展史—从织布机到IBM
  3. 「MoreThanJava」计算机系统概述
  4. 「MoreThanJava」一文了解二进制和CPU工作原理
  5. 「MoreThanJava」机器指令到汇编再到高级编程语言
  • 本文已收录至我的 Github 程序员成长系列 【More Than Java】,学习,不止 Code,欢迎 star:https://github.com/wmyskxz/MoreThanJava
  • 个人公众号 :wmyskxz,个人独立域名博客:wmyskxz.com,坚持原创输出,下方扫码关注,2020,与您共同成长!

非常感谢各位人才能 看到这里,如果觉得本篇文章写得不错,觉得 「我没有三颗心脏」有点东西 的话,求点赞,求关注,求分享,求留言!

创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

评论