本文由[Java帝國的誕生](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513103&idx=1&sn=56d832072a92e3f41f5e6796676993e0&scene=21#wechat_redirect)改編
## C語言
C語言誕生于1972年,伴隨著Unix的問世,迅速席卷全世界。
C語言的好處是貼近硬件,運行極快,效率高。
但是C語言最大的問題是:**指針與內存管理**
* 指針:可以直接操作內存,但是沒有做越界檢查,導致很多新手程序員輕易犯錯
* 內存管理:自己分配空間,自己回收。而且的在編譯期間發現不了,必須在運行的時候才會暴露。
所以大量的時間都浪費在指針與內存分配上了。
而且C語言的可移植性并不好,必須盡量用標準的C函數酷,而且遇到了些針對特定平臺的調用,就需要對每個平臺在寫一份。
1982年,C++誕生,增加了面向對象的功能的,兼容C,有靜態類型檢查,性能也很好。但是太復雜了
## Java
所以人們建立了一個新的語言
他需要具有:
- 語法有點像 C , 這樣大家容易接受
- 沒有 C 語言那樣的指針
- 再也不要考慮內存管理了, 實在受不了了
- 真正的可移植性, 編寫一次, 到處運行
- 面向對象
- 類型安全
- 要提供一套高質量的類庫, 隨語言發行。
### 用在哪里
那么Java可以用在那里呢?
1995年網頁簡單而粗糙,缺乏互動性,于是人們在瀏覽器上弄了個小插件,把Java環境放上去,然后開發了一個圖形界面的程序(Applet)
通過 Applet , 無數的程序員看到了 Java 這門語言,了解了這門語言特性以后, 很多無法忍受 C 帝國暴政的程序員, 很快加入了我們
### 還能干什么
后來大家發現Java 除了Applet,似乎什么都干不了。
開發桌面應用的程序員不接受Java,因為界面非常難看,而且還需要安裝一個虛擬機
但是大家發現Java 簡直是為了寫服務器端的程序發明的,因為他**強大, 健壯, 安全, 簡單, 跨平臺 !**
在 J2EE 規范的指導下, 特別適合團隊開發復雜的大型項目。
我們授權 BEA 公司第一個使用 J2EE 許可證, 推出了 Weblogic, 憑借其集群功能, 第一次展示了復雜應用的可擴展性和高可用性。
這個后來被稱為中間件的東西把程序員從**事務管理,安全管理,權限管理**等方面解放出來, 讓他們專注于業務開發。
于是其他商業巨頭也紛紛入場,IBM開發了自己的應用服務器Websphere,還推出了Eclipse這個開源開發平臺。
IBM 利用 java 獲得了非常可觀的效益, 軟件 + 硬件 + 服務 三駕馬車滾滾向前, 把 IBM 推向了一個新的高峰。
### Java帝國
程序員們基于 Java 開發了巨多的平臺,系統,工具,例如:
* 構建工具: Ant,Maven, Jekins
* 應用服務器: Tomcat,Jetty, Jboss, Websphere, weblogic
* Web 開發: Struts,Spring,Hibernate, myBatis
* 開發工具: Eclipse, Netbean,intellij idea, Jbuilder
### 微軟
微軟當然不會善罷甘休,他們推出了.NET來對抗,但是因為系統是封閉的,所有軟件都是自家的:
開發工具是 Visual Studio, 應用服務器是 IIS, 數據庫是 SQL Server,只要你用. NET,基本上就會綁定微軟
而且系統只能運行在Windows上, 這個服務器在高端市場的占有率實在是太低了。
### 后來者
2005年, Ruby on Rails, 它結合了 PHP 體系的優點(快速開發)和 Java 體系的優點(程序規整), 特別適合快速的開發簡單的 Web 網站。 雖然發展很快, 但沒有對 Java 王國產生實質性的威脅,
除了 Ruby on Rails ,還有 PHP, Python , 都適合快速開發不太復雜的 Web 系統。 但是關鍵的,復雜的商業系統開發還是 Java 王國的統治之下。
# 后來的發展
2006 年, 一只叫 Hadoop 的軍隊讓 Java 王國入侵了大數據領域, 由于使用 Java 語言, 絕大多數程序員在理解了 Map/Reduce , 分布式文件系統在 Hadoop 中的實現以后, 很快就能編寫處理處理海量數據的程序, Java 王國的領地得到了極大的擴展。
2008 年, 一個名叫 Android 的系統橫空出世, 并且隨著移動互聯網的爆發迅速普及, 運行在 Android 之上的正是 Java !
到今年為止, 全世界估計有 1000 萬程序員加入了 Java 王國,它領土之廣泛, 實力之強大, 是其他語言無法比擬的。
Java 占據了大部分的服務器端開發,尤其是關鍵的復雜的系統, 絕大多數的手機端, 以及大部分的大數據領域