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

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

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

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

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就可以复制一个单字。

实际使用起来如下图。

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

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

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

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

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

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

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

找到你自己的想法

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

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

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

[No000018B]写代码要用 Vim,因为越难入门的工具回报越大的更多相关文章

  1. 用css以写代码形式画一个皮卡丘

    我的个人网站是通过写代码的形式来形成一个网站的,前一阵子在某个大神的github上看到他用写代码的形式来完成一个皮卡丘,于是心血来潮花了半个小时,也完成了一个作品. 这其中涉及到的知识点也不是很复杂, ...

  2. 前端面试手写代码——JS函数柯里化

    目录 1 什么是函数柯里化 2 柯里化的作用和特点 2.1 参数复用 2.2 提前返回 2.3 延迟执行 3 封装通用柯里化工具函数 4 总结和补充 1 什么是函数柯里化 在计算机科学中,柯里化(Cu ...

  3. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序

    直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...

  4. Markdown: 用写代码的思维写文档

    作者:吴香伟 发表于 2014/08/07 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 本文不讲解Markdown的语法规则,只关注它带来的好处以及我使用的方 ...

  5. 代码编辑器[0] -> Vim/gVim[3] -> 像编程一样使用Vim

    像编程一样使用Vim 目录 为什么是Vim / Why Vim 从hjkl开始上路 -- 使用基本按键进行移动和编辑 / Start from <hjkl> 一次超速和翻车的体验 -- 使 ...

  6. 写代码怎能不会这些Linux命令?

    转自:https://zhuanlan.zhihu.com/p/28674639?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=to ...

  7. Idea没安装几款好用的插件,怎么风骚的写代码???

    ​ 工欲善其事,必先利其器,好的工具可以提升我们的开发效率,越来越多的Java程序员从Eclipse转到了Jetbrains家的Idea.今天给大家介绍的是我常用的十几款Idea必装的插件. ​ Ti ...

  8. ClownFish:比手写代码还快的通用数据访问层

    http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...

  9. 【腾讯Bugly干货分享】深入理解 ButterKnife,让你的程序学会写代码

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/578753c0c9da73584b025875 0.引子 话说我们做程序员的,都 ...

随机推荐

  1. 开源配置管理平台-Apollo

    Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端. Apollo官网地址

  2. 分享:android图片浏览器—类微信朋友圈相片浏览【android代码下载】

    今天给大家分享个android图片/相册浏览器,类似微信朋友圈相片浏览,可以左右滑动,可以双击放大,捏拉放大 效果如下:<ignore_js_op> device-2013-09-04-1 ...

  3. 第三部分:Android 应用程序接口指南---第三节:应用程序资源---第一章 资源提供

    第1章 资源提供 你应该经常外部化你应用程序代码中的资源,比如图片.字符串等,这样有利于你独立处理这些资源.你也应该根据特定的设备配置提供一些可替代的资源,并且把他们分组保存在指定的路径名下.运行时, ...

  4. Atitti mybatis的单元测试attilax总结

    Atitti mybatis的单元测试attilax总结 版本mybatis 3.2.4 /palmWin/src/main/java/com/attilax/dao/mybatisTest.java ...

  5. JAVA和JAVAC 命令行

    转自:http://www.blogjava.net/pdw2009/archive/2008/06/12/207413.html?opt=admin javac和java命令行中的-classpat ...

  6. java 生成Http 头部date格式的string-RFC 1123 Date Representation in java

    https://blog.csdn.net/lvzhuyiyi/article/details/51770148 ******************************************* ...

  7. 【emWin】例程十九:窗口对象——Checkbox

    简介: 复选框是选择各种不同选项的最常用小工具之一.用户可选中或取消选中复选框,并且可一次选中任意个框 触摸校准(上电可选择是否进入校准界面) CHECKBOX三状态模式 CHECKBOX设置字体颜色 ...

  8. Java知多少(95)绘图基础

    要在平面上显示文字和绘图,首先要确定一个平面坐标系.Java语言约定,显示屏上一个长方形区域为程序绘图区域,坐标原点(0,0)位于整个区域的左上角.一个坐标点(x,y)对应屏幕窗口中的一个像素,是整数 ...

  9. 数据中心内负载均衡-ECMP的使用分析

    背景 数据中心的网络拓扑通常采用CLOS结构,主机之间常存在多条路径.数据中心为满足吞吐量敏感型流量的需求会提供大量的带宽资源.那么利用数据中心这种网络拓扑已知,路径资源.带宽资源丰富的特性,可以更好 ...

  10. Kiss MySQL goodbye for development and say hello to HSQLDB

    The days of using MySQL, DB2, PostgreSQL etc for development is  over.. I don’t know why any program ...