計算機科學基礎_7 - 命令行,2D界面

命令行界面

計算機早期同時輸入程序和數據(用紙卡/紙帶),運行開始直到結束,中間沒有人類進行操做,緣由是計算機很貴,不能等人類慢慢輸入,執行完結果打印到紙上。程序員

到1950年代,計算機足夠便宜+快,人類和計算機交互式操做變得可行,爲了讓人類輸入到計算機,改造以前就有的打字機,變成電傳打字機。算法

到1970年代末,屏幕成本足夠低,屏幕代替電傳打字機,屏幕成爲標配。編程

  • 人機交互 Human-Computer Interaction。
  • 早期輸出數據是打印到紙上,而輸入是用紙卡/紙帶一次性把程序和數據都輸入進去。
  • QWERTY 打字機的發展,肖爾斯發明於1868年。
  • 電傳打字機 Teletype machine。
  • 命令行界面 Command line interface
  • ls命令
  • 早期文字遊戲 Zork(1977年)
  • cd 命令

輸入輸出,都是計算機組件互相輸入輸出。好比RAM輸出數據,或輸指令進CPU。服務器

計算機接收人類的輸入,怎麼從電腦中拿出信息,除了用打孔紙卡。網絡

有不少種「輸入輸出設備」,讓人類和計算機交互,它們在人類和機器間提供了界面。現在有整個學科專門研究,叫「人機交互」。
界面對用戶體驗很是重要。編程語言

紙帶/紙卡

早期機械設備,用齒輪,旋轉和開關等機械結構來輸入輸出。這些就是交互界面。
甚至早期電子計算機,好比Colossus和ENIAC,也是用一大堆機械面板和線來操做。輸入一個程序可能要幾個星期,還沒提運行時間。運行完畢後想拿出數據,通常是打印到紙上。打印機超有用,甚至,查爾斯●巴貝奇(因爲提出差分機和分析機的設計概念,被視爲計算機先驅) 給差分機專門設計了一個。
然而,到1950年代,機械輸入徹底消失,由於出現了打孔紙帶和磁帶,但輸出仍然是打印到紙上。還有大量的指示燈,在運行中提供實時反饋。
那個時代的特色是 儘量遷就機器,對人類好很差用是其次。打孔紙帶,就是爲了方便計算機讀取,紙帶是連續的,方便機器處理,紙孔能夠方便的,用機械或光學手段識別,紙孔能夠編碼程序和數據,固然,人類不是以紙孔方式思考的,因此負擔放到了程序員身上。要花額外時間和精力轉成計算機能理解的格式,通常須要額外人員和設備幫忙,基本上1950年前的早期計算機「輸入」的概念很原始。
人類負責輸入程序和數據但計算機不會交互式迴應。程序開始運行後會一直運行,直到結束。由於機器太貴了,不能等人類慢慢敲命令和給數據。要同時放入程序和數據。函數

一方面,小型計算機變得足夠便宜,讓人類來回計算機交互,變得能夠接受。交互式就是人和計算機來回溝通。另外一方面,大型計算機變得更快,能同時支持多個程序和多個用戶,這叫「多任務」和「分時系統」,但交互式操做時,計算機須要某種方法來得到用戶輸入。因此借用了當時已經存在的數據錄入機制:鍵盤。佈局

當時,打字機已經存在了幾個世紀了,但現代打字機是肖爾斯 在1868年發明的,雖然到1874年才完成設計和製造,但以後取得了商業成功,肖爾斯的打字機用了不一樣尋常的佈局,QWERTY,名字來自鍵盤左上角按鍵。
爲何這麼設計,最流行的理論是,這樣設計是爲了,把常見字母放得遠一些,避免按鍵卡住。這個解釋雖然省事,但多是錯誤的,或至少不夠全面。事實上,QWERTY把不少常見字母放一塊兒,好比THER。有不少鍵盤版本出現,可是人們不想再去學習新的佈局,這是經濟學家所說的,轉換成本。QWERTY不是通用的,有不少變體,好比法國AZERTY佈局,以及中歐常見的QWERTZ佈局。學習

clipboard.png

clipboard.png

法國AZERTY:
clipboard.png字體

中歐QWERTZ
clipboard.png

電傳打字機

有趣的是,肖爾斯根本沒想到打字會比手寫快,手寫速度大約是每分鐘20個,打字機主要爲了易讀性和標準化,而不是速度。然而隨着打字機成爲辦公室標配,對速度打字的渴望愈來愈大。
有兩個重大進步,解放了打字潛力,1880年左右,伊麗莎白●郎利 老師,開始推廣 十指打字,比一個手指打字要移動的距離短得多,因此速度更快。幾年後,弗蘭克●愛德華●麥克格林,學會了盲打,打字時不用看鍵盤,以後「十指盲打」就開始流行。
雖然,人類擅長用打字機,但沒辦法把打字機塞到計算機前面,讓它打字,因此早期計算機用了一種特殊的打字機,是專門用來發電報的,叫「電傳打字機」。

這些打字機是強化過的,能夠用電報線發送和接收文本,按一個字母,信號會經過電報線,發到另外一端。另外一端的電傳打字機會打出來。使得兩我的能夠長距離溝通。
由於電傳打字機有電子接口,稍做修改就能用於計算機,電傳交互界面在1960~1970年很常見。

用起來很簡單,輸入一個命令,按回車,而後計算機會輸回來。用戶和計算機來回「對話」。這叫「命令行界面」,它是最主要的人機交互方式,一直到1980年代。

clipboard.png

用電傳打字機的命令行交互 相似這樣:
用戶能夠輸入各類命令,先看當前目錄有什麼文件,輸入命令ls,名字來自list的縮寫,而後計算機會列出 當前目錄裏全部文件。

clipboard.png

若是想看secretStarTrekDiscoveryCast.txt有什麼,要用另一個命令, 顯示文件內容。unix用cat命令顯示文件內容,cat是鏈接(concatenate)的縮寫,而後指定文件名,指定的方法是寫在cat命令後面傳給命令的值叫 參數。

clipboard.png

若是同一個網絡裏有其餘人,能夠用finger命令找朋友,就像是一個很原始的「找朋友」App,電傳打字機,直到1970年代左右都是主流交互方式。儘管屏幕最先出如今1950年代,但對平常使用太貴,並且分辨率低,然而由於針對普通消費者的電視機開始量產,同時處理器與內存也在發展,到1970年代,屏幕代替電傳打字機,變得可行。
但與其爲屏幕專門作全新的標準,工程師直接用現有的,電傳打字機協議,屏幕就像無限長度的紙,除了輸入和輸出字,沒有其它東西。協議是同樣的,因此計算機分不出來是紙仍是屏幕。
這些「虛擬電傳打字機」或「玻璃電傳打字機」叫終端。

clipboard.png

到1971年,美國大約有7萬臺終電傳打字機,以及7萬個終端。屏幕又快又好又靈活,若是刪一個錯別字,會馬上消失,因此到1970年代末,屏幕成了標配。

早期的著名交互式文字遊戲 Zork,出現於1977年,早期遊戲玩家須要豐富的想象力,想象本身身在虛構世界,好比「四周漆黑一片,附近可能有怪物會吃掉你」。但它被普遍認爲是最先的互動式小說。
遊戲後來從純文字進化成多人遊戲,堅持「MUD」,或多人地牢遊戲。

cd命令,進入某個文件夾,意思是,「改變文件夾」。

命令行界面雖然簡單,但十分強大,編程大部分依然是打字活,因此用命令行比較天然。所以,即便是如今,大多數程序員工做中依然用命令行界面。
並且用命令行訪問遠程計算機是最多見的方式,好比服務器在另一個國家。

  • 早期,機械面板和線,輸入;紙上,輸出。
  • 1950年代,打孔紙帶和磁帶,輸入;紙上,輸出。
  • 鍵盤,十指盲打,輸入。
  • 電傳打字機,電傳交互界面。
  • 電傳打字機的命令行交互。
  • 屏幕,輸出。

屏幕與2D圖形顯示

  • PDP-1計算機,鍵盤和顯示器分開,屏幕顯示臨時值。
  • 陰極射線管 Cathode Ray Tube(CRT)。
  • CRT有二種繪圖方式:
    矢量掃描 Vector Scanning
    光柵掃描 Raster Scanning
  • 液晶顯示器 Liquid Crystal Displays (LCD),像素(Pixel)。
  • 字符生成器 Character generator。
  • 屏幕緩衝區 Screen buffer。
  • 矢量命令畫圖。
  • Sketchpad, 光筆(Light pen)。
  • 函數畫線,矩形。

PDP-1計算機:

clipboard.png

這臺1960年的計算機,是一個早期圖形計算機的好例子,櫃子大小的電腦,電傳打印機,圓形屏幕,它們是分開的。由於當時文本任務和圖形任務是分開的。
事實上,早期的屏幕沒法顯示清晰的文字,而打印到紙上,有更高的對比度和分辨率。

早期屏幕的典型用途:跟蹤程序的運行狀況。好比寄存器的值。
若是用打印機,一遍又一遍打印出來沒有意義,不只浪費紙並且慢。另外一方面,屏幕更新很快,對臨界值簡直完美,但屏幕不多用於輸出計算結果,結果通常都打印到紙上,或其它更永久的東西上。

但屏幕超有用,到1960年代,開始用屏幕作不少酷炫的事情。

出現不少顯示技術,但最先最有影響力的是:陰極射線管(CRT)。
原理是:把電子發射到有磷光體塗層的屏幕上,當電子撞擊塗層時,會發光幾分之一秒,因爲電子是帶電粒子,路徑能夠用磁場控制,屏幕內用板子或線圈,把電子引導到想要的位置,上下左右都行。
clipboard.png

既然能夠這樣控制,有2種方法繪製圖形。

  1. 引導電子束描繪出形狀,這叫「矢量掃描」,由於發光只持續一小會兒,若是重複得足夠快,能夠獲得清晰的圖像。
  2. 按固定路徑,一行行來,從上向下,從左到右,不斷重複。只在特定的點打開電子束,以此繪製圖形。這叫「光柵掃描」,用這種方法,能夠用不少小線段繪製形狀,甚至文字。

clipboard.png

clipboard.png

光柵掃描

由於顯示技術的發展,終於能夠在屏幕上顯示清晰的點,叫「像素」。

液晶顯示器,簡稱LCD,和之前的技術至關不一樣,但LCD也用光柵掃描,每秒更新屢次,像素裏紅綠藍的顏色。

不少早期計算機不用像素:不是技術作不到,而是由於像素佔太多內存。
200像素 * 200像素的圖像,有40000個像素,會佔40000bit內存,比PDP-1所有內存的一半還多,因此計算機科學家和工程師,獲得一些技巧來渲染圖形等到內存發展到足夠用。

因此早期計算機不存大量像素值,而是存符號,80*25個符號最典型,總共2000個字符,若是每一個字符用8位表示,好比用ASCII,總共才16000位,這種大小更合理。
爲此,計算機須要額外硬件,來從內存讀取字符,轉換成光柵圖形,這樣才能顯示到屏幕上。這個硬件叫「字符生成器」,基本算是第一代顯卡。它內部有一小塊只讀存儲器,簡稱ROM。存着每一個字符的圖形,叫「點陣圖案」。
若是圖形卡看到一個8位二進制,發現字母是K(1001011),那麼會把字母K的點陣圖案,光柵掃描顯示到屏幕的適當位置。

爲了顯示,「字符生成器」會訪問內存中一塊特殊區域,這塊區域專爲圖形保留,叫「屏幕緩衝區」。程序想顯示文字時,修改這塊區域裏的值就行。

這個方案用的內存少得多,但也意味着,只能畫字符到屏幕上。但字符集實在過小了,作不了什麼複雜的事,所以對ASCII進行了各類擴展,加新字符,好比IBM CP437字符集,用於DOS。

clipboard.png

某些系統上,能夠用額外的bit定義字體顏色和背景顏色,作出好看的DOS界面。

字符生成器是一種省內存的技巧,但沒辦法繪製任意形狀,繪製任意形狀很重要,由於電路設計,建築平面圖,地圖,好多東西都不是文字。
爲了繪製任意形狀,同時不吃掉全部內存,計算機科學家用CRT上的「矢量模式」

陰極射線管的矢量模式

概念很是簡單:全部東西都由線組成。沒有文字這回事,若是要顯示文字,就用線條畫出來,只有線條,沒有別的。

假設一個視頻,笛卡爾平面 200個單位寬,100個單位高。原點(0, 0)在左上角。能夠畫形狀,用矢量命令。
這些命令來自Vectrex,一個早期矢量顯示系統,首先,reset, 這個命令會清空屏幕。

  1. 把電子槍的繪圖點移動到座標(0, 0),並把線的亮度設爲0,
  2. MOVE_TO 50 50把繪圖點移動到座標(50, 50),INTENSITY 100,把強度設爲100,
  3. 如今亮度提升了,移動到(100, 50) 而後(60, 75) 而後 (50, 50)
  4. 最後把強度設回0。這些命令佔160bit,比存一個龐大的像素矩陣更好。

clipboard.png

SCREEN
BUFFER:

RESET
MOVE_TO 50 50
INTENSITY 100
MOVE_TO 100 50
MOVE_TO 60 75
MOVE_TO 50 50
INTENSITY 0

就想以前的「字符生成器」把內存裏的字符轉成圖形同樣。這些矢量指令也存在內存中,經過矢量圖形卡畫到屏幕上,數百個命令能夠按順序存在屏幕緩衝區,畫出複雜的圖形,全是線段組成的。
因爲這些矢量都在內存中,程序能夠更新這些值,讓圖形隨時間變化:動畫。

最先的電子遊戲之一,Spacewar,是1962年在PDP-1上用矢量圖形制做的,它啓發許多後來的遊戲,好比 爆破彗星(Asteroids), 甚至第一個商業街機遊戲:太空大戰,1962年是一個大里程碑,Sketchpad誕生,一個交互式圖形界面,用途是計算機輔助設計 (CAD)。它被普遍認爲是第一個完整的圖形程序。爲了與圖形界面交互Sketchpad用了當時發明不久的輸入設備,光筆。
就是一個有線連着的電腦的觸控筆。筆尖用光線傳感器,能夠檢測到顯示器刷新。經過判斷時間刷新,電腦能夠知道筆的位置,有了光筆和各類按鈕用戶能夠畫線和其它簡單的形狀。
Spacewar可讓線條完美平行,長度相同,完美垂直90度,甚至動態縮放。用戶還能夠保存設計結果,方便分享和再次使用。
光筆這些表明了人機交互方式的關鍵轉折點。電腦再也不是關在門後,負責算數的機器了。

最先用於真正像素的計算機和顯示器出現於1960年代末,內存中的位(Bit)對應屏幕上的像素,這叫位圖顯示。
能夠把圖形想成一個巨大像素值矩陣,計算機把像素數據存在內存中一個特殊區域,叫「幀緩衝區」。
早期時,這些數據存在內存裏,後來存在高速視頻內存裏,簡稱 VRAM。VRAM在顯卡上,這樣訪問更快。

在8位灰度屏幕上,可用的顏色值範圍是0強度(黑色)到255強度(白色),其實更想綠色或橙色,由於許多早期顯示器不能顯示白色。

在低分辨率的位圖屏幕上,分辨率60*35像素,
若是想把(10, 10)的像素設爲白色,能夠這樣操做:f[10][10] = 255
若是想畫一條線, 假設從(30, 0)到 (30, 35)能夠用這樣一個循環:

FOR y = 0 TO 35
    f[30][y] = 255
NEXT

把整列像素變成白色,若是想畫更復雜的圖形,好比矩形,那麼須要四個值。

  1. 起始點座標X。
  2. 起始點座標Y。
  3. 寬度。
  4. 高度。

計算機繪圖時,會用指定的顏色127,而不是(255/2 = 127.5)。

程序能夠操縱「幀緩衝區」中的像素數據,實現交互式圖形,固然,程序不會浪費時間從零開始寫繪製函數,而是用預先寫好的函數來作,畫直線,曲線,圖形,文字等。

位圖的靈活性,爲交互式開啓了全新的可能,但它高昂成本持續了十幾年。1971年整個美國也只有大約7萬個電傳打字機和7萬個終端。大約有1000臺電腦有交互式圖形屏幕。

Spacewar和太空大戰這樣的先驅,推進了圖形界面發展,幫助普及了計算機顯示器。

冷戰和消費主義

冷戰致使美國往計算機領域投入大量資源。

  • 範內瓦●布什 預見了計算機的潛力,提出假想機器Memex
  • 1950年代消費者開始買晶體管設備,收音機大賣,日本取得晶體管受權後,索尼作了晶體管收音機,爲日本半導體行業崛起作了鋪墊。
  • 蘇聯1961年把宇航員加加林送上太空,致使美國提出登月,NASA預算大大增長,用集成電路來製做登月計算機。
  • 集成電路的發展其實是由軍事應用大大推動的,阿波羅登月畢竟只有17次,美國造超級計算機進一步推動集成電路。
  • 美國半導體行業一開始靠政府高利潤合同,忽略消費者市場,1970年代冷戰漸漸消失,行業開始衰敗,不少公司倒閉,英特爾轉型處理器。
  • 政府和消費者推進了計算機的發展,早期靠政府資金,讓技術發展到足夠商用,而後消費者購買商用產品發展。

1940年代中期,電子計算機誕生。
編程語言和編譯器,算法和集成電路。
軟盤和操做系統,電報機和屏幕。
基本都在1940~1970年代,大概三十年時間裏出現的。

冷戰,太空競賽,全球化,消費主義的興起。
1945年二戰結束後不久,冷戰開始了,所以政府往科學和工程學,投入大量資金。
計算機在戰時已經證實自身的價值,好比曼哈頓計劃和破解通信加密。ENIAC, EDVAC, Atlas, Whirlwind
高速的發展,僅靠商業運做根本沒法作到,要依靠銷售收回開發成本。
1950年代出現變化,特別是Univac1,它是第一臺取得商業成功的電腦型號,開發40多臺,大部分在政府或大公司,成爲美國日益增加的軍事工業綜合體的一部分,所以政府承擔高額開發費用。
例如一臺給美國原子能委員會,生產的是Univac1,被CBS用來預測1952年美國總統大選的結果,固然最後結果預測準確,只用了百分之一的選票數據。此次事件把計算機推到公衆前面。
計算機和之前機器不同,之前的機器,加強人類的物理能力,好比卡車能帶更多東西,自動織布機更快,機牀更精確等等,這些東西表明了工業革命,而計算機加強的是人類的智力。

範內瓦●布什在1945年看見計算機潛力,描述了一種假想計算設備叫Memex,能夠用這個設備,存本身全部的書,其它資料,以及和別人溝通。並且數據是按照格式存儲的,全部能夠快速查詢,有很大的靈活性。能夠輔助人類的記憶。
還預測了會出現新的百科全書形式,信息之間相互連接,Memex啓發了,以後的幾個重要里程碑。

1950年代,消費者開始購買晶體管設備,其中收音機,它又小又耐用,用電池就夠了,並且便攜。不像1940年以前的收音機,用的是真空管。

日本政府振興戰後經濟,很快從貝爾實驗室,取得晶體管的受權,幫助日本的半導體和電子行業。
1955年,索尼的第一款產品面世,TR-55晶體管收音機,把重心放在質量和價格。所以日本公司在五年左右,佔有美國便攜式收音機市場的一半。

1953年,整個地球大概有100臺計算機,蘇聯這時候的科技,比西方落後幾年,蘇聯在1950年,完成了第一個可編程電子計算機。但蘇聯在太空競賽遠遠領先。
蘇聯在1957年,把第一個衛星送上軌道,史波尼克1號,不久,在1961年,蘇聯宇航員, 尤里●加加林 第一個進入太空。使得肯尼迪總統,在加加林太空任務一個月後,提出要登錄月球。NASA的預算增長了幾乎十倍。在1966年到達頂峯,佔了政府預算的4.5%。

clipboard.png

NASA用這筆錢資助各類科學研究,阿波羅計算花的最多,僱了40萬人左右,並且有2萬多家大學和公司參與。

其中一個挑戰是:怎樣在太空中導航。NASA須要電腦計算複雜的軌道來引導太空船,所以,造了「阿波羅導航計算機」,有三個要求。

  1. 計算機要快。
  2. 計算機要又小又輕。太空船空間有限。
  3. 要超級可靠。這對太空船很是重要,由於太空中有不少震動,輻射,極端溫度變化。

那時候主流的真空管,晶體管沒法達到這些要求。因此NASA用全新技術:集成電路。

阿波羅導航計算機,首先使用集成電路,NASA是惟一負擔得起集成電路的組織,最初,一個芯片差很少50美金,導航計算機須要上千個芯片。

把集成電路的發展歸功於阿波羅導航計算機,但它們產量很低,一共只有17次阿波羅任務,其實是軍事,大大推動了集成電路的發展。特別是洲際導彈和核彈,使集成電路大規模生產。

最初,美國的半導體行業靠高利潤政府合同起步,所以忽略了消費市場,由於利潤小。所以日本半導體行業在1950-1960年代,靠低利潤率佔領了消費市場。

日本人投入大量資金,大量製造以達到規模經濟,同時研究技術,提升質量和產量以及自動化下降成本。
1970年代,太空競賽和冷戰逐漸消退,高利潤的政府合同變少,美國的半導體和電子設備公司很難競爭。雖然不少計算機組件商品化,但並無什麼幫助,提供相同質量的產品且價格還更便宜。

仙童半導體在1979年瀕臨倒閉被其它公司收購了,爲了生存,不少公司把生產外包出去,下降成本,英特爾再也不把精力放在內存集成電路,而是把精力放在處理器。

由於集成電路,計算器又小又便宜,取代了辦公室裏昂貴的桌面計算器,大多數人來講,這是第一次不用紙筆和計算尺來作計算,所以適應市場,進一步下降了集成電路的成本,使得微處理器被普遍使用。

在短短三十年時間裏,計算機從大到人類能夠在CPU裏走來走去,發展到小孩均可以抓住的手持玩具,並且微處理器還快得多。這種巨大的變化是由二種力量推進:政府(軍事)和消費者。

政府資金,好比冷戰期間美國投入的錢,推進了計算機的早期發展。而且讓計算機行業活得足夠久,使得技術成熟到能夠商用。而後是公司,最後是消費者,把計算機變成主流。

相關文章
相關標籤/搜索