31

写代码要用 Vim,因为越难入门的工具回报越大

 5 years ago
source link: http://36kr.com/p/5152627.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

编者按:现在的技术界有一种倾向,将软件/应用操作简单化,用户能轻松上手。但是工具是否强大,取决于它能否灵活地满足使用者的各种需要。有些工具虽然很难入门,学会了便能对自己的操作有更深的层次的了解,能赋予创造和表达更大的自由度。本文编译自Quartz的原题为“Forget easy-to-use design. Choose something hard instead”的文章。

Vim是一款文本编辑器,基于上世纪70年代开发的vi。 试过的人都公认说难,就连程序员都觉得光是退出程序都不那么简单。但是Vim的用途很广,不管你用的是Mac还是Windows,软件都是已经自带的。而且,只要掌握了使用方法的人,很可能会逢人就安利不止。

“这简直就是最好用的文本编辑器,跟汉堡店In-n-Out的汉堡一样让人满意。”

我就是Vim“神教”的信徒之一。现在我也要来安利一下。但是,我只是用Vim为例子,我要安利的不单是这款软件,而是各种“难用”的技术工具。

V7Rzeqr.jpg!web

Vim是从vi发展出来的一个文本编辑器, 在代码补全、编译及错误跳转方面,编辑功能特别丰富,很多程序员都使用Vim。Vim和Emacs并列成为类Unix系统用户最喜欢的编辑器。 Vim的第一个版本发布于1991年,最初简称是为Vi IMitation,后来功能不断增加,正式名称改成Vi IMproved。Vim是一款自由软件。

现在技术界有一股潮流,工具好不好,似乎都取决于是否易用。照这样的思维,最好的软件就是无需说明书,无需解释,无需教程,你只需要按1或者0。简单到这种地步,五岁的娃娃也可以很快上手应用自如了。

这样的标准听起来很理想, 但是“简单”不是没有代价的,而且五岁孩子可不聪明,简单易用的工具,可想而知,肯定不是灵活的。如果一款软件将所有操作都简化成一个按钮,那么这个按钮在设计的时候,就需要对用户的操作做出很多假设。如果这些假设不符合你的具体情况的话,只能算你运气不好。

举一个很明显的例子。智能手机和笔记本电脑就有很大的不同。在智能手机的应用里,比如Whatsapp,长按链接就会复制链接。那么,这个操作背后的假设就是——Whatapps的开发者想的是,如果用户长按链接,他们可能是想复制链接。但是事实可不一定如此。或许我长按是想分享链接到其他应用呢?或者我只想复制链接中的一部分内容,还有可能我是想将链接保存到稍后阅读清单里。这些操作在笔记本上都很简单,但是在手机上,有时反而很麻烦。

问题就在于开发者觉得“易用”的设计,他们想象中的用户需求,以及用户真正的需求不总是吻合的。用户长按文本可能是想分享,怎么就复制了呢?Word也是如此,又是它总是自动缩进,改都改不了。如果软件开发者总是习惯于帮用户做决定,根据自己的假设来设计软件或应用的功能,这样的不匹配只会越来越普遍。

这也是复杂工具的优势所在。与其想办法、花时间找最简单易使用的工具,倒不如花点时间掌握最强大的工具,然后精准地实现自己想要的操作。

世界上最难用的文本编辑器

Vim是什么?为什么那么难用?

Vim是一款文本编辑器。编辑文本听起来不是什么难事,所以要说文本编辑器难用,估计很多人会不解。文本嘛,敲敲键盘,字就出现在屏幕上了,这能有多难?

但是Vim的操作没这么简单。你用Vim输入文本的时候,敲了键盘,字母不一定会出现在键盘上。

没错,因为它是一款“模式编辑器”,vim的模式可以有多种编辑状态,最常用的是普通模式,输入模式,视图模式,命令模式,普通状态是vim的默认模式,所有键盘的按键都是你可以使用的快捷键,使用Vim处理文本的时候,键盘不再用于输入字符,而是输入 vim的各种命令。这样,用户非常快速做各种改动。所以Vim常常是用来改代码。

Vim里使用的命令很多都很简单,但是语法很强大,有动词、名词和修饰词。字母d代表“删除(delete)”,w代表“单词(word)”。如果你键入dw,就可以删除一个单词(delete a word)。你可以加上修饰词,比如数字5, 键入d5w就能删除光标后的5个字。如果你操作失误,可以按下u来撤销(undo),然后键入i来进入输入模式(insert),做正常的文本输入。y代表的是“yank”(拉),用于复制,yw就可以复制一个单字。

实际使用起来如下图。

Vnm6zyr.jpg

通过这样的语法,用户可以组合出无数种命令,实现具体且非常复杂的操作。在不熟悉的人看来,这些操作可能很炫酷。只要敲几个键,你就能把好几句话从一段移到另一段;从光标处把下一个句号前的内容一下删除,然后重写句子;两个单字换位置;两段合为一段,等等。完全不用碰鼠标就能实现很多此类操作。

学会使用难入门的工具有什么好处?

就我个人来说,学用Vim给我的工作带来了天翻地覆的改变。在我使用比较熟悉的时候,我觉得自己之前输入和编辑文本,就像骑小孩子用的自行车一样,后轮两侧装着小轮子,跑得稳当,但是又慢又笨拙;就像弹钢琴,但是一次只按一个琴键,根本没意识到自己可以弹和弦,可以一次按下好几个键。甚至,我就像柏拉图洞穴隐喻中生活在山洞里的人,只能看到现实的影子,就以为影子是现实本身。

Zf2y6nF.jpg!web

“洞穴隐喻”——设想有这样一个大洞,通过一个长长的通道与外部世界相连,整个通道能够挡住任何阳光进入洞内。一组囚徒背对着出口,面向远处的墙壁。他们的四肢被套上了枷锁,并且他们的头颈也被固定住,无法转动,因此看不到他人,实际上也看不到自己身体的任何部分,而只能够看到面前的墙壁。他们在如此的环境下终其一生,不知道其他任何东西。在洞穴中,他们身后有一把明火。他们不知道自己和明火之间隔着与人一般高的土墙,在墙的另一边,人们头顶东西走来走去,东西的影子被火光投射到囚徒面前的墙壁上,人们的嘈杂声也回响到墙壁那边囚徒们的耳朵里。柏拉图说,这样一来,囚徒们一生中所感觉或经验到的唯一实在就是这些影子和回声。 在此情况下,他们自然而然地会以为这些影子和回声成了全部的现实,他们能够谈论的,就是这种“现实”以及对这种“现实”的经验。

这么说似乎消极了点,但是事实确实如此。掌握了Vim之后, 不断是在写代码,还是在用文字表达自己的时候,感觉都更自如,更得心应手。

而Vim并不是什么新事物。几乎计算机普及以来就一直存在了。Vim是最早开发出来的一款文字编辑器。在鼠标普及之前就有了,所以没有鼠标,才更显出它的高效。Vim来自软件开发的早期,当时的编程人员面对有限的计算能力和灵活程度,只能靠使用起来略为复杂的工具来应对。Vim确实很难上手。

放在今天看来,文本编辑这样简单的工作都可以这么复杂,可能难以想象。这是因为,开发Vim的人没想着做简单易用的工具,而是把决定权都交给用户。Vim的开发者考虑的是如何做出最好的工具,功能足够强大,能够解决用户处理任务需要的工具。在Vim的例子中,开发者觉得计算机的文本处理主要是编辑,而不是加入新字符。因此,Vim的默认模式是普通状态是编辑模式,可以剪切、移动、操纵文本。如果用户无法接受敲了d,屏幕上却没有出现的字母d的情况,那开发者就不能做出这样的软件了。只有假设用户愿意接受的情况下,这样的软件才有用户基础。

找到你自己的想法

使用Vim编辑是成年人学习的一项技能。这种技能想要学会并不简单,但是正如学烹饪,学修电器,学会拒绝他人一样,一旦学会,长期看来益处很大。当然,不是所有难学的技能都值得学习,有些程序很难用,很难上手,但是设计得也很糟糕、不实用。在学习Vim的过程中, 我意识到,很多“易用”的工具,用多了只会让自己越来越傻。

现在新兴的易用型软件,有很多会降低我们的工作/学习效率。简单的工具一般会自带假设,中断使用者的思考过程,为了使用的流畅,牺牲的是效率的最优化。而让大家退避三舍的难用工具Vim,熟悉之后却能让我更自如地表达自己,降低了实现自己脑中所想操作和实际操作之间的阻力。我可以快速写出自己脑中文本的几个版本,非常灵活。如果我不喜欢Vim现有的操作,我可以增加其他用户做的特征,或删去自己不喜欢的功能,或者花点时间做出最适合自己的工具包。其实也不是这么难,你可以看看科学作家迪希特(Jay Dixit)的这个演讲,他也没有编程经验,但是他根据自己的工作习惯和节奏,把Vim的对手工具,Emacs定制成最适合自己的版本。

所以,我们可以尝试接受复杂的工具:如果能学R语言或者Python,为何执迷于Excel?如果能用自制的Anki卡片,为什么要买做好的记忆卡片?我们不应该指望软件帮我们把事情通通完成,而是应该充分应用自己的大脑。

编译组出品。编辑:郝鹏程


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK