「MoreThanJava」Java發展史及起航新世界

  • 「MoreThanJava」 宣揚的是 「學習,不止 CODE」,本系列 Java 基礎教程是自己在結合各方面的知識之後,對 Java 基礎的一個總回顧,旨在 「幫助新朋友快速高質量的學習」
  • 當然 不論新老朋友 我相信您都可以 從中獲益。如果覺得 「不錯」 的朋友,歡迎 「關注 + 留言 + 分享」,文末有完整的獲取鏈接,您的支持是我前進的最大的動力!

Part 1. Java 發展簡史

  • 圖片來源:https://www.geeksforgeeks.org/the-complete-history-of-java-programming-language/

起源:”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

  • 圖片來源:https://www.morethanshipping.com/internet-things-iot-will-help-logistics/

如果 Java 僅僅只是眾多的程序設計語言中的一種,你可能就會問:為什麼它如此重要呢?為什麼它促使計算機編程語言向前邁進了革命性的一步?

如果從傳統的程序設計的角度看,問題的答案似乎不太明顯。儘管 Java 對於解決傳統的單機程序設計問題非常有用,但同樣重要的事,它解決了在萬維網(WWW)上的程序設計問題

Web 1.0 時代的程序設計問題

在剛創造 Java 的年代(20 世紀 90 年代),整個互聯網還處於 Web 1.0 的網絡萌芽階段。

在 之前的一篇文章 其實有對 Web 做了一些概念性的描述(概念、發展、體繫結構)。

問題一:網頁沒有交互

Web 1.0 的網站是靜態的。最初的互聯網只有一種很簡單的 單向過程:你 對某一個服務器發起一個請求,然後它 返回 給你一個 文件,你的機器(俗稱客戶端)上的 瀏覽器軟件 根據本地機器的格式來 解讀並展示 這個文件的內容。這期間沒有任何的交互發生,因為最初的瀏覽器只是一個 “展示器”,它甚至不能執行最簡單的計算任務。(另一方面,它確是安全的,因為它在你的本地機器上不會執行任何程序,而這些程序可能包含 bug 和病毒)

用戶 只能訪問 這些站點而不會對它們做出任何貢獻。這就像你捧起書架中的一本書一樣,它是一種 「只讀」 模式的存在,如果你想與創造這本書的出版社也好,作者也好建立鏈接,只能通過其他的一些方式。(當時的網站也是主要是向消費者展示產品,從感興趣的消費者那裡收錢)

很快人們就不滿足於只是從服務器傳遞迴頁面,人們希望實現完整的客戶/ 服務器能力,使得客戶可以將信息反饋給服務器,來完成例如:在服務器上進行數據查找,並將用戶提供的新信息加到服務器中,服務器管理人員接受到新信息之後就下發訂單的操作。

問題二:響應緩慢

早期的瀏覽器不僅沒有交互,而且它還趨向於讓服務器和 Internet 阻塞。因為在任何時候,只要 你需要完成 通過編程 才能實現的 任務,就必須將信息發揮到 服務器處理。然而在互聯網中,在任意時刻都有可能會有 成百上千 的客戶向服務器發出請求,所以任何小的延遲都會產生重大的影響。

為了解決這個問題,人們採用了各種不同的方法。首先,圖形標準得到了加強,這使得在瀏覽器中可以播放質量更好的動畫和視頻。剩下的問題通過引入 在客戶端瀏覽器中運行程序 的能力就可以解決,這被稱為 「客戶端編程」

問題三:客戶端編程平台各異

大多數運行 Web 瀏覽器的機器都是能夠執行大型任務的強有力的引擎。在使用原始的靜態 HTML 方式的情況下,它們通常只是閑在那裡,等着服務器送來下一個頁面。

客戶端編程意味着 Web 瀏覽器能夠用來執行任何它可以完成的工作,使得返回給用戶的結果 更迅速 (不用全部的結果都等着服務器來運算),而且使得你的網站 更加具有交互性 (那些不需要使用服務器數據的操作可以完全在本地完成)

但客戶端編程的問題是:它與通常意義上的編程十分不同,參數幾乎相同,而平台卻不同。在 Web 瀏覽器中編程就像是使用一台功能受限的操作系統,而每一台功能還略微的有差別。最終,你不僅需要編寫程序,還需要處理因為平台不同帶來的兼容問題。

小結

因為「沒有交互」和「訪問緩慢」的問題,所以引入「客戶端編程」,因為引入客戶端編程,遇到「各種各樣不僅僅是平台差異帶來的問題」。

Java 的解決方案

插件和腳本語言 “差點意思”

在當時,客戶端編程所邁出的最重要的一步就是 插件(plug-in) 的開發。通過這種方式,用戶可以下載一段代碼,並將其插入到瀏覽器中適當的位置,以此來為瀏覽器添加新的功能。

  • 圖片來源:https://zhuanlan.zhihu.com/p/28889449

插件又引發了瀏覽器 腳本語言(scripting language) 的開發。通過使用某種腳本語言,你可以將客戶端程序的源代碼直接嵌入到 HTML 頁面中,解釋這種語言的插件在 HTML 頁面被显示時自動激活。(腳本語言可以解決客戶端編程中遇到的百分之八十的問題) 腳本語言先天就相當易於理解,因為它們只是作為 HTML 頁面一部分的簡單文本,當服務器收到要獲取該頁面的請求時,它們可以被快速加載。此方法的缺點是代碼會直接暴露給任何瀏覽(或竊取)的人,但是,通常不會使用腳本語言去做相當複雜的事情,所以這個缺點不會太嚴重。

如果腳本語言可以解決客戶端編程百分之八十的問題的話,那麼剩下那百分之二十 (那才是真正難啃的骨頭) 又該怎麼辦呢?

Java 帶來了 Applet

  • 圖片來源:https://www.ibm.com/developerworks/cn/java/

Java 帶着 Applet 及時出現。

1995 年, Java 之父 James Gosling 和 Sun 公司科學辦公室主任 John Gage 一起前往蒙特利,去參加一個 TED 會議,兩人要在那裡展示一個划時代的技術, 號稱向能把枯燥的靜態網頁變得栩栩如生,美輪美奐。

演示開始了,James Gosling 把鼠標指向了瀏覽器中的一個 3D 分子模型,來回地旋轉它,台下的觀眾發出陣陣驚嘆聲,他們被鎮住了,從沒有人想到在瀏覽器中也能實現這麼 “美輪美奐” 的效果 !

  • 圖片來源:https://zhuanlan.51cto.com/art/201911/606791.htm

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!

  • 圖片來源:https://medium.com/@thiagonascimento/time-to-first-hello-world-11a4735602f2

當我們集中注意力 學習一種新的編程語言 時,教程上的 第一個案例 就是如何 在計算機屏幕上显示短語 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,與您共同成長!

非常感謝各位人才能 看到這裏,如果覺得本篇文章寫得不錯,覺得 「我沒有三顆心臟」有點東西 的話,求點贊,求關注,求分享,求留言!

創作不易,各位的支持和認可,就是我創作的最大動力,我們下篇文章見!

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※回頭車貨運收費標準

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!