Java很傻,但是IDE很聪明

jopen 11年前

  对于编程语言来说,什么是生产力?我觉得,更高的抽象层次就是生产力。 执行效率很重要,但是在很多情况下,程序员的效率更重要的,而且语言的执行效率是可以发展的。该优化的时候,我们再来考虑优化的事情。 对于语言来说,最重要的是把程序员脑子里的东西,用最高效的方法记录下来。

  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家好用咱再换回来。