為什么我喜歡Java

jopen 10年前發布 | 12K 次閱讀 Java

我現在的老板使用一個在線測試系統來篩選在線申請職位的求職者。測試的第一個問題很膚淺,僅僅是為了讓求職者熟悉一下這個系統的提交和測試代碼的流程。問題是這樣的,寫一個將標準輸入拷貝到標準輸出的流程。求職者可以使用任何他們喜歡的編程語言來實現這個程序。

有時候我們也會遇到在這個測試中得零分的求職者。當我看到他們連最膚淺的問題都答不出的成績時,我的第一想法是,這并不反映出求職者有多差勁。很顯然,這個測試系統本身太難使用才導致求職者甚至不能提交成功最簡單的問題,所以失敗歸結于測試系統而不是求職者。

但是當我看求職者未提交成功的代碼的時候,不止一次的(至少這一次)發現——不是測試系統的錯。而是另一個甚至不會發生在我身上的問題:求職者提交失敗是因為他們試圖使用Java語言來實現這個程序。

我記起了Dijkstra的說法——“教授BASIC語言簡直是在犯罪。”當看到求職者被Java搞的焦頭爛額的時候,我在想是不是這個言論換成Java的話同樣適用.

我不太確定,有可能還是這個測試系統的錯;有可能Java程序員具備我們用的上的有價值的技能(拋開他們不能再很短的時間內解決一個膚淺問題不說的話)。我可能改變主意,就在這時,我感到擔憂。

當你學習Perl, Python, Ruby, 或者 Javascript的時候,你學到的只是用哈希表解決問題的一些技術,這些僅僅稱得上是語言的一部分。當你學Haskell時,就像是在學習一種用懶惰 的清單和單元來解決問題的技術。這些強大的多功能的工具是編程語言最重要的地方。

但是當你學習Java的時候,對于很多問題解決起來都沒有強大的語言特點來供你使用。相反,你將會把時間花在用編程語言解決問題的技術上。Java 也有哈希表,但是從總體上來看,它們只不過是巨大的Collections庫中的一種,和其他的種類淹沒在Collections 的庫中。而且也沒有什么理由去了解并學習那些東西。優秀的Java課程可能傾向于分析Collections中有用的部分,但是,由于哈希表只是庫的一部 分,所以很難看出跟AbstractAction或者zipOutputStream這種類比起來有什么重要的。

我是一個在不同的組織工作了3年的專業Java程序員。我的意思是有時候我會用Java語言來實現我的想法。我經常感到痛苦和刻薄,而且我也承認我 脾氣暴躁,殘酷,消極,所以對我來說,狂熱的喜歡一件東西是很困難的。曾經我試圖寫一篇關于Blosxom的好文章,在2006年發布在我的博客上,最后 失敗了;人們以為我是在進行批評,我不得不又寫了個續篇來澄清,但是人們仍然認為我在批評Blosxom。因為這片文章對Java刻薄的批評讓人困惑。我 必須聲明:這篇文章中關于Java的一切內容都是持肯定態度的,并且也應該被接受。

我真的喜歡Java。

我很高興能有有用Java編程的經歷。我喜歡在Java編程主要因為我發現這個過程是很輕松的。如果使用一門不好的像是Fortran或者csh這 種編程語言的話,你會在每一件事上面苦苦掙扎,開發過程中還要不斷同這門語言做斗爭。使用好的編程語言卻是完全不同的體驗:利用語言的強大之處,使函數的 功能最大化,用最簡潔的表達方式來實現代碼。

Java既不是一門好的語言,也不是差得。算得上一門中等的語言,Java中沒有掙扎。使用Haskell或Perl時你時常擔心是不是應該用最簡 潔、最高效的方式。在Java中就不必考慮這些,因為最簡潔、最高效是不可能的。無論你做什么,怎樣去努力,代碼都會變得普通、繁瑣、冗長、臃腫,你要做 的就是把握住方向,將這些重要的大篇代碼從鍵盤中打出來如果最后的代碼比用Haskell寫的長十倍,也沒有關系,因為IDE將會幫你處理掉一半,但是你 仍要為另一半付出代價。

所以你改變了心態,不管薪水如何了,也不再擔心寫出的代碼是預先設計好的兩倍之長有多么糟糕。你也許不能解決大型的問題,但是你可以參考一本書來解 決中等問題,這一行為又導致了更長的java代碼,但是你仍能領到薪水。你是一個碼農,你的工作就是寫代碼。你寫了很多代碼,所以你做好了自己的工作,每 個人都皆大歡喜。

你將不會做出任何絕妙的東西,但是同樣,你也不會做出很糟糕的東西來。項目可能失敗了,但你可以將失敗歸結于別的地方。畢竟,你用10000行代碼 寫了576個類,表面看來這些都是必不可少的,所以你做好了自己的本職工作。誰都不會責備你為什么要用576個類而不是50個,因為在Java里面僅僅用 50個類是不可能的。

(不同的語言有不同的失敗模式。比如Perl,項目失敗可能是因為你設計并實現了一堆廢話,但是有一個萬能的變通方案:你可以將項目繼續下去,等它 變得足夠大時交給別人,然后出錯的話責任就會歸咎于別人而不是你。在Haskell這么做的話,有可能在第一個月就被炒魷魚。)

所以是的,我喜歡用Java編程。這樣可以從寫高質量代碼的責任中解脫出來。我很高興不必擔心我所做的是否優秀,或者我寫的代碼是否易讀、易維護。代碼變得臃腫,當然,這不是我的錯。雖然一切都出于我手。

所以我喜歡Java。但是我不會選擇這門語言來應對在線測試,除非分數靠代碼的行數來評定。在測試中,你需要完成的快速,所以你需要優化代碼來使它們簡潔并且表達清楚。Java意味著很多東西,但從來和簡潔、表達清楚無關。

當我看到可憐的求職者苦苦掙扎了15分鐘14秒,試圖用Java程序將標準輸入拷貝到標準輸出,最終放棄的時候,我為他們昂貴的教育感到悲哀,他們沒有學會更好用的工具,或者除了在Java中受盡折磨的任何東西。

作者:Mark Dominus 譯者:賴信濤 原文鏈接:Mark Dominus

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!