1. 程式人生 > >Java的第20年:Java和我的故事

Java的第20年:Java和我的故事

分享一下我的偶像大神的人工智慧教程!http://blog.csdn.net/jiangjunshow

  Java技術誕生於1995年的5月23日,這樣一個在程式設計領域長時間佔據統治地位並且擁有最好的生態系統的語言起初只是太陽微系統公司(Sun Microsystems)一個失敗的機頂盒專案的附產品。Java的第一個正式版本釋出於1996年1月23日,在這個最原始的Java版本中,類和介面加起來總共只有211個,那時候的Java並不完美也不強大,但是由於它緊緊的抓住了當時最時髦的兩樣東西——網際網路和瀏覽器,並擁有完美的平臺可移植性,再加上計算機領域的全能奇才James Gosling(Java技術的創始人之一,被譽為Java之父)對它的炒作和推廣,這個語言用了大約5年的時間就在

TIOBE釋出的程式語言排行榜上坐上了頭把交椅,達到了它的人生最巔峰。盛開得再絢爛的花也免不了有凋謝的時候,日中則昃月滿則虧,Java這朵程式設計語言中的奇葩也擺脫不了自然的規律,從下面的圖中你可以發現,Java語言在經歷了它的人生巔峰以後已經走了很長時間的下坡路,尤其是在甲骨文公司(Oracle)收購了太陽微系統公司以後,雖然Java的生態系統依然良好,但是語言本身已經江河日下。今年是Java誕生的第20年,寫這樣的一篇文章紀念那個曾經讓我執著和瘋狂的Java,也紀念那個從單純到迷茫再回歸單純的我。
這裡寫圖片描述

Java的編年史

1995年

  • Java誕生

1996年

  • Java版本:JDK 1.0
  • 釋出時間:1996年1月23日
  • 開發代號:Oak
  • 類和介面的數量:211
  • 新特性或功能:初始版本
  • 我的故事:1996年我以全校第二的成績考入了我們當地的省重點高中,在小地方即便是重點中學,硬體條件也是沒辦法跟大城市比的,但是值得慶幸的是學校還是為我們高一學生開設了計算機課。那時候上計算課純粹是好奇和好玩(能在DOS系統下玩拷貝在3.5寸軟盤中的五子棋和足球遊戲),說實在的連打字都沒有怎麼練好,但是那一年我第一次接觸到了程式設計的概念,知道可以用命令或程式碼控制計算機做我想讓它做的事情。還記得有一次上課的時候,老師出了一個BASIC的程式設計題讓大家寫程式碼,用窮舉法找出一個問題的答案,當時全班就我和我的同桌(此君大學選擇的專業以及現在從事的工作都和計算機相關,目前是深圳衛視做後期製作的負責人,這也算是三歲看老)寫出了正確的程式碼。在期末的計算機考試中,我和同桌都獲得了A級(好像有ABCD四等,A當然是最好的),這個A成為了我後來填寫高考志願時選擇了計算機專業的原因之一。

1997年

  • Java版本:JDK 1.1
  • 釋出時間:1997年2月19日
  • 開發代號:無
  • 類和介面的數量:477
  • 新特性或功能:
    • 改進AWT事件模型
    • JavaBean
    • JDBC(Java資料庫連線)
    • 內部類
    • RMI(遠端方法呼叫)
    • 反射(只支援內省)

1998年

  • Java 2企業平臺釋出
  • Java版本:JDK 1.2 (Java 2)
  • 釋出時間:1998年12月8日
  • 開發代號:Playground
  • 類和介面數量:1524
  • 新特性或功能:
    • 集合框架
    • JIT編譯器
    • JFC(Java基礎類庫)
    • JDBC可滾動結果集、BLOB、CLOB、批處理

1999年

  • SUN公司釋出Java的三個版本:標準版(J2SE)、企業版(J2EE)、微縮版(J2ME)
  • 我的故事:這一年,我參加了在中國幾乎算得上是人生分水嶺的高考。那年對個別老師的反感,對填鴨式教學的叛逆以及其他種種原因讓我的內心非常的浮躁,在這種狀態顯然無緣自己的第一志願,最終被四川大學錄取,專業是電腦科學與技術。高考結束後,為了度過這個漫長的沒有作業的假期,在朋友介紹下去了一家計算機培訓學校學習,學費100元。說是學校,其實就是一個老師兩個房間的環境。那時候,計算機對我以及周圍的很多人來說仍然是神祕的、不會經常觸碰到的東西,在那裡學習的東西基本上就是五筆打字而已。那是一段愉快的經歷,因為我很快和那家培訓學校的唯一的老師“王哥”成為了朋友,因為我去了兩天後基本上就能解決其他學員的所有問題,成了他最好的助手並經常幫他看店。“王哥”是個非常聰明的人,邏輯思維能力極強,這一點從他的象棋水平就能看出來。他用一年的時間自學了七門計算機課程,然後就在這家學校當了老師。一個月後,當我離開家到成都上大學的時候,我從他那裡學到了如何用程式控制計算機發出聲音。

2000年

  • Java版本:JDK 1.3
  • 釋出時間:2000年5月8日
  • 產品代號:Kestrel
  • 類和介面的數量:1840
  • 新特性或功能:
    • 內建HotSpot JVM
    • 改進RMI對CORBA的相容性
    • 動態代理相關類
    • Sound API
    • JNDI
    • JPDA(Java平臺偵錯程式體系)
  • 我的故事:2000年,我在大學裡面學習了第一個有生產力的程式語言也是我迄今為止最鍾愛的程式語言——C語言。學習C語言的過程並不輕鬆愉快,原因一:以前學到的一點點BASIC對學習C語言基本沒有幫助,原因二:教C語言的老師的水平實在不敢恭維,很多時候我們有問題都更願意請教我們班的高手(他現在在國家安全域性工作,在我眼中他算得上是一名真正的黑客)。我現在都清楚的記得最後一次C語言課的時候,老師直接從教材的85頁講到了216頁,這一百多頁中包括了二維陣列、函式、編譯預處理、指標、結構體等重要內容,是的,他就用了一節課把這些東西強加給我們。當時我們用的教材是譚浩強老師的《C程式設計》,很多高校都選擇了這本書,當然我個人對這本書的評價是比較低的,因為這本書確實沒有教給我任何有用的東西,當然最可恨的是它有一本配套的習題集,上面的很多題目其實都沒有所謂的標準答案(因為在不同的開發平臺和作業系統上會得到不同的答案),但是譚浩強老師假定了我們一定會使用Turbo C(一個古老的16位環境下的C程式整合開發環境)。在這一年的下半年,我開始了我的初戀,她希望我好好學習程式設計並把我學會的東西教給她,於是有一次逛書店的時候,我找到了一本叫《Java 2傻瓜書》的書,就是這本書帶著我步入了Java的殿堂。那個年代,周圍的同學們關注更多的是VC++(微軟的Visual Studio for C++)以及MFC(微軟基礎類庫)的東西,認為那是在我們畢業的時能夠給我們帶來高薪的技術,但是我只看了半天就被那些醜陋的API和噁心的Macro給搞暈了,於是我下定決心不走尋常路(直到現在,我都認為當時的決定非常正確)。那時候我對Java的瞭解其實很少很少,但是那本傻瓜書中一些精美的Java程式碼卻深深的吸引了我。

2001年

  • Nokia宣佈到2003年將出售1億部支援Java的手機
  • 9月24日,J2EE 1.3釋出

2002年

  • Java版本:JDK 1.4
  • 釋出時間:2002年2月26日
  • 產品代號:Merlin
  • 類和介面的數量:2723
  • 新特性或功能:

  • 計算能力提升
  • XML處理
  • Logging API
  • JDBC 3.0 API
  • 斷言
  • 支援正則表示式
  • NIO
  • 支援IPv6
  • 圖形I/O API
  • Java Web Start
  • Preference API
  • 我的故事:這一年我和初戀分手了,痛定思痛,我告訴自己不應該再浪費時間去做那些沒有結果的事情,於是我結識了我們年級的程式設計第一人“阿牟”,那時候他對Java已經有很深的認識和研究了,他帶著我把我之前瞭解過的Java知識在一個專案中實踐了一遍,這時我才算真正感受到了程式的魅力,真正學會用程式去解決問題並在程式碼中表達自己的精神和情感,這是我大學生涯最重要的事情之一。這一年的10月,“阿牟”邀我一起作為創始人在四川大學成立了Java技術俱樂部,成立伊始我們就接納了400名以上的會員,此後我們幾個負責人輪流為大家講解如何用Java技術進行軟體開發,同時也為會員提供SCJP(SUN認證的Java程式設計師)和SCJD(SUN認證的Java開發者)考試的培訓和輔導,做這件事情不僅提升了自己也幫助了別人,很有意義。

  • 2003年

    • 我的故事:這一年我被保送到西南交通大學讀碩士研究生,本來是一件挺高興的事情,但是由於家裡的經濟狀況出現了嚴重的問題,讓我怎麼也高興不起來。於是我開始尋思著出去做點事情來賺一些外快。這一年的暑假,我接下了人生的第一個私單,為一家公司寫一個做資料處理的程式,用的是J2ME中的kXML API在手機上用XML對語音資料進行編碼和解碼。至始至終我都沒有和這家公司的任何人見過面,以至於我其實並不能準確的叫出這家公司的名字,所有的需求和程式碼都是通過郵箱來傳遞的,在郵件中,這家公司的名字叫“Li-Tong Communication”。遺憾的是當時用的郵箱以及當時寫的程式碼已經再也找不回來,不然還能留下一些美好的回憶。那一年,我結交了第二位女友,她把她的電腦和PDA都給了我,讓我有了謀生的工具,並且幫助我度過了經濟上最困難的時候,謝謝她。

    2004年

    • Java版本:Java 5
    • 釋出時間:2004年9月30日
    • 開發代號:Tiger
    • 類和介面的數量:3279
    • 新特性或功能:

    • 泛型
    • for-each迴圈
    • 自動裝箱和拆箱
    • 列舉
    • 可變引數
    • 靜態匯入
    • 註解
    • java.util.concurrent
  • 我的故事:為了在學習和科研之餘不荒廢Java,我自己做了一個數據庫的GUI(圖形使用者介面)工具,能夠以視覺化的方式操作資料庫中的表和檢視等,也能夠執行SQL(結構化查詢語言)語句並顯示執行結果。雖然沒有不是什麼有技術含量的作品,但是裡面卻包含了我對Java的熱愛。後來這個作品被我當作研究生中期遴選的作業提交了,不過它並沒有獲得什麼好評,因為那時候從老師到學生根本不關注Java技術,Java在行業中已經火了但是在高校中還沒有火,等到Java在高校中火了,Java在行業中已經顯得有些明日黃花了(這算是從某個方面折射出中國高等教育的失敗)。於是,這一年我最好的作品就被忽略掉了,後來我也沒有繼續去改進和維護它。這一年我找到兩家軟體公司做兼職程式設計師的工作,同時還在一家培訓學校做兼職講師,生活狀況終於得到了一些改善。這一年,我遇到了我現在的妻子,初次的印象是美麗、勤謹、善良。


  • 2005年

    • SUN公司宣佈,Java三個版本更名為Java SE、Java EE和Java ME
    • 我的故事:這一年我被保送繼續攻讀博士研究生,我希望在這個過程中找到Java程式和科研工作的交集。當時,我試圖用Java為我們要做的一個路由器測試系統開發一套測試配置和管理平臺,但是老闆否決了我的方案,因為他更信任有效率的C語言以及平臺無關的測試語言TTCN-3。現在想起來,當時我並不應該放棄我的想法,我應該做一個快速原型然後展示給老闆看,並說服他接受我的方案。無數的事實證明,很多時候我們缺少的並不是idea,我們缺少的是行動力(執行力)。這一年我繼續著學習、科研和兼職工作,並從中獲益良多。當然,給我啟發最多的是我的室友“小胖子”,當時他的專業是密碼學,我的專業是計算機網路,我們經常“秉燭夜談”,交換我們在自己研究領域的一些研究心得,同時也談人生、談理想、談情感、談國家大事,我們都期望著自己做的事情對國家和社會有所貢獻,就如同很多知識分子那樣“位卑未敢忘憂國”,那是一段非常美好的時光。“小胖子”現在是中科院研究生院的老師,我想他現在應該不經常寫程式碼了,但他仍然是我很佩服的科研工作者和程式設計師。他的乒乓球技術一直都沒有超過我,就如同我的程式設計技術從來沒有超過他。

    2006年

    • Java版本:Java 6
    • 釋出時間:2006年12月11日
    • 產品代號:Mustang
    • 類和介面的數量:3793
    • 新特性或功能:

    • 支援指令碼語言
    • Compiler API
    • JDBC 4.0 API
    • 逃逸分析
    • WebService增強
    • 安全相關增強
  • 我的故事:這一年因為一些原因我去了廣西,廣西省會南寧的軟體產業在那個時候應該是不怎麼景氣的,沒有幾家專業的軟體公司(現在什麼情況我就不知道了)。當時我的想法是做一家專業的軟體公司並讓這家公司走進大學,或者讓大學生走進這家公司來參與軟體專案,把公司的專案經驗傳授給計算機相關專業的大學生,幫助他們成為更優秀的職業人。第二年我的另一個朋友也有這樣的想法,於是邀我去他們公司做專案經理同時也擔任技術顧問。但是我們的想法在操作上有著重重障礙,到我離開廣西的時候,理想仍然沒有照進現實,留下了一堆的遺憾。但是,這一年我清楚的感覺到我能夠做一名優秀的職業培訓師,我覺得我有能力傳道、授業、解惑。當然,這可能只是當時的一種錯覺。接下來的很長一段時間,我在成都和南寧這兩個城市之間無數次的往返,為了學業、工作和將來。那段時間,我在乘坐各種交通工具的過程中結實了幾位朋友,其中有兩位後來還介紹了專案給我做,這也讓我的經濟狀況一直保持良好。


  • 2009年

    • SUN公司釋出Java EE 6
    • SUN公司被Oracle公司收購
    • 我的故事:這一年是我從最好走向最糟糕的一年。由於上一年的努力,我的幾篇科研論文被國際會議錄用了,於是我有幸在一堆來自世界各地的科研工作者跟前用我不算標準和流利但也不影響交流的英語向他們講述我的研究成果並接受他們的提問和質疑。這一年,我完成了我的博士論文,但是我突然間發現,從2003到2009年的六年時間,我交出的竟然是這樣的一份答卷,如果一篇博士論文就是這樣的水準,對自己所從事的領域毫無貢獻,這樣的論文還不如付之一炬。我開始重新思考我要的到底是什麼樣的生活,我究竟要做一個什麼樣的人!?本來一切都很順利的生活開始悄悄的發生了改變,我變得懶散和消極,開始逃避問題,不敢面對困難,我用各種方式欺騙和麻醉自己,這讓我失去了原來的善良、樂觀和從容。這一年我沒有誠實的面對自己、面對朋友、面對親人,自然也就傷害了自己,也傷害了朋友和親人,就像朴樹在他的《平凡之路》中描述的那樣:”我曾經跨過山和大海,也穿過人山人海;我曾經擁有著一切,轉眼都飄散如煙……;我曾經毀了我的一切,只想永遠的離開;我曾經墮入無邊黑暗,想掙扎無法自拔……”。

    2010年

    • Apache宣佈退出JCP(Java執行委員會)
    • 我的故事:這一年生活給我的打擊就如同Apache退出JCP給Java世界的打擊一樣,不過都是過去的事情了,過去的不愉快也算是一種幸福!這一年我用了半年時間頹廢,又用了半年時間從頹廢中走出來。其實後來總結這一年的時候,我清楚的知道,不是生活給了我打擊,而是我沒有用正確的態度去面對生活。這一年我喜歡上黃易的小說《尋秦記》,趙雅死之前和項少龍的那段對話是我最喜歡的,"看!這大雪多麼美麗,把人世間一切醜惡的事都淨化了……",我喜歡這段文字是因為我也希望有一場大雪能夠將我徹底的淨化。那一年,不太會下雪的成都真的下了雪。Thank god almighty!

    2011年

    • Java版本:Java 7
    • 釋出時間:2011年7月28日
    • 產品代號:Dolphin
    • 類和介面的數量:4042
    • 新特性或功能:

    • switch的增強
    • 鑽石語法(泛型推斷)
    • 異常的改進
    • JVM多語言支援
    • TWR(try-with-resources)
    • NIO.2
  • 我的故事:終於走出了陰霾,我開始像以前一樣把自己的生活安排得滿滿的,但是我也清楚的知道自己已經過了而立之年,生活狀態卻仍然是隨遇而安的,這是一個大問題。這一年我自己接了專案來做,也帶了一些學生,教他們用Java寫程式做軟體,同時也在程式碼中表達自己的精神和情感,就如同我當年一樣。 這一年,我結識了一位優秀的程式設計師“二萬”,他對程式設計充滿了熱情,對程式碼有著近乎於苛刻的要求。除了寫程式碼,其他時候他基本上都犯二,所以才有了“二萬”這樣一個光榮的綽號。我確信他是一位優秀的程式設計師是因為他有良好的編碼習慣,我現在仍然堅信一個程式設計師是否優秀跟他做過什麼樣的專案沒有必然聯絡(現在有很多面試官卻經常拿這個說事),也就是說即便你參與開發過像12306那樣牛逼的系統,也不能證明你的水平有多麼厲害,你可能仍然是一隻菜鳥或者小白。正所謂,善戰者無赫赫之功。


  • 2014年

    • 釋出時間:2014年3月18日
    • 產品代號:無
    • 類和介面的數量:尚不清楚
    • 新特性或功能:
      • Lambda表示式
      • 集合的流式運算
      • 函數語言程式設計
    • 我的故事:在2011年到2014年的兩年多裡面,Java一直都很沉寂,很多Java程式設計師在千呼萬喚中等待Java 8的出場。其實我對Java 8沒有什麼期待,因為我堅信像Oracle這樣以利益為核心的公司不會在Java上面投入多少力量。但是我自己在這兩年多裡卻是變化很多,2013年我結婚並有了小孩,妻子就是九年前遇見的她,她不再像當年初遇時那般年輕可愛,但是卻依然美麗善良。我們女兒的名字是1和0的諧音,這一個位元的兩種狀態記錄了每個程式設計師的艱辛與驕傲。

    2015年

    • 我的故事:Java又回到了程式設計排行榜的第一位,但是在Java的第20年,我暫時告別了Java,不再是一名Java程式設計師……

    對Java技術的一些思考

      2010年以後,我對Java的未來總體態度是比較悲觀的,因為就像上面說的那樣,作為全球首屈一指的軟體公司,Oracle注重的是利益,Oracle收購Sun要拿下的絕對不是Java,而是Solaris以及它帶來的伺服器產品市場。而在完成收購以後,Oracle清理了Sun很多管理精英和優秀的工程師(包括Java之父James Gosling),從惠普挖來一個人品並不怎麼好的人接手了Sun的硬體生命線。在Oracle收購Sun的第二年,Apache就宣佈退出JCP,原因當然是Oracle將開源世界對Java的貢獻拒之門外,要獨自控制Java平臺。同年,Oracle還跟Google幹上了,告Google的Android系統侵犯了Java相關智慧財產權。如果我沒有記錯,Oracle在2012年日銷售額就達到了近1億美金,但是隻要Oracle的市值沒有超越微軟,拉里·埃裡森的個人財富沒有超過比爾·蓋茨,他就不會停止他追逐財富的腳步,這些都無可厚非,就像卡爾·馬克思所說的"資本來到世間,每個毛孔都流著血和骯髒的東西"。作為一個Java程式設計師,真的不願意看到Java就這樣走上一條通往沒落的道路或者最終被Oracle毀掉。當然也沒有必要因此而沮喪,至少目前Java的生態系統還是非常良好的,無數的工具、框架、產品都是基於Java的,就像有人說的"像Java這樣的開源技術就如同百足之蟲死而不僵",所以沒有必要擔心自己的職業生涯會就此終結。我經常跟自己的學生講:"重要的不是技術細節,而是技術背後的思想",如果你在學習和使用這門語言時,關注得更多的不是某些API或框架,而是這些API的設計理念以及框架背後的指導思想,就算不使用Java做開發,你仍然可以是一名優質的程式設計師。不管TIOBE釋出的資料還是作為一個職業人的直覺,我們都能感受到程式語言時下流行的趨勢是動態語言和函數語言程式設計,只要想想最近幾年JavaScript有多麼火爆,新生貴族Swift有多麼受寵,Java 8為什麼要引入Lambda表示式,這個結論就不應該被質疑。當然,我個人最希望看到的Java的改變包括:真正的泛型(不是糖衣語法)、傳引用(方法呼叫不僅僅是傳值)、元組、型別推斷、可選擇的垃圾回收機制(可以讓程式設計師執行顯示的記憶體釋放操作)、微核心等。


    對自己的一些思考

      每次回想自己求學和工作的經歷,內心真的是五味雜陳。一直以來,我還是很認真很努力的生活、學習和工作,除了被頹廢掉的三十歲那年,但是到三十好幾的時候還在過隨遇而安的生活,究其原因其實就是缺乏生活計劃和職業規劃。以前在新東方學習的時候,新東方的創始人之一徐小平先生曾經說過"有計劃的人生和沒計劃的人生是截然不同的"。現在想想,我的一位好友(以前在中央電視臺主持《同一首歌》,現在應該是在天津衛視的《非你莫屬》做主持)他從中學時代起就對自己的生活和將來要做的事情有著長遠的規劃,在高考的時候也毫不意外的考上了北京廣播學院(現在叫中國傳媒大學),當然作為朋友我知道他為此付出了多少努力,但是更讓我感慨的是他的執行力,為了實現自己職業規劃所展示的強大的執行力。以前他每次在給我的賀年卡上簽名的時候都會提醒我要好好儲存,說這個簽名將來很可能值一百萬,雖然是句玩笑話,但是他一直都在向著這個目標前進,百度百科對他的介紹是"內地主持人、歌手、演員",這些其實都在他當初的規劃之中。很多時候我們缺的真的不是時間、金錢、外部環境、各種資源,我們欠缺的是高瞻遠矚的規劃和強大的執行力。作為一個搞IT的人,在現在的年紀來討論這個問題似乎有些荒唐和可笑,但也算是"知恥近乎勇"吧,今年我一定會好好的為自己做一個職業規劃和一個恰當的選擇。


    致謝

      我覺得我必須要先感謝我的妻子,因為她給了我家的溫暖,讓我還能夠有閒情逸致坐在這裡用部落格記錄和總結過去,將自己的所想所感分享給大家。我必須感謝我的女兒,因為我把本該陪伴她的時間用來學習和寫部落格了,我會試著慢慢減少這些時間或者至少不佔用陪女兒的時間,相信我。
      感謝我讀博士時的導師曾華燊教授,他是一位真正的學者,也是計算機網路領域真正的專家。他在英國倫敦大學和國家物理實驗室(這是牛頓曾經工作的地方)學習和工作期間所獲得的成就是很多所謂的專家學者永遠也無法超越的。他從不隨大流,對任何問題都有自己深入的分析和獨到的見解,他也是一位敢於說實話講真話的人,有知識分子的責任和擔當。可惜因為各種原因,我讀書的時候跟在他身邊學習的時間太少太少,但學到的那些皮毛也讓我受益良多。
      感謝我的室友路獻輝博士(前面提到的“小胖子”),他把他會的東西無私的分享給了我,他是個低調但是學習和科研能力都很強的牛人,聽說近幾年的歐密會上都有他的文章,真的很厲害!衷心希望他不管是當老師還是做科研都能夠取得更好的成就。
      感謝我的多位師兄曾給予我無私的幫助。感謝所有曾經傷害和幫助過我的人。

    分享一下我的偶像大神的人工智慧教程!http://blog.csdn.net/jiangjunshow