GUI vs CLI [飞龙的IT玩场]

来源:互联网 发布:抢注域名技巧 编辑:程序博客网 时间:2024/06/02 11:00

说到软件,自然免不了这个对比。

 

GUI是指通过鼠标点击实现功能的图形用户界面,CLI是指通过输入命令实现功能的命令行界面。另外还有一种TUI,通过选择文本菜单实现功能,这是GUI的前身,如今已十分罕见了;著名的Turbo C即是此类软件,或者在Windows XP/2003的命令提示符下输入edit亦可再现这种界面风格(这是一款DOS下的古董级文本编辑器)。

 

自M$“借鉴”Apple的GUI创意,并结合了自己最擅长的商业推广手段,个人电脑便进入了划时代的Windows纪元。让普通用户不必再面对晦涩的DOS命令,这对PC的普及确实是功莫大焉。想想看,用鼠标点选拖放便可以操作文件夹和文件,简单地选定修改格式便可以制作出美观的办公文档和表格,打开浏览器点击链接便可以随意进行网上冲浪,而类似于画图软件、播放器软件那种高度仿照实物设计的界面更是想不会使用都难。

 

在程序开发领域也是如此。现在IDE(依然以微软为代表)提供了高度的图形化开发模式,很多情况下,拖控件、改属性,然后稍微根据需要添加一点代码,一个在以往需要花费很多精力来编码的程序就完成了。

 

尽管神奇的GUI极大地简化了电脑的使用(乃至程序开发),然而在各种软件工具中,CLI依然占有不可动摇的一席之地。Unix/Linux系列自不必说,带有一半Unix血统的Mac OS X也给用户提供使用Shell的机会,即使是在Windows平台,命令提示符自始至终都没有被放弃,而且微软还推出了新一代的Power Shell。

 

GUI的最大优势是所见即所得——WYSIWYG(What you see is what you get),而因此带来的缺点便是所见即全部所得——WYSIAYG(What you see is all you get)。

 

当你想要将某项常见任务自动化,并且可能需要组合使用多个工具时,GUI往往会遇到困难。鼠标点击操作通常需要你事必躬亲,人工在多个窗口间切换的方式也很难让机器自动代劳。比如,想象这个任务:从几个不同的网页上复制一部分数据到不同的文件,然后将这几个文件打包,发送给指定的几个电子邮箱地址;想象如果这个任务需要每天定时做一遍。

 

另外,GUI环境通常受限于它们的设计者想要提供的能力。GUI工具开发商通常会请人因工程学专家来协助设计软件的界面和操作,以求尽可能满足用户的各种需求。这一点他们确实做得不错。然而,即使是功能丰富的软件,其能力也总归有限,很多时候你确实会需要超越设计者提供的模型。比如,在SQL Server 2005的GUI工作界面SSMS下,我想要实现代码折叠、自动完成、以及某些语句的模板化生成,在目前的平台上基本无法实现;我所能做的只有跟客服人员说的一样——等待并升级到下一版本。

 

关于这部分GUI的局限和CLI的优势,在The Pragmatic Programmer(中译本:程序员修炼之道)一书的第15节有详尽阐述。不再敷言。

 

 

GUI的好处就是使用方便、上手简单、用户友好,CLI的长处则在于擅长组合各种工具、便于批处理和自动化、高度的自定义。二者之间的优势劣势恰好互补。如今,两大阵营都呈现出一些彼此借鉴和弥合的痕迹。

 

GUI软件为了实现自动化,提供了宏(Macro)的功能。典型的例子便是Office套装软件附带的VB脚本宏;iMacros for Firefox是一款著名的浏览器宏的插件。

 

为了实现用户自定义和扩展,在GUI软件中插件(Plugin)机制如今越来越盛行。开源领域许多软件都提供了强大的插件机制,甚至软件本身只是一个功能十分有限的程序框架,比如Firefox和Eclipse;微软阵营同样也在顺应潮流,最新的IE版本也开始支持用户自定义插件,集成开发工具VS和SSMS也都支持第三方工具扩展。

 

CLI可以借鉴GUI的地方不多,但同样可以在易用性上下工夫。比如快捷键绑定、文件名和指令的自动完成、历史指令窗口等等。若非特殊用途(如服务器操作系统)或特殊情况(如系统故障恢复时GUI界面无法打开),如今一般用户所用的操作系统都是GUI的形式,CLI的Shell只是系统中的一个子系统。有些窗口化的CLI也可以实现炫酷的界面效果,比如半透明窗口、背景贴图,在用户友好和美观性上也不遑多让。

 

值得一提的是上次文章中介绍的AutoHotKey,其作用便是实现GUI工具的组合化自动化,可以称之为GUI与CLI之间的一座桥梁。类似的软件还有AutoIt。

 

 

说到底,软件是一种工具,我们的目的是借助工具解决问题。GUI vs CLI,并非试图谁压倒谁,而是为了让二者优劣互补,提高解决问题的效率。对于在GUI环境下成长起来的电脑用户,CLI领域的奇妙值得去努力探索体验。

 

 

以下是一些GUI与CLI的软件的对比。

 

操作系统(通常包含了GUI和CLI的两套子系统)

GUI:桌面和任务栏、文件浏览器和文件图标、菜单和工具栏。

CLI:Shell或命令提示符。

 

文本编辑器

GUI:Notepad(记事本)、UltraEdit、EmEditor、Notepad++。

CLI:Vim、Emacs(即使是这二者的GUI版,体现的依然是CLI的哲学:与Shell高度结合、自定义、自动化、以及尽可能避免需要让脑和手在键盘与鼠标之间往返)。

 

字处理程序

GUI:Wordpad(写字板)、Word、OpenOffice Writer。

CLI:Tex/LaTex、DocBook。

 

Web浏览器

GUI:IE、Firefox、Safari。

CLI:Lynx。

 

图像图形处理软件、播放器

这不是CLI的领地。

(不过最近发现一款命令行下的音乐播放器MOC)

 

开发工具

对于程序开发工作而言,操作的便利和自动化作业同样重要。因此,立足于GUI的工具(如VS、SQL Server)往往也都提供CLI的访问接口,发源于CLI的程序(如gcc+makefile、MySQL)通常也会附加GUI的操作框架。

 

游戏

GUI:大多数现有的电脑游戏。比较复杂的大型游戏如魔兽争霸和魔兽世界都提供了大量的快捷键,而玩家自行开发的地图和网游外挂可以看作是游戏软件的插件,只是多数外挂往往会破坏游戏的平衡性因而不被运营商认可。

CLI:网游的鼻祖——MUD。MUD游戏可以充分体现CLI的精髓:自定义组合命令、自动化机器人。


原创粉丝点击