我没有起个类似“CLI vs GUI”的标题,因为我感觉比较它们就像在没有前提条件的情况下比较坐飞机还是乘火车方便。我们应该更关心在什么时候使用而不是单一地比较。
我想先把概念弄清很重要,CLI和GUI不应该是想象的那样区分的,例如运行在终端的就是CLI程序,有自己的窗体都是GUI程序。在终端里有许多程序是 用命令+参数+文件列表的形式调用,用简单问答形式进行正面交互,其中的某些还可以在运行时用快捷键命令控制(如mplayer),这应该是“理想”的 CLI程序。还有一些(像cfdisk)是绘制了一个图形的界面,使用光标(鼠标一般不能用)、快捷键、或者命令控制,这种程序和“GUI程序”就比较像 了。有人称前者为命令行程序,后者为CLI程序,我感觉这种说法更不科学。
当然,“GUI程序”也不都是一样的,大多数有菜单、按钮等控件,使用时可以用鼠标点击、用Tab移动按键选择、快捷键操作甚至命令操作。但一个IDE里 的模拟终端或一个类似Mablab的程序命令区是GUI还是CLI呢?
我感觉这样区分更合理:CLI是通过命令或快捷键交互的界面,GUI是通过控制鼠标或光标进行交互的界面。它们可以在一个程序里同时出现。开始想快捷键应 该算在GUI里,因为大多数GUI程序都支持快捷键,但再想想快捷键和命令更相似,而和光标鼠标的原理相差更大,算在CLI里更合理。所以多数GUI程序 同时也有一部分CLI的影子。
其实如果这样分的话,问题简化了很多,之前想着把操作分为任务型和过程型,现在感觉也没有太大必要了。
对于CLI的评论,有许多是它过于原始,这个是很可笑的,其实GUI更为原始。这个有点不好理解,但如果这样想就很好理解了:如果我们把电脑整体作为操作 对象,那我们的所有的键盘鼠标操作都可以看作是“GUI式”的,如果把键盘上的字母全去掉就更像了,就像是一台老式的机器,每一个按钮都有固定的用处,这 才应该是原始的,但如果这样电脑就没法用了。而通过键盘的输入抽象成字符流这是一个非常先进的改进。几十年前没有类似显示器的输入设备,而是类似打印机的 东西,所以当时也没有类似现在的GUI原型。而类似触摸屏的输入设备就像老式的机器一样原始,GUI对它进行很小的抽象,原理没有变化。所以从历史上 看,CLI比GUI更早出现,但如果不考虑显示器这个东西时,想想最老式的计算机时,还其实是更像GUI的。所以应该是GUI更原始。
其实讨论谁更原始意义并不很大,更重要的是谁更好用。好用也分为几个方面,例如易学习性,易操作性,操作效率等等。比较显然的是GUI操作更易学习,设计 良好的GUI可以不用专门学习而直接使用,而CLI则基本都要学习,至少要现找到命令/选项/快捷键的名称。但GUI也并不都是那样的,专业的图形/影音 /工程等软件不是看一看就是可以用的,甚至图形控件多得让人崩溃,使用设计不良的GUI就像拄着两根拐杖跑步一样别扭。而学习CLI时我们可以只先使用一 少部分功能,对于其它的可以眼不见心不烦,这样学习代价完全可能比GUI的少。
在操作上,二者各有所长,如果软件设计的像实体模型一样,那样GUI无疑要更为方便,但如果只是一堆按钮,一个按钮实现一个功能,那就像对应着着手册的 CLI,方便方面并没有实质的优越性。
总结起来,大概只有四种操作:命令、快捷键、光标、鼠标。
命令更符合任务式操作,也就是你的目的是完成什么配置或者得到一些信息,而并不关心是怎么实现的,任务可能是需要频繁操作的,甚至是周期操作的。这时命令 比其它三种方式有得天独厚的优势,我们可以把复杂的命令alias成一条,或者写进脚本来减少工作量,同时命令更富表达能力,有些命令是其他方式无法代替 的。命令也几是乎唯一可以自动化的操作。
快捷键更适合配合其他操作,主要是减少光标鼠标的工作量,很少有程序是全部用快捷键操作的,如同正在播放中的mplayer,那其实比纯粹的命令操作更难 掌握。但类似于复制粘贴的操作最适合快捷键操作,在一些时候,它可以取代光标鼠标的工作,当比较熟悉时。它没有太多学习难度,主要是记忆。它比较难以自动 化,但只能用类似模拟按键的形式实现,也基本没有什么通用性。
光标主要是在终端上的类GUI程序上用的,因为它们基本不能支持鼠标,但在正常的GUI程序也还是能用的,例如用方向键选菜单,用Tab选按钮,它基本要 比鼠标操作快一些,比快捷键慢一些,符合手离不开键盘时用一下。
鼠标就不用说了,它是最容易掌握的,也基本是最慢的,除非你正在把鼠标当手用(如作画,选取,滚动等模拟性十足的操作),它的效率一般都是最低的。但对于 多数过程式操作我们并不关心效率,如看书、听歌、看电影、上网等,这时也很适合用鼠标,这也是我们平时做的最多的事。
从原则上看这四种操作中的每个都有能力取代其它三个,但那样会添加许多麻烦而得不偿失。这其中最重要的两个命令和鼠标更是如此。
作为一个操作系统,更要平衡它们,使它们最好的发挥长处。在这点Windows有硬伤,就是在漫长的时间里命令行薄弱,使用类似dos的命令行,功能十分 有限,既不想办法加强也没有及时替换。而wsh又不适合代替cmd,因为功能上类似于python之类的脚本却远没有后者强大。而想到用 PowerShell时似乎已经晚了(对于这我并不了解,更没用过它)。传统的MacOS也是如此,它好像没有一样能称得上是命令行或者unix shell的东西,直到MacOS X换了修改的Free BSD的内核和shell。而类unix的图形界面发展较晚,功能上似乎也不及Windows和MacOS X,虽然我并不这么认为。
写乱套了,算了……
没有评论:
发表评论