Java很傻,但是IDE很聰明

weakish發表於2014-04-03

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

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程式設計師。

Intellij IDEA

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家好用我們再換回來。

關於作者

李先Loki,網易惠惠網工程師。


via 伯樂線上

相關文章