《C Primer Plus》講到 Mac 有個圖形界面編譯器,想笑,因而寫文章。mysql
聽說命令行就是之前電腦的樣子,而想一想我剛接觸電腦就用圖形界面,不由感慨。用慣了圖形界面的人想必是看不慣命令行的吧?我也是見到那個黑框好久好久以後才知道「那不是個bug」——畢竟我對電腦的第一印象就是圖形界面。若是早有人告訴我那是多年前電腦惟一的樣子,或許我很快就能接受……圖形界面給人的感受是,電腦「進化了」,可是圖形界面編譯器讓人啼笑皆非——那本來只要輸入一行命令的——孰好孰壞?從機器的角度看,圖形界面複雜些,核心區別(信息流動方式)未必大,但圖形界面和命令行比如圖像和語言的區別,我就想談談這個區別。git
操做速度還在其次,我想說的是操做的簡明程度。好比一個文件夾系統,在命令行打開一個子文件夾用命令,而圖形界面是用鼠標雙擊——能夠說,圖形界面符合咱們大腦運做的方式,咱們能夠想象那裏真的有一個文件夾,而雙擊就是打開——單擊對應的選中也很符合咱們的思惟(仍是個人思惟被圖形界面影響了?)「對象」這一律念彷佛是和視覺牢牢關聯的——【命令行操做其實也是圖形化的】,不管誰都不會但願命令行只靠線性輸出,而是把目錄排成整齊的一列(大約是大腦並列關係的體現);關係網中,咱們也更但願看到圖表示。命令行中,咱們像在說話,——區別何在呢?命令行既然也有圖形界面的性質,那全無圖形界面的東西是怎樣的呢?——彷佛不大現實,那命令行和(傳統意義上的)圖形界面區別何在呢?sql
我以爲可能在於【即時操做】。設想這樣的文件夾系統A:能夠經過上下鍵使某個選項高亮——大家能想象我在說什麼;再設想一個文件夾系統B,在每一個文件前對應一個數字,輸入數字則爲打開指定文件;再設想系統C,輸入文件名打開;最後D,即咱們常見的,不給你看文件,想知道身邊有什麼得用dir或者ls命令——比較差別看看?不妨再比較下一種表述:shell
因此命令行實際上是個混搭的東西,它更像——談話錄。我如今提出一個改造方案(仿MC):命令始終在最底端輸入(許多行的命令不常見吧),默認即時清屏——只顯示當前命令的結果,狀態欄單獨做一行(而不是做爲輸入提示符)。其實這是個挺好的問題:若是你在若干年前設計界面,你怎麼設計?瀏覽器
談話錄式的設計無疑是簡潔的,但命令行固然不止能夠談話,MySQL就用命令行製表。那我天然能夠另外寫一個shell,讓操做更人性化些——可是能怎麼人性化法?!圖形界面還不夠人性?——這就是我正在討論的:圖形界面好用在哪裏?我要用gcc的時候,爲何說一行指令更好些?編輯器
咱們回顧一下圖形界面的流程:1.打開編譯器窗口,2.在「文件」菜單中選擇「打開」,而後從目錄瀏覽器中選擇文件,3.而後在「編譯」菜單選擇「編譯」。這一串操做徹底等價於1.命令行進入目標菜單,2.命令「gcc xxx.c」——咱們分析一下:在命令行裏,有「當前位置」這一律念,而且爲惟一狀態,可是圖形界面中的軟件是獨立打開的;在命令行裏,通常不「打開」程序,而是帶參數運行,將處理信息一次性輸入。另外比較mysql和gcc(前者是命令行下運行),前者主要爲文件內操做(於是自由度高),後者爲文件級別操做(自由度低),於是後者更理想。(其實低自由度的圖形界面程序也有,參考回收站的功能)圖形化反而使得低自由度操做困難了。圖形界面仍然以文件夾系統爲主(其實大能夠宛如遊戲),故而圖形操做限於文件、文件夾的拖動——我好像跑題了,由於圖形界面和鼠標是兩回事,而鼠標先於圖形界面,也就沒有【不用鼠標的圖形界面】這麼一個尷尬的狀況,但我有必要討論這個狀況。我小時候用過沒有鼠標的電腦(由於被收繳了),可是僅有鍵盤也能作不少事(不考慮鼠標鍵),雖然那時候有些遊戲不能玩是個挺大的問題。文件點不到,只能一個一個跳,網頁也同樣。鼠標的工做在於「所見即所得」,和「即時性」有點像,但比以前的例子更近一步。鼠標使得二維平面內不用加以空間標識(試想一維鼠標,也是如此,雖然說有些滑稽),能夠無條件高精度選中必定點,代價是一部分速度。命令行在此的缺點有二:1.命令行以文字爲主,因此只能針對文字/數字標識,且選擇方式是輸入;2.命令行極少以二維方式展開文件。(可是其實我就沒見過利用好二維展開的)命令行還有一個我不知道是否是缺點的缺點——只能同時打開一個程序或窗口,或者說切換不方便——我其實說很差,但我能夠看着圖片把圖片中的代碼輸到編輯器裏。所見即所得使得運行的程序能在狀態欄被看見,而且看見就能夠操做。ide
其實圖形界面也能夠優化,只需加一條命令輸入行,而且支持鼠標操做就行——好比按住Ctrl點一下gcc,把這個程序加入命令行,再點一下.c文件,成爲第二個詞,而後按回車運行,此前能夠再輸入參數,好比在gcc圖標上作點手腳,加幾個可選項……就避開了打開界面。不過這可能依然會顛覆慣用圖形界面者的軟件觀——軟件怎麼能不打開呢?優化
圖形界面除了玩遊戲看電視究竟還能幹什麼?其實對於文件系統(圖形界面「少數」正當的用處之一),有個很好的對照:git 。我一直但願 git 能有個圖形界面——不是如今的這樣。用第二個維度表示時間展開再天然不過了,我以爲界面就該是這樣的:(小圖)命令行
可是 git 淡定地把橫向維度用詳細信息填滿了。事實上這是命令行加製表符就能作的事。拖動提交,多美妙的操做……設計
(2018-1-9於地球)(完)