CLI or GUI --- 要高效还是要易用? (该文作者的功底真的很深厚啊)
生活随笔
收集整理的這篇文章主要介紹了
CLI or GUI --- 要高效还是要易用? (该文作者的功底真的很深厚啊)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄(?)
[+]
? ?這篇文章很棒 轉載過來欣賞地址httpwwwcnitblogcomaddonearchive2008010838581html ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??要高效還是要易用談CLI與GUI 前言 定義 談一些奇怪的論點 兩者的特點 CLI的哲學 GUI的哲學 協同工作 總結
? ? ? 首先,先聲明一下本人的立場。我個人希望自己是站在一個比較中立的角度上看的。但實際應用上,我用圖形界面的時間遠遠超過命令行界面,所以看問題難免會有一些偏頗,請讀者見諒。
? ? ? ?其次,本文的目的,不是對GUI和CLI進行比較從而得出何者更佳的結論,而是希望探討一下為何關于兩者的討論會演變成一種對立的狀況,以及試圖觸及一下兩種界面方式所代表的截然不同的哲學觀。本文熱烈歡迎全文轉載,懇請注明出處。
? ? ?而CLI則自然是指主要以文本方式作為工作元素,并主要以鍵盤作為輸入工具的工作方式。CLI采用直接輸入命令和參數的方式直接向計算機發送各種指令,通過組織參數和命令的輸入方法來試圖提高工作效率。CLI中同樣可以采用圖形組件以使得界面更為美觀,但這些圖形組件并不像GUI中的那樣具備實際的命令功能(否則就不該稱為CLI了)。
? ? ? 讓我們來看看這個軟件。這是一個著名的GUI軟件的默認界面。說起GUI易用性,大概很多人都能猜到我會選擇這個軟件作為反面教材。
圖1:不那么易用的GUI
? ? ? ?很顯然,這種將按鈕隱藏起來的設計是為了使得界面更加美觀和簡潔。但這種設計實際上大大降低了軟件的易用性和效率。我相信沒有什么人愿意通過先找到那個用來顯示按鈕的按鈕,點一下,再找到剪切、復制或粘貼按鈕,以此來實現剪貼功能。事實上,大多數人會使用快捷鍵的方式。?
? ? ? ?像Office這類功能非常復雜的軟件,設計一個良好的GUI界面會非常費神,其設計難度不亞于一個集成開發環境(IDE,Intergrated Developing Environment)。但復雜性不應該是界面設計糟糕的借口。如上例,事實上用戶根本無法選擇哪個按鈕應該隱藏,哪個不該。把剪切、復制、粘貼、格式刷這樣常用的按鈕隱藏起來的唯一作用,就是敦促用戶通過快捷鍵而非按鈕去使用這些功能。不過既然如此,又何必把這些功能做成按鈕呢?直接拿掉不是更簡潔么??
? ? ?同樣,并非所有的CLI軟件都是高效的。以下是一個著名的CLI軟件的一部分?
?ffmpeg.exe?-i?"D:\Video\Fearless\Fearless.avi"
?-target?film-dvd?-s?720x352
?-padtop?64?-padbottom?64?-maxrate?7350000
?-b?3700000?-sc_threshold?1000000000
?-trellis?-cgop?-g?12?-bf?2?-qblur?0.3?-qcomp?0.7
?-me?full?-dc?10?-mbd?2
?-aspect?16:9?-pass?2?-passlogfile?"D:\Video\ffmpegencode"
?-an?-f?mpeg2video?"D:\Fearless.m2v"
? ? ? ? 如果用戶是要使用完全相同的參數進行大量的批量轉換,以上命令也還勉強算得上“高效”。因為事實上,如果是需要經常使用的話,用戶通常并不會選擇每次都輸入這堆參數,而會使用腳本的方式把以上的命令“包裝”起來,以便于將來的調用。但實際情形則常常更為復雜,用戶實際上很少使用完全同樣的選項進行轉換,而進行“微調”則會成為一件很麻煩的事情,于是就會出現把腳本“包裝”起來以提供更靈活的微調功能的腳本,如此周而復始,層層包裹。
? ? ? ?對于這類軟件來說,由于所提供的功能選項非常豐富,設計參數列表和設計GUI同樣是一件很麻煩的事情。CLI實質上是通過簡化操作步驟和提供批量處理選項,來提高進行重復工作時的操作效率的。如果這個軟件使用的機會并不多,而且每次使用時的選項都不完全一致,那么不僅不易用,而且也很難“高效”起來。
? ? ? GUI由于采用了大量的圖形元素,界面會更顯得具有藝術性,富有人性化。相較于枯燥的文本來說,精致且合理的圖形大大增強了界面的易用性。
圖2: 漂亮的GUI
? ? ? ?GUI所提供的像單選框、多選框這樣的簡潔明了的圖形控件使得軟件操作起來更為直觀。
圖3: 偉大的設計——GUI控件
? ? ? 相較于GUI而言,CLI通常就不具備什么美觀程度了。為了提高性能,CLI通常采用純文本方式工作。
圖4: 一片漆黑的經典CLI界面
? ? ? 當然,也有例外的。
圖5: 現代Linux上的常見CLI界面
? ? ? 為了提高工作效率,CLI通常都能夠以很自然的方式支持批量操作。例如刪除當前目錄下的所有obj文件:
rm?*.obj
? ? ? 這種精確的指令可以保證得到嚴格執行,不會像采用GUI方式一樣,說不定一個不小心會漏掉了一兩個文件。
? ? ? 由于使用了文本方式直接輸入命令,描述起來也比GUI方式輕松得多。例如前面所示命令行的操作,如果需要以GUI方式描述出來的話,少不了一大堆截圖,否則很難讓廣大的菜鳥從浩如煙海的選項中找到自己真正所需要的東西。
? ? ? 最后要提一下快捷鍵。快捷鍵取材于CLI,實質上是一種直接向系統發送指令的操作方式,但由于依賴于GUI,我把它歸為GUI的工作元素,并視為GUI為提高工作效率而向CLI所作的折衷,下文會詳細說明這一點。
? ? ? 由于主要使用文本作為界面,CLI軟件對計算機的要求也低得多,在同等配置的機器上也要比GUI軟件的性能好得多。也正因此,CLI軟件得以在廣大的服務器系統上大行其道,在這些系統上,性能是最重要的。同時,由于具備了比GUI軟件好得多的可伸縮性,CLI的適用范圍也遠比GUI廣泛,在很多嵌入式平臺上,我們甚至只能看到CLI的身影。
? ? ? 但畢竟人不是計算機,符合計算機的工作方式的同時也就意味著不那么人性化。為了用好一個CLI軟件,用戶不得不反反復復地查閱參數手冊,有時還需要做各種參數組合的測試。而且如前所述,對于一些參數復雜的CLI軟件,用起來是頗為令人頭痛的,甚至有時根本就無法發揮CLI本身應有的“高效”。
? ? ? 另外,對于CLI軟件來說,執行結果往往并不是那么清晰的。用戶常常不得不面對滿屏滾動的反饋信息體驗黑客帝國一般的快感,或者是仿效真正的黑客一般從浩瀚的log海洋中尋覓那條絲毫不起眼的提示信息。
? ? ?有人把CLI軟件的工作方式稱為“WYTIWYG”(What You Think Is What You Get,所想即所得)。這種方式的特點在于,雖然沒有直觀地反應出執行結果,但卻能保證執行結果可以和你的意圖一致。從某種程度上來說,這種說法是正確的,因為用戶的意圖總是以命令+參數的方式精確地傳遞給系統,最后雖然不能直觀地看到執行結果,卻總能發現系統已經出色并嚴格地完成了工作。但從某種意義上來說,這種說法是不準確的,因為當面對著長長的參數手冊時,用戶往往已經搞不清自己的意圖到底是什么了。
? ? ?GUI的設計目標就是為了擺脫CLI的弊病,把軟件的輸入和輸出都以更為人性化的形式來展現,從而使得軟件更為易用和直觀。從這種意義上來說,GUI的出現,可以看作是一種“進步”。通過提供一組圖形“控件”,用戶得以以更為自然的方式與計算機進行互動。通過簡潔明了的圖標,用戶可以對軟件的功能一目了然。通過使用新的輸入設備——鼠標,用戶可以以更符合人類習慣的方式“Point & Click”,舒服地向計算機傳遞各種指令。不難想象,GUI的出現對于計算機的發展來說,不啻于一場偉大的革命。
? ? ?GUI軟件可以通過使用大量的圖形元素和圖形特效,從根本上改變軟件的表現形式,“美觀”和“人性化”漸漸成為軟件界面設計的討論主題。隨著計算機處理能力的發展,我們甚至能夠以3D的形式來呈現和操作軟件。大量GUI軟件的出現大大降低了學習和使用計算機的門檻,賞心悅目的操作界面吸引了各行各業的人投入其中。如果說CLI適應了各種各樣的計算機,GUI則適應了各種各樣的人。可以說,要是沒有GUI,也就沒有今天如此繁盛的計算機產業。GUI的出現順應了人們的需求,也是歷史的必然。
? ? ? 然而無論多么精美的界面,電腦程序就是電腦程序,其本質上卻還是需要通過“命令”傳遞給計算機才能發揮作用的。由于中間需要進行“人的習慣”到“計算機的習慣”的轉換,GUI軟件不可能做到如CLI軟件一般的高效和精確。可以說,GUI避免了CLI的弊端,但CLI的優點卻恰恰成為了GUI的缺點。
? ? ?由于大量圖形元素的使用,GUI軟件帶動了計算機硬件的發展,人們對良好界面的追求推動了計算機處理能力的飛速發展。但這同時也說明GUI軟件對計算機硬件的依賴性很強,在需要將GUI軟件移植到其他平臺時,這種依賴性的弊端就會凸現出來。而且即使是在同一平臺上,GUI軟件所耗費的資源要比相同功能的CLI軟件高得多,但所能達到的性能則要低得多。盡管GUI提供了良好的易用性,極大地填補了人機對話的鴻溝,但在另一方面看來,實際上增加了軟件開發的成本,縮小了軟件的適用范圍,同時降低了軟件的工作性能。
? ? ?由于能夠以非常靈活的方式進行設計,GUI軟件的表現形式也是千差萬別。這本來是件好事情,但由于存在太多的GUI設計方式,開發人員在設計復雜的GUI軟件時往往會陷入一種無所適從的困境。為了設計出真正易用好用的GUI軟件,開發商往往不得不求助于藝術家和心理學家,甚至不惜采用“仿真”的方式來設計軟件界面,這大大增加了軟件開發的成本。盡管因此帶動了計算機圖形學和人機界面設計學的發展,但更多的“無良”開發商基于成本的考慮,選擇了濫竽充數得過且過,無視用戶的操作習慣和軟件的易用性,甚至創造出一些難以使用的“GUI”,企圖用更符合自身利益的界面設計來“改善”用戶本身自然的“習慣”和“體驗”,如上面所提到的那個著名的GUI軟件。以操作系統開發商為例,可以說,如今最能堅守易用性陣地的當屬蘋果公司。盡管其產品同樣存在一些瑕疵,但直到今天,蘋果公司仍然堅持發展人機界面設計學,其創造的GUI軟件大都是藝術性和易用性結合的典范。而在微軟Windows系統橫行的國內,在其所推行的“廉價GUI”的理念影響下,能以謹慎的態度學習和應用哪怕是“圖標設計學”的人都已經幾乎絕跡了。這在實際上導致了部分用戶對GUI的反感和抵觸。
圖6:“仿真”式的GUI軟件
圖7:不同操作系統對“圖標一致性”的不同理解
(注:復合式圖標設計的一個基本原則是,圖標的基本部分能夠清楚地表明項目的大類。圖中所列出的圖標均為文檔項目,但Windows的圖標基本上沒有遵循這個原則。KDE的圖標基本遵循,但使用的不同色彩容易引起混淆。而Mac本身的圖標系統就直接支持復合圖標,因此這些圖標的疊加工作實際上是直接由系統完成的。)?
? ? ? 和CLI相對的,GUI的哲學是“WYSIWYG”(What You See Is What You Get,所見即所得),用戶以自己所習慣的方式向系統傳遞指令,并可以立刻在屏幕上以最自然的方式看到執行結果,系統可以保證展示出來的東西和實際處理(如打印、渲染)后的結果基本保持一致。不過這事實上僅僅是GUI的一個設計目標,很多軟件是根本達不到令人滿意的效果的。而且對于用戶來說,如何能把心目中的藍圖展現在計算機上,即使是在GUI高度發達的今天,也還同樣是個問題。
? ? ?Linux在繼承了Unix的血統的同時,也繼承了其龐大的CLI軟件基礎(這種說法很不準確,姑且這么說吧),這跟早期Linux主要應用在服務器市場上有關。隨著Linux系統被越來越多地應用到桌面市場上,對Linux下GUI軟件的呼聲也越來越高,也由此而引發了一系列關于Linux系統的爭議,例如“Linux不是Windows”、“Linux根本不適合用作桌面系統”、“現在的Linux已經不再是Linux了”、“Linux就應該做自己的服務器,不該到桌面市場瞎摻和”。很多人都忘記了Linux僅僅是一個系統核心而已,這不僅能說明為何Linux核心會如此優秀,也能說明為何Linux會具有驚人的伸縮性。Linux核心既能夠和Unix移植過來的大量CLI軟件一起組成一個穩固的服務器系統,自然也能夠搭載各種GUI軟件從而組成一個漂亮的桌面系統,這兩者并不矛盾。
? ? ? ?有些跑題了,但從上面的描述可以看出,Linux進入桌面領域的時間不長,其基礎則主要是建立在過去的大量CLI軟件上的。為了在增強Linux的易用性的同時保留原先的CLI優勢,Linux下的許多GUI軟件采用了GUI前端+CLI后端的方式,也就是編寫一個用于與原CLI軟件進行互動的GUI軟件,兩者協同工作。這種工作方式和我們平常所說的“前臺+后臺”方式并不相同,其CLI部分是一個獨立的軟件,而GUI部分則僅僅是該軟件的一個“Shell”(外殼)而已。GUI部分無法獨立工作,而且開發目的僅僅是為了使該軟件更易用,而并沒有增加任何功能。
? ? ? 這種引人注目的方式具有很多優點,并且在最近得到了越來越廣泛的利用。這種方式結合了GUI和CLI的優點,在使得軟件的易用性得到大大增強的同時,其跨平臺能力以及性能和效率并沒有受到顯著削弱。由于同一個后端程序可以搭配不同的各種前端,從而能夠以較低的開發成本實現較好的跨平臺效果。由于前后端的分開,核心開發人員可以專注于系統性能,而無需受軟件表現形式和輸入方式的影響;而界面開發人員也可以無需關注核心的實現,只需著力于改善界面的易用性和美觀程度即可。這類系統的耦合度通常較低,用戶甚至可以選擇完全使用CLI來工作而無需理會GUI,這也大大降低了系統的維護成本。
圖8: 漂亮的前端和強大的后端:Texshop+Texlive
? ? ? ?這是GUI和CLI協同工作的一個好例子,但它也同樣存在缺陷。最顯而易見的問題在于,對于很多對跨平臺沒有特別要求的純GUI軟件,為了提高效率而分離并開發一個獨立后端顯得完全沒有必要。于是,一些開發商把CLI的一些理念“借”到了GUI軟件中,最常見且有效的莫過于快捷鍵了。快捷鍵本身實際上是一種直接使用鍵盤向系統發送命令的方式,只不過采用按鍵組合的方式來代替了傳統的字符串命令,用戶只需記憶各種按鍵組合即可輕松調用。這種方式既符合GUI的哲學,又引入了CLI的高效,實在是一大創舉,自誕生伊始就被廣泛采用。如今,一個成熟完善的GUI軟件已經根本離不開設計合理的快捷鍵了。
圖9:無孔不入的快捷鍵
? ? ?盡管快捷鍵在一定程度上提高了GUI的效率,但對于復雜的應用來說還是很不足夠,一種“類CLI”方式呼之欲出。微軟Office中Word的域命令方式雖然為Word的易用性蒙上了陰影,卻也為Word帶來了更靈活的工作方式和更強大的功能,我把這種方式稱之為“嵌入GUI中的CLI”。Autodesk公司的AutoCAD則走得更遠,索性大膽地應用了GUI和CLI聯合構建的“復合界面”,用戶需要聯合使用菜單、按鈕、命令工作,以學習難度的增大為代價,帶來的是軟件功能的強大和Autodesk公司的富有。
圖10:無所不能的復合界面
? ?這篇文章很棒, 轉載過來欣賞!地址:http://www.cnitblog.com/addone/archive/2008/01/08/38581.html
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??要高效還是要易用?——談CLI與GUI
前言
? ? ? 自Linux漸漸風行起來,有關圖形界面(GUI,Graphical User Interface)和命令行界面(CLI,Command Line Interface)之爭就一直鬧個不停。看了眾多評論之后,總有些郁悶之意想要發泄一下,雖然覺得有混水摸魚的嫌疑,卻還是不吐不快。? ? ? 首先,先聲明一下本人的立場。我個人希望自己是站在一個比較中立的角度上看的。但實際應用上,我用圖形界面的時間遠遠超過命令行界面,所以看問題難免會有一些偏頗,請讀者見諒。
? ? ? ?其次,本文的目的,不是對GUI和CLI進行比較從而得出何者更佳的結論,而是希望探討一下為何關于兩者的討論會演變成一種對立的狀況,以及試圖觸及一下兩種界面方式所代表的截然不同的哲學觀。本文熱烈歡迎全文轉載,懇請注明出處。
定義
? ? ? 所謂GUI,我的定義是以圖形作為工作元素并以鼠標、鍵盤協同作為主要輸入工具的工作方式。GUI通常使用大量的圖標來標識命令,并且通過組織按鈕、工具欄、對話框等元素的方式來試圖提高界面的直觀性和易用性。通常來說,GUI由于使用了大量的圖形元素,看起來會比較美觀。? ? ?而CLI則自然是指主要以文本方式作為工作元素,并主要以鍵盤作為輸入工具的工作方式。CLI采用直接輸入命令和參數的方式直接向計算機發送各種指令,通過組織參數和命令的輸入方法來試圖提高工作效率。CLI中同樣可以采用圖形組件以使得界面更為美觀,但這些圖形組件并不像GUI中的那樣具備實際的命令功能(否則就不該稱為CLI了)。
談一些奇怪的論點
? ? ? ?一直很奇怪,為何很多人把GUI和“易用性”劃上等號,而把CLI和“高效”劃上等號。盡管從兩者的出發點來說是沒有錯的,但如果說所有應用這些界面的軟件都達到了其期望目標,那無異于一個泡沫般的夢想。? ? ? 讓我們來看看這個軟件。這是一個著名的GUI軟件的默認界面。說起GUI易用性,大概很多人都能猜到我會選擇這個軟件作為反面教材。
圖1:不那么易用的GUI
? ? ? ?很顯然,這種將按鈕隱藏起來的設計是為了使得界面更加美觀和簡潔。但這種設計實際上大大降低了軟件的易用性和效率。我相信沒有什么人愿意通過先找到那個用來顯示按鈕的按鈕,點一下,再找到剪切、復制或粘貼按鈕,以此來實現剪貼功能。事實上,大多數人會使用快捷鍵的方式。?
? ? ? ?像Office這類功能非常復雜的軟件,設計一個良好的GUI界面會非常費神,其設計難度不亞于一個集成開發環境(IDE,Intergrated Developing Environment)。但復雜性不應該是界面設計糟糕的借口。如上例,事實上用戶根本無法選擇哪個按鈕應該隱藏,哪個不該。把剪切、復制、粘貼、格式刷這樣常用的按鈕隱藏起來的唯一作用,就是敦促用戶通過快捷鍵而非按鈕去使用這些功能。不過既然如此,又何必把這些功能做成按鈕呢?直接拿掉不是更簡潔么??
? ? ?同樣,并非所有的CLI軟件都是高效的。以下是一個著名的CLI軟件的一部分?
?ffmpeg.exe?-i?"D:\Video\Fearless\Fearless.avi"
?-target?film-dvd?-s?720x352
?-padtop?64?-padbottom?64?-maxrate?7350000
?-b?3700000?-sc_threshold?1000000000
?-trellis?-cgop?-g?12?-bf?2?-qblur?0.3?-qcomp?0.7
?-me?full?-dc?10?-mbd?2
?-aspect?16:9?-pass?2?-passlogfile?"D:\Video\ffmpegencode"
?-an?-f?mpeg2video?"D:\Fearless.m2v"
? ? ? ? 如果用戶是要使用完全相同的參數進行大量的批量轉換,以上命令也還勉強算得上“高效”。因為事實上,如果是需要經常使用的話,用戶通常并不會選擇每次都輸入這堆參數,而會使用腳本的方式把以上的命令“包裝”起來,以便于將來的調用。但實際情形則常常更為復雜,用戶實際上很少使用完全同樣的選項進行轉換,而進行“微調”則會成為一件很麻煩的事情,于是就會出現把腳本“包裝”起來以提供更靈活的微調功能的腳本,如此周而復始,層層包裹。
? ? ? ?對于這類軟件來說,由于所提供的功能選項非常豐富,設計參數列表和設計GUI同樣是一件很麻煩的事情。CLI實質上是通過簡化操作步驟和提供批量處理選項,來提高進行重復工作時的操作效率的。如果這個軟件使用的機會并不多,而且每次使用時的選項都不完全一致,那么不僅不易用,而且也很難“高效”起來。
兩者的特點
? ? ? 盡管如此,在大多數情況下,GUI確實比CLI更易于使用,而CLI確實要比GUI更高效,因為兩者的設計目標就是如此。? ? ? GUI由于采用了大量的圖形元素,界面會更顯得具有藝術性,富有人性化。相較于枯燥的文本來說,精致且合理的圖形大大增強了界面的易用性。
圖2: 漂亮的GUI
? ? ? ?GUI所提供的像單選框、多選框這樣的簡潔明了的圖形控件使得軟件操作起來更為直觀。
圖3: 偉大的設計——GUI控件
? ? ? 相較于GUI而言,CLI通常就不具備什么美觀程度了。為了提高性能,CLI通常采用純文本方式工作。
圖4: 一片漆黑的經典CLI界面
? ? ? 當然,也有例外的。
圖5: 現代Linux上的常見CLI界面
? ? ? 為了提高工作效率,CLI通常都能夠以很自然的方式支持批量操作。例如刪除當前目錄下的所有obj文件:
rm?*.obj
? ? ? 這種精確的指令可以保證得到嚴格執行,不會像采用GUI方式一樣,說不定一個不小心會漏掉了一兩個文件。
? ? ? 由于使用了文本方式直接輸入命令,描述起來也比GUI方式輕松得多。例如前面所示命令行的操作,如果需要以GUI方式描述出來的話,少不了一大堆截圖,否則很難讓廣大的菜鳥從浩如煙海的選項中找到自己真正所需要的東西。
? ? ? 最后要提一下快捷鍵。快捷鍵取材于CLI,實質上是一種直接向系統發送指令的操作方式,但由于依賴于GUI,我把它歸為GUI的工作元素,并視為GUI為提高工作效率而向CLI所作的折衷,下文會詳細說明這一點。
CLI的哲學
? ? ? CLI可以說是人機界面的遠祖,哪怕是遠古時期的紙帶式計算機,也同樣需要使用“命令行”方式工作(當然載體不同)。可以說命令行是最符合計算機工作方式的操作方式。
? ? ? 由于主要使用文本作為界面,CLI軟件對計算機的要求也低得多,在同等配置的機器上也要比GUI軟件的性能好得多。也正因此,CLI軟件得以在廣大的服務器系統上大行其道,在這些系統上,性能是最重要的。同時,由于具備了比GUI軟件好得多的可伸縮性,CLI的適用范圍也遠比GUI廣泛,在很多嵌入式平臺上,我們甚至只能看到CLI的身影。
? ? ? 但畢竟人不是計算機,符合計算機的工作方式的同時也就意味著不那么人性化。為了用好一個CLI軟件,用戶不得不反反復復地查閱參數手冊,有時還需要做各種參數組合的測試。而且如前所述,對于一些參數復雜的CLI軟件,用起來是頗為令人頭痛的,甚至有時根本就無法發揮CLI本身應有的“高效”。
? ? ? 另外,對于CLI軟件來說,執行結果往往并不是那么清晰的。用戶常常不得不面對滿屏滾動的反饋信息體驗黑客帝國一般的快感,或者是仿效真正的黑客一般從浩瀚的log海洋中尋覓那條絲毫不起眼的提示信息。
? ? ?有人把CLI軟件的工作方式稱為“WYTIWYG”(What You Think Is What You Get,所想即所得)。這種方式的特點在于,雖然沒有直觀地反應出執行結果,但卻能保證執行結果可以和你的意圖一致。從某種程度上來說,這種說法是正確的,因為用戶的意圖總是以命令+參數的方式精確地傳遞給系統,最后雖然不能直觀地看到執行結果,卻總能發現系統已經出色并嚴格地完成了工作。但從某種意義上來說,這種說法是不準確的,因為當面對著長長的參數手冊時,用戶往往已經搞不清自己的意圖到底是什么了。
GUI的哲學
? ? ?GUI是為了使操作直觀而生,最初被蘋果公司應用在其操作系統上。后來蘋果公司更是大膽率先采用鼠標作為輸入設備,從而進一步使得電腦操作更為直觀和易用。不過在那個年代受限于硬件的機能,更由于蘋果一貫的高價策略,GUI長期被視為一種不必要的“奢侈品”,直到微軟的“平民系統”Windows出現,在大量抄襲了蘋果系統的圖形元素后,Windows成功地在低端市場蔓延開來,GUI才終于得以大行其道。從這點上來說,微軟公司還是起到了很積極的作用,對計算機的平民化和易用化作出了不小的貢獻。? ? ?GUI的設計目標就是為了擺脫CLI的弊病,把軟件的輸入和輸出都以更為人性化的形式來展現,從而使得軟件更為易用和直觀。從這種意義上來說,GUI的出現,可以看作是一種“進步”。通過提供一組圖形“控件”,用戶得以以更為自然的方式與計算機進行互動。通過簡潔明了的圖標,用戶可以對軟件的功能一目了然。通過使用新的輸入設備——鼠標,用戶可以以更符合人類習慣的方式“Point & Click”,舒服地向計算機傳遞各種指令。不難想象,GUI的出現對于計算機的發展來說,不啻于一場偉大的革命。
? ? ?GUI軟件可以通過使用大量的圖形元素和圖形特效,從根本上改變軟件的表現形式,“美觀”和“人性化”漸漸成為軟件界面設計的討論主題。隨著計算機處理能力的發展,我們甚至能夠以3D的形式來呈現和操作軟件。大量GUI軟件的出現大大降低了學習和使用計算機的門檻,賞心悅目的操作界面吸引了各行各業的人投入其中。如果說CLI適應了各種各樣的計算機,GUI則適應了各種各樣的人。可以說,要是沒有GUI,也就沒有今天如此繁盛的計算機產業。GUI的出現順應了人們的需求,也是歷史的必然。
? ? ? 然而無論多么精美的界面,電腦程序就是電腦程序,其本質上卻還是需要通過“命令”傳遞給計算機才能發揮作用的。由于中間需要進行“人的習慣”到“計算機的習慣”的轉換,GUI軟件不可能做到如CLI軟件一般的高效和精確。可以說,GUI避免了CLI的弊端,但CLI的優點卻恰恰成為了GUI的缺點。
? ? ?由于大量圖形元素的使用,GUI軟件帶動了計算機硬件的發展,人們對良好界面的追求推動了計算機處理能力的飛速發展。但這同時也說明GUI軟件對計算機硬件的依賴性很強,在需要將GUI軟件移植到其他平臺時,這種依賴性的弊端就會凸現出來。而且即使是在同一平臺上,GUI軟件所耗費的資源要比相同功能的CLI軟件高得多,但所能達到的性能則要低得多。盡管GUI提供了良好的易用性,極大地填補了人機對話的鴻溝,但在另一方面看來,實際上增加了軟件開發的成本,縮小了軟件的適用范圍,同時降低了軟件的工作性能。
? ? ?由于能夠以非常靈活的方式進行設計,GUI軟件的表現形式也是千差萬別。這本來是件好事情,但由于存在太多的GUI設計方式,開發人員在設計復雜的GUI軟件時往往會陷入一種無所適從的困境。為了設計出真正易用好用的GUI軟件,開發商往往不得不求助于藝術家和心理學家,甚至不惜采用“仿真”的方式來設計軟件界面,這大大增加了軟件開發的成本。盡管因此帶動了計算機圖形學和人機界面設計學的發展,但更多的“無良”開發商基于成本的考慮,選擇了濫竽充數得過且過,無視用戶的操作習慣和軟件的易用性,甚至創造出一些難以使用的“GUI”,企圖用更符合自身利益的界面設計來“改善”用戶本身自然的“習慣”和“體驗”,如上面所提到的那個著名的GUI軟件。以操作系統開發商為例,可以說,如今最能堅守易用性陣地的當屬蘋果公司。盡管其產品同樣存在一些瑕疵,但直到今天,蘋果公司仍然堅持發展人機界面設計學,其創造的GUI軟件大都是藝術性和易用性結合的典范。而在微軟Windows系統橫行的國內,在其所推行的“廉價GUI”的理念影響下,能以謹慎的態度學習和應用哪怕是“圖標設計學”的人都已經幾乎絕跡了。這在實際上導致了部分用戶對GUI的反感和抵觸。
| QCD Player | |
| Xine Player |
| Windows | |
| Linux (KDE) | |
| Mac OS X |
(注:復合式圖標設計的一個基本原則是,圖標的基本部分能夠清楚地表明項目的大類。圖中所列出的圖標均為文檔項目,但Windows的圖標基本上沒有遵循這個原則。KDE的圖標基本遵循,但使用的不同色彩容易引起混淆。而Mac本身的圖標系統就直接支持復合圖標,因此這些圖標的疊加工作實際上是直接由系統完成的。)?
? ? ? 和CLI相對的,GUI的哲學是“WYSIWYG”(What You See Is What You Get,所見即所得),用戶以自己所習慣的方式向系統傳遞指令,并可以立刻在屏幕上以最自然的方式看到執行結果,系統可以保證展示出來的東西和實際處理(如打印、渲染)后的結果基本保持一致。不過這事實上僅僅是GUI的一個設計目標,很多軟件是根本達不到令人滿意的效果的。而且對于用戶來說,如何能把心目中的藍圖展現在計算機上,即使是在GUI高度發達的今天,也還同樣是個問題。
協同工作
? ? ?在如今的大多數軟件產品中,純GUI并沒有所期望的那么“易用”,而純CLI系統也沒有所想象的那么“高效”。作為一名程序員,我在從Windows平臺向Linux平臺轉換的過程中,發現了一個很有趣的現象。? ? ?Linux在繼承了Unix的血統的同時,也繼承了其龐大的CLI軟件基礎(這種說法很不準確,姑且這么說吧),這跟早期Linux主要應用在服務器市場上有關。隨著Linux系統被越來越多地應用到桌面市場上,對Linux下GUI軟件的呼聲也越來越高,也由此而引發了一系列關于Linux系統的爭議,例如“Linux不是Windows”、“Linux根本不適合用作桌面系統”、“現在的Linux已經不再是Linux了”、“Linux就應該做自己的服務器,不該到桌面市場瞎摻和”。很多人都忘記了Linux僅僅是一個系統核心而已,這不僅能說明為何Linux核心會如此優秀,也能說明為何Linux會具有驚人的伸縮性。Linux核心既能夠和Unix移植過來的大量CLI軟件一起組成一個穩固的服務器系統,自然也能夠搭載各種GUI軟件從而組成一個漂亮的桌面系統,這兩者并不矛盾。
? ? ? ?有些跑題了,但從上面的描述可以看出,Linux進入桌面領域的時間不長,其基礎則主要是建立在過去的大量CLI軟件上的。為了在增強Linux的易用性的同時保留原先的CLI優勢,Linux下的許多GUI軟件采用了GUI前端+CLI后端的方式,也就是編寫一個用于與原CLI軟件進行互動的GUI軟件,兩者協同工作。這種工作方式和我們平常所說的“前臺+后臺”方式并不相同,其CLI部分是一個獨立的軟件,而GUI部分則僅僅是該軟件的一個“Shell”(外殼)而已。GUI部分無法獨立工作,而且開發目的僅僅是為了使該軟件更易用,而并沒有增加任何功能。
? ? ? 這種引人注目的方式具有很多優點,并且在最近得到了越來越廣泛的利用。這種方式結合了GUI和CLI的優點,在使得軟件的易用性得到大大增強的同時,其跨平臺能力以及性能和效率并沒有受到顯著削弱。由于同一個后端程序可以搭配不同的各種前端,從而能夠以較低的開發成本實現較好的跨平臺效果。由于前后端的分開,核心開發人員可以專注于系統性能,而無需受軟件表現形式和輸入方式的影響;而界面開發人員也可以無需關注核心的實現,只需著力于改善界面的易用性和美觀程度即可。這類系統的耦合度通常較低,用戶甚至可以選擇完全使用CLI來工作而無需理會GUI,這也大大降低了系統的維護成本。
圖8: 漂亮的前端和強大的后端:Texshop+Texlive
? ? ? ?這是GUI和CLI協同工作的一個好例子,但它也同樣存在缺陷。最顯而易見的問題在于,對于很多對跨平臺沒有特別要求的純GUI軟件,為了提高效率而分離并開發一個獨立后端顯得完全沒有必要。于是,一些開發商把CLI的一些理念“借”到了GUI軟件中,最常見且有效的莫過于快捷鍵了。快捷鍵本身實際上是一種直接使用鍵盤向系統發送命令的方式,只不過采用按鍵組合的方式來代替了傳統的字符串命令,用戶只需記憶各種按鍵組合即可輕松調用。這種方式既符合GUI的哲學,又引入了CLI的高效,實在是一大創舉,自誕生伊始就被廣泛采用。如今,一個成熟完善的GUI軟件已經根本離不開設計合理的快捷鍵了。
圖9:無孔不入的快捷鍵
? ? ?盡管快捷鍵在一定程度上提高了GUI的效率,但對于復雜的應用來說還是很不足夠,一種“類CLI”方式呼之欲出。微軟Office中Word的域命令方式雖然為Word的易用性蒙上了陰影,卻也為Word帶來了更靈活的工作方式和更強大的功能,我把這種方式稱之為“嵌入GUI中的CLI”。Autodesk公司的AutoCAD則走得更遠,索性大膽地應用了GUI和CLI聯合構建的“復合界面”,用戶需要聯合使用菜單、按鈕、命令工作,以學習難度的增大為代價,帶來的是軟件功能的強大和Autodesk公司的富有。
圖10:無所不能的復合界面
總結
? ? ? 如今我們可以看到廣大的GUI擁躉在Windows下使用“Win+R”來輸入命令以快速調用程序,也可以看到堅定的CLI信徒在Linux下使用FB(Frame Buffer)來為自己的終端界面增光添彩。GUI和CLI不是敵對的,靈活運用兩者的特點才能開發出更符合用戶需求的人機界面。所以,我真的很不明白,為何有這么多人陷入在“GUI還是CLI”這樣的爭論中無法自拔,甚至還出現了很多宣稱“自己喜歡哪個就選哪個好了,吵什么吵”的和事佬。? ? ? 其實,對于用戶來說,直觀、易用且高效的操作方式才是受歡迎的,開發者又何必拘泥于一種固定的操作方式呢?而且,正如很多人所指出的一樣,高效、直觀,其實有時僅僅取決于用戶的習慣而已。如其爭論“GUI好還是CLI好”這樣的話題,倒還不如多花點時間來研究個更好用的操作界面吧。
總結
以上是生活随笔為你收集整理的CLI or GUI --- 要高效还是要易用? (该文作者的功底真的很深厚啊)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IEEE深度对话Facebook人工智能
- 下一篇: 瀑布式开发、迭代式开发、螺旋开发、敏捷开