我是一名80後碼農,而且生在80後的尾巴。在我這個年齡說20年,是相當沒有底氣的一種狀态。假如我活了100歲,那麼我來說20年,就像抽一根香煙般輕松。即便如此,對于Java,80後是相當适逢其會的一代人。
混亂之治:Java是一個很好玩的語言,能放進書包
對80後而言,Win神是不可避免的。記得最開始接觸Win神就是因為Microsoft Word。中學的計算機老師以傳播它為生,而教學大綱認真地把Word寫進了必考内容,是以造成的後果是,很多人對于電腦的想象力,大概就止于這貨。真正難以避免的,是Win神對于年輕人探知未知世界的一種冷漠和貴氣。
對于成長中的少年,樂趣永遠是第一位的,于是就注定了要和遊戲機結緣,也就注定要認識Java這個單詞。在西西果和聖鬥士版畫橫行的年代,Windows不能帶上街,Java卻可以塞進書包。即使再喜歡星際争霸,這也是一個很好的抗拒理由。
石器時代:Java是一個非常重的語言,讨厭XML
經過高中的奮戰,進了不那麼夢寐以求的大學。我依然雄心勃勃地要“學會程式設計”。那時候Java1.6很火,更火的各大程式設計論壇對于JSP的讨論。總是有人實作了一個功能,然後急切地發表到論壇中。我們做的事情就是把這些代碼搬運下來,運作一遍,開心半天。你說程式設計?那時覺得就是IDE和度娘之間的事。
當時炒得最火的一個概念是SSH架構。有人會說,不會SSH架構你就會失去Java的就業資格。戲劇性的是,直到今天,我依然沒有掌握SSH架構。終于,在那一天準備學SSH架構的時候,百度到了ssh的另一個意思(S-SHell),自此,開始與Linux結緣。
當一個程式設計愛好者遇上Linux,是一種命中注定。在把Linux的幾個發行版重裝了數十次以後,宣布Java實際上存在的一個問題是:服務應封裝,架構是惡魔。它很重,不如C,隻比C++好;對于Web的工作更傾向于PHP,因為它的文法和Shell很像,而Shell腳本是Linux使用者的第三隻手。專心于Linux代表一種分道揚镳:對微軟說再見、對JSP說再見。
黃金時代:Java是一個OOP程式設計語言,還相當純
2011年左右,安卓的概念在圈内已經很火了。當時已經适應了一年左右的C#,剛好面臨擇業問題,果斷轉了APK。有人會告訴你,C#有點像C++。其實C#從設計之初就旨在替代Java。
2011再用Java,有了比較紮實的面向對象程式設計的基礎。至少類,對象,接口,繼承,可通路性這些基本概念能用起來了。那時候意識到程式設計的概念很廣,對于應用程式的目标部署、分析規劃和調試封裝都要有一定的了解。這些了解是在實踐中言傳身教,這種默許的流程論壇給不了,書籍給不了,因為文字本身能承載的東西有限。不僅需要一個徹底了解了程式設計的人做老師,而且還需要不斷地獨立完成許多應用程式并總結。
設計模式是優秀的實踐。對于這類同行意見,不應該存在“吸收還是不吸收”的問題,隻能允許“如何吸收”的問題。
在對“程式設計是在做什麼”有了一定的認識以後,重新啟用了Java。是以用起來有一種恰如其分的感覺。同時發現有一些對Java代碼的處理違背了一些比較好的原則。比如說書籍上的HelloWorld示例,它在Main方法所在的類檔案引入了java.io。對這樣的“可能性污染”的細節也有了點追求。
即便是C也有CRT。Java比C#古董,然而古董并不代表功能缺失,相反,總是能以恰當的方式去實作。Java更好的是保留了用基本的OOP概念組裝複雜邏輯的自由,而不是不斷地給一些五彩斑斓的文法糖。
在文法糖和好封裝之間,傾向于好封裝。Java是一種魔法,有效地克服了C++的繁雜,把複雜問題有條不紊地降解、映射到OOP的基本概念。
白銀時代:Java是一個為碎片而生的語言,短小精悍
2011-2014是APK爆炸式産生的年代。當然很少有人會告訴你的是,這同時也是JSP業務爆炸式增長的年代。VM或許比原生可靠,包括JVM。最關鍵的是VM維持長期可靠性所需要的成本比原生低。經曆了風風雨雨之後,Java終于成了資本主義的代言人。
這一階段,Java嚴重依賴xml的問題逐漸暴露出來。Ant不再勝任項目管理,海量的Java類需要簽入、簽出。當需要依靠一種語言來勝任整個業務的時候,僅僅依靠Java也有點力不從心。當然你可以高高興興地純手工項目運維,這是一種選擇,還有自動化運維的選擇。
Java以難得的語言單一性維持着一朵雲帝國。在這朵雲中,全部是小水珠一樣的Java類。
玄鐵時代:Java不是一個人性化的程式設計語言,WTF
前期對于應用建構的了解是,應用建構是一個機械的過程。當UX成為一個分工出現後,對稱地,人們開始考慮程式設計的人性化問題。
曾經的文學程式設計不僅屬于文藝青,而且隻屬于文藝青當中的技術狂。随着越來越多可定制的選擇出現,Java不人性化的一面被揭露了出來。
首先是沒有一個完美的IDE(私以為最好的Java IDE是slickedit,,,)。Eclipse界面的醜陋性和偶爾在協作上出現的龜速,對于人性化程式設計是地獄。然後Eclipse快捷鍵是混亂的,最起碼不如Vim或者Emacs這樣有規律,前者的文法着色和字型渲染很醜。
真正的原因在于Java語言本身。文法糖是人性化程式設計大力吹捧的東西,而Java缺乏銀彈。好封裝比文法糖重要的觀點需要修正:從來沒有好封裝,應該多用文法糖。
後Java時代:Java并不唯一,圈子隻是亞文化,善建重行
在程式設計語言聖戰中,力挺Java的人在改變。不僅僅是他們有可能不再力挺Java,更重要的原因是他們在變老。世界既是年輕人的,也是老年人的,歸根結底是現在的年輕人的。一門程式設計語言的價值,更多地依賴于産業鍊來得到展現。
現在來讨論SSH架構,就像讨論STL。它重要嗎?它曾經很重要,它曾經見證了一些人的神聖,和另一些人的冒失。它重要嗎?它或許不再那麼重要,重要而非必要。
很顯然,面向money程式設計(Money-Oriented Programming)更為世故,也更為明智。可能會因為換一份工作的原因,而換一門程式設計語言。自己應該有一個喜歡的語言,力挺自己的項目/fork。更重要的是以應用為機關攢齊建構技術,而不是抱着一個詞彙,亂射批評之箭。
Java即将經受的一個大沖擊或許不會是Ruby,而是來自終于開源了的微軟。即便微軟的開源還是那麼扣扣索索。
總結
或許從來就不是個技術問題,隻是個單一的圈子問題。