Java : 一個帝國的誕生
1.C語言帝國的統治
現在是公元1995年, C語言帝國已經統治了我們20多年, 實在是太久了。
1972年, 隨著C語言的誕生和Unix的問世, 帝國迅速建立統治, 從北美到歐洲, 從歐洲到亞洲, 無數程序員臣服在他的腳下。
帝國給我們提供了極好的福利:貼近硬件, 運行極快, 效率極高。
使用這些福利, 程序員們用C 開發了很多系統級軟件,操作系統, 編譯器, 數據庫,網絡系統.....
但是帝國也給我們安上了兩個沉重的枷鎖: 指針和內存管理
雖然指針無比強大, 能直接操作內存, 但是帝國卻沒有給我們工具去做越界的檢查, 導致很多新手程序員輕易犯錯。
至于內存管理, 帝國更完全是放任的態度: 你自己分配的空間, 自己去釋放 !
更要命的是這些問題在編譯期發現不了, 在運行時才會突然暴露, 常常讓我們手忙腳亂, 昏天黑地去調試。
我們的大量時間和寶貴的精力都被浪費在小心翼翼的處理指針和內存分配上。
每個程序員都被這兩個東西搞的焦頭爛額! 帝國宣稱的可移植性騙了我們,他宣稱我們在一個機器上寫的程序, 只要在另外一個機器上編譯就可以了, 實際上不是這樣。 他要求我們盡量用標準的C函數庫。其次,如果遇到了一些針對特定平臺的調用, 需要對每個平臺都得寫一份 ! 有一點點小錯誤,都會導致編譯失敗。
1982年,帝國又推出了一門新的語言C++, 添加了面向對象的功能,兼容C, 有靜態類型檢查, 性能也很好。
但是這門新的語言實在是太復雜了, 復雜到比我聰明的多的人都沒有辦法完全掌握這門語言,它的很多特性復雜的讓人吃驚。
C++在圖形領域和游戲上取得了一些成功, 但是我一直學不好它。
2.反抗
我決定反抗這個龐大的帝國, 我偷偷的帶領著一幫志同道合的兄弟離開了,我們要新建一塊清新自由的領地。
為了吸引更多的程序員加入我們, 我們要建立一個新的語言,這個語言應該有這樣的特性:
語法有點像C , 這樣大家容易接受沒有C語言那樣的指針 再也不要考慮內存管理了, 實在受不了了真正的可移植性, 編寫一次, 到處運行面向對象類型安全還有,我們要提供一套高質量的類庫, 隨語言發行。
我想把這個語言命名為C++-- , 即C++減減, 因為我想在C++的基礎上改進,把它簡化。
后來發現不行, 設計理念差別太大。
干脆重啟爐灶。
我看到門口的一棵橡樹, 就把這個語言叫做Oak。 但是后來發布的時候, 發現Oak已經被別人用了, 我們討論很久, 最終決定把這門新的語言叫做 Java。
為了實現跨平臺, 我們在操作系統和應用程序之間增加了一個抽象層: Java 虛擬機
用Java寫的程序都跑在虛擬機上, 除非個別情況, 都不用看到操作系統。
3.一鳴驚人
為了吸引更多的人加入我們的新領地, 我們決定搞一個演示, 向大家展示Java 的能力。
出世未久的Java其實還遠不完善。 搞點什么好呢?
我們把眼光盯上了剛剛興起的互聯網, 1995年的網頁簡單而粗糙, 缺乏互動性。 于是我們在瀏覽器上弄了個小插件, 把java 運行環境放了上去。
然后在上面開發了一個圖形界面的程序(Applet), 讓它看起來美輪美奐, 震撼人心。
每一個看到他的程序員都會發出“Wow”的驚嘆 !為之傾倒。
Java 活了!
通過Applet , 無數的程序員看到了Java這門語言,了解了這門語言特性以后, 很多無法忍受C帝國暴政的程序員, 很快加入了我們, 我們的領地開始迅速擴大。
連C語言帝國里的一些商業巨頭也紛紛來和我們合作, 其中就包括Oracle , 微軟這樣的巨頭 , 微軟的頭領Bill Gates還說 :這是迄今為止設計的最好的語言!
但是Bill Gates非常的不地道, 買了我們的Java 許可以后,雖然在自家的瀏覽器上也支持Applet, 但是他們卻偷偷的試圖修改Java , 想把Java綁死在自家的操作系統上賺錢, Java會變的不可移植。
這是我們難于忍受的, 我們和微軟發起了一場曠日持久的游擊戰爭, 逼著微軟退出了Java領域, 開發了自己的.NET , 這是后話。
4.開拓疆土
從1995年到1997年,我們依靠 Java 不斷的攻城略地, 開拓疆土,我們王國的子民不斷增加, 達到了幾十萬之眾, 已經是一個不可忽視的力量了。 但是大家發現, Java除了Applet, 以及一些小程序之外, 似乎干不了別的事情。
C帝國的人還不斷的嘲笑我們慢, 像個玩具。
到了1998年, 經過密謀, 我們Java 王國決定派出三只軍隊向外擴展:Java 2 標準版(J2SE): 去占領桌面Java 2 移動版(J2ME): 去占領手機Java 2 企業版(J2EE): 去占領服務器
其中的兩只大軍很快敗下陣來。
J2SE 的首領發現, 開發桌面應用的程序員根本接受不了Java, 雖然我們有做的很優雅的Swing 可以開發界面, 但是開發出的界面非常難看, 和原生的桌面差距很大。 尤其是為了運行程序還得安裝一個虛擬機, 大家都受不了。
J2ME也是, 一直不受待見, 當然更重要的原因是喬布斯還沒有重新發明手機, 移動互聯網還沒有啟動。
失之東隅,收之桑榆, J2EE趕上了好時候, 互聯網大發展, 大家忽然發現, Java簡直是為寫服務器端程序所發明的!
強大, 健壯, 安全, 簡單, 跨平臺 !
在J2EE規范的指導下, 特別適合團隊開發復雜的大型項目。
我們授權BEA公司第一個使用J2EE許可證, 推出了Weblogic, 憑借其集群功能, 第一次展示了復雜應用的可擴展性和高可用性。
這個后來被稱為中間件的東西把程序員從事務管理,安全管理,權限管理等方面解放出來, 讓他們專注于業務開發。 這立刻捕獲了大量程序員的心。
很快Java 王國的子民就達到數百萬之眾。
榜樣的力量是無窮的, 很快其他商業巨頭也紛紛入場, 尤其是IBM,在Java 上瘋狂投入,不僅開發了自己的應用服務器 Websphere, 還推出了Eclipse這個極具魅力的開源開發平臺。
當然IBM利用java 獲得了非常可觀的效益, 軟件+硬件+服務 三駕馬車滾滾向前, 把IBM推向了一個新的高峰。
5.帝國的誕生
大家也沒有想到,除了商業巨頭以外, 程序員們也會對Java王國 這么熱愛, 他們基于Java 開發了巨多的平臺,系統,工具,例如:
構建工具: Ant,Maven, Jekins
應用服務器: Tomcat,Jetty, Jboss, Websphere, weblogic
Web開發: Struts,Spring,Hibernate, myBatis
開發工具: Eclipse, Netbean,intellij idea, Jbuilder。。。。等等等等。。。。
并且絕大部分都是開源的 !
微軟眼睜睜的看著服務器端的市場被Java 王國占據, 豈能善罷甘休? 他們趕緊推出.NET來對抗, 但我們已經不在乎了, 因為他的系統是封閉的,所有的軟件都是自家的:開發工具是Visual Studio, 應用服務器是IIS, 數據庫是SQL Server,只要你用.NET,基本上就會綁定微軟。
另外他們的系統只能運行在Windows服務器上, 這個服務器在高端市場的占有率實在是太低了。
2005年底, 一個新的王國突然崛起, 他們號稱開發效率比java 快5-10倍, 由此吸引了大批程序員前往加盟。
這個新的王國叫做Ruby on Rails, 它結合了PHP體系的優點(快速開發)和Java體系的優點(程序規整), 特別適合快速的開發簡單的Web網站。
雖然發展很快, 但沒有對Java 王國產生實質性的威脅, 使用Ruby on Rails搭建大型商業系統的還很少。
除了Ruby on Rails ,還有PHP, Python , 都適合快速開發不太復雜的Web系統。 但是關鍵的,復雜的商業系統開發還是Java 王國的統治之下。 所以我們和他們相安無事。
2006年, 一只叫Hadoop的軍隊讓Java王國入侵了大數據領域, 由于使用Java 語言, 絕大多數程序員在理解了Map/Reduce , 分布式文件系統在Hadoop中的實現以后, 很快就能編寫處理處理海量數據的程序, Java 王國的領地得到了極大的擴展。
2008年, 一個名叫Android 的系統橫空出世, 并且隨著移動互聯網的爆發迅速普及, 運行在Android之上的正是Java !
Java 王國在Google的支持下, 以一種意想不到的方式占領了手機端, 完成了當年J2ME 壯志未酬的事業 !
到今年為止, 全世界估計有1000萬程序員加入了Java王國,它領土之廣泛, 實力之強大, 是其他語言無法比擬的。
Java 占據了大部分的服務器端開發,尤其是關鍵的復雜的系統, 絕大多數的手機端, 以及大部分的大數據領域。
一個偉大的帝國誕生了。
這個帝國能生存多久? 誰會摧毀這個龐大的帝國呢?
我不知道, 你呢?
【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】