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