對於編程 語言來講,什麼是生產力?我以爲,更高的抽象層次就是生產力。 執行效率很重要,可是在不少狀況下,程序員的效率更重要的,並且語言的執行效率是能夠發展的。該優化的時候,咱們再來考慮優化的事情。 對於語言來講,最重要的是把程序員腦子裏的東西,用最高效的方法記錄下來。程序員
C語言比機器語言有更高的抽象層次,因此咱們認爲C語言比機器語言有生產力。 Java比C語言更抽象,因此咱們認爲Java比C更有生產力。 逐漸的,咱們發現,Java已經知足不了生產力的需求了。編程
在編程 語言百花齊放的今天,咱們發現各類新出的神奇的語言。幾乎全部瞭解過(更)高級語言的人都會說: 我靠!還能這麼寫?我吭哧吭哧在這裏敲半天,人家一句話搞 定了? 在人家看來,我就是一我的肉的編譯器,手寫中間語言。。。vim
Java抽象層次過低,致使表達能力太弱。別人一句話的事情,在你這裏要講半天。 Java自己就有太多的重複(duplication),並且缺乏一些高級特性。 雖然也在發展,好比說foreach,好比說annotation,這都提升了抽象層次。 可是發展的太慢了,這有不少緣由,向下兼容性應該是最主要的一方面。segmentfault
總之, Java不是一個生產力語言,表達能力太弱。 而做爲Java程序員,確實也沒啥語言上的尊嚴了。那Java程序員怎麼辦?如何保持自信,樹立正確的人生觀價值觀。 或者說,Java程序員如何提升本身的抽象層次,少作髒活累活?閉包
瞭解一些其餘高級語言,知道什麼樣是好的。 別人一句話信息量太大了,咱們要先能聽懂,知道人家說什麼,知己知彼(最重要的是知道本身有多搓)。 Java sucks,可是Jvm很牛逼,能夠了解一些Jvm上的高級語言,好比Scala、Clojure。瞭解函數式編程、閉包、併發等等。 語言只是表達思想的一種方式,應該更關注你想表達的東西。 到了必定高度之後,新學一種語言,只要瞭解一下基本發音,就能說個八九不離十,甚至比那種語言的Native Speaker還說的好。併發
Java最大的好處,就是足夠成熟,市場佔有率高。 Java程序員的需求,就是市場的需求。Java擁有有最成熟的IDE,一羣的商業公司千方百計取悅Java程序員。eclipse
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徹底融合起來,找到一個最短路徑。 這樣,咱們在實際工做中,技由心生,砍瓜切菜,攻城跋扈。
最後回到主題, 我想說,做爲一門廣義上的語言來講,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 伯樂在線