[TOC]
## 計算機學科
人類社會是最為復雜的一個群體。在人類社會的發展過程中,知識起到了其至關重要的作用。因為一切知識都是我們改造社會和發展社會的有力武器。
知識,是通過人類對外界客觀環境的認知過程所形成的一種觀念。以前的知識口口相傳,后來有了印刷術,再后來有了互聯網。現在,所有的知識都唾手可得,但知識并不等于一個人的智慧,我們在學習過程中忘記了知識和我們自身的關系,而忽略了知識的轉化能力。
人們先要解決的是人到底可不可以認識外界的客觀世界。所以一切科學的起點是哲學。人類社會發展過程中因為我們的創造和想象能力產生了很多類型的知識,將知識進行分類,就產生了所謂的學科或者專業。
我認為任何一個學科的設置,都應該具有一套完備的理論系統,最終目的都是為了解決人類社會中的某一個問題而出現。我們學習學科最終學到的是這門學科解決問題的理論體系,經驗和技藝。不論哪個行業,凡是高手,都應該具備這三個條件。
但學科不是憑空出現的,也是由人類去設置的。所以,學習任何一門學科都需要從設計者的角度去想:為什么這門學科可以成為一門獨立的學科,而又因為什么原因,這門學科中有這些獨立的課程。我們看到的知識總是已經按部就班設計好的,正如我們看到的書,總是從目錄開始,一章一章按部就班講下去,但假如我們是這門課程的設計者,你會如何去設計你的教材?
#### 計算
計算機學科出現的目的就是計算。知識的載體是信息。人類最初解決了信息的存儲,如印刷術,可以將人類發展過程中知識保留和記錄下來。但當信息需要計算的時候,我們不能單純依靠大腦,就出現了計算的輔助工具,比如算盤等。當人類改造社會的水平和科學水平發展到一定階段的時候,人類希望可以發明一個更高效的計算輔助工具,我想這應該是計算機最初出現的原因。
算盤的硬件結構很簡單,但需要人進行輸入和中間計算,最后算盤會將結果呈現出來。而計算機自己完成中間計算,使用者只需要將問題提交給計算機,計算機自動就會給出答案。
所以,有了馮諾依曼的五大部件:輸入,輸出,存儲器,控制器,計算器。
輸入和輸出是為了完成信息的輸入和輸出;
存儲器是為了進行信息存儲;
控制器是為了控制計算步驟;
計算器是為了進行計算。
其實和算盤的結構是一樣的。只不過設計出了存儲器,控制器,計算器來完成中間計算的功能。
這就是為什么馮諾依曼體系結構很簡單,但很重要,因為它是計算機硬件設計的最初理論體系。
#### 計算機
任何學科都有研究的主體。有些主體是客觀存在的,如醫學研究的主體是人;但有些主體是人類用想象和智慧創造出來的,如建筑學研究的主體是建筑;計算機學科研究的主體是計算機。
#### 計算機組成原理
所以,既然有研究主體,我們必須研究主體的構架;或者組成部件。所以,有了計算機組成原理,計算機體系結構等課程。這些課程的出現是為了告訴我們,學科的研究主體由哪些部分構成。
因為計算機的目的是計算;而計算是需要信息或者數據的;所以,計算機組成原理必須講清楚,計算機是如何表示信息或者數據的;這就是二進制,二進制原,反,補碼,二進制運算出現的原因。這也是運算器主要完成的功能。
接下來,我們應該理解的是,存儲器和控制器的內部結構及它們各自是如何完成工作的;這涉及到了存儲器的組成,及存儲數據的方式;而控制器涉及到的是指令即如何指揮運算器和存儲器。發出指令,以完成對應的計算。指令是計算機運行的語言,五大部件通過指令來相互配合完成數據傳輸和數據計算。而數據和指令的傳輸媒介就是總線的概念。
這樣研究主體就一目了然。
#### 操作系統
接下來,就要研究如何讓主體之間的各個部件相互配合,以最高效率完成對應的任務,這應該是操作系統的研究范圍。操作系統最終就是為了最大化利用計算機各部件的資源,以使信息得到最快的存儲和計算。
操作系統應該是后來才成為完整體系的,因為最初的操作系統人為參與的成分應該更多一些,最初計算機完成的計算功能比較簡單,一臺計算機所執行的程序個數也比較少,所以,最初考慮的不是效率問題,而是準確問題。
最初計算機執行程序的過程就像一個黑盒子;使用者把信息給計算機,計算機通過自己的內部計算,最后給出結果,但計算過程的每一步都是不可見,也就不可控制。
操作系統希望提供這樣的功能,就是讓計算過程可見,這樣我們就可以更好地安排多個程序進行執行。當把程序的每一步都可見或者可以控制時,進程就出現了。而進程應該是操作系統最為核心的一個概念。
但進程出現有很多副作用,因為進程打破了程序執行的順序性,而為了解決這個問題就出現了進程同步的概念。同時,為了讓進程合作完成特定任務,就出現了進程通信。而線程出現的原因是,進程同時維護著資源,而進程切換就會引起資源的釋放和獲取,這樣會大大降低進程執行的效率,因為資源需要花費很大的時間代價。所以,操作系統讓進程繼續維護資源,而任務只在進程內部切換,我們把這樣的任務叫做輕型進程,也即線程。
接之而來的問題是,到底該如何安排進程的執行順序,來讓處理機進行計算,這就涉及到了處理機調度的問題。而操作系統的剩余部分,都是為了解決一個問題:即如何讓最有用的數據距離處理機最近。
#### 數據結構
數據結構是為了研究數據在內存中的表示方式的。內存的物理結構在計算機組成原理已經講清楚,內存的管理方式已經在操作系統中講清楚了,但內存到底該如何去組織數據呢?我想這與內存的物理結構密切相關。
因為,內存有兩部分組成:存儲數據的位和位對應的地址;所以,所有的數據結構應該都是通過地址來表明對應數據關系的。這就有了線性表,數組,樹,圖等數據結構。其實這些數據結構都是用數據地址來關聯數據之間的關系。這與內存的物理結構密切相關。
#### 算法
基于基本的數據結構,我們可以使用計算機解決很多現實生活中的問題。算法就是研究該如何設計計算步驟來解決復雜問題。
算法的基礎是數據結構,而數據結構又與內存的物理結構密切相關。所以,我認為算法效率首先與內存物理結構有關,提供怎樣的硬件基礎,就可以做怎么的計算,而內存的物理結構何其簡單,所以,二進制解決現實生活中的問題應該是有瓶頸的。雖然計算機可以依靠其強大的計算,但有些復雜問題不僅僅依靠計算就可以解決的。
我認為,計算機算法還有很大需要彌補的地方。
#### 語言
以上是把計算機做為一個主體去研究。接下來要研究的是,我們到底該如何與計算機進行打交道呢?答,語言。
如果我要和一個美國人交流,我就必須學英語,因為美國人交流的語言是英語;所以,如果讓我和計算機交流,我就必須知道計算機是如何交流的。在計算機組成原理中,我們已經學過計算機是通過指令進行交流的,所以,按理來說,我們應該學的是指令。
那么,什么是指令?指令其實就是一串具有特殊意義的二進制串,這個特殊意義就是指令格式,如果足夠強大,當然可以寫01進制碼來和計算機進行交流,最初程序員就是這樣工作的。
但隨著計算機學科的發展,計算機出現了助記符。也就是用一些特定的英文單詞來表示指令,如MOV,ADD等,助記符的出現如同把復雜的01進制翻譯出,我們比較容易理解的一些特殊文本。
但這遠遠不夠。
計算機科學家又將其進行抽象,創造出了匯編語言,匯編語言仍然是機器角度的語言。這與計算機的體系結構有關,計算器和寄存器相連,寄存器和內存相連,需要送入計算器的所有數據都要通過寄存器;所以,匯編語言對數據的移動只有兩種,即從內存到寄存器,從寄存器到內存。基于此,匯編語言的語法結構總是類似于這樣:
MOV,a,b;
一個操作命令和兩個操作單元。
對匯編語言的抽象就出現了高級語言。這需要一門課程即編譯原理。
高級語言很容易被人類識別和書寫,而它最終會被翻譯成01進制的指令來讓計算機執行。這個抽象過程,真正體現了人類的智慧。
語言分為解釋性語言和程序性語言。因為計算機不具備思維,我們只能使用程序性語言和它交流。
語言為什么可以進行信息傳遞?是因為語言可以表示現實世界的客觀事物和客觀事物之間的關系。比如,有人說一句:“我愛你。”其實就是陳述了兩個客觀事物之間的關系。
所以,在設計計算機語言的時候,必須能夠表示客觀事物和客觀事物之間的相互作用。
計算機語言用類型來表示客觀事物的種類;
計算機語言用控制結構(順序,循環,分支)來表示客觀事物的相互作用;
計算機語言用抽象(函數)來表示具有一個特定功能的過程;
有的人把計算機語言,當做是21世紀的文學語言,我想,它當之無愧。
語言是由基本要素和要素的表達方式(語法)組成的,英語也是這樣,當我們把這兩部分學習好了以后,應該練習如何使用基本要素和語法構建別具一格的事物,比如用英語寫一篇優美的作文。這是一個人的創造能力,最能體現一個人的水平。(所以,好像一般人都覺得英語最難的部分是寫作。)
### 抽象
計算機能如此迅速發展的原因,我想還有一個強大武器是抽象的能力。為什么計算機的抽象能力強,因為計算機的底層構建太過穩固。我們用C寫一個“hello world”程序,在一層層轉化成01進制,并進行運行的時候,只要代碼正確,100%不會出現錯誤。
抽象是人類很重要的一個武器。管理學使用的就是抽象,從員工到組長,從組長到經理,是層層抽象的過程。
抽象是計算機體系,計算機語言,計算機網絡等方面最為重要的思維模式。這一點,我想很重要。
### 信息的虛擬性
不論計算機能存儲多大的數據空間,這些信息都是虛擬的,互聯網是一個虛擬環境,而這個虛擬環境融入到了我們的社會生活,改變了我們社會生活的方方面面。信息本身就具有虛擬性,這應該是互聯網最大的特點。如果當下,所有的人離開互聯網,十年以后,互聯網不會發生任何改變,因為這些信息都是一個一個的比特位,而不具有任何實際的意義。
因為互聯網的虛擬性,互聯網最初影響現實生活的方面肯定與虛擬相關。而在現實生活中與虛擬相關的就有人和人之間的關系,所以,互聯網又重新定義了人和人之間的關系和交流方式。
而又因為互聯網是信息的載體,所以,信息交流當然也是互聯網一個最基本的功能。
中國互聯網最初發展的時候,開發一個HTML也是一件很牛逼的事情,這就是信息最初交互的成就。
### 工業技術的崛起
IBM曾說全世界擁有100臺超級計算機就可以了。而微軟說,我要讓每個人都擁有一臺計算機。所以,IBM成為計算機工業的強弩之末,而微軟成為快速崛起并迅速占領計算機市場的巨頭。
工業技術的崛起改變了計算機的硬件基礎,也就改變了計算機的形狀大小和運行方式,現在的計算機制造已經成熟,因為計算機體型不大,且便于管理,很容易被人們接受。計算機開始進入每家每戶。
### 商業的本質
商業的本質與互聯網最為契合的地方是虛擬。因為貨幣本身就是虛擬交換的價值單位。所以,商業最容易被互聯網接受。中國第一批互聯網公司新浪,百度等是利用互聯網是信息的載體和傳遞媒介這一特性建立起來的。騰訊是利用互聯網加強人和人關系而建立的,而阿里巴巴卻是最先看到互聯網和商業相契合的特性。
所以,才有了今天的阿里巴巴,不得不夸一夸馬云的高瞻遠矚。直至現今,電子商務仍然沒有褪色的跡象。而隨著物流系統的逐漸完善,網上購物成為了我們生活中必不可少的一部分。
所以,要看互聯網能和什么結合,我覺得最大的特點在虛擬。
### 移動互聯網
手機,它不大,放在口袋里一點都不占地方,同時電話是人類通信最初的工具;所以,手機能夠普及的原因是與其打電話的功能密切相關。而移動互聯網的出現也有很多方面的因素:
手機的普及性;手機硬件的可攜帶性;手機的軟件系統的出現;手機硬件工業鏈的成熟化。
中國的小米公司看到了手機的前景,所以乘著移動互聯網的風,成為了一家很成功的公司。手機必然是移動互聯網的載體。所以,移動互聯網成為了下一代互聯網。
雷軍曾說,“站在臺風口,豬也能飛起來。”但當臺風過去的時候,人們才意識到機會的喪失。
### 智能
計算機能不能實現智能?我想,不能。現在的智能只是以計算的高效來掩蓋智商,但并不能表示計算機有思維。
如何讓計算機有思維?必須先要研究人的大腦和人類的認知過程。
而人的大腦是自然界最為復雜的事物,現今還沒有完全研究透徹,所以,智能的問題我認為還在路上。
### 可佩戴式設備和智能家居
既然我有手機,我為什么會再買一塊表,然后用手表去刷支付寶呢?人們已經習慣了手機的操作,智能手機操作的簡便化和人性化,以及智能手機系統的完善,這些都只會讓手機做為移動設備中互聯網的主要載體。與手機的功能,結構,人類的習慣等都有很大關系。
而可佩戴式設備本身需要硬件和軟件(嵌入式開發)支撐,現在還沒有完善的工業鏈,同時,使用可佩帶設備最后還需要在手機上下載App來做為輔助工具。
所以,可佩戴式設備還遠遠沒有達到能取代手機的地位。
智能家居倒是一個不錯的選擇。可以提高人們的生活質量,缺點是,比如做一個智能電飯煲,還沒有一個完整的工業生產鏈,和完善的軟件系統,但這個思路好像比可佩戴式設備的可操作性要強一點。
所以,互聯網+不是盲目地將生活的各個方面結合計算機,互聯網本身也是工具,最終目的都只是為了提高人類的生活質量。
想想還有什么可以和互聯網結合,我想應該是教育吧。因為教育本身就是一種虛擬式的活動,同時互聯網本身是信息的載體,其知識儲備足夠任何人去學習。
所以,我想互聯網最有可能改革的地方涉及到的是教育,它的操作性很強,因為大學的每間教室都有一臺連接互聯網的電腦,只是,沒有人好好利用而已。