原文地址:http://www.cnitblog.com/addone/archive/2008/01/08/38581.html
前言
自Linux漸漸風(fēng)行起來(lái),有關(guān)圖形界面(GUI,Graphical User Interface)和命令行界面(CLI,Command Line Interface)之爭(zhēng)就一直鬧個(gè)不停??戳吮姸嘣u(píng)論之后,總有些郁悶之意想要發(fā)泄一下,雖然覺(jué)得有混水摸魚(yú)的嫌疑,卻還是不吐不快。首先先聲明一下本人的立場(chǎng)。我個(gè)人希望自己是站在一個(gè)比較中立的角度上看的。但實(shí)際應(yīng)用上,我用圖形界面的時(shí)間遠(yuǎn)遠(yuǎn)超過(guò)命令行界面,所以看問(wèn)題難免會(huì)有一些偏頗,請(qǐng)讀者見(jiàn)諒。其次,本文的目的,不是對(duì)GUI和CLI進(jìn)行比較從而得出何者更佳的結(jié)論,而是希望探討一下為何關(guān)于兩者的討論會(huì)演變成一種對(duì)立的狀況,以及試圖觸及一下兩種界面方式所代表的截然不同的哲學(xué)觀。本文熱烈歡迎全文轉(zhuǎn)載,懇請(qǐng)注明出處。定義
所謂GUI,我的定義是以圖形作為工作元素并以鼠標(biāo)、鍵盤協(xié)同作為主要輸入工具的工作方式。GUI通常使用大量的圖標(biāo)來(lái)標(biāo)識(shí)命令,并且通過(guò)組織按鈕、工具欄、對(duì)話框等元素的方式來(lái)試圖提高界面的直觀性和易用性。通常來(lái)說(shuō),GUI由于使用了大量的圖形元素,看起來(lái)會(huì)比較美觀。而CLI則自然是指主要以文本方式作為工作元素,并主要以鍵盤作為輸入工具的工作方式。CLI采用直接輸入命令和參數(shù)的方式直接向計(jì)算機(jī)發(fā)送各種指令,通過(guò)組織參數(shù)和命令的輸入方法來(lái)試圖提高工作效率。CLI中同樣可以采用圖形組件以使得界面更為美觀,但這些圖形組件并不像GUI中的那樣具備實(shí)際的命令功能(否則就不該稱為CLI了)。談一些奇怪的論點(diǎn)
一直很奇怪,為何很多人把GUI和“易用性”劃上等號(hào),而把CLI和“高效”劃上等號(hào)。盡管從兩者的出發(fā)點(diǎn)來(lái)說(shuō)是沒(méi)有錯(cuò)的,但如果說(shuō)所有應(yīng)用這些界面的軟件都達(dá)到了其期望目標(biāo),那無(wú)異于一個(gè)泡沫般的夢(mèng)想。讓我們來(lái)看看這個(gè)軟件。這是一個(gè)著名的GUI軟件的默認(rèn)界面。說(shuō)起GUI易用性,大概很多人都能猜到我會(huì)選擇這個(gè)軟件作為反面教材。
如果用戶是要使用完全相同的參數(shù)進(jìn)行大量的批量轉(zhuǎn)換,以上命令也還勉強(qiáng)算得上“高效”。因?yàn)槭聦?shí)上,如果是需要經(jīng)常使用的話,用戶通常并不會(huì)選擇每次都輸入這堆參數(shù),而會(huì)使用腳本的方式把以上的命令“包裝”起來(lái),以便于將來(lái)的調(diào)用。但實(shí)際情形則常常更為復(fù)雜,用戶實(shí)際上很少使用完全同樣的選項(xiàng)進(jìn)行轉(zhuǎn)換,而進(jìn)行“微調(diào)”則會(huì)成為一件很麻煩的事情,于是就會(huì)出現(xiàn)把腳本“包裝”起來(lái)以提供更靈活的微調(diào)功能的腳本,如此周而復(fù)始,層層包裹。對(duì)于這類軟件來(lái)說(shuō),由于所提供的功能選項(xiàng)非常豐富,設(shè)計(jì)參數(shù)列表和設(shè)計(jì)GUI同樣是一件很麻煩的事情。CLI實(shí)質(zhì)上是通過(guò)簡(jiǎn)化操作步驟和提供批量處理選項(xiàng),來(lái)提高進(jìn)行重復(fù)工作時(shí)的操作效率的。如果這個(gè)軟件使用的機(jī)會(huì)并不多,而且每次使用時(shí)的選項(xiàng)都不完全一致,那么不僅不易用,而且也很難“高效”起來(lái)。兩者的特點(diǎn)
盡管如此,在大多數(shù)情況下,GUI確實(shí)比CLI更易于使用,而CLI確實(shí)要比GUI更高效,因?yàn)閮烧叩脑O(shè)計(jì)目標(biāo)就是如此。GUI由于采用了大量的圖形元素,界面會(huì)更顯得具有藝術(shù)性,富有人性化。相較于枯燥的文本來(lái)說(shuō),精致且合理的圖形大大增強(qiáng)了界面的易用性。
這種精確的指令可以保證得到嚴(yán)格執(zhí)行,不會(huì)像采用GUI方式一樣,說(shuō)不定一個(gè)不小心會(huì)漏掉了一兩個(gè)文件。由于使用了文本方式直接輸入命令,描述起來(lái)也比GUI方式輕松得多。例如前面所示命令行的操作,如果需要以GUI方式描述出來(lái)的話,少不了一大堆截圖,否則很難讓廣大的菜鳥(niǎo)從浩如煙海的選項(xiàng)中找到自己真正所需要的東西。最后要提一下快捷鍵??旖萱I取材于CLI,實(shí)質(zhì)上是一種直接向系統(tǒng)發(fā)送指令的操作方式,但由于依賴于GUI,我把它歸為GUI的工作元素,并視為GUI為提高工作效率而向CLI所作的折衷,下文會(huì)詳細(xì)說(shuō)明這一點(diǎn)。CLI的哲學(xué)
CLI可以說(shuō)是人機(jī)界面的遠(yuǎn)祖,哪怕是遠(yuǎn)古時(shí)期的紙帶式計(jì)算機(jī),也同樣需要使用“命令行”方式工作(當(dāng)然載體不同)??梢哉f(shuō)命令行是最符合計(jì)算機(jī)工作方式的操作方式。CLI的身上,帶有編程的“影子”。各種選項(xiàng)以命令參數(shù)的方式傳遞給系統(tǒng),我們所需要做的唯一事情就是查閱手冊(cè)并選擇適當(dāng)?shù)膮?shù),然后用鍵盤一股腦兒敲進(jìn)去,然后就是回車并等待執(zhí)行結(jié)果。如前所述,這種操作方式具有很便利的可重復(fù)性,我們可以把這條命令保存為一個(gè)腳本以供將來(lái)直接調(diào)用,也可以粘貼到網(wǎng)絡(luò)上,任何人都能直接復(fù)制并粘貼到自己的電腦上執(zhí)行并得到同樣的結(jié)果。由于主要使用文本作為界面,CLI軟件對(duì)計(jì)算機(jī)的要求也低得多,在同等配置的機(jī)器上也要比GUI軟件的性能好得多。也正因此,CLI軟件得以在廣大的服務(wù)器系統(tǒng)上大行其道,在這些系統(tǒng)上,性能是最重要的。同時(shí),由于具備了比GUI軟件好得多的可伸縮性,CLI的適用范圍也遠(yuǎn)比GUI廣泛,在很多嵌入式平臺(tái)上,我們甚至只能看到CLI的身影。但畢竟人不是計(jì)算機(jī),符合計(jì)算機(jī)的工作方式的同時(shí)也就意味著不那么人性化。為了用好一個(gè)CLI軟件,用戶不得不反反復(fù)復(fù)地查閱參數(shù)手冊(cè),有時(shí)還需要做各種參數(shù)組合的測(cè)試。而且如前所述,對(duì)于一些參數(shù)復(fù)雜的CLI軟件,用起來(lái)是頗為令人頭痛的,甚至有時(shí)根本就無(wú)法發(fā)揮CLI本身應(yīng)有的“高效”。另外,對(duì)于CLI軟件來(lái)說(shuō),執(zhí)行結(jié)果往往并不是那么清晰的。用戶常常不得不面對(duì)滿屏滾動(dòng)的反饋信息體驗(yàn)黑客帝國(guó)一般的快感,或者是仿效真正的黑客一般從浩瀚的log海洋中尋覓那條絲毫不起眼的提示信息。有人把CLI軟件的工作方式稱為“WYTIWYG”(What You Think Is What You Get,所想即所得)。這種方式的特點(diǎn)在于,雖然沒(méi)有直觀地反應(yīng)出執(zhí)行結(jié)果,但卻能保證執(zhí)行結(jié)果可以和你的意圖一致。從某種程度上來(lái)說(shuō),這種說(shuō)法是正確的,因?yàn)橛脩舻囊鈭D總是以命令+參數(shù)的方式精確地傳遞給系統(tǒng),最后雖然不能直觀地看到執(zhí)行結(jié)果,卻總能發(fā)現(xiàn)系統(tǒng)已經(jīng)出色并嚴(yán)格地完成了工作。但從某種意義上來(lái)說(shuō),這種說(shuō)法是不準(zhǔn)確的,因?yàn)楫?dāng)面對(duì)著長(zhǎng)長(zhǎng)的參數(shù)手冊(cè)時(shí),用戶往往已經(jīng)搞不清自己的意圖到底是什么了。GUI的哲學(xué)
GUI是為了使操作直觀而生,最初被蘋果公司應(yīng)用在其操作系統(tǒng)上。后來(lái)蘋果公司更是大膽率先采用鼠標(biāo)作為輸入設(shè)備,從而進(jìn)一步使得電腦操作更為直觀和易用。不過(guò)在那個(gè)年代受限于硬件的機(jī)能,更由于蘋果一貫的高價(jià)策略,GUI長(zhǎng)期被視為一種不必要的“奢侈品”,直到微軟的“平民系統(tǒng)”Windows出現(xiàn),在大量抄襲了蘋果系統(tǒng)的圖形元素后,Windows成功地在低端市場(chǎng)蔓延開(kāi)來(lái),GUI才終于得以大行其道。從這點(diǎn)上來(lái)說(shuō),微軟公司還是起到了很積極的作用,對(duì)計(jì)算機(jī)的平民化和易用化作出了不小的貢獻(xiàn)。GUI的設(shè)計(jì)目標(biāo)就是為了擺脫CLI的弊病,把軟件的輸入和輸出都以更為人性化的形式來(lái)展現(xiàn),從而使得軟件更為易用和直觀。從這種意義上來(lái)說(shuō),GUI的出現(xiàn),可以看作是一種“進(jìn)步”。通過(guò)提供一組圖形“控件”,用戶得以以更為自然的方式與計(jì)算機(jī)進(jìn)行互動(dòng)。通過(guò)簡(jiǎn)潔明了的圖標(biāo),用戶可以對(duì)軟件的功能一目了然。通過(guò)使用新的輸入設(shè)備——鼠標(biāo),用戶可以以更符合人類習(xí)慣的方式“Point & Click”,舒服地向計(jì)算機(jī)傳遞各種指令。不難想象,GUI的出現(xiàn)對(duì)于計(jì)算機(jī)的發(fā)展來(lái)說(shuō),不啻于一場(chǎng)偉大的革命。GUI軟件可以通過(guò)使用大量的圖形元素和圖形特效,從根本上改變軟件的表現(xiàn)形式,“美觀”和“人性化”漸漸成為軟件界面設(shè)計(jì)的討論主題。隨著計(jì)算機(jī)處理能力的發(fā)展,我們甚至能夠以3D的形式來(lái)呈現(xiàn)和操作軟件。大量GUI軟件的出現(xiàn)大大降低了學(xué)習(xí)和使用計(jì)算機(jī)的門檻,賞心悅目的操作界面吸引了各行各業(yè)的人投入其中。如果說(shuō)CLI適應(yīng)了各種各樣的計(jì)算機(jī),GUI則適應(yīng)了各種各樣的人。可以說(shuō),要是沒(méi)有GUI,也就沒(méi)有今天如此繁盛的計(jì)算機(jī)產(chǎn)業(yè)。GUI的出現(xiàn)順應(yīng)了人們的需求,也是歷史的必然。然而無(wú)論多么精美的界面,電腦程序就是電腦程序,其本質(zhì)上卻還是需要通過(guò)“命令”傳遞給計(jì)算機(jī)才能發(fā)揮作用的。由于中間需要進(jìn)行“人的習(xí)慣”到“計(jì)算機(jī)的習(xí)慣”的轉(zhuǎn)換,GUI軟件不可能做到如CLI軟件一般的高效和精確??梢哉f(shuō),GUI避免了CLI的弊端,但CLI的優(yōu)點(diǎn)卻恰恰成為了GUI的缺點(diǎn)。由于大量圖形元素的使用,GUI軟件帶動(dòng)了計(jì)算機(jī)硬件的發(fā)展,人們對(duì)良好界面的追求推動(dòng)了計(jì)算機(jī)處理能力的飛速發(fā)展。但這同時(shí)也說(shuō)明GUI軟件對(duì)計(jì)算機(jī)硬件的依賴性很強(qiáng),在需要將GUI軟件移植到其他平臺(tái)時(shí),這種依賴性的弊端就會(huì)凸現(xiàn)出來(lái)。而且即使是在同一平臺(tái)上,GUI軟件所耗費(fèi)的資源要比相同功能的CLI軟件高得多,但所能達(dá)到的性能則要低得多。盡管GUI提供了良好的易用性,極大地填補(bǔ)了人機(jī)對(duì)話的鴻溝,但在另一方面看來(lái),實(shí)際上增加了軟件開(kāi)發(fā)的成本,縮小了軟件的適用范圍,同時(shí)降低了軟件的工作性能。由于能夠以非常靈活的方式進(jìn)行設(shè)計(jì),GUI軟件的表現(xiàn)形式也是千差萬(wàn)別。這本來(lái)是件好事情,但由于存在太多的GUI設(shè)計(jì)方式,開(kāi)發(fā)人員在設(shè)計(jì)復(fù)雜的GUI軟件時(shí)往往會(huì)陷入一種無(wú)所適從的困境。為了設(shè)計(jì)出真正易用好用的GUI軟件,開(kāi)發(fā)商往往不得不求助于藝術(shù)家和心理學(xué)家,甚至不惜采用“仿真”的方式來(lái)設(shè)計(jì)軟件界面,這大大增加了軟件開(kāi)發(fā)的成本。盡管因此帶動(dòng)了計(jì)算機(jī)圖形學(xué)和人機(jī)界面設(shè)計(jì)學(xué)的發(fā)展,但更多的“無(wú)良”開(kāi)發(fā)商基于成本的考慮,選擇了濫竽充數(shù)得過(guò)且過(guò),無(wú)視用戶的操作習(xí)慣和軟件的易用性,甚至創(chuàng)造出一些難以使用的“GUI”,企圖用更符合自身利益的界面設(shè)計(jì)來(lái)“改善”用戶本身自然的“習(xí)慣”和“體驗(yàn)”,如上面所提到的那個(gè)著名的GUI軟件。以操作系統(tǒng)開(kāi)發(fā)商為例,可以說(shuō),如今最能堅(jiān)守易用性陣地的當(dāng)屬蘋果公司。盡管其產(chǎn)品同樣存在一些瑕疵,但直到今天,蘋果公司仍然堅(jiān)持發(fā)展人機(jī)界面設(shè)計(jì)學(xué),其創(chuàng)造的GUI軟件大都是藝術(shù)性和易用性結(jié)合的典范。而在微軟Windows系統(tǒng)橫行的國(guó)內(nèi),在其所推行的“廉價(jià)GUI”的理念影響下,能以謹(jǐn)慎的態(tài)度學(xué)習(xí)和應(yīng)用哪怕是“圖標(biāo)設(shè)計(jì)學(xué)”的人都已經(jīng)幾乎絕跡了。這在實(shí)際上導(dǎo)致了部分用戶對(duì)GUI的反感和抵觸。QCD Player
Xine Player
圖6:“仿真”式的GUI軟件Windows
Linux (KDE)
Mac OS X
圖7:不同操作系統(tǒng)對(duì)“圖標(biāo)一致性”的不同理解(注:復(fù)合式圖標(biāo)設(shè)計(jì)的一個(gè)基本原則是,圖標(biāo)的基本部分能夠清楚地表明項(xiàng)目的大類。圖中所列出的圖標(biāo)均為文檔項(xiàng)目,但Windows的圖標(biāo)基本上沒(méi)有遵循這個(gè)原則。KDE的圖標(biāo)基本遵循,但使用的不同色彩容易引起混淆。而Mac本身的圖標(biāo)系統(tǒng)就直接支持復(fù)合圖標(biāo),因此這些圖標(biāo)的疊加工作實(shí)際上是直接由系統(tǒng)完成的。) 和CLI相對(duì)的,GUI的哲學(xué)是“WYSIWYG”(What You See Is What You Get,所見(jiàn)即所得),用戶以自己所習(xí)慣的方式向系統(tǒng)傳遞指令,并可以立刻在屏幕上以最自然的方式看到執(zhí)行結(jié)果,系統(tǒng)可以保證展示出來(lái)的東西和實(shí)際處理(如打印、渲染)后的結(jié)果基本保持一致。不過(guò)這事實(shí)上僅僅是GUI的一個(gè)設(shè)計(jì)目標(biāo),很多軟件是根本達(dá)不到令人滿意的效果的。而且對(duì)于用戶來(lái)說(shuō),如何能把心目中的藍(lán)圖展現(xiàn)在計(jì)算機(jī)上,即使是在GUI高度發(fā)達(dá)的今天,也還同樣是個(gè)問(wèn)題。協(xié)同工作
如今我們可以看到廣大的GUI擁躉在Windows下使用“Win+R”來(lái)輸入命令以快速調(diào)用程序,也可以看到堅(jiān)定的CLI信徒在Linux下使用FB(Frame Buffer)來(lái)為自己的終端界面增光添彩。GUI和CLI不是敵對(duì)的,靈活運(yùn)用兩者的特點(diǎn)才能開(kāi)發(fā)出更符合用戶需求的人機(jī)界面。所以,我真的很不明白,為何有這么多人陷入在“GUI還是CLI”這樣的爭(zhēng)論中無(wú)法自拔,甚至還出現(xiàn)了很多宣稱“自己喜歡哪個(gè)就選哪個(gè)好了,吵什么吵”的和事佬。其實(shí),對(duì)于用戶來(lái)說(shuō),直觀、易用且高效的操作方式才是受歡迎的,開(kāi)發(fā)者又何必拘泥于一種固定的操作方式呢?而且,正如很多人所指出的一樣,高效、直觀,其實(shí)有時(shí)僅僅取決于用戶的習(xí)慣而已。如其爭(zhēng)論“GUI好還是CLI好”這樣的話題,倒還不如多花點(diǎn)時(shí)間來(lái)研究個(gè)更好用的操作界面吧。