Java長存!12個Java長久佔居主要地位的原因
我們很容易就會遺忘那些曾經在猿群中大熱而又被各種新技術掩蓋直至堙滅的技術的價值。就拿COBOL這個老猿們當年所用的神器來說,就跟條死魚一樣被現代猿基本這麼形容:沒價值,腥臭,過時了,對你沒好處。Java 作為現代猿的中堅力量在這點上可能會成為下一個COBOL。
有關JAVA的技術賣出多少本書已經是一個很久遠的記憶了。現處中年時期的Java語言的用途已經不再出現在各種雜誌的封面上了。JAVA從出生到現在已經19年了,應用開發圈已經開始繞著那些更有吸引力的如“Node.js”,"Objective-C","Dart","Go" 等等類似的新技術轉圈了。Java? 那是Web 1.0時代的一個傳說吧?
從Dice.com網站的招聘資訊你就可以知道押寶在哪。跟iOS相關的開發有2500左右的招聘,Java則有17000多個。Dice的資料不一定能完美的衡量技術的價值,但是在不斷推陳出新的技術推廣壓力下,Java職位是iOS的7倍之多可以說確實是神器了。
也許,相比把私人開發App的收入的30%分給Apple並期盼(更多的是等死)你的App有一天爬上了Top-25List,Java開發可能會給你一個更好的商業計劃。但是實際上,Java一直都要面對一個比怎麼玩鳥砸豬還要大的問題。那就是如何在任意平臺上建立統一平臺並流暢執行的問題。這樣服務端程式猿,客戶端程式猿,嵌入式程式猿所面對的那些平臺不統一的問題都得到了解決。
在我們忘記Java在計算機行業裡所扮演的角色和做出的那些卓越貢獻前,這裡有12個絕對的理由來告訴你Java不但不會和COBOL一樣被堙滅,並且在其後時代中更加壯大。
換句話說:別說這是Java的逆襲,Java一直就在,並且其地位無法撼動。
Java持續佔據主導地位的關鍵原因,第1位:在政治(通常手段低劣)鬥爭中不屈不撓
開始時,技術界從來沒認為Java會成功,因為它的對手太多而且都是“土豪”。儘管如此,Java還是繁榮發展起來。那些詫異Java仍然存在的人們,一定是花了太多時間聽那些對Java懷恨在心的人,而沒有花時間去理解為什麼Java會成功。
微軟是Java第一個面對的強大對手,因為那時MS-DOS提供了通用性,而微軟看到Java是此通用性最具可能性的替代者。Redmond從一開始就對Java惡評不斷,從每個可能方面與其鬥爭(譯註,Redmond,雷德蒙德,是微軟總部所在地,此處代指微軟公司)。在桌面應用方向,Java從來沒有找它需要的發展推動力,部分是因為強大的Java虛擬機器啟動時需要花費太長時間。儘管有些啟動延時,Java應用在Window平臺上還是可用的。
由於一些不明原因,Steve Jobs(譯註,史蒂夫·賈伯斯)從來沒接收過Java,即使是在Mac被除了Adobe之外所有人忽視的年代。Java的相容性可以帶來很多有用的程式碼,但是Apple一直未把Java視作第一選擇。(的確,iOS智慧手機比起我用的Android更流暢,所以也許Steve是對的。)
Java內部的很多鬥爭也給它帶來了巨大痛苦。IBM喜歡Java,但是一直在和Sun鬥爭。IBM將其開發的優秀的IDE工具稱為“Eclipse”的決定,一直沒被Sun的人員欣然接受。Sun也從來沒像IBM那樣深刻理解商業領域。
儘管這些原因,儘管Java創造者也在Java發展中有許多失策之處,Java依然快速壯大,在伺服器應用領域如魚得水,碩果累累,在桌面應用領域滿足基本業務需求。所有技術都需要在政治湍流中前行,但是Java走的更難也更遠,證明了,通常,Java對許多應用都是一個優良選擇。
Java持續佔據主導地位的關鍵原因,第2點:執行緒的魔力
Java虛擬機器的強項之一是多執行緒控制。JVM針對大型多核機上跑數百執行緒的穩定性做了極佳的優化。這也是為什麼其他語言會為了能跑在JVM上面搞出交叉編譯器和模擬器。
Java的這個能力同時也吸引了很多高流量的網站。他們可以在桌上型電腦上搞開發然後丟到伺服器上讓JVM發揮出多核的功效。
Ruby 因為語法的簡潔和原始碼可讀性好成為了Java目前的一個對手。但是當效能成為瓶頸時,Ruby開發人員轉到了JRuby,一個用Java模擬出來的Ruby環境並增強了高負載下的執行緒處理能力。Sun的老猿們在細節上的處理讓JRuby大受歡迎。(譯註:好像多數人都是寫完Ruby程式然後用JRuby打成war丟伺服器上....)
Java持續佔據主導地位的關鍵原因,第3點:Java是初學者的語言
宗教,軍隊和國家興旺都離不開對國人少年時期的洗腦。作為大學AP計算機課程(譯註:高中生可修並計入大學學分的課程。由美國大學理事會提供,就是負責美國SAT的那個機構)意味著很多學生第一次接觸到的計算機語言就是Java。由於這個先入為主的原因,當他們學習其他新的語言時,他們會反觀Java的優點和缺點,就算大部分轉行學其他語言了--雖然大部分學生修完課程就把Java丟一邊了--但是他們在思考的時候仍會受到Java的影響。
Java作為一個教學語言是有它的原因的。有些幼猿不喜歡宣告資料型別,認為好像有人讓你穿個揹帶褲又要系皮帶一樣是多此一舉的行為。這個看上去可能比較抽象,但是為了能讓幼猿們理解計算機的一些原理,這是一個很好的方法。讓幼猿在寫程式碼的時候宣告資料型別,然後編譯器會告訴他們資料型別不匹配而無法編譯時可以讓他們更好的理解計算機的底層原理。
一些所謂時髦的語言已經摒棄了花括號,因為他們覺得維護它們很麻煩。這也許是對的,但是花括號對那些新手是非常有用的,因為這能幫助他們理解巢狀的程式碼塊。花括號幫助新人拆解所有的巢狀。
有些人想努力推廣他們自己的語言,在大多數情況下,他們心愛的語言更自由,並沒有像java那麼多的限制和規則。他們有一個非常好的想法,但是他們忽略了這麼一個事實,就是越簡單,越乾淨的語法會在後期開發中出現明顯的問題。一些人覺得這種“穿個揹帶褲又要系皮帶”方式讓人窒息,但是java在一開始就推動更好的程式設計習慣。當新手經過好的訓練後,他們就可以處理這種自由和危險的程式設計方式了。
Java持續佔據主導地位的關鍵原因,第4位:跨平臺相容性(已經很接近了)
雖然Java並不是第一個提供跨平臺相容能力的語言,但是Java已經成為最受歡迎的(跨平臺語言)。這並不是說Java是完美的——缺少的一個庫或者一個版本不匹配的庫都會導致程式崩潰。你也不能把使用最新的JRE 1.7編譯的需要使用大量記憶體的桌面程式放到一臺Java ME手機上執行。Java並不是那麼相容。
但是Sun以及現在的Oracle已經為程式可以跨平臺使用做了最大的努力。當程式(不能在多個平臺上)使用時,(導致這些問題的)原因通常是可以弄懂的。如果你使用合適的Java版本,並且確保有足夠的記憶體,那麼,(程式)一般可以正常工作。Java程式設計師可以使用他們的桌面開發工具進行編碼,並部署到目標裝置,可能是一臺手機或者一臺伺服器。如果編譯器包含了正確的庫並且使用了正確的版本,程式碼就可以執行。這是一個很可貴的(特性)。
Java持續佔據主導地位的關鍵原因,第5位:在小晶片上的持續成功
Java也許從沒有在桌面領域造就過大型的應用程式,但它卻在移動世界中找到了一片溫床 —— 這是一個爆發了的細分市場。Android平臺從上到下都是基於Java構建起來的,並且它如今的銷量輕易的超過了iPhone。
這一霸主地位並不是新晉的。JAVA ME作為精簡版的語言和VM已經被廣泛應用在許多所謂功能手機之上,那些智慧手機在全世界的數量也幾乎數以百億計。
當你將它們都混合到一起,Java的優勢是就是驚人的。
Java持續佔據主導地位的關鍵原因,第6位:藍光(Blu-ray)
Java曾經被稱為“Oak”,是為機頂盒而設計的語言,Sun想在佔據此市場。事情沒有完全按照計劃發展,但是Java卻在“客廳”中找到了合適的位置。藍游標準是圍繞Java建立的,任何想在藍光光碟中新增額外內容的人,必須得到其Javac編譯器版本。
藍光光碟不止限於存放視訊內容。那些額外特性和互動工具可以使用純Java程式碼修改並增強。藍光光碟是壓縮後的視訊和壓縮後的Java位元組碼的混合。使用藍游標準,你可以實現不少功能。
Java持續佔據主導地位的關鍵原因,第7位:花括號正好能工作
那些像Ruby、Python或CoffeeScript等時髦語言的愛好者們開心的蔑視Java(和C)是怎樣的要求程式設計師們反覆敲打花括號鍵來明確表達程式碼段的開始和結束。括號、花括號、甚至方括號——都是這些人深惡痛絕的。(我本人也非常討厭它們,但我仍然懷念有一些型別的Lisp語言讓你使用一個方括號結束所有內容的程式設計方式。)
但是改變標點符號並不能消除複雜性。如果有用,它也只是隱藏或者掩飾了複雜性。使用像製表符等空白後你只能用直覺去感受那些無法看到的東西。如果if語句只引導了一行程式碼,這樣不會有問題,但是當很多層巢狀時,就很難看明白。當我用Python程式設計時,我發現自己在反覆數這些縮排。只是因為這樣看起來像英文,並不意味著它像理解一句英文那麼簡單。
Java持續佔據主導地位的原因,第8位:Groovy
假如Java開發者必須要有一個帶有動態型別的更清潔更簡單的語法,他們沒必要去執行一種新奇的語言。他們可以使用Groovy,一個帶有前處理器的整潔的利器,它能夠生成出Java位元組碼來。這種語言也完全整合到了Java中,因此你可以在你的Groovy中混入對Java庫的呼叫。就像是編寫Java程式碼的縮略形式。
這一靈活性讓開發工程師得以找到問題的出路。當然Groovy是慢——這通常是在使用了動態方法呼叫的時候 —— 開發者可以一直用Java來重寫重要的費時的核心操作。
Java持續佔據主導地位的原因,第9位:Java虛擬機器
Java虛擬機器是按照執行Javac編譯器產生的那些程式碼來的目的來設計和優化的,但是某個時候開始,開發者們意識到Java虛擬機器也可以執行其他程式碼。只要編譯器們產出標準的Java位元組碼,Java虛擬機器根本不關心是使用的那種程式語言。Haskell、Scala和Clojure的開發者們按這個方式設計他們的編譯器搭上了Java這趟快車。而且他們只是這個由Java虛擬機器產生的生態圈中幾個比較優秀的代表。
吸引力是顯而易見的,Sun/Oracle為建立跨平臺環境而努力,所有其它人從中受益。Sun/Oracle的工程師們消除平臺間差異,並考慮相容性問題,然後所有人可以執行他們想執行的程式。
微軟在建立C#時借用(並擴充套件)了這個創意,為大部分主要語言設計了編譯器,這樣C#虛擬機器就可以執行這些語言編寫的所有程式。C#程式設計師說他們可以用很多不同的語言編寫程式,只要通過一個Windows盒子將其執行在一個虛擬機器上即可。何等靈活!
Java持續佔據主導地位的原因,第10位:NoSQL革命很大部分建立在Java之上
很久之前,資料庫是一個神祕的黑盒子,它儲存資訊並快速有效的應對查詢請求。然後NoSQL革命來臨,程式設計師們意識到他們可以自己編寫自己的資料庫,並根據需求修剪其程式碼。那些最重要的NoSQL工具中很多都是用Java編寫的。Cassandra、Lucene、ElasticSearch、HBase和Neo4J只是一些經常提到的NoSQL選擇。然後還有一些像acid-state等程式,使用Haskell編寫並執行在Java虛擬機器中。
這些工具通常是開源的,可以方便的整合。一些開發者將其獨立執行,另一些人將它們整合在自己的模組比如庫中。不論哪種方式,Java在資料庫層中成為通用語言的情況,保證了Java開發者們的生活更簡單了些。 他們更少擔心由於字元編碼和行結束符帶來的小故障。這意味著Java開發者們可以享受由NoSQL革命帶來的豐碩果實。
Java持續佔據主導地位的原因,第11位:Minecraft遊戲融入00後們的共同情結中
也許布魯克林時尚的非主流們對Java嗤之以鼻,但是Java程式設計師們卻領先一步。在Ruby時尚團正聚集起自己的一群粉絲時,他們之後的一代人卻愛上了Java。為什麼?一個詞:Minecraft。它用Java編寫而成。如果孩子們想要擴充套件該遊戲,他們就需要學習Java來設計其外掛。這保證下一代程式設計師第一個學習的是Java。
Java持續佔據主導地位的原因,第12位:開源
Sun一直是開源領域中的領導者之一,但它卻在完全開放Java的過程中時有猶豫。但這並沒有妨礙Java程式設計師們釋出很多偉大的有著寬鬆開源許可的庫和專案。Apache專案一直都在使用一個沒要求太多回報的許可證來提供優秀的Java程式碼。
Sun在2007年完成了在GPL許可下公開大部分程式碼的工作,從那時開始,它和它之後的新主人Oracle想努力成為它認為的Java的合格管家。當然,這種開放的立場並沒有阻止Oracle將Google拖入一場混亂的法律訴訟中,但是另一方面,Java平臺很大程度是開放和免費的。
討厭它的人很多,但Java持續前行
的確Java有它自己的問題,而且討厭的Java人們也會越來越多, 並將他們的不滿情緒充斥線上上評論區中。Java垃圾回收器會引起程式的小抽風。程式書寫規則繁重,也並不能阻止那些確實差勁的程式碼。註解(譯註:annotation)太複雜。各個特性也不如之前演進的頻繁。花括號增加混亂。其缺點列表很長,但是通常是合情理的。
然而目前還沒有出現一個廣度和深度上可與之競爭的對手。雖然一些抱怨很容易解決,但是解決方案本身會帶來自己的問題。最接近的也許是JavaScript,依靠有閃電般速度的Node.js,它在伺服器領域越來越有吸引力。不過這些創意可以被複制,程式設計師們也可以用其來編寫快速的Java。
在最後,這是Java的優勢之一:它執行所有程式,而且接受改變。如果你需要不同的功能,你可以將大部分庫替換成自己的程式碼。語言是開源的而且靈活多變。不論語言和平臺有什麼限制,都可以相對輕鬆的解決。這意味著Java程式設計師繼續是最具生產力的人員之一。即使相關圖書不在能再佔據暢銷榜,軟體更新也沒之前頻繁,Java將依然存在甚至更加興旺。
原文地址:java-forever-12-keys-javas-enduring-dominance-228504?page=0,0
相關文章
- 12個Java長久佔居主要地位的原因Java
- Java地位無可動搖的12個原因Java
- 谷歌將取代亞馬遜,長期佔據智慧音響市場的統治地位?谷歌亞馬遜
- Java不定長引數Java
- java求學費的增長Java
- 如何推翻JAVA的統治地位?Java
- 思科:Java成91%惡意攻擊的主要原因Java
- 最長公共子序列(JAVA)Java
- Java的方法可變長引數Java
- 一個JAVA程式設計師成長之路分享Java程式設計師
- Java成長之路--一個非科班生的進階之路Java
- 移動應用必定不會長久
- Java程式設計師的成長之路Java程式設計師
- java學習的網站,成長之路Java網站
- 學Java要多長時間?Java
- java 最長迴文子串Java
- java讀取視訊時長Java
- java獲取音訊時長Java音訊
- 長沙Java培訓:JAVA練手專案分享Java
- 長沙Java培訓:Java開源專案分享Java
- Java培訓:長沙Java培訓機構排名Java
- Ceros:未來12個月DDL電視廣告庫存將增長58%ROS
- java 之 給定固定長度根據字元長分割文件Java字元
- Java程式設計師成長之路(為程式設計師量身定製的12個目標)【轉】Java程式設計師
- 密謀:如何推翻Java的統治地位?Java
- 學Java發展前景好的三個原因!Java
- 為什麼要參加長沙Java培訓?長沙Java培訓機構哪家好?Java
- JAVA:用*列印一個空心矩形,長為10,寬為3Java
- 長沙Java培訓:學不懂Java是為什麼?Java
- 長沙Java培訓:Java開源IDE工具分享JavaIDE
- 長沙Java培訓:零基礎小白自學JavaJava
- Java執行緒池的增長過程Java執行緒
- 泥瓦匠 5 年 Java 的成長感悟(下)Java
- 有點長的 Java API 設計清單JavaAPI
- java無重複字元的最長子串Java字元
- JAVA學習,是一條漫長的道路Java
- java 實現 最長公共子序列Java
- 最長遞增子序列-Java 實現Java