當前位置:
首頁 > 最新 > 一張通往計算機世界的地圖

一張通往計算機世界的地圖

計算機科學Computer Science

繼《物理學地圖》、《數學地圖》和《化學地圖》後,今天為大家呈現通往計算機世界的地圖,希望通過本文能夠帶你進入計算機科學領域。

一張通往計算機科學的地圖。|圖片來源:Dominic Walliman(經作者授權使用編譯)

撰文: Dominic Walliman /孫鵬

我們通過計算機來拓展我們自己的大腦。最開始計算機被用來解決和算數有關的問題,但其自身的價值很快地延伸到了各個領域。像是運行互聯網路,處理實時圖像,製造人工智慧,以及模擬整個宇宙等等。而其神奇的地方就在於這一切強大功能的背後,竟然僅是 0 和 1 的來回變化。

計算機正以無法置信的速度變小變快。現在手機的計算能力已經超過了60年代超級計算機計算能力的總和(詳見:《計算機所面臨的極限是什麼?》)。當年阿波羅11號的整個登月系統如今甚至只需要在兩個任天堂就能完成。計算機科學總的來說就是研究計算機能做什麼。計算機科學如今已經擴展出了很多相互關聯的分支,但我仍然把整個學科分成三個部分:計算機理論計算機工程,以及計算機應用

計算機理論

第一大分支:計算機理論。|圖片來源:Dominic Walliman

講到計算機理論。我們得從計算機之父,創造了圖靈機(Turing Machine)的阿倫·圖靈講起。圖靈在一篇名為《論可計算機器判定問題的應用》一文中首次定義了「有限次運算」並提出了圖靈機的原型。圖靈機是一個對現在通用計算機的一個簡單的描述,而並非一個實體的機器。之後的科學家們提出了很多計算機模型,但這些模型的根本都是圖靈機。所以說圖靈機也是現代計算機的理論基礎。

圖靈機由幾個部分組成,一個寫有符號的無限長的帶子,一個可以在帶子上讀寫的讀寫頭,一個儲存當前狀態的狀態寄存器,以及一串命令。在如今的電腦上,帶子就是現在的內存(當然不再是無限大的),讀寫頭就是現在的處理器(CPU)。命令串被存在電腦的內存里(詳見:《一個無法證明的邏輯問題》)。雖然圖靈機是一個簡單的描述,但也卻是對電腦設計的一個非常全面的描述。現在的計算機當然由更多部分組成,例如硬碟,鍵盤,音響,顯卡,屏幕等等,但其運行原理皆在圖靈機概念的之內。

圖靈機與現代計算機。|圖片來源:Dominic Walliman

圖靈通過對機器的描述為計算機的發展奠定了基礎。然而與此同時,我們更加不能忘了另外一位與圖靈密切相關的計算機科學家,他的博士導師——阿隆佐.丘奇。丘奇發明了lambda運算元,通過整套嚴謹的數學理論描述出了計算機運算的概念。所有能用圖靈機解決的問題都能用lambda運算元進行等價的計算。如果圖靈機的思想代表了演算法和機器的原型,那麼lambda運算元則是現在所有的編程邏輯和語言的基礎(詳見:《他的思想代表了邏輯和語言》與《「計算」與「機」》)

正如最開始說到的,在計算機理論中最基礎的問題就是計算機是萬能的嗎?如果不是,它能做或不能做什麼呢。這個問題直接在計算機理論這個分支中延伸出了一個領域——可計算性理論(Computability Theory)。可計算性理論是一個用來確定哪些問題能夠用圖靈機進行計算並得出最終結果的學科。有些問題是本身是不可能用計算機得出結果的,其中最著名的代表就是停機問題。總結來說,停機問題代表著一些無法確定計算機程序是否會無限運行的問題。圖靈卻巧妙地運用了自洽的概念證明了只要沒有跳出圖靈機的範疇,計算機都不是全能的。有些問題窮計算機的一生也是無法得到解決的(詳見:《一個無法證明的邏輯問題》)。

複雜度理論分類。|圖片來源:Dominic Walliman

在可以用計算機解決的問題中,也有很多問題需要花太長的時間來解決(甚至可能超過宇宙能存在的時間)。基於此,計算複雜度(Computational Complexity)理論便成為了計算機理論中另外一個重要的組成部分。複雜度理論基於解決一個問題所需時間隨問題輸入增大而增大的程度,將問題分類成P類問題(例如將數列從小到大排序),NP類問題(例如在指定城市內尋找一條能遍歷所有城市且總路程小於N的路線)等等。雖然現實中有很多問題在理論上是不可以被解決的,但計算機科學家們可以通過一些技巧上的簡化來得出大概的答案,然而沒人可以確定這些答案是否是最佳答案。正如上述NP問題中我們能在多項式級時間內找到遍歷所有城市且總路程小於N的路線,但卻不能在多項式級時間內找到最短的路程(詳見《一個價值百萬美金的問題》及《誤解帶來的樂觀與恐慌》)。

演算法及演算法複雜度。|圖片來源:Dominic Walliman

計算機理論這一分支也包含了對演算法(Alogorithm)和信息理論的研究。演算法是獨立於所有的編程語言以及計算機硬體的解決問題的套路。演算法是創建程序的基礎,很多計算機科學家都致力於通過研究演算法而找到解決問題的最優解。比如不同的演算法可能可以解決同樣的問題並得到相同的結果,像是將雜亂無章的數字從小到大排序。但有些演算法卻比另一些更加快速有效。而這些都屬於演算法複雜度這一領域。

信息理論(Information Theory)通過研究信息的性質,研究信息如何被接受,儲存,以及傳播。例如如何在保留大多數甚至所有信息的基礎上壓縮信息,使得我們能用更少的內存來儲存這些信息。編碼理論(Coding Theory)和加密理論(Encryption Theory)也是信息理論中非常重要的一個部分。這兩個理論使用複雜的數學作為輔助,將傳輸的信息進行重新的加密,使得信息在網路傳輸中的安全性得到了大大的增加。

信息理論和密碼學。|圖片來源:Dominic Walliman

以上就是計算機理論分支中非常重要的部分。當然除此之外,還有很多其他組成部分,包括邏輯學圖形學計算幾何學自動機理論量子計算並行處理數據結構等。這裡不再一一列舉。

計算機工程

第二大分支:計算機工程。|圖片來源:Dominic Walliman

計算機科學的第二個大的分支是計算機工程。設計計算機是一個很大的挑戰,因為要考慮到從底層硬體到上層軟體很多不同的方面。設計者必須保證計算機能夠以盡量優化的方式解決盡量多的問題。處理器(CPU)是計算機的中心,計算機執行的所有任務都經過處理器,並通過其進行調度。在單個處理器處理多個任務的時候,處理器需要在每項任務中來回執行,所有任務都能在用戶可接受的時間裡完成。

任務的調度(Scheduling)是一個複雜的過程,由處理器中的調度器完成。調度器決定什麼時候執行什麼任務,並嘗試用最優化的方式調度所有任務。在這種情況下,使用多核處理多個任務可以提升計算機執行的速度,因為每個任務現在可以由一個單獨的核執行。但與此同時多核執行也使得調度器的設計更加複雜。而這些設計都隸屬於體系結構(Computer Architecture)的研究範疇。不同的體系結構適合完成不同的任務。處理器(CPU)適合執行通用程序例如我們所用的操作系統。圖像處理器(GPU)適合圖像處理,例如我們玩的高畫質的遊戲,而現場可編程門陣列(FPGA)適合高速執行一些範疇非常狹窄的任務,比如挖比特幣等。

單核與多核的調度。|圖片來源:Dominic Walliman

軟體機編程語言(Software and Programming Languages)也是組成計算機工程的重要部分。在硬體之上有以各種編程語言寫成的軟體層。從底層的彙編語言到高層的Java語言,編程語言是程序員給計算機下達命令的語言,並以不同的語法特徵編寫不同特性的任務。例如我們彙編語言編寫計算機底層的執行,用Java來編寫網頁應用。可想而知,越底層的編程語言越貼近計算機本身的結構,但越難讓人們理解。然而無論多高層或底層的語言,最終都會被轉化成處理器能執行的二進位碼。這個轉換機制由編譯器通過一個或多個步驟完成。每個編程語言都會有它自己的編譯器以便將程序翻譯為可執行的二進位碼並進行優化。編譯器和編程語言的設計在計算機里非常重要,因為這些設計必須既簡單適用,又靈活多變,使得程序員能夠容易的將他們瘋狂的想法付諸實踐。

編程語言及編譯器。|圖片來源:Dominic Walliman

操作系統(Operating System)是計算機系統中最重要的軟體,也是用戶和計算機打交道必須通過的介質。操作系統在接受用戶指令的同時控制著所有計算機的硬體。因此設計製造一款好的操作系統是一個很大的挑戰。所以軟體工程(Software Engineering)也因此成為了計算機工程分支的重要組成部分。軟體工程師們通過設計軟體,新的操作系統或和現有操作系統互動來告訴計算機在什麼時候做什麼。設計軟體是一門藝術,需要工程師們將極富創造性的思維通過特定的編程語言轉化成嚴謹的邏輯程序,並使得轉化後的邏輯程序能夠有效快速的在計算機上運行。因此,軟體工程作為一項獨立的學科也有很多設計思想和哲學供程序員們學習、使用以及研究。

操作系統。|圖片來源:Dominic Walliman

當然,計算機工程還包含了許多其他的組成部分,例如實現多台計算機大規模協作的網路(例如淘寶的伺服器),大數據存儲(例如谷歌臉書中需要儲存的個人信息),機器性能研究(例如編寫大型軟體作為測試計算機性能的基準)以及計算機圖像處理(例如簡單的美圖秀秀)等。我們會在今後的文章中具體提到。

計算機應用

第三大分支:計算機應用。|圖片來源:Dominic Walliman

接下來講講計算機科學的第三個分支——計算機應用。這個分支旨在使用計算機來解決現實生活中的各種問題。當你出門旅遊的時候你希望找到最大的旅遊性價比,這就涉及到了使用計算機解決最優解(Optimisation)的問題。最優解問題自古以來也是生意場上最重要的部分之一,因為正確的解答該問題能為公司省下巨額的資金。然而最優解的問題有時可能無法用計算機有效地得到答案,例如上述提到的在所有城市中找到能遍歷所有且最短的一條路程。於是有些人開始指望新的科技(例如人工智慧或量子計算機),看他們是否能夠為這類問題的解決帶來轉機。

人工智慧(Artificial Intelligence)在計算機應用這個分支中佔有舉足輕重的地位。計算機拓展了我們的大腦,數倍地提高了我們的認知能力。前沿的人工智慧研究正試圖讓機器像人類一樣思考。人工智慧的研究有很多部分組成,其中發展最迅速的當屬機器學習(Machine Learning),讓機器通過事先定下的演算法,以大數據為輸入進行學習,最終達到能準確分辨實物或作出決定的目的。這裡最成功的例子當屬谷歌AlphaGo接連大敗圍棋冠軍的事情。除此之外機器學習也分成有監督(通過現有的樣本對未知的數據分類),無監督(沒有任何樣本,單從數據中的某一特性將數據分類)與增強學習(例如訓練之前很有名的一款小遊戲flappy bird 中的小鳥。如果小鳥撞到柱子了,那就獲得-1的回報,否則獲得0回報。通過這樣的若干次訓練,我們最終可以得到一隻飛行技能高超的小鳥,知道在什麼情況下採取什麼動作來躲避柱子)三種。除此之外,計算機視覺(Computer Vision)和自然語言處理(Natural Language Processing)也是人工智慧中很重要的組成部分。計算機視覺希望通過圖像處理讓計算機能和人類一樣分辨事物。自然語言處理則旨在讓計算機和人類能夠通過人類的語言進行交流,或以文字為輸入進行對文字的分析。這些人工智慧的各個領域我們今後也將會一一討論。

人工智慧的領域。|圖片來源:Dominic Walliman

機器學習的成功大大受益於大數據(Big Data)的發展。於是大數據的研究也成為了計算機應用分支中很重要的領域。大數據的研究旨在總龐大的數據中找出有價值的信息。物聯網(Internet of Things)更進一步為大數據的研究添磚加瓦,通過連接各種物體提供更龐大的數據。黑客(Hacking)技術不是一個正統的學術界領域,但在此也非常值得一提。黑客利用計算機系統及網路中的漏洞在不被別人發現的情況下在他人計算機系統中竊取他們所需要的信息,例如最近剛發生的針對windows操作系統漏洞的攻擊。即便是如今的技術,對這些黑客的攻擊也只能是一籌莫展。

除了上述的領域,計算機應用這一分支也利用計算機來研究科學問題,例如物理學神經學。這個領域通常使用超級計算機來解決大規模的模擬(Simulation)問題。與此同時計算機應用還包括人機交互(Human Computer Interaction)的研究,旨在設計讓用戶更加輕鬆使用的計算機系統。同時,虛擬現實(Virtual Reality,例如戴在頭上的VR眼鏡),增強現實(Augmented Reality,例如之前很流行的一款pokemon go 的遊戲)以及混合現實(Mixed Reality, 例如用手機掃描實體書的時候能看到網上的書評)的研究將虛擬和現實世界漸漸聯繫在一起。機器人(Robotics)的研究也將機器在形態和運動方式上和人更加相似。

這就是通往計算機科學的地圖。原理《走進計算機文化史》通過一系列的文章介紹了這張地圖的第一個部分——計算機理論。今後也會和大家一同走完這張地圖。如今的計算機仍然在高速發展。雖然在硬體方面的研究因為很難再將晶體管做小而遇到了瓶頸,計算機科學家們試圖通過對其他領域的研究來解決這個問題。計算機對整個人類的發展有著至關重要的影響,所以計算機在今後的一個世紀將如何發展也成了科學家們爭相追捧的問題。誰知道呢?可能到了未來的某一天我們都會多多少少以計算機的形式而存在在這個世界上。

更多地圖


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 原理 的精彩文章:

2017年諾貝爾化學獎
2017諾貝爾物理學獎
重大科學發現=理性 「意外運氣」?
物理學家試圖從零開始重建量子理論
當神經網路遇上時空扭曲

TAG:原理 |