热点技术:编辑器背后的程序观

最近看到新闻,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 有三种模式:

  • 命令模式(Command mode)
  • 插入模式(Insert mode)
  • 底线命令模式(Last line mode)

其中插入模式就是普通的编辑打字用,而命令模式才是用来组合的。怎么理解命令组合?这里举个简单的例子,以 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% 的市场份额。

而 2001 年 12 月左右,IBM 终于宣布把 Visual Age For Java 开放给 Eclipse 计划,正式结束了
Visual Age For Java 五年来在 Java 开发工具市场的竞争,而这正是对 Eclipse 诞生影响最重大的事件。之后
Eclipse 以开源免费开放的架构推出后,虽然 Borland 也算是一家传奇公司(曾有另一成功产品
Delphi)其态度充满了商业的严谨,而 JBuilder 也堪称经典,但 Eclipse
的那种潇洒和自由,用户的那种强烈归属感,溢于言表,而我使用的最后一版停留在了 JBuilder X。

作为一名十来年的 Java 程序员,我在近两年又逐步从 Eclipse 切换到了 Intellij IDEA。曾经潇洒自由的 Eclipse 似乎变得越来越笨拙与卡顿了,所以程序员又找到了新欢抛弃了旧爱。

不过无论是编辑器也好,IDE 也罢,都是工具。而工具是用来放大你的才干,提升你的效率的。所以我并不支持那种一辈子只需要用好一种编辑器的程序观。事实上在我眼中,我把工具分成两派:

  • Default
  • Preference

Default 指工具背后的程序观是提供足够好的默认功能,绝大部分时候(99%)你只需要使用工具提供的默认功能,而默认的功能包括一些品味性的选取(比如:颜色、背景、字体)都是开发工具的人眼中最合适的选择。

Preference 则是随意的提供一些默认功能,然后提供极强的可定制化和可扩展性,让用户按照自己的偏好去定制使用。

我感觉,Apple 大部分的软硬件产品反映的都是 Default 背后的程序观。而 Linux/Unix 世界大部分的软件都反映了
Preference 的程序观。而应用到编辑器,我自己则一直选择符合 Default
程序观的产品,因为我对用好工具去解决面临的问题的兴趣超过去折腾工具本身啊。

有完全不用 IDE 的 Java 程序员么?据我所知没有,但我知道一个不太用 IDE 的 Java 程序员——Joshua
Bloch。他是一个著名的 Java 程序员了,JDK 集合框架和多个其他库的编写者,以及 Effective Java
一书的作者。他对编辑器或工具的看法是:“因为我是个老家伙了,Emacs 的快捷键已经长在我的脑袋里了。”,所以他习惯用 Emacs
来自己写一些小程序或库,但对一些需要多人合作的大东西,还得求助于现代 IDE 的帮助,比如:Intellij IDEA。

从某种意义上,我是支持这种极简主义的编程观点的。现代 IDE 尝试集成太多功能,把编译、调试、打包、运行集于一身,在方便的同时,也无怪乎
IDE 变得越来越笨重。用好工具的诀窍就是搞清楚工具背后的核心理念以及搞清楚我到底为什么必须用这个工具,而不是工具提供了什么我就需要去用。

...

这篇文章是在 Atom 编辑器上完成的,它的 Default 模式几乎满足了我的全部需求。在满足 Preference 的前提下兼具灵活和强大,除了让用户学一门编程语言还有别的办法么?是的,我还不会 CoffeeScript。

作者:mindwind

来源:51CTO

时间: 2024-10-31 21:33:41

热点技术:编辑器背后的程序观的相关文章

“微信之父”张小龙:微信背后的产品观

编者按:本文作者@和菜头 2012年7月24日下午14:20-23:30,在<腾讯大讲堂>的特别讲座,由微信之父张小龙主讲了<微信背后的产品观>.原文链接:张小龙:微信背后的产品观 很多人并不知道,这可能是张小龙第一次也是最后一次做公开讲演,在公众面前讨论产品.在这次演讲中,他把自己15年来关于产品的所有经验和心得一次性全部公开,今后将不再做类似公开课. 讲演长达8小时20分.腾讯为此开设17个分会场,同步直播讲座,参加者超过1700人.晚上19:10分听众晚餐,20:30继续进行

7位行业大咖共话数字化转型的热点技术及其应用

人工智能.区块链.容器技术等新兴技术的快速演进和发展,正在不断地推进企业数字化变革.8月10日,由上海市经济和信息化委员会.上海市国有资产监督管理委员会指导,上海市国有资产信息中心.上海市计算机用户协会协办,畅享网主办的"颠覆·创新 IT决胜未来--第二届创新技术CIO高峰论坛"在上海掀起了一股关于探讨创新技术发展和实践的热潮.百余位CIO.IT专家.学者们莅临本次峰会,大会上午探索创新技术发展,下午分享创新技术实践,参会嘉宾重新思考"新技术"的落地路径,共同寻找企

Docker用以提高Linux内核安全性的三大热点技术

关于译者Ghostcloud Ghostcloud(中文名:精灵云)是成都精灵云科技有限公司旗下的基于Docker的PaaS/CaaS平台品牌.公司成立于2015年,核心团队由来自EMC.Veritas.华为.IBM.Microsoft的核心技术主管和架构师组成.精灵云作为国内首批从事容器虚拟化研发的企业,为企业级行业客户提供针对互联网化.私有云管理平台.大数据业务基础架构的平台服务,在国内Docker社区贡献排名前三.主创团队曾参与Beego开源项目研发,并主导发布<Docker容器实战:原理

《Unity着色器和屏幕特效开发秘笈》—— 2.6 在Unity编辑器中创建程序纹理贴图

2.6 在Unity编辑器中创建程序纹理贴图 有时你为了创建更多不一样的效果,需要动态创建纹理或者在运行时修改它们的像素值,这种情况通常被称为程序性的纹理效果.不同于你在图像编辑软件中手动制作一些新纹理,你需要在一个二维空间中创建一组像素然后将其应用到一个新的纹理上.再将创建的新纹理传入到着色器中,使它们可以在着色器中进行计算.这种技术在已有的纹理贴图上进行绘图是非常有用的,我们使用动态创建纹理贴图的方式可以制造一种玩家和游戏环境之间的互动效果.也可以用它来制作一些贴花的效果,或者创建一些可以在

《微信背后的产品观》观点整理

本文来自于2012年7月微信之父张小龙的演讲<微信背后的产品观>中的授权部分观点整理.现在拿出来看看,这些心得经过时间的考验更显其价值.在回顾微信的演化历史之后,张小龙几乎分析了有关移动互联网产品的所有关键点,包括了其产品经理的素养,产品设计原则.思路与方法论等等. 移动互联网产品的方法论 手机作为一种联系工具,天然决定了移动互联网的主要服务对象是人群而非个人.移动互联网产品经理的主要任务是服务人群,主要工作是研究人类群落的行为模式.用产品为人群提供服务,并且要预判人群卷入之后行为模式的变化.

应用Java技术开发WAP应用程序

程序 我们还是采用Tomcat作为web服务器,如果你对如何使用tomcat还不熟悉请参考相关资料.通常我们开发WAP应用程序的时候都是手写wml脚本,其实我们可以借助java的Servlet/jsp技术开发WAP应用程序.通常我都是使用Lomboz插件在eclipse的环境下写servlet/jsp文件的.先看下面的waptest.jsp文件和WapServlet.java文件 <?xml version="1.0"?><!DOCTYPE wml PUBLIC &q

J2EE基础:使用JSF技术开发Web应用程序

j2ee|js|web|程序 (1)视图设计 方便.快捷地开发基于JSF的Web应用程序,是在JSF提供了一组丰富的.可重用的服务器端用户界面组件的条件下实现的.在开发工具的支持下,用户可以很容易地在可视化环境中利用这些组件构建Web用户界面,处理组件的数据校验.事件处理等用户界面管理问题. 设计每个需要的JSP页面,在页面中放置JSF的内置组件,并将组件与应用层的JavaBean绑定.利用RAD工具能通过拖放组件的方式轻松实现页面文件,不需要手写大量代码.开发工具自动生成页面对应的java文件

使用JSF技术开发Web应用程序

(1)视图设计 方便.快捷地开发基于JSF的Web应用程序,是在JSF提供了一组丰富的.可重用的服务器端用户界面组件的条件下实现的.在开发工具的支持下,用户可以很容易地在可视化环境中利用这些组件构建Web用户界面,处理组件的数据校验.事件处理等用户界面管理问题. 设计每个需要的JSP页面,在页面中放置JSF的内置组件,并将组件与应用层的JavaBean绑定.利用RAD工具能通过拖放组件的方式轻松实现页面文件,不需要手写大量代码.开发工具自动生成页面对应的java文件,在文件中定义好了页面的JSF

云安全支撑技术之本机程序行为判断技术

本文讲的是云安全支撑技术之本机程序行为判断技术,[IT168 资讯]今天我要讲的是 基于行为的恶意代码检测系统,这个技术大家都不陌生,这个技术成为我们瑞星安全策略整个实施辅助的资深技术.在讲恶意行为检测系统之前我先讲一讲传统的检 测系统,这个从病毒软件出现就已经有了,首先这个技术是一个静态的识别技术,然后这个病毒特征码是来自于什么地方呢?从病毒体内提取的原始数据片断以及该 片断的位置信息,这个相信大家都很容易理解.病毒特征码这个技术在这么多年的应用中也有了许多的变化和改进,我列了三点,大家可以看