close
文字命令式的操作環境為什麼一直沒有被淘汰?

前言

這本是為了回答一位朋友的問題,寫著寫著就變成一篇文了!貼在這裡也能給有相同疑惑的人做個參考。

對使用電腦稍微熟悉的人應該都知道,多數的作業系統都有一個純文字的操作環境, 以主流的 Windows 為例,開啟「命令提示字元」這支程式就可以使用這樣的環境。 在這文字的環境下,使用者依然可以執行許多的系統操作, 使用者輸入文字命令給電腦,然後電腦可能也會以文字訊息回報給使用者; 在這裡一切都是文字,沒有圖片、也沒有按鈕。 許多人可能都會覺得這個介面不容易學習使用,也可能會覺得這個介面既不美觀也沒有現代感, 同時也產生了可能很多人都共同存在的一個疑問:為什麼這種落伍的操作環境仍然存在而沒有被淘汰?

用文字操作電腦的時代

這種文字的操作介面有很多不同的稱呼,一般常聽見的有 「終端機」、「指令列模式」、「文字模式」、「命令提示字元」、或是「DOS 模式」。 指令列模式的起源甚早,幾乎是在螢幕顯示器和鍵盤出現在電腦上的同時就誕生了! 這種親和力甚高的電腦操作方式很快的流行起來,因為在此之前的電腦可能是靠著 燈號、打孔卡、電路開關、甚至是插線在操作的。 指令操作模式的產生,讓使用者得以與之互動,使用像在與電腦進行對話的方式來使用電腦, 而這也就是一直流傳到現在仍在大量使用的一種操作電腦的方式。

圖形操作介面橫空出世

指令操作模式一直主宰著數位電腦, 直到 1984 年,Apple 推出的 Macintosh 電腦顛覆世人的觀感,掀起了另一場數位電腦的革命風潮。 Macintosh 引入了讓人耳目一新的圖像式操作方式,也是首次把滑鼠帶到世人眼前 (雖然說在此之前 Apple 的 Lisa 電腦首次使用了圖像式操作介面,但因為開發和銷售上的嚴重失敗 ,以致其幾乎不存在於大部份人的記憶中)。 Macintosh 的螢幕被各種易懂的圖形佔滿,使用者可以透過滑鼠的點選、拖拉來進行多數的基本操作, 一切都是那麼的直覺、容易、方便、漂亮,令人為之瘋狂。 Macintosh 的推出引起市場上的大震憾,改變了電腦產業的版圖, 也令 Microsoft 急於在隔年推出與之相仿的 Windows 1.0。 Macintosh 對世界的影響如此巨大,直到今日,Apple 所推出的電腦仍被稱作「Mac」。

當圖像式操作模式以征服者之姿快速佔領了大部份的近代電腦版圖, 人們開始思考文字命令模式該何去何從的問題。 有一派的人認為文字式工作環境的時代已成過去,未來是圖像式工作環境的天下; 並且這一派的人很可能會鄙視文字式工作介面,視他們為一種過時的產物。 Microsoft 便是這一個派系的著名例子,他們在策略上想要完全的揚棄文字工作介面, 並幾乎將所有的開發資源轉移至圖形化軟體的開發。 有在 Windows 上使用命令提示字元的人應該不難發現到, 這個工作環境從 DOS 以來幾乎沒有任何的更動, 與其他系統上的文字工作環境如 Bash 相比顯得嚴重落後。 從二十年來 Windows 幾乎佔領所有 PC 電腦的結果來看,Microsoft 當時的決定應是蠻正確的。 然而二十年後的 Microsoft 卻無法忽略文字式的工作模式在某些應用上仍有令圖形模式所忘之莫及的優勢, 這可以從兩個地方看得出來,其一是 Windows 始終割捨不掉命令提示字元, 雖然他們從前曾誇口將要移除這個介面,使文字模式在 Windows 中成為歷史; 其二是後來在其它強大的文字式作業環境的威脅下被逼的發展了像 PowerShell 這樣的文字工作介面, 甚至在近年還打算推出 Bash on Windows 的產品!

另外一派人則走向另一個極端,這一派以 UNIX 家族為代表。 他們有些人可能曾經不甘示弱的發展了一下圖形工作介面, 卻也很快的發現到圖形介面在某些重要方面的表現遠不如文字介面的事實, 於是二十多年來幾乎放了全力在既有的文字式工作介面上, 至於圖形介面的部份則蜻蜓點水,堪用就好; 有趣的是,這一派的人很可能將文字工作介面奉為圭臬,並且藐視圖形工作介面,視其為無效率的雞肋。

文字操作模式的優點

說了這麼多的故事,確仍沒有解答我們最初的問題: 文字式的工作環境究竟擁有什麼迷人的優點,使這種古老的介面仍然大行其道? 以簡單的一句話來解答這個問題的話,那應該就是: 強大的工作效率、方便的自動化能力、和無盡的組合可能。

說到文字模式的工作效率,可能很多人會難以認同, 因為在大部份人的經驗中,要靠著用鍵盤下達指令叫電腦工作的話, 通常會先需要記憶很多的命令、以及每個命令的參數,最終還要一鍵一鍵的敲下正確的拼字後, 才能讓電腦做一件事。 要解釋這件事,我們得先從另一個例子來看。

以快速鍵操作為例

大多數的人應該都知道一些電腦系統、或應用軟體的快速功能鍵或功能組合鍵吧? 最多人知悉並且平常使用機率最高的快速組合鍵大概就是「Ctrl+C」和「Ctrl+V」了! 想想若是有一天這兩組功能鍵不再有作用的話,應該足以讓很多人跳腳吧? 為什麼?一言以敝之就是速度和效率!

不知各位是否曾見過一些專業的或資深的文字編輯人員? 他們使用電腦時,眼睛盯著螢幕、手指快速在鍵盤上飛舞,畫面上一份文件以極快的速度被編輯著, 快速又有效率。 這些人除了打字快以外,通常還熟按作業系統或應用軟體的各種快速功能鍵。 我記得從前有一套文書編輯軟體,在新的版本上,畫面變得極其漂亮, 各式又大又富有美感的按鈕花花綠綠的佔滿了螢幕的空間, 當按下大部份的功能按鈕時,通常還會伴隨著某些華麗的動畫特效, 這套軟體在當時能夠立刻的吸引新使用者的目光; 但各位若能站在專業文書編排人員的位置,以他們的角度揣摩他們的心境, 不知會給予這套軟體怎麼樣的評價? 可能,他們會為這些功能按鈕佔據了文字版面而苦惱; 可能,華麗的功能特效在他們眼裡沒有任何價值,反而還會嫌這些東西拖慢功能處理的速度; 可能,這一切的創意比不上一些簡單而強大的功能鍵組合。 然而,一般的非專業使用者如何能體會這些人的抱怨?

以軟體所設計的快速功能鍵做為例子,來說明文字式的工作模式,則他們共同擁有以下特點: 入門門檻高,因為你必須先背熟一些功能鍵的組合、或文字命令後才能夠使用; 但當你熟練以後,他卻能帶給你極有效率的工作模式。 其可能沒有吸引一般人的外在華麗表皮;但當你上手之後,確也不再在意這些問題了!

如果你可以體會快速鍵的價值,那麼應該就不難理解文字命令的優點。 文字命令的工作模式比起快速鍵可能有更高的入門門檻; 但當你熟練以後,它卻能帶來令人愛不釋手的甜蜜。

快速

首先,文字命令的輸入其實並不是那麼的不方便, 在近代如 Bash 等工作環境的輔助之下,命令的自動完成和提示機制加速了指令的輸入及查找。 再者,實際上不是每次工作時的每一個命令都要用鍵盤敲的! 我們可以把一些常用的命令、或特定工作所需要的命令、包含參數等打在一個文字檔裡, 下次就可以直接執行這個文字檔,電腦就會自動逐項執行裡面的命令群, 這種檔案在 UNIX 家族裡叫作 shell script (*.sh),也就是腳本或指令檔; 而在 DOS 下叫作 batch file (*.bat),也就是所謂的批次檔。 再進一步,命令檔案裡還可以執行其它的命令檔案, 這樣我們就可以不斷的組合一些基本功能,使之成為個人的工具箱, 在需要的時候就可以很簡單的執行某一個檔案,然後讓電腦自己處理剩下的事情。

況且在熟練的情況下,鍵盤鍵入並執行指令會遠快於移動滑鼠去點擊按鈕。

組合

另一個文字工作模式的強大特性則是表現在工作的組合上, 文字式的工作命令往往可以很容易的與其他工作進行前後串接,以一個 Linux 上的簡單例子來說明:

    ls -l /dev | grep tty | less

這裡我動用到了三支程式:ls、grep、和 less。 首先 ls 被執行起來,它的工作是列舉 /dev 目錄下的所有檔案。 然後我把 ls 找到的結果送給 grep 程式,它的工作是在一群文字資料中過濾出含有 tty 字樣的文字行。 最後我再把結果送給 less 程式,它能在輸出的資料很多時,將資料以讓我可以翻轉滾動的方式列印在螢幕上。 就這樣,我使用了簡單的方法將三個基本的功能重新組合出一個新的、稍微複雜的功能。 當然,這只是個簡單的範例; 在實際的應用上可以像堆積木一樣讓各個程式彼此協作,組合出無窮無盡的功能, 甚至再搭配一些命令操作模式下的資料判斷、分歧、反覆、計算等語法, 可以更進一步組合出具有某些條件判斷能力等更聰明複雜的功能。

然而在另一邊,功能組合與協作卻是圖像式軟體的一大致命傷! 例如,如果我有一千張照片存在記憶卡裡,若今天我想要: 將照片複製到電腦裡,使用 A 程式全部縮放成指定的大小,並套用某個指定的濾鏡, 然後使用某教授寫的一個 B 程式,它可以計算出一張照片的上下朝向, 再回到 A 程式將每張照片旋轉成正確的方向, 最後將所有照片檔案以某種指定的格式重新命名,然後用電子郵件寄給你指定的朋友群。 對於上述的工作需求,請問有沒有什麼有效率的工作方式? 若上面提到的每一個程式都是我們常見有圖有按鈕的程式的話, 除了手動操作以外,你有想到其他讓它們能夠相互支援協同工作的方法嗎?

有人說,PhotoShop 有批次處理檔案的功能,很好! 那 PhotoShop 可以讓你批次寄信嗎?可以批次一起執行某教授的 B 程式嗎? 這就反應了一個問題:

在圖像式軟體中,若你想要做的事情沒有被軟體開發者預先想到並做出來的話,就沒辦法了!

還有些人可能會請出如「按鍵精靈」這類的軟體來做與其他軟體間銜接的自動化工作, 然而當狀況再複雜一點、變因再多一點、判斷再多一點,按鍵精靈這類軟體很容易就不能勝任了! 這反映出另一個問題:

圖像式軟體本質上極不容易與其他軟體協同工作、互相銜接,進行自動化工作。

最終,在圖像式軟體的架構下,要達成上述的工作的話, 大概只能重新寫一個超級強大的程式,可以整批的處理各種影像編修,當然連某教授的最新演算法都要包含在裡面、 可以管理檔案系統、還可以寄送電子郵件,甚至支援全世界所有的雲端儲存工作; 否則,應該就只剩下手工重複處理所有工作流程的方法了!

自動化

不知各位在使用電腦時,是否曾經出現過「如果電腦能不經我操作就自動去做什麼事情就好了!」這樣的想法或念頭? 那麼這裡偷偷告訴你一件事,在以文字操作環境為主的系統上,這個夢想已經實現很久了! 而且已經普遍到讓在這些系統上操作的人員已經習以為常,而不覺得特別驚豔! 文字模式使用者常常寫些簡單的腳本讓電腦自動下載更新、自動執行定時工作、 自動檢查電腦記錄,並在偵測到某種特徵存在時自動進行響應,並寄出郵件通知自己等等。 這些就是自動化工作。

雖然在一些圖像式系統如 Windows 上,已存在如工作排程這樣的機制; 但若我們要做的事情不是簡單的預設工作可以完成的工作,當我們需要組合一些複雜的工作流程或狀態檢查判斷機制時, 圖像軟體不利於組合的缺點便會體現出來。

輕量

我想這也不難理解,以文字做為資訊介面對電腦的負擔相比於需要圖形處理的圖形軟體是低很多的。 文字軟體不需要費神在圖像的繪製、顯示、和使用者交戶上, 節省了大量的記憶體空間、處理器時間、甚至是檔案空間或資料傳輸時間, 這個特點使得在某些應用上之所以使用文字式操作環境,不是因為文字或圖像的操作比較親和還是比較有效率, 而是因為環境資源只足以支應文字操作環境。 所以文字式操作環境至今大量存在於各種伺服器、遠端控制環境、小型裝置、或是嵌入式系統上。

圖形操作模式的優點

除了文字模式外,圖形操作模式當然也存在很多的優點,才能讓當今多數的一般使用者都使用它。 那圖形模式都有哪些主要的優點呢?

易於入門

由於圖形化的介面可以很符合人類直覺的表達其意義, 透過簡單的圖示和版面、操作動線設計,可以讓使用者容易摸索操作。 總而言之,就是入門的門檻與文字模式相比低得多,使用者不需研讀指令拼字與參數就能開始使用軟體; 扣除掉部份需要特殊背景知識才能操作的專業領域應用軟體,對於流通的大部份應用軟體, 許多人甚至在沒有閱讀操作手冊的狀況下就能獨自嘗試出其主要功能的使用方式。

操作直觀

這一點是文字操作模式永遠無法與之相比的一點。 舉個例子,你會願意用滑鼠在畫面上拖拉來改變一張圖片在一份文件中的大小和位置? 還是透過調整圖片的四個座標值來完成?

雖然說 UNIX 上的使用者可能比較傾向使用非所見及所得類型的軟體, 這些人通常喜歡使用簡單的純文字檔案來表達複雜的組成; 但這牽涉到另一個大題目,估且就放著不談! 即便如此,在某些如影像處理、訊號分析等等應用上,若缺乏良好的繪圖甚至是圖像互動機制, 則其相關之工作將會難以進行!

畫面美觀

這點我想應該不用再多做解釋,由於圖形的處理能力,圖形化軟體常常擁有華麗的皮膚與互動特效, 而這是文字介面永遠無法觸及的領域。

設計哲學

雖說文字介面與圖形介面各有優劣、各有合適的應用情境, 但有關文字介面與圖形介面的不同,絕對不是只有軟體是透過文字、還是圖像式介面進行操作的方式不同而已。 由於兩種介面本質上的特性差異,導致兩類軟體的設計和應用哲學往兩個截然不同的方向發展。

由於文字介面的程式本質上很容易與其它程式串接,加上批次腳本等週邊支援, 讓文字介面軟體間互相的「排列組合」能力能夠被極致的運用,因此使得文字式軟體走向「小而美」的發展方向。 文字式軟體傾向單純化單一化,一個軟體只做其所專注的一件事,而不管其它與主要功能無關的事情, 專注讓自己做好使用者龐大工具鏈中一個元件的角色。

舉個例子,當我要編譯 C 程式碼時,我可能使用 GCC 作為程式編譯器。 但是 GCC 只負責編譯程式,沒有讓我修改程式碼的功能,於是我要另外找一個文字編輯器來編輯程式碼, 比方說是 VIM 好了。 GCC 負責編譯程式碼,但不負責更進階的程式編譯管理工作,於是我在找到了專門處理大規模程式碼編譯管理的 make 程式。 然後,我將編譯後的程式以 FTP 軟體將之佈署到指定的伺服器上。 最後,我再用 Git 程式送交程式修改記錄。 整理下來,為了編輯、編譯、並發佈程式,使用了 VIM + make + GCC + FTP + Git 五套軟體所組合成的工具鏈來完成。 這樣的工具組合乍看之下有點麻煩瑣碎,實際上透過組合,上面的五個工具可以成為一個工具腳本。 另一個好處在於使用者隨時可以依據喜好或特別需求抽換其中使用的工具零件, 例如改用 Gedit + make + Clang/LLVM + cURL + SVN 這樣的組合, 甚至在原來的流程中再加入新的工作流程也是一件很容易的事。

而圖像式軟體因為本質上不容易與其它軟體串接,因此走向「大而全」方向發展。 一套圖像式軟體常需要做出很多與主要功能無關的週邊功能, 例如一套電子郵件軟體需要製做文字編輯功能,最好再加上強大的檔案檢索管理功能; 一套文件編輯軟體需要圖片顯示功能,還要圖片裁切、甚至一些影像處理的功能,最好再加上強大的檔案檢索管理功能; 一套程式編譯軟體需要文字編輯功能、程式碼編譯管理、GUI 元件編輯或產生精靈, 更好再整合版本控制系統、電子郵件系統、和發佈流程系統、以及測試流程系統, 最好再加上強大的檔案檢索管理功能。 如此這般讓圖像式軟體一般都比較龐大複雜。

另一方面,圖像式軟體通常無法像文字式軟體的工具鏈般抽換零件。 比如說,我若使用某電子郵件軟體,卻不喜歡他的文字編輯介面,或是其它的功能的話, 我除了強迫自己適應該軟體所設計的工具以外,可能只剩在不同的應用軟體間切換、並不斷讀檔與存檔一途了! 甚至,當我使用的軟體沒有某項我需要的功能時,除了找找看有沒有其他更強大全面的軟體外,也許只得雙手一攤! 當然,有些人可能會反駁我說圖像軟體也可以透過像是 Windows 上面的 OLE、DDE 等技術來進行嵌套與合作, 讓 Word 裡面嵌入 Excel 面板等應用得以實現,而不需像我說的一樣一直重新製造輪子; 但這時再看看 OLE、DDE 等在實際應用的不穩定性,甚至是要製做一個支援該技術的軟體的複雜性, 比較文字式軟體的合作模式,可用性依然差距極大。 這些現象再再說明一件事,「圖像式軟體先天不善於協調合作組織應用」。

圖像式軟體雖然比起文字式軟體肥大、沒有調配彈性、並且不同軟體間充斥著重複又不統一的功能, 卻也存在一些不可忽視的優點。 除了前面已解釋圖像軟體基於「圖像」的特性而利於初學者摸索操作外, 圖像式軟體因其設計哲學的緣故,常需一同包裹一眾相關工具,此點特性又更有利於入門者的探索學習。 為了執行某種任務,各種文字式軟體組合而成的工具鏈就像是電腦高手手上的一臺組裝電腦, 他了解它的每個部位、親自挑選需要或愛好的每個零件,各個零件互相協調、爆發出電腦的最大功效, 使其流暢的完成使用者所賦與的工作; 這樣的專業使用者一般不喜歡市面上的套裝電腦, 因為品牌套裝電腦通常是品牌所自認為的良好配置,而不是使用者實際需求的零件搭配, 甚至因為特殊規格的原因,使用者不能恣意的更換其中零件而只能遷就套裝電腦所預設的「最佳配置」。

但對於電腦初學入門者,情況就不一樣了! 讓初入門者自己選擇零件並組裝一臺可用的電腦就是一件極困難的事,更遑論要好用以及搭配順暢! 新手在學習一個主要功能的時候往往需要分心到學習量超乎其想像的週邊相關功能操作上, 特別是當他沒有其它工具的使用經驗時。 有時候,新手甚至不知道完成一項主要工作究竟需要哪些週邊功能,不知道原來組裝電腦不能動是因為需要買記憶體來插。 因此初學者在入門文字式工具鏈時往往會感到挫折,可能會問: 我用了 GCC 編譯程式,但卻不能編輯程式,為什麼編輯程式要用另外一套軟體? 我用 GCC 要怎麼把程式碼上傳到版本控制系統? 甚至是,為什麼 GCC 沒有 IDE?人家 Visual C++ 都有! 因此可以想見,新手入門時會買品牌套裝電腦,買來即可使用; 他們也會喜歡圖像式軟體,除了美觀直覺以外,所有相關的週邊功能一次全包到底,省去各種折騰。

最終,兩種不同類型的軟體因其基本特性和設計哲學的緣故,各自吸引了性質不同的使用者族群。 沒有一定電腦基礎的使用者可能更喜歡美觀直覺又全面的圖像式軟體,而排斥其認為使用極不方便的文字式軟體; 而具有一定電腦基礎的使用者則可能更喜歡簡單高效又彈性自由的文字式軟體,而不愛華而無用的圖像式軟體。

發展軌跡

文字與圖像兩種不同型態的軟體,由於不同的特色而吸引了不同的使用族群,也群聚了不同思想心態的開發者。

在自由軟體世界,特別是類 UNIX 領域(以 Linux 佔大多數),是高手雲集的地方。 自然而然的,所有開發者所製做出來認為好的東西都是文字命令下的程式或腳本。 幾十年來,這個領域上的技術增長沒有人敢輕視;但是圖形軟體的發展完善方面卻是極度缺乏! 不是說在這裡沒有圖形軟體被製造出來,而是使用起來可能不順手,功能也僅是文字版程式的子集, 要使用完整功能的話,還得回去使用文字版本的程式才行。 因為這個區域的開發者甚至是使用者通常都擅長且習慣在文字模式下工作, 以至於長期忽略或輕視圖形使用者的需要,致其所開發的圖形軟體往往只停留在堪用即可的狀態。 這樣的思維與產品,使得進入類 UNIX 的門檻比起市面常見的系統高得多, 使其數十年來雖然活躍於專業計算領域、伺服器領域、或嵌入式領域,但卻難打入一般工商家庭市場。

這麼長的時間裡,當然也不是沒有人嘗試過想把 UNIX 類系統環境推廣到一般使用領域的想法。 最早是由自由軟體界自發的發起這個運動,推出了一些知名的桌面環境; 然而要做出讓一般消費者接受的產品,除了程式以外,美術、人因、介面設計、地區化等等的因素 實在難透過大部份只有軟體開發專長的一群人所突破,因此所產生的成品往往落入難以讓桌面用戶接受的老困境。

要讓社會大眾接受軟體產品,必須要結合各種不同領域的人才,還得要有完善的市場策略和服務, 所以產品的開發和推廣工作終究必須由較為完善的組織或商業公司來完成。 歷史上不是沒有出現過這樣的大公司,RedHat 就是一個著名的例子, 可惜因為 RedHat 的市場取向是以服務商業伺服器為主,沒有太多的精力花在終端桌面用戶上, 因此 Linux 系統環境的使用者仍只侷限於高級技術份子的小眾市場。 這個困境一直要到 2004 年以後由 Canonical 公司推出,以大眾桌面市場為導向的 Ubuntu Linux, 才開始被大量的翻轉。

在另一個世界裡,圖形式的使用環境佔據了絕大多數的終端用戶的電腦裝置, 使得像「成熟的軟體應該要有漂亮好用的圖形介面」這樣的觀念在一般使用者心中根深蒂固; 幾個寡佔的軟體大公司如 Microsoft、Adobe 等更培養了一大批慣用其產品的廣大使用者群, 實質上的成為了特定軟體應該要如何被操作使用的標準, 讓後起的競爭者免不了要被拿來與之類比並品頭論足一番。 一旦有軟體產品與既有流行的軟體工具操作方式稍有不同,就容易被冠以「難以使用」的評價; 若有人在這樣的使用者群中推出文字式的軟體產品,大概免不了被群起炮轟, 得到「落後、簡陋、又不人性化」這樣的批評了!

結語

本文的敘述也許稍微偏向文字操作軟體,但本意並不是要高捧文字軟體而貶低圖形軟體, 事實上作者在絕大部分的事務上並不喜歡獨尊某種技術或思想。 各種至今仍然留存的技術、或思維觀點,都有其優秀的一面, 在特定的環境下選擇適合的方案,揚長避短才是聰明的做法。

以本文所述及的不同工作型態之軟體類別為例,在作者生活中所見之不同陣營間的 或攻詆、或輕視、或傲慢,都不是智慧的表現。 開啟互相認識、了解的大門,以期能以尊重、包容的心胸與不同陣營的人進行有意義的對話, 這大概就是當初作者撰寫本文章的為小心願了吧!

最後, 本人的文筆並不優秀,對軟體的各種面向也不敢說有多深入的了解, 本文謹以個人粗淺的認識,試圖探討文字操作模式軟體的前世今生。 當中可能有不少謬誤之處,還請讀者包容見諒, 若有願提供不同的資訊、修正、或心得想法者,亦感激不盡。

參考資料

追求神乎其技的程式設計之道(十)
arrow
arrow
    文章標籤
    命令列
    全站熱搜

    夜行者 發表在 痞客邦 留言(4) 人氣()