文章目錄
對電腦的誤解
很多人認為電腦嘛,顧名思義主要是計算的機器,於是有一種錯覺,既然是計算,那自然聯想到小學初中學的數學加減乘除運算.困惑自然而然的產生,通過加減乘除這麼簡單的不能再簡單的數學運算電腦能實現如此之複雜的功能? 真是活見鬼了啊.另外你寫看下你寫的代碼中有多少代碼是要求幾個整數的加減乘除的啊?
實際上說電腦主要是計算這點確實是沒錯的,但是不是我們習慣思維所認為的普通數學中的那種加減乘.而是有另外更深刻的含義的.我後面會討論到.計算之所以有如此強大的功能與如此廣泛的應用.主要利益於電腦理論最重要的兩個部分:資訊和邏輯.下面我來簡單的介紹下.
資訊理論
我們知道電腦最強大的功能之一就是能儲存海量的資訊.一個個小小的硬碟可以把一個大大的圖書館裡的全部書的內容都儲存進去.各種文字,聲音,映像資訊都可以編碼成二進位然後儲存到電腦中.可以說就算電腦沒有其它任何功能,光只有儲存資訊,然後能讓我們檢索資訊,以適當的方式顯示資訊給我們看,那它也必然會在各行各業普及了.
實際上我們很多時候用電腦主要就用到它的資訊處理功能.
比如你玩QQ,實際上就是資訊的傳遞和顯示,你通過鍵盤把你的想說的話存入電腦,於是它變成二進位.然後再通過網路傳遞到你的好友電腦上,再解碼下就顯示成文字了.你看電影,聽音樂,是把視頻與聲音資訊編碼成二進位,存放於電腦中.然後你通過一個播放器,把它解碼並顯示成視頻或聲音讓你欣賞.你瀏覽各種網站,上面有各種亂七八糟的內容,啥娛樂八卦,政治,新聞,體育等等.那也不外乎是一些資訊儲存在網站的伺服器上,然後你通過瀏覽器瀏覽時,位元據先是通過網路(也就是通過一根網線唄)傳到你電腦上,瀏覽器再把資訊解碼顯示給你看.我們用的Oracle,
SQL Server, MongoDB等一些資料庫更是直接和資訊打交道了.
資料就是資訊的載體啊.我們編程時用到的int ,long ,float, char,string這樣的簡單的資料類型之所以能實現這麼強大的功能就是因為它們不僅僅是枯燥的資料,而是因為他們能代表一些資訊,能儲存資訊,處理資訊,傳遞資訊.
而電腦儲存資訊的理論基礎就是資訊理論了,對資訊理論做出突出貢獻的代表人物就是香農(shannon).可以說在電腦界,他的地位可以與大名鼎鼎的圖靈相媲美.資訊理論涉及到很多非常複雜理論和看得讓人暈乎的術語.不過反正它的主要作用就是研究把世間萬物中蘊含的資訊編碼成數字或符號,然後怎麼傳遞這些資料,怎麼保證資料傳遞的準確性,安全性等等一些問題.
資訊編碼
另外我們知道資訊可以表示成任何數字或字母等符號.實際上我們使用的漢語,英語等日常語言也可以看成是把現實中的很多資訊編碼成字元.不過在電腦中主要是把資訊編碼成位元字.而恰好通過電腦的物理元件,晶體管,門電路這些玩藝可以非常美妙的表示二進位.一個晶體管開關的開與關就可以表示成1和0.而只要有了01這兩數字.電腦就足以用來編碼錶示任何資訊了.所看起來簡單的不能再簡單的事物可以組合出複雜的嚇人的事物來.我們人身上的DNA就是一些簡單的堿基對,這和二進位也蠻類似.
二進位的威力如此之大,那發明二進位的人自然絕對是位牛人,偉人啊.一般普遍認為是德國的萊布尼茲發明了二進位的,不過有很多中國人認為我們古代的太極八卦圖裡面就蘊含二進位的思想,萊布尼茲也是因此受到啟發而發明二進位.至於具體情況咋樣沒人知道啊.
剛說到是二進位是被發明.實際上關於數字原理與規則到底是大自然中本身就存在,我們人類只是發現這些原理,而是本來不存在而是我們創造出各種數學原理的.這是一直有爭論的.作為有宗教信仰的科學家來說毫無疑問,數學原理是被發現的,本來就有的.甚至有人認為,上帝就是一個數學家,上帝運用各種數學原理建立出這個世界.所以數學也能神奇的運用到各行各業中.而無神論的科學家可能更傾向於認為數學原理是被發明的,自然界中本來不存在的.
邏輯運算
上面我們講到電腦有個非常強大的功能就是儲存少量資料.但資料本身是死的,如果我們要對它做很多操作,比如檢索下,分類啊,制定一些規則應用於資料上啊.像資料庫訪問嘛我們得要使用者名稱密碼才能登,QQ也一樣.網上使用百度,google這樣的搜尋引擎找東西時輸入關鍵字時返回相應的資訊.你拿個滑鼠在電腦上點來點去,作業系統和各種應用程式會產生相應的操作和反應.所有這一切是怎麼實現的呢? 0101那些死的位元據可真是一些死傢伙,可不能實現這麼強大的功能啊.
這就是電腦的邏輯處理能力發揮的強大功能.那邏輯又是個啥東東啊,而且電腦本身只識別01這樣的資料.它怎麼實現邏輯功能的啊?
這就要把數學和邏輯是怎麼結合到一起的.邏輯是啥的,舉些簡單的例子,比如我是對的,你是錯的. 因為你長的矮挫窮,而女的喜歡高帥富,所以你這會還在打著光棍. 裡面出現的對與錯,因為,所以這些詞就是表示的一種邏輯概念.像狄仁傑,包黑炭,福爾摩斯這幾位老兄查案進做的推理也都是邏輯推理.一般都是因為啥啥啥,所以啥啥的,最後就認為你是兇手.
那我們知道電腦只識別數字,也就是說電腦中只能用到數學知識.所以要實現邏輯就必須把數學與邏輯兩個不同的學科結合起來.
題外話,數學曆史簡介
先來說點題外話,看數學是怎麼發展的.數學可以簡單的劃分為幾何和代數兩大塊.
在古希臘的時候幾何是非常發達的,歐幾裡得的<幾何原本>在今天仍然是被奉為經典.而且在某個範圍上來說是完全正確的.畢達哥拉斯雖然對數有研究,並且說啥萬物皆數,但他眼中的數也主要是來為幾何服務的.他最具代表的理論也是幾何中的理論,就是直角三角形邊的關係.只有到了近代數學才慢慢受到重視.以迪卡爾為起點,他首先提出了把代數與幾何結合起來,形成了著名的解析幾何,於是大家對代數重視起來了.在很多數學家的進一步發展下,代數變得完全可以與幾何媲美,甚至超越幾何的勢頭.
另外傳統的歐幾裡得幾何也因非歐幾何的出現而受到一定的衝擊,以前大家都理所當然的認為,通過一點只有且僅有另外一條直線的唯一一條平行邊.三角形三內角各永遠是180度啊.這都被認為放之四海皆準的真理.但非歐幾何否定了這個觀點.假如空間的是曲面的,比如空間是像一個球面,這樣三角形三內角和不一定是180度,過一個點也未必存在過一點的另外一直線的平等線.主要這裡說的是空間是曲面的.跟我們說的地球是曲面的完全不是一個概念.我們直觀經驗沒法想象到空間曲面.愛因斯坦的相對論就是基於非歐幾何的,愛因斯坦認為引力的作用會導致空間坍塌,空間就變成彎曲的了.此時兩點之間也不是直線最短了.
當數學在各行各業,特別是物理學中取得巨大的成功時,人們認為數學是不是可以應用到任何地方.比如說人類思維的研究中 ? 於是嘗試把數學與邏輯結合起來.而其中最有出名的代表任何時布爾,他創立的布爾代數.看起來簡單的不能再簡單的.就是二進位01的加減乘除運算運算,1+0 = 1; 1*1 = 1; 1*0=0; 說到這就可以咽到開頭我討論的一個話題了,我們認為電腦做計算是普通數學中的加減乘除,實際上電腦的計算是01這樣的二進位的加減乘除.那有啥不一樣呢
? 因為二進位的算術運算還有邏輯的含義在裡面,1可以代表真,0代表假. 於是各種真假的組合及運算可以用來完成所有的邏輯推理.
馮.諾伊曼在研究電腦與人腦的聯絡時,就認為大腦能實現一些邏輯功能與人腦構造具有二進位機制的神經元有關.比如我們處理各種資訊都要通過神經元傳遞.當一個神經衝動傳遞到另外一個時,就會通過判斷強弱來決定是繼續傳遞還是忽略掉,只有二選一的抉擇.這跟電腦硬體功能一樣,晶體管關閉電流通過,開啟電流不能通過.這跟神經衝動傳遞一樣.
有了資訊理論與邏輯處理這兩機制電腦就能發揮巨大功能了啊.我們寫的代碼中絕大部分也就是跟這兩者有關.各種資料類型自然是用來儲存資訊,然後各種if , else ,while, && ,||之類的的邏輯判斷與操作自然就跟邏輯處理有關.