[关闭]
@ghosert 2024-06-01T00:08:28.000000Z 字数 2466 阅读 143

抛弃GUI,基于文本和命令行最大化编程效率

blog command-line text productivity programming


导论:

2023 年,人工智能元年,ChatGPT 从文本聊天开始开启了一个时代,结合计算机技术发展的脉络,历史惊人的相似,我们似乎又回到了那个基于文本的打卡机和黑色终端的原点。结合我自己过往在软件开发中的经验,以下谈谈对基于文本和命令行系统的一些分享和感悟,希望据此帮助大家提高工作和学习的效率。

易用和高效的错觉

易用性并不等同于高效率。我们往往有一种错觉,觉得一个易用的系统会提高自己效率,但这往往是从内容消费者的角度来看:老人和小孩都可以很容易学会用手机看视频,如果让一个心智成熟的成年人选择在手机和物理键盘上敲一篇五百字作文,大多数人应该觉得键盘效率高一些。对于内容生产者,易用性是天生的效率杀手。无论是鼠标还是触摸屏的设计初衷都是为了降低使用者的门槛,因为键盘对于初学者非常不友好,一百多个键位,你需要练习盲打,记忆每个字符的位置和组合键才能熟练操作计算机,但是这些学习成本付出的收获同样丰厚:你可以更高效的进行大量的输出。高效是建立在大量的训练基础之上的,而不是易用性,易用性本身并不带来高效

图形用户界面 GUI 和鼠标的低效本质

在GUI和鼠标出现之后,计算机才从专业领域普及到普通大众,触摸智能设备更让三岁小儿可以操作平板。但是这些设备本身并不高效。

  1. 你需要从满屏的图标里找到自己的应用
  2. 在一个复杂应用里从一堆工具栏,菜单栏,子菜单里找到需要的功能
  3. 移动鼠标或者手指定位坐标,点击运行
  4. 在多应用操作中,使用鼠标重新定位应用的切换成本
  5. 如果同时伴有大量文本操作,在鼠标和键盘之间切换操作必然带来效率损耗

以上每一步的停顿和损耗积累导致低效的生产力。相反高效的生产力是源于改进每一步微操习惯的结果。

命令行和键盘高效的实质

  1. 键盘的输入可能性上限很高,键位丰富,组合键,快捷键加速操作

  2. 无法使用 GUI 协助导航定位软件位置和功能菜单,反而迫使开发人员记忆命令和善用搜索来执行任务,直接从键盘输入精确的文本命令来执行任务,提高效率。以安装软件为例:

  1. sudo apt install firefox

一条命令就完成了火狐浏览器的安装,省去了在网上寻找下载链接,下载,定位到下载文件夹,双击安装,选择安装路径的繁琐流程

  1. 把双手固定在键盘上,通过键盘命令行的人机交互,没有鼠标切换的注意力切换和损耗,直接,简单,实时反馈的沉浸感一流,容易达到心流的高效状态。

在软件开发中基于文本和命令行的优势

  1. 在软件开发的初始阶段,开发命令行程序迫使开发者关注软件的核心功能进行原型论证,而非耗时容易出 bug 的用户界面,所以通常你先看到的是 Git, Linux Kernal, docker 的命令行版本,然后才基于此的 GUI 界面。

  2. 命令行软件更适合写脚本和自动化程序,基于 GUI 的软件则很困难,甚至不太可能做到。

  3. 基于文本的标准输入,输出,可以由功能单一的程序,通过管道把前一个程序的输出作为下一个程序的输入,构建功能更复杂的功能而不必专门为此编写新的程序。

例如统计一下某个目录下所有 markdown 文件的个数

  1. #!/bin/bash
  2. # Define the directory to search in
  3. DIRECTORY="/home/jiawzhang/VimProject/note-taking/"
  4. # Count the number of .md files
  5. TXT_COUNT=$(find "$DIRECTORY" -name "*.md" | wc -l)
  6. # Print a message with the count
  7. echo "There are $TXT_COUNT text files in the directory $DIRECTORY."

在这个 bash 例子中,我们通过 find 寻找指定目录下所有的 .md Markdown 文件,然后通过 | 把 find 的输出结果作为输入传送给下一个程序 wc -l 用来统计文本行数,在这里即这些文件的个数。通过文本的标准输入,输入和管道概念,两个不相关的 find wc 就被通过脚本联系在一起,构建更复杂的功能。这在 GUI 软件里是几乎做不到,每一个单独的 GUI 软件往往有自己封闭的格式,也没有管道概念进行数据交换。

  1. 命令行软件只需要文本数据,所以操作系统本身没有渲染图形界面的负担,算力和内存都被消耗在功能本身,使得在相同硬件资源下的运行效率更高

  2. 命令行程序通过指定参数和选项,有更丰富的排列组合来给出运算结果

  1. # 在当前目录下搜索 TODO 关键字,大小写敏感
  2. $ grep TODO *
  3. # 在当前目录和子目录下搜索 TODO 关键字,大小写敏感
  4. $ grep TODO * -r
  5. # 在当前目录和子目录下搜索 TODO 关键字,大小写不敏感
  6. $ grep TODO * -ri
  7. # 在当前目录下搜索不包含 TODO 关键字,大小写敏感
  8. $ grep TODO * -v
  1. 命令行程序更适合远程执行

作为运行程序代码的应用服务器或者数据库服务器本身就因为稳定性,高性能以及安全性问题一般不安装GUI界面,所以从本地连接远程服务器只能通过本地的SSH用命令行的方式操作服务器。

抛弃 GUI 编程的准备工作

  1. 抛弃 GUI,包括 IDE
  2. 一台可以工作的电脑,无论预装 Windows, MacOS, Linux
  3. 选择一个文本终端:
    a) Windows: 使用 Windows Terminal 安装 WSL2
    b) MacOS: iTerm2
    c) Linux: Gnome Terminal
  4. 选择一种shell:bash, zsh, ksh
  5. 安装编辑器 Vim Neovim Emacs
  6. 搭建开发环境 Python,Java,NodeJS,Go,Lua

小结

总结一下以上内容:

  1. 使用命令行的效率高于GUI
  2. 使用键盘的效率远超鼠标
  3. 非 GUI 编程的准备工作

提升效率能让每个人在单位时间有更高的产出,尤其是开发者,我们天生有能力通过优化自己的工具链,操作习惯,编码方式和思维模式来提高生产力,如果大家对这个话题感兴趣,请点赞、评论转发鼓励我继续创作,在这个开篇视频开宗明义之后,我会在以后的节目中陆续介绍 Linux,Vim,代码技巧等主题,敬请期待。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注