計算機早期同時輸入程序和數據(用紙卡/紙帶),運行開始直到結束,中間沒有人類進行操做,緣由是計算機很貴,不能等人類慢慢輸入,執行完結果打印到紙上。程序員
到1950年代,計算機足夠便宜+快,人類和計算機交互式操做變得可行,爲了讓人類輸入到計算機,改造以前就有的打字機,變成電傳打字機。算法
到1970年代末,屏幕成本足夠低,屏幕代替電傳打字機,屏幕成爲標配。編程
輸入輸出,都是計算機組件互相輸入輸出。好比RAM輸出數據,或輸指令進CPU。服務器
計算機接收人類的輸入,怎麼從電腦中拿出信息,除了用打孔紙卡。網絡
有不少種「輸入輸出設備」,讓人類和計算機交互,它們在人類和機器間提供了界面。現在有整個學科專門研究,叫「人機交互」。
界面對用戶體驗很是重要。編程語言
紙帶/紙卡
早期機械設備,用齒輪,旋轉和開關等機械結構來輸入輸出。這些就是交互界面。
甚至早期電子計算機,好比Colossus和ENIAC,也是用一大堆機械面板和線來操做。輸入一個程序可能要幾個星期,還沒提運行時間。運行完畢後想拿出數據,通常是打印到紙上。打印機超有用,甚至,查爾斯●巴貝奇(因爲提出差分機和分析機的設計概念,被視爲計算機先驅) 給差分機專門設計了一個。
然而,到1950年代,機械輸入徹底消失,由於出現了打孔紙帶和磁帶,但輸出仍然是打印到紙上。還有大量的指示燈,在運行中提供實時反饋。
那個時代的特色是 儘量遷就機器,對人類好很差用是其次。打孔紙帶,就是爲了方便計算機讀取,紙帶是連續的,方便機器處理,紙孔能夠方便的,用機械或光學手段識別,紙孔能夠編碼程序和數據,固然,人類不是以紙孔方式思考的,因此負擔放到了程序員身上。要花額外時間和精力轉成計算機能理解的格式,通常須要額外人員和設備幫忙,基本上1950年前的早期計算機「輸入」的概念很原始。
人類負責輸入程序和數據但計算機不會交互式迴應。程序開始運行後會一直運行,直到結束。由於機器太貴了,不能等人類慢慢敲命令和給數據。要同時放入程序和數據。函數
一方面,小型計算機變得足夠便宜,讓人類來回計算機交互,變得能夠接受。交互式就是人和計算機來回溝通。另外一方面,大型計算機變得更快,能同時支持多個程序和多個用戶,這叫「多任務」和「分時系統」,但交互式操做時,計算機須要某種方法來得到用戶輸入。因此借用了當時已經存在的數據錄入機制:鍵盤。佈局
當時,打字機已經存在了幾個世紀了,但現代打字機是肖爾斯 在1868年發明的,雖然到1874年才完成設計和製造,但以後取得了商業成功,肖爾斯的打字機用了不一樣尋常的佈局,QWERTY
,名字來自鍵盤左上角按鍵。
爲何這麼設計,最流行的理論是,這樣設計是爲了,把常見字母放得遠一些,避免按鍵卡住。這個解釋雖然省事,但多是錯誤的,或至少不夠全面。事實上,QWERTY
把不少常見字母放一塊兒,好比TH
和ER
。有不少鍵盤版本出現,可是人們不想再去學習新的佈局,這是經濟學家所說的,轉換成本。QWERTY
不是通用的,有不少變體,好比法國AZERTY
佈局,以及中歐常見的QWERTZ
佈局。學習
法國AZERTY
:字體
中歐QWERTZ
:
電傳打字機
有趣的是,肖爾斯根本沒想到打字會比手寫快,手寫速度大約是每分鐘20個,打字機主要爲了易讀性和標準化,而不是速度。然而隨着打字機成爲辦公室標配,對速度打字的渴望愈來愈大。
有兩個重大進步,解放了打字潛力,1880年左右,伊麗莎白●郎利 老師,開始推廣 十指打字,比一個手指打字要移動的距離短得多,因此速度更快。幾年後,弗蘭克●愛德華●麥克格林,學會了盲打,打字時不用看鍵盤,以後「十指盲打」就開始流行。
雖然,人類擅長用打字機,但沒辦法把打字機塞到計算機前面,讓它打字,因此早期計算機用了一種特殊的打字機,是專門用來發電報的,叫「電傳打字機」。
這些打字機是強化過的,能夠用電報線發送和接收文本,按一個字母,信號會經過電報線,發到另外一端。另外一端的電傳打字機會打出來。使得兩我的能夠長距離溝通。
由於電傳打字機有電子接口,稍做修改就能用於計算機,電傳交互界面在1960~1970年很常見。
用起來很簡單,輸入一個命令,按回車,而後計算機會輸回來。用戶和計算機來回「對話」。這叫「命令行界面」,它是最主要的人機交互方式,一直到1980年代。
用電傳打字機的命令行交互 相似這樣:
用戶能夠輸入各類命令,先看當前目錄有什麼文件,輸入命令ls
,名字來自list
的縮寫,而後計算機會列出 當前目錄裏全部文件。
若是想看secretStarTrekDiscoveryCast.txt
有什麼,要用另一個命令, 顯示文件內容。unix用cat
命令顯示文件內容,cat
是鏈接(concatenate)的縮寫,而後指定文件名,指定的方法是寫在cat
命令後面傳給命令的值叫 參數。
若是同一個網絡裏有其餘人,能夠用finger
命令找朋友,就像是一個很原始的「找朋友」App,電傳打字機,直到1970年代左右都是主流交互方式。儘管屏幕最先出如今1950年代,但對平常使用太貴,並且分辨率低,然而由於針對普通消費者的電視機開始量產,同時處理器與內存也在發展,到1970年代,屏幕代替電傳打字機,變得可行。
但與其爲屏幕專門作全新的標準,工程師直接用現有的,電傳打字機協議,屏幕就像無限長度的紙,除了輸入和輸出字,沒有其它東西。協議是同樣的,因此計算機分不出來是紙仍是屏幕。
這些「虛擬電傳打字機」或「玻璃電傳打字機」叫終端。
到1971年,美國大約有7萬臺終電傳打字機,以及7萬個終端。屏幕又快又好又靈活,若是刪一個錯別字,會馬上消失,因此到1970年代末,屏幕成了標配。
早期的著名交互式文字遊戲 Zork,出現於1977年,早期遊戲玩家須要豐富的想象力,想象本身身在虛構世界,好比「四周漆黑一片,附近可能有怪物會吃掉你」。但它被普遍認爲是最先的互動式小說。
遊戲後來從純文字進化成多人遊戲,堅持「MUD」,或多人地牢遊戲。
cd
命令,進入某個文件夾,意思是,「改變文件夾」。
命令行界面雖然簡單,但十分強大,編程大部分依然是打字活,因此用命令行比較天然。所以,即便是如今,大多數程序員工做中依然用命令行界面。
並且用命令行訪問遠程計算機是最多見的方式,好比服務器在另一個國家。
PDP-1計算機:
這臺1960年的計算機,是一個早期圖形計算機的好例子,櫃子大小的電腦,電傳打印機,圓形屏幕,它們是分開的。由於當時文本任務和圖形任務是分開的。
事實上,早期的屏幕沒法顯示清晰的文字,而打印到紙上,有更高的對比度和分辨率。
早期屏幕的典型用途:跟蹤程序的運行狀況。好比寄存器的值。
若是用打印機,一遍又一遍打印出來沒有意義,不只浪費紙並且慢。另外一方面,屏幕更新很快,對臨界值簡直完美,但屏幕不多用於輸出計算結果,結果通常都打印到紙上,或其它更永久的東西上。
但屏幕超有用,到1960年代,開始用屏幕作不少酷炫的事情。
出現不少顯示技術,但最先最有影響力的是:陰極射線管(CRT)。
原理是:把電子發射到有磷光體塗層的屏幕上,當電子撞擊塗層時,會發光幾分之一秒,因爲電子是帶電粒子,路徑能夠用磁場控制,屏幕內用板子或線圈,把電子引導到想要的位置,上下左右都行。
既然能夠這樣控制,有2種方法繪製圖形。
光柵掃描
由於顯示技術的發展,終於能夠在屏幕上顯示清晰的點,叫「像素」。
液晶顯示器,簡稱LCD,和之前的技術至關不一樣,但LCD也用光柵掃描,每秒更新屢次,像素裏紅綠藍的顏色。
不少早期計算機不用像素:不是技術作不到,而是由於像素佔太多內存。
200像素 * 200像素的圖像,有40000個像素,會佔40000bit內存,比PDP-1所有內存的一半還多,因此計算機科學家和工程師,獲得一些技巧來渲染圖形等到內存發展到足夠用。
因此早期計算機不存大量像素值,而是存符號,80*25個符號最典型,總共2000個字符,若是每一個字符用8位表示,好比用ASCII,總共才16000位,這種大小更合理。
爲此,計算機須要額外硬件,來從內存讀取字符,轉換成光柵圖形,這樣才能顯示到屏幕上。這個硬件叫「字符生成器」,基本算是第一代顯卡。它內部有一小塊只讀存儲器,簡稱ROM
。存着每一個字符的圖形,叫「點陣圖案」。
若是圖形卡看到一個8位二進制,發現字母是K(1001011),那麼會把字母K的點陣圖案,光柵掃描顯示到屏幕的適當位置。
爲了顯示,「字符生成器」會訪問內存中一塊特殊區域,這塊區域專爲圖形保留,叫「屏幕緩衝區」。程序想顯示文字時,修改這塊區域裏的值就行。
這個方案用的內存少得多,但也意味着,只能畫字符到屏幕上。但字符集實在過小了,作不了什麼複雜的事,所以對ASCII進行了各類擴展,加新字符,好比IBM CP437字符集,用於DOS。
某些系統上,能夠用額外的bit定義字體顏色和背景顏色,作出好看的DOS界面。
字符生成器是一種省內存的技巧,但沒辦法繪製任意形狀,繪製任意形狀很重要,由於電路設計,建築平面圖,地圖,好多東西都不是文字。
爲了繪製任意形狀,同時不吃掉全部內存,計算機科學家用CRT上的「矢量模式」
陰極射線管的矢量模式
概念很是簡單:全部東西都由線組成。沒有文字這回事,若是要顯示文字,就用線條畫出來,只有線條,沒有別的。
假設一個視頻,笛卡爾平面 200個單位寬,100個單位高。原點(0, 0)在左上角。能夠畫形狀,用矢量命令。
這些命令來自Vectrex
,一個早期矢量顯示系統,首先,reset
, 這個命令會清空屏幕。
MOVE_TO 50 50
把繪圖點移動到座標(50, 50),INTENSITY 100
,把強度設爲100,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
把整列像素變成白色,若是想畫更復雜的圖形,好比矩形,那麼須要四個值。
計算機繪圖時,會用指定的顏色127,而不是(255/2 = 127.5)。
程序能夠操縱「幀緩衝區」中的像素數據,實現交互式圖形,固然,程序不會浪費時間從零開始寫繪製函數,而是用預先寫好的函數來作,畫直線,曲線,圖形,文字等。
位圖的靈活性,爲交互式開啓了全新的可能,但它高昂成本持續了十幾年。1971年整個美國也只有大約7萬個電傳打字機和7萬個終端。大約有1000臺電腦有交互式圖形屏幕。
Spacewar
和太空大戰這樣的先驅,推進了圖形界面發展,幫助普及了計算機顯示器。
冷戰致使美國往計算機領域投入大量資源。
Memex
。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%。
NASA用這筆錢資助各類科學研究,阿波羅計算花的最多,僱了40萬人左右,並且有2萬多家大學和公司參與。
其中一個挑戰是:怎樣在太空中導航。NASA須要電腦計算複雜的軌道來引導太空船,所以,造了「阿波羅導航計算機」,有三個要求。
那時候主流的真空管,晶體管沒法達到這些要求。因此NASA用全新技術:集成電路。
阿波羅導航計算機,首先使用集成電路,NASA是惟一負擔得起集成電路的組織,最初,一個芯片差很少50美金,導航計算機須要上千個芯片。
把集成電路的發展歸功於阿波羅導航計算機,但它們產量很低,一共只有17次阿波羅任務,其實是軍事,大大推動了集成電路的發展。特別是洲際導彈和核彈,使集成電路大規模生產。
最初,美國的半導體行業靠高利潤政府合同起步,所以忽略了消費市場,由於利潤小。所以日本半導體行業在1950-1960年代,靠低利潤率佔領了消費市場。
日本人投入大量資金,大量製造以達到規模經濟,同時研究技術,提升質量和產量以及自動化下降成本。
1970年代,太空競賽和冷戰逐漸消退,高利潤的政府合同變少,美國的半導體和電子設備公司很難競爭。雖然不少計算機組件商品化,但並無什麼幫助,提供相同質量的產品且價格還更便宜。
仙童半導體在1979年瀕臨倒閉被其它公司收購了,爲了生存,不少公司把生產外包出去,下降成本,英特爾再也不把精力放在內存集成電路,而是把精力放在處理器。
由於集成電路,計算器又小又便宜,取代了辦公室裏昂貴的桌面計算器,大多數人來講,這是第一次不用紙筆和計算尺來作計算,所以適應市場,進一步下降了集成電路的成本,使得微處理器被普遍使用。
在短短三十年時間裏,計算機從大到人類能夠在CPU裏走來走去,發展到小孩均可以抓住的手持玩具,並且微處理器還快得多。這種巨大的變化是由二種力量推進:政府(軍事)和消費者。
政府資金,好比冷戰期間美國投入的錢,推進了計算機的早期發展。而且讓計算機行業活得足夠久,使得技術成熟到能夠商用。而後是公司,最後是消費者,把計算機變成主流。