Java程序員的錯

Java程序員是有問題的。我使用 Java 編程已經有 10 多年的歷史。同時,我還有過大量的使用其它語言開發的經歷,比如C#, C, C++, Python, Lua, Objective-C 等等,我認爲這些經歷在對我認識 Java程序員的問題上起到了巨大的幫助。很多人說 Java 是一種很糟糕的編程語言。我不同意。Java 語言有它自己的缺點,但我想,很多時候,當你看到 Java 在有些地方讓人很多人不爽時,那本質上不是 Java 語言的問題,而是它被錯誤的使用。

這些年來,在我見過的各種 Java 代碼中,我發現這最大的問題是,寫代碼的人癡迷於把自己當作架構師。他們很喜歡這樣,在我閱讀他們的代碼時,經常會發現這些代碼與其說是去真正的解決一個問題,事實上更像是爲了解決一個問題而規劃的一個藍圖模板。這兩者之間並不是細微的差別。你會看到繼承很深的抽象層和成堆臃腫的樣板式的代碼。由面向對象而誕生的子類超生現象無以復加。你根本無法一眼看明白、理解這些代碼是幹什麼的——你需要一層層深入挖掘,你需要理解它的整套濫用的術語和折磨人的詞彙(“AbstractAdapterFactory”),你必須要把自己當成系統的一部分。我已經記不起來上一次看到一個不是這種情況的 Java 項目是什麼時候了。

導致在 Java 王國裏代碼最終總會變成這樣的原因有很多。Java 語言自身要承擔一定責任。Java 平臺的 API 就是上面說的這些問題的典範,於是,善良的程序員們沿襲標準類庫裏體現出來的編碼規範和風格,將之當作通用的好的編程原則,一下子就誤入迷途。Java 語言還會對程序員強迫施加一種上層的形式主義和囉嗦,以至於最後你不得不習慣了這樣的風格,當看到其它語言的簡潔語法時,反而感覺就像它們都是沒穿衣服的裸體——這就是“斯德哥爾摩綜合症”(譯註:來源於 1973 年發生於此地的一次銀行搶劫案中,一個人質浪漫地被她的劫持者吸引住了)。

面向對象的流行部分原因也是這種心理作用造成的。有越來越多的程序員開始退後一步用整體的眼光認識 Java,他們發現,作爲一種編程模式,面向對象真的是相當的糟糕。然而,Java 是最大限度的根植於面向對象模式,如果沒有面向對象,Java 寸步難行。即使是今天,你仍然能看到大學裏的編程課程嚴重的偏向面向對象,大量的使用 Java 授課,相比起 10 年前、5 年前要普遍的多。

雖然 Java 語言非常的流行,在企業軟件開發裏被普遍的採用,但這一點都無助於 Java 編程質量的提高。我坦白的說,你在各種企業產品裏看到的大量的 Java 代碼都是由非常低質量的程序員寫出來的。

非常糟糕的是,這些問題並不是只體現在代碼上,而是在整個 Java 生態系統上也是如此。不論是你使用的 Java 單元測試工具、依賴關係管理工具,還是模擬框架,即使是很小的 Java 程序,你也逃離不了它周邊龐大的系統。Java 程序員無能爲力——讓他們開發一個小功能,你必然會看到一個繼承 15 層的類工廠(factory)的出現。

今天,我在學習 Gradle 框架,很顯然是因爲最近它在 Android 開發社羣裏很火。Gradle 來自於 Java 世界,所以它繼承了上面我說的所有的 Java 所具有的問題。正像 Tim Bray 最近抱怨的:

“我的瀏覽器打開的是 Gradle 文檔的一頁:第 50 章.依賴關係管理。它有 63 個小章節,劃歸在 10 個一級章節下,這是第 50 章,文檔一共有 65 章(包括五節附錄)。”

Android——如果說除了那些開發企業軟件的人,還有人會在意 Java,那一定是因爲它——它沿襲 Java 的老路,走的更遠。你會習以爲常的發現,在讀一頁 Android API 文檔時,你根本不知道它究竟是在說什麼。當然,最終你會弄明白,你需要繞道弄清楚其它 17 個類才行。什麼?這讓你吃不消?你顯然不具備學習 Java 系統 API 的百折不撓的精神。你會變成一個 Loser。

谷歌公司裏開發 Android 的工程師忙於構築偉大的系統框架,沒有時間解決真正的問題。

我是一個 Android 程序員,我討厭 Java。它讓我很受傷。

英文原文:Java Developers

譯文鏈接:http://www.techug.com/java-developers

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章