轉(zhuǎn)載自 微信公眾號(hào) 碼農(nóng)翻身 不用于商業(yè)宣傳 版權(quán)歸原作者所有 侵權(quán)刪
1 C語(yǔ)言帝國(guó)的統(tǒng)治
現(xiàn)在是公元1995年奏甫, C語(yǔ)言帝國(guó)已經(jīng)統(tǒng)治了我們20多年, 實(shí)在是太久了症副。
1972年店雅, 隨著C語(yǔ)言的誕生和Unix的問(wèn)世, 帝國(guó)迅速建立統(tǒng)治贞铣, 從北美到歐洲闹啦, 從歐洲到亞洲, 無(wú)數(shù)程序員臣服在他的腳下辕坝。
帝國(guó)給我們提供了極好的福利:貼近硬件窍奋, 運(yùn)行極快, 效率極高酱畅。
使用這些福利琳袄, 程序員們用C 開(kāi)發(fā)了很多系統(tǒng)級(jí)軟件,操作系統(tǒng)纺酸, 編譯器窖逗, 數(shù)據(jù)庫(kù),網(wǎng)絡(luò)系統(tǒng).....
但是帝國(guó)也給我們安上了兩個(gè)沉重的枷鎖: 指針和內(nèi)存管理
雖然指針無(wú)比強(qiáng)大餐蔬, 能直接操作內(nèi)存碎紊, 但是帝國(guó)卻沒(méi)有給我們工具去做越界的檢查, 導(dǎo)致很多新手程序員輕易犯錯(cuò)樊诺。
至于內(nèi)存管理仗考, 帝國(guó)更完全是放任的態(tài)度: 你自己分配的空間, 自己去釋放 词爬!
更要命的是這些問(wèn)題在編譯期發(fā)現(xiàn)不了秃嗜, 在運(yùn)行時(shí)才會(huì)突然暴露, 常常讓我們手忙腳亂, 昏天黑地去調(diào)試痪寻。
我們的大量時(shí)間和寶貴的精力都被浪費(fèi)在小心翼翼的處理指針和內(nèi)存分配上螺句。
每個(gè)程序員都被這兩個(gè)東西搞的焦頭爛額!
帝國(guó)宣稱的可移植性騙了我們橡类,他宣稱我們?cè)谝粋€(gè)機(jī)器上寫(xiě)的程序, 只要在另外一個(gè)機(jī)器上編譯就可以了芽唇, 實(shí)際上不是這樣顾画。 他要求我們盡量用標(biāo)準(zhǔn)的C函數(shù)庫(kù)。其次匆笤,如果遇到了一些針對(duì)特定平臺(tái)的調(diào)用研侣, 需要對(duì)每個(gè)平臺(tái)都得寫(xiě)一份 ! 有一點(diǎn)點(diǎn)小錯(cuò)誤炮捧,都會(huì)導(dǎo)致編譯失敗庶诡。
1982年,帝國(guó)又推出了一門(mén)新的語(yǔ)言C++, 添加了面向?qū)ο蟮墓δ芘乜危嫒軨, 有靜態(tài)類型檢查末誓, 性能也很好。
但是這門(mén)新的語(yǔ)言實(shí)在是太復(fù)雜了书蚪, 復(fù)雜到比我聰明的多的人都沒(méi)有辦法完全掌握這門(mén)語(yǔ)言喇澡,它的很多特性復(fù)雜的讓人吃驚。
C++在圖形領(lǐng)域和游戲上取得了一些成功殊校, 但是我一直學(xué)不好它晴玖。
2 反抗
我決定反抗這個(gè)龐大的帝國(guó), 我偷偷的帶領(lǐng)著一幫志同道合的兄弟離開(kāi)了为流,我們要新建一塊清新自由的領(lǐng)地呕屎。
為了吸引更多的程序員加入我們, 我們要建立一個(gè)新的語(yǔ)言敬察,這個(gè)語(yǔ)言應(yīng)該有這樣的特性:
語(yǔ)法有點(diǎn)像C 秀睛, 這樣大家容易接受
沒(méi)有C語(yǔ)言那樣的指針
再也不要考慮內(nèi)存管理了, 實(shí)在受不了了
真正的可移植性静汤, 編寫(xiě)一次琅催, 到處運(yùn)行
面向?qū)ο?br>
類型安全
還有,我們要提供一套高質(zhì)量的類庫(kù)虫给, 隨語(yǔ)言發(fā)行藤抡。
我想把這個(gè)語(yǔ)言命名為C++-- , 即C++減減, 因?yàn)槲蚁朐贑++的基礎(chǔ)上改進(jìn)抹估,把它簡(jiǎn)化缠黍。
后來(lái)發(fā)現(xiàn)不行, 設(shè)計(jì)理念差別太大药蜻。
干脆重啟爐灶瓷式。
我看到門(mén)口的一棵橡樹(shù)替饿, 就把這個(gè)語(yǔ)言叫做Oak。
但是后來(lái)發(fā)布的時(shí)候贸典, 發(fā)現(xiàn)Oak已經(jīng)被別人用了视卢, 我們討論很久, 最終決定把這門(mén)新的語(yǔ)言叫做 Java廊驼。
為了實(shí)現(xiàn)跨平臺(tái)据过, 我們?cè)诓僮飨到y(tǒng)和應(yīng)用程序之間增加了一個(gè)抽象層: Java 虛擬機(jī)
用Java寫(xiě)的程序都跑在虛擬機(jī)上, 除非個(gè)別情況妒挎, 都不用看到操作系統(tǒng)绳锅。
3 一鳴驚人
為了吸引更多的人加入我們的新領(lǐng)地, 我們決定搞一個(gè)演示酝掩, 向大家展示Java 的能力鳞芙。
出世未久的Java其實(shí)還遠(yuǎn)不完善。 搞點(diǎn)什么好呢期虾?
我們把眼光盯上了剛剛興起的互聯(lián)網(wǎng)原朝, 1995年的網(wǎng)頁(yè)簡(jiǎn)單而粗糙, 缺乏互動(dòng)性彻消。 于是我們?cè)跒g覽器上弄了個(gè)小插件竿拆, 把java 運(yùn)行環(huán)境放了上去。
然后在上面開(kāi)發(fā)了一個(gè)圖形界面的程序(Applet)宾尚, 讓它看起來(lái)美輪美奐丙笋, 震撼人心。
每一個(gè)看到他的程序員都會(huì)發(fā)出“Wow”的驚嘆 煌贴!為之傾倒御板。
Java 活了!
通過(guò)Applet , 無(wú)數(shù)的程序員看到了Java這門(mén)語(yǔ)言牛郑,了解了這門(mén)語(yǔ)言特性以后怠肋, 很多無(wú)法忍受C帝國(guó)暴政的程序員, 很快加入了我們淹朋, 我們的領(lǐng)地開(kāi)始迅速擴(kuò)大笙各。
連C語(yǔ)言帝國(guó)里的一些商業(yè)巨頭也紛紛來(lái)和我們合作, 其中就包括Oracle , 微軟這樣的巨頭 础芍, 微軟的頭領(lǐng)Bill Gates還說(shuō) :這是迄今為止設(shè)計(jì)的最好的語(yǔ)言杈抢!
但是Bill Gates非常的不地道, 買(mǎi)了我們的Java 許可以后仑性,雖然在自家的瀏覽器上也支持Applet, 但是他們卻偷偷的試圖修改Java , 想把Java綁死在自家的操作系統(tǒng)上賺錢(qián)惶楼, Java會(huì)變的不可移植。
這是我們難于忍受的, 我們和微軟發(fā)起了一場(chǎng)曠日持久的游擊戰(zhàn)爭(zhēng)歼捐, 逼著微軟退出了Java領(lǐng)域何陆, 開(kāi)發(fā)了自己的.NET , 這是后話。
4 開(kāi)疆拓土
從1995年到1997年豹储,我們依靠 Java 不斷的攻城略地贷盲, 開(kāi)拓疆土,我們王國(guó)的子民不斷增加颂翼, 達(dá)到了幾十萬(wàn)之眾晃洒, 已經(jīng)是一個(gè)不可忽視的力量了。
但是大家發(fā)現(xiàn)朦乏, Java除了Applet, 以及一些小程序之外, 似乎干不了別的事情氧骤。
C帝國(guó)的人還不斷的嘲笑我們慢呻疹, 像個(gè)玩具。
到了1998年筹陵, 經(jīng)過(guò)密謀刽锤, 我們Java 王國(guó)決定派出三只軍隊(duì)向外擴(kuò)展:
Java 2 標(biāo)準(zhǔn)版(J2SE): 去占領(lǐng)桌面
Java 2 移動(dòng)版(J2ME): 去占領(lǐng)手機(jī)
Java 2 企業(yè)版(J2EE): 去占領(lǐng)服務(wù)器
其中的兩只大軍很快敗下陣來(lái)。
J2SE 的首領(lǐng)發(fā)現(xiàn)朦佩, 開(kāi)發(fā)桌面應(yīng)用的程序員根本接受不了Java并思, 雖然我們有做的很優(yōu)雅的Swing 可以開(kāi)發(fā)界面, 但是開(kāi)發(fā)出的界面非常難看语稠, 和原生的桌面差距很大宋彼。 尤其是為了運(yùn)行程序還得安裝一個(gè)虛擬機(jī), 大家都受不了仙畦。
J2ME也是输涕, 一直不受待見(jiàn), 當(dāng)然更重要的原因是喬布斯還沒(méi)有重新發(fā)明手機(jī)慨畸, 移動(dòng)互聯(lián)網(wǎng)還沒(méi)有啟動(dòng)莱坎。
失之東隅,收之桑榆寸士, J2EE趕上了好時(shí)候檐什, 互聯(lián)網(wǎng)大發(fā)展, 大家忽然發(fā)現(xiàn)弱卡, Java簡(jiǎn)直是為寫(xiě)服務(wù)器端程序所發(fā)明的乃正!
強(qiáng)大, 健壯谐宙, 安全烫葬, 簡(jiǎn)單, 跨平臺(tái) !
在J2EE規(guī)范的指導(dǎo)下搭综, 特別適合團(tuán)隊(duì)開(kāi)發(fā)復(fù)雜的大型項(xiàng)目垢箕。
我們授權(quán)BEA公司第一個(gè)使用J2EE許可證, 推出了Weblogic, 憑借其集群功能兑巾, 第一次展示了復(fù)雜應(yīng)用的可擴(kuò)展性和高可用性条获。
這個(gè)后來(lái)被稱為中間件的東西把程序員從事務(wù)管理,安全管理蒋歌,權(quán)限管理等方面解放出來(lái)帅掘, 讓他們專注于業(yè)務(wù)開(kāi)發(fā)。 這立刻捕獲了大量程序員的心堂油。
很快Java 王國(guó)的子民就達(dá)到數(shù)百萬(wàn)之眾修档。
榜樣的力量是無(wú)窮的, 很快其他商業(yè)巨頭也紛紛入場(chǎng)府框, 尤其是IBM吱窝,在Java 上瘋狂投入,不僅開(kāi)發(fā)了自己的應(yīng)用服務(wù)器 Websphere, 還推出了Eclipse這個(gè)極具魅力的開(kāi)源開(kāi)發(fā)平臺(tái)迫靖。
當(dāng)然IBM利用java 獲得了非吃合浚可觀的效益, 軟件+硬件+服務(wù) 三駕馬車(chē)滾滾向前系宜, 把IBM推向了一個(gè)新的高峰照激。
5 帝國(guó)的誕生
大家也沒(méi)有想到,除了商業(yè)巨頭以外盹牧, 程序員們也會(huì)對(duì)Java王國(guó) 這么熱愛(ài)俩垃, 他們基于Java 開(kāi)發(fā)了巨多的平臺(tái)抽高,系統(tǒng)纷责,工具,例如:
構(gòu)建工具: Ant拧廊,Maven, Jekins
應(yīng)用服務(wù)器: Tomcat踩寇,Jetty, Jboss, Websphere, weblogic
Web開(kāi)發(fā): Struts,Spring,Hibernate, myBatis
開(kāi)發(fā)工具: Eclipse, Netbean,intellij idea, Jbuilder
啄清。。俺孙。辣卒。等等等等。睛榄。荣茫。。
并且絕大部分都是開(kāi)源的 场靴!
微軟眼睜睜的看著服務(wù)器端的市場(chǎng)被Java 王國(guó)占據(jù)啡莉, 豈能善罷甘休港准? 他們趕緊推出.NET來(lái)對(duì)抗, 但我們已經(jīng)不在乎了咧欣, 因?yàn)樗南到y(tǒng)是封閉的浅缸,所有的軟件都是自家的:
開(kāi)發(fā)工具是Visual Studio, 應(yīng)用服務(wù)器是IIS, 數(shù)據(jù)庫(kù)是SQL Server,只要你用.NET魄咕,基本上就會(huì)綁定微軟衩椒。
另外他們的系統(tǒng)只能運(yùn)行在Windows服務(wù)器上, 這個(gè)服務(wù)器在高端市場(chǎng)的占有率實(shí)在是太低了哮兰。
2005年底毛萌, 一個(gè)新的王國(guó)突然崛起, 他們號(hào)稱開(kāi)發(fā)效率比java 快5-10倍喝滞, 由此吸引了大批程序員前往加盟阁将。
這個(gè)新的王國(guó)叫做Ruby on Rails, 它結(jié)合了PHP體系的優(yōu)點(diǎn)(快速開(kāi)發(fā))和Java體系的優(yōu)點(diǎn)(程序規(guī)整), 特別適合快速的開(kāi)發(fā)簡(jiǎn)單的Web網(wǎng)站右遭。
雖然發(fā)展很快冀痕, 但沒(méi)有對(duì)Java 王國(guó)產(chǎn)生實(shí)質(zhì)性的威脅, 使用Ruby on Rails搭建大型商業(yè)系統(tǒng)的還很少狸演。
除了Ruby on Rails ,還有PHP僻他, Python 宵距, 都適合快速開(kāi)發(fā)不太復(fù)雜的Web系統(tǒng)。 但是關(guān)鍵的吨拗,復(fù)雜的商業(yè)系統(tǒng)開(kāi)發(fā)還是Java 王國(guó)的統(tǒng)治之下满哪。 所以我們和他們相安無(wú)事。
2006年劝篷, 一只叫Hadoop的軍隊(duì)讓Java王國(guó)入侵了大數(shù)據(jù)領(lǐng)域哨鸭, 由于使用Java 語(yǔ)言, 絕大多數(shù)程序員在理解了Map/Reduce , 分布式文件系統(tǒng)在Hadoop中的實(shí)現(xiàn)以后娇妓, 很快就能編寫(xiě)處理處理海量數(shù)據(jù)的程序像鸡, Java 王國(guó)的領(lǐng)地得到了極大的擴(kuò)展。
2008年哈恰, 一個(gè)名叫Android 的系統(tǒng)橫空出世只估, 并且隨著移動(dòng)互聯(lián)網(wǎng)的爆發(fā)迅速普及, 運(yùn)行在Android之上的正是Java 着绷!
Java 王國(guó)在Google的支持下蛔钙, 以一種意想不到的方式占領(lǐng)了手機(jī)端, 完成了當(dāng)年J2ME 壯志未酬的事業(yè) 荠医!
到今年為止吁脱, 全世界估計(jì)有1000萬(wàn)程序員加入了Java王國(guó)桑涎,它領(lǐng)土之廣泛, 實(shí)力之強(qiáng)大兼贡, 是其他語(yǔ)言無(wú)法比擬的攻冷。
Java 占據(jù)了大部分的服務(wù)器端開(kāi)發(fā),尤其是關(guān)鍵的復(fù)雜的系統(tǒng)紧显, 絕大多數(shù)的手機(jī)端讲衫, 以及大部分的大數(shù)據(jù)領(lǐng)域。
一個(gè)偉大的帝國(guó)誕生了孵班。
這個(gè)帝國(guó)能生存多久涉兽? 誰(shuí)會(huì)摧毀這個(gè)龐大的帝國(guó)呢?
我不知道, 你呢篙程?
“碼農(nóng)翻身” 公共號(hào) : 由工作15年的前IBM架構(gòu)師創(chuàng)建枷畏,分享編程和職場(chǎng)的經(jīng)驗(yàn)教訓(xùn)。
長(zhǎng)按二維碼虱饿, 關(guān)注碼農(nóng)翻身