春节在家学习一套课程《计算机教育中缺失的一课》 来自 MIT
大学里的计算机课程通常专注于讲授从操作系统到机器学习这些学院派的课程或主题,
而对于如何精通工具这一主题则往往会留给学生自行探索。
这些年,作者在麻省理工学院参与了许多课程的助教活动,
过程当中愈发意识到很多学生对于工具的了解知之甚少。
计算机设计的初衷就是任务自动化,然而学生们却常常陷在大量的重复任务中,
无法完全发挥出来诸如 版本控制、文本编辑器等工具的强大作用。
效率低下和浪费时间还是其次,
更糟糕的是,这还可能导致数据丢失或无法完成某些特定任务。
推荐给本刊有兴趣读者学习。
在学习这套课程中,有一节课提到的编辑器设计的哲学,十分有趣,可以摘录出来说说。
来自 编辑器 (Vim)
曾经写过一个问题:现代协作软件应该学习程序员写代码的心理模型。
上面这些问题,让我去思考写代码和写作的心理模型是什么样的不同,服务于这2个场景的编辑器的设计哲学该如何制定。编辑器 (Vim) 中解答了我一些困惑。
写代码的心理模型
- 写作和写代码是 2 件不同心理模型的活动,现代协作中写作逐渐向写代码靠齐。
- 写代码,当我们编程的时候,会经常在文件间进行切换、阅读、浏览和修改代码。
- 而不是连续编写一大段的文字。
- 写一大段的文字是灵感迸发型的,适合传统意义上狭义的写作,如文学写作。
- 现代协作不一样,需要大量协同,看如今流行的插入 block 编辑器,类似 Notion 等。
- 会在不同的文件件切换阅读修改,计算数据,绘制图表,修改格式等。
- 历史上代码编辑器和文本编辑器是很不同的两种工具。
- 在新的时代,会有什么大的变化?
编辑器的学习曲线
- 通常学习使用一个新的编辑器包含以下步骤。
- 阅读教程。
- 坚持使用它来完成你所有的编辑工作(即使一开始这会让你的工作效率降低)。
- 随时查阅:如果某个操作看起来像是有更方便的实现方法,一般情况下真的会有。
- 学习一个复杂的代码编辑器的过程。
- 头两个小时,您会学习到编辑器的基本操作,例如打开和编辑文件、保存与退出、浏览缓冲区。
- 当学习时间累计达到20个小时之后,您使用新编辑器的效率应该已经和使用老编辑器一样快。
- 在此之后,其益处开始显现:有了足够的知识和肌肉记忆后,使用新编辑器将大大节省你的时间。
- 而现代文本编辑器都是些复杂且强大的工具,永远有新东西可学:学的越多,效率越高。
Vim 编辑器设计哲学
- Vim 是代码世界中最流行的基于命令行的编辑器,始于 1976 年的 Vi 编辑器
- 现代的 Vim 始于1991年的模仿版本,已经迭代了32年的历史
- 在写代码的时候,你会把大量时间花在阅读/编辑而不是在写代码上。
- 你写代码的速度是完全慢于你思维的速度,你思维在不同的文件场景中跳跃。
- 设计哲学使得 Vim 成为了一个能跟上你思维速度的编辑器。
所以 Vim 做了些什么,做到一个能跟上你思维速度?
- Vim 是一个多态模式,换种理解就是多视图模式。
- Vim 的设计以大多数时间都花在阅读、浏览和进行少量编辑改动为基础
- 模式:正常、查找、替换、可视化block模式、编译执行模式
- Vim 避免了使用鼠标,甚至避免用 上下左右键因为那样需要太多的手指移动。
- Vim 的界面开始看起来像一个程序语言的时候。
- Vim 的编辑命令也被称为 “动词”, 因为动词可以施动于名词。
- 你可以用一个计数来结合“名词”和“动词”,这会执行指定操作若干次。
- Vim 是可编程的,Vim 的接口本身也是一个程序语言
- Vim 最重要的设计思想是 Vim 的界面本身是一个程序语言
- 键入操作本身是命令,这些命令可以组合使用。一旦形成肌肉记忆,使得移动和编辑更加高效忆。
推荐阅读
