编辑器背后的程序观
最近看到新闻,Eclipse 的市场份额持续下滑,而 Intellij IDEA 异军突起终于坚持不懈的超越了 Eclipse 成为了 Java 程序员的首选开发工具。
有感于此,回想起这么些年来写过不同的语言,用过不少的编辑器。以前的程序员和现在的程序员他们都各用什么编辑器编程,不同语言的程序员偏爱什么样的编辑器来写程序呢?
编辑器与语言先来看看下面这张图,来自 TIBOE 2016 十月最新的编程语言流行度排行。
Java 以后端和安卓开发为主,牢牢占据第一。Java 的历史不过短短二十年出头,开发工具编辑器的变化从前五年的群雄混战到后来 JBuilder 一统江湖。再之后 Eclipse 开源横空出世取 JBuilder 而代之,当年 Eclipse 能战胜 JBuilder 正是因为其开源免费而且社区极其活跃。考虑开发工具市场属于小众,高技术门槛而低利润空间,本以为被开源免费这么一冲击,会再无商业公司单独以此为核心业务了。没想到的是打败 Eclipse 的竟然是来自商业软件开发工具公司 JetBrains 的 Intellij IDEA,真是二十年来又一轮回,不禁唏嘘。
后端的 C 和 C++ 开发想必还是用数十年不变的来自远古时期的 Vi 或 Emacs,关于这两个神奇的编辑器我们下面再详述,暂时按下不表。而 C# 自然是用微软系无所不能的编辑器 Visual Studio,对于我一个使用 Mac 的程序员确实没怎么用过微软的工具,也就不多说了。而 JavaScript 作为现在前端的统治语言才是最让我困惑的,在我还在写一些 Web 页面的时期(可能三、四年前)就一直没找到过觉得适合 JavaScript 的编辑器。如今前端百花竞放,好不热闹,看到的每一个前端程序员似乎都在用着不同的编辑器。
编辑器与神两个神奇的编辑器:vi 或 Emacs。它们都是诞生于 1976 年,MIT 的 Richard Stallman 和 Guy Steele 完成了 Emacs 的第一版,同时期在 Berkeley 的 Bill Joy 写出了 Vi。
它们各自围绕着完全不同的设计理念,其间差别巨大,各自都有自己的粉丝团并相互鄙视。有点像《火影》漫画里千手和宇智波一族争战多年,但目前这两大编辑器尚未达成过一致——也就是从未有过一个同时集两大编辑器特点于一身的编辑器出现过。
Emacs 围绕的核心理念是快捷键和自定义的配置扩展,编辑器提供了一组命令并绑定在一系列的快捷键上。如果你发现有什么想要的功能默认快捷键没有提供,你可以自己去编程扩展它。所以,这个编辑器内置了 Lisp 语言解释器,所有的配置都是通过这种语言来完成的。因此,要用好 Emacs,你得先学会一门语言,而 Lisp 则是计算机历史上第二个高级语言。为了用个编辑器还得先学门语言,如此折腾,怪不得有「神」之编辑器一说。
因为 Emacs 对于高级功能的满足就是提供一门可编程语言自己去编程完成,所以有句夸张的说法是:“Emacs 是伪装成编辑器的操作系统。”
而 Vi 则完全是另一种风格,它是基于命令的组合理念。在说组合之前,先需要了解 Vi 的几种基本模式。Vi 有三种模式:
其中插入模式就是普通的编辑打字用,而命令模式才是用来组合的。怎么理解命令组合?这里举个简单的例子,以 Vi 中的删除命令是 d,那么它删除什么?这看你怎么去组合它,比如另外一个命令 w 表示前移一个字,$ 表示移动到一行末尾,所以一组合 dw 这个命令表示删除一个字,d$ 则表示删除整行。之后你再学会一个新命令 y 表示复制文本,所以你应该知道怎么组合命令来复制当前所在行的文本了吧。
Vi 相比 Emacs 显然没那么折腾。当你熟练了 Vi 后就会在编辑文本时有一种运指如飞的感觉,所以 Vi 在江湖上又称编辑器之「神」。
只是唯一的问题是 Vi 的命令实在太多,你想要达到运指如飞的感觉,可能先要把电脑桌面换成下面这个。
然后日复一日,天天使用,想必终有大成之日(反正我是没能大成,一直磕磕碰碰,一阵不用就忘了)。而对于一个初学 Vi (之前只用过类似 Notepad 这类编辑器的用户)刚上手的用户来说,他的内心会有两个疑问:怎么输入?怎么关掉?而相比而言一个刚上手的 Emacs 用户心中的疑问会少一个:好了,我试着敲了一些字母了,现在,怎么关掉?
上面是网上一张经典编辑器学习曲线图,有些年头了,图中有些编辑器已经消失在历史长河中。我们只需要看看 Vi 和 Emacs 的曲线就好了。如果你真得尝试过这两个神奇的编辑器,就会对这个学习曲线有心有戚戚焉的感觉。
事实上现在直接用这两个神奇编辑器的人不多了,从 Vi 发展下来只有一个 Vim 对其进行了增强,听说最近还发布了新版本。而从 Emacs 的核心理念发展继承下来编辑器想必很多人都用过这两个:Sublime Text 和 Atom。
Sublime Text 使用 Python 代替了 Emacs 中的 Lisp。Lisp 实在太古老了,Python 好歹还是前面编程语言排行榜第五嘛,大家的学习兴趣和群众基础都会好很多。而 Atom 是 Github 近年新出的编辑器,它使用 CoffeeScript 取代 Lisp。这是什么语言?好像排行榜里没有。它不过是 JavaScript 的马甲,简单说就是 CoffeeScript 会被编译成 JavaScript。
编辑器与程序员世界上有三种程序员,一种用 Emacs,一种用 Vi,剩下的是用其它编辑器的。对,剩下的那部分多半都是在用各类 IDE 的程序员,而事实上现在用 IDE 的程序员可能占据了多数。
而编程语言排行榜第一的 Java,我想很多 Java 的初学者都是从 IDE 开始的。因为相比通用的编辑器,Java 的 IDE 确实提供了更高的效率。十多前我开始的 IDE 是 JBuilder,而在 Java 刚诞生的年代,它的第一个 IDE 是 Symantec 开发的 Visual Café,它几乎是以席卷市场的姿势迅速占据了 Java 开发工具第一名的地位。后来同时期的竞争者还有 IBM 的 Visual Age For Java,至于 Borland 的 JBuilder 几乎是最后起跑的参赛者。但 Java 的开发工具之战似乎是一场漫长的马拉松比赛,除了一开始的表现之外,更重要的是比谁能够撑得比较久。JBuilder 以决绝的姿态后来居上,以每年一个大版本的速度持续迭代,在第四年也就是 JBuilder 4.0 时完成了反超,占据了超过 50% 的市场份额。