Java很傻,但是IDE很聰明

jopen 11年前發布 | 11K 次閱讀 Java

  對于編程語言來說,什么是生產力?我覺得,更高的抽象層次就是生產力。 執行效率很重要,但是在很多情況下,程序員的效率更重要的,而且語言的執行效率是可以發展的。該優化的時候,我們再來考慮優化的事情。 對于語言來說,最重要的是把程序員腦子里的東西,用最高效的方法記錄下來。

  C 語言比機器語言有更高的抽象層次,所以我們認為C語言比機器語言有生產力。 Java 比C語言更抽象,所以我們認為 Java 比C更有生產力。 逐漸的,我們發現,Java 已經滿足不了生產力的需求了。

  在編程語言百花齊放的今天,我們發現各種新出的神奇的語言。幾乎所有了解過(更)高級語言的人都會說: 我靠!還能這么寫?我吭哧吭哧在這里敲半天,人家一句話搞定了? 在人家看來,我就是一個人肉的編譯器,手寫中間語言。。。

  Java 抽象層次太低,導致表達能力太弱。別人一句話的事情,在你這里要講半天。 Java 本身就有太多的重復(duplication),而且缺少一些高級特性。 雖然也在發展,比如說 foreach,比如說 annotation,這都提高了抽象層次。 但是發展的太慢了,這有很多原因,向下兼容性應該是最主要的一方面。

  總之, Java 不是一個生產力語言,表達能力太弱。 而作為 Java 程序員,確實也沒啥語言上的尊嚴了。那 Java 程序員怎么辦?如何保持自信,樹立正確的人生觀價值觀。 或者說,Java 程序員如何提高自己的抽象層次,少做臟活累活?

  學習更高層次的抽象

  了解一些其他高級語言,知道什么樣是好的。 別人一句話信息量太大了,我們要先能聽懂,知道人家說什么,知己知彼(最重要的是知道自己有多搓)。 Java sucks,但是 Jvm 很牛逼,可以了解一些 Jvm 上的高級語言,比如 Scala、Clojure。了解函數式編程、閉包、并發等等。 語言只是表達思想的一種方式,應該更關注你想表達的東西。 到了一定高度以后,新學一種語言,只要了解一下基本發音,就能說個八九不離十,甚至比那種語言的 Native Speaker 還說的好。

  IDE 很聰明

  Java 最大的好處,就是足夠成熟,市場占有率高。 Java 程序員的需求,就是市場的需求。Java 擁有有最成熟的 IDE,一群的商業公司想方設法取悅 Java 程序員。

  Java 程序員的苦逼之處在于,他們做了很多編譯器的活。有個折衷就是,可以把部分人肉編譯器的活,交給 IDE。 讓 IDE 充當編譯器,把你告訴它的話,編譯成中間代碼,也就是 Java。 雖然別人一句話的事情,我這邊還是要說十句。但是現在我們可以告訴 IDE 三句話,讓 IDE 轉成十句。 手打一個基本的循環花了 10 多秒,用 IDE 只需 2 秒。

  如果語言是把人們心里所想的東西表達出來,那么 IDE 語言其實也算一種廣義上的語言了。 而且 IDE 語言還有個好處就是,它與 Java 之間足夠平滑,完全的無縫。

  我們這樣分析一下抽象層次: 人腦 > IDE 等輸入設備 > 編程語言(Java) > 機器語言 or 虛擬機上的機器語言(bytecode)。 人腦是最高級的,想出一個想法只需要一瞬間, 但是轉化成編程語言,則需要很大的精力。人腦和編程語言之間有一個鴻溝。 而一個足夠智能的輸入設備,可以縮小這個鴻溝。 IDE 語言把很多重復瑣碎的操作,設計為原子操作。你僅需要考慮 IDE 的原子操作便可以了。 不僅僅減少敲擊鍵盤的次數,而且可以減少你考慮的細節,提高你的抽象層次。

  所以說, Java 很傻,但是 IDE 很聰明。把人肉編譯器的工作交給 IDE 吧,體驗被伺候的感覺。

  用好 hot key 能不用鼠標盡量別用,前提是有一個好的 IDE(eclipse 很難做到)。

  用好 snippet 不再手寫 for (int i = 0; i < arr.length; i++),而使用 itar + Table。

  用好 refactor 先寫 new Object (); extract variable,自動生成 Object obj = new Object ();而且用好 refactor,對寫好 Clean Code 作用最大。

  用好 quick fix int a = 1, b = 2; 直接寫 int c = add (a, b); 然后 quick fix,讓 IDE 補充參數和返回值。

  我換到 IDEA 也不久,很多想法都很初級,這沒關系,熟練使用 IDE 需要大量的練習。 音樂家每天在家苦練彈鋼琴一樣,我們碼農其實也應該花時間磨練自己最基本的技能。

  就像武俠小說中的武功招式一樣,招式其實就是在一些特定場景下的一系列動作。 比如說對手在我后面距離兩米,我轉身 175 度,使用 80% 的內力斜踢右腳,就可以一招致勝一樣。 武功招式把這一系列動作凝練成一個名字。高手過招,過的是原子操作,細節啥的,都不需要考慮。 甚至有的武俠小說里面高手可以打嘴炮,最后還輸的心服口服。這就是層次。

  我經常做一些 TDD(Test-Driven Development)的 kata, 比如說一個 StringCalculator。 學習這個做法來源于《Clean Coder》 (這本書對我影響非常大,最大的一點估計是程序員每天工作 11 小時,8 小時給公司,3 小時給自己)。 在練習中不斷的精簡每一個動作,每一個動作都做到無可挑剔,并和自己的 IDE 完全融合起來,找到一個最短路徑。 這樣,我們在實際工作中,技由心生,砍瓜切菜,攻城跋扈。

  Intellij IDEA 是一款好產品

  最后回到主題, 我想說,作為一門廣義上的語言來說,IDEA 設計的很好。 原子操作的設計,快捷鍵的控制等等,真的是在用心的做一款(能賺錢的)產品,想碼農之所想。

  之前發過一篇黑 Eclipse 的文章說,Eclipse 沒有 Preference 的快捷鍵。 我指的是沒有“默認快捷鍵”,可配置不是一個好的擋箭牌。 設計快捷鍵需要非常強的規劃能力和一致性,而大部分程序員都沒有這個能力和精力(折騰 vim 自定義快捷鍵超過 10 小時,而且不滿意的同學請舉一下手)。 一般程序員需要的是一套優良的解決方案+可配置。

  還有一個很重要的原因,我喜歡暗色背景。 就像在烈日下搬了一上午磚的民工期待一片云彩那樣,我希望能有一個完美的暗色主題來對得起我四百度的眼鏡。 曾經折騰 Eclipse 的 Editor 暗色背景插件(只有 Editor 區域,其他區域不行),發現與各種 Diff 工具不匹配(Diff 工具沒有暗色背景,直接用深色作為高亮,瞎了),各種不爽,最后又換回來。 一下午過去了,你說啥,生產力?幾乎為零。

  碼農界有很多圣戰,Linux or Windows、Vim or Emacs、Eclipse or IDEA。 碼農一般都是最懶的人,當他知道有另外的工具可以以一種更懶的方式完成自己現在的工作。 他會心向往之。這些圣戰其實不僅僅是口水戰、打嘴炮,往往代表了碼農們對生產力的思考。

  我覺得評價兩個 IDE 哪個好用,這個一般沒有定論,很主觀。不過我覺得有一個方法,讓某一個人練熟在兩個 IDE 環境下的 kata,看他如何做到路徑最短,自己寫的最爽。從這個標準來看,我站在 IDEA 這邊。

  碼農真是容易滿足,不得不說,最近換了個 IDE,感覺自己幸福指數都提升了不少。 我僅用了一周的 IDEA,就已經變成一個 Eclipse 黑。當然了,鼓勵競爭,誰家產品好咱用誰家,后面E家好用咱再換回來。

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