計算機能夠自動完成運算或處理過程的基礎是什?
計算機科學與技術(computer science and technology,CS)顧名思義是學習與計算機相關的科學原理和專業(yè)技術的一門學科。計算機廣義上來說就是將輸入信息經(jīng)過計算再輸出的機器,而計算本身,則可以看成是對信息的處理過程。
因此計算機應該包含輸入設備用于輸入信息(鍵盤、鼠標),計算設備用于處理信息(主機),輸出設備用于輸出信息(顯示屏、揚聲器)。無論你在計算機上做什么,玩游戲也好,聽歌刷劇或者在線學習也好,計算機要做的本質上都是布爾運算,這是計算機上最基礎的運算,就像大腦的思考過程本質上是無數(shù)神經(jīng)元之間的信號接收和傳遞一樣。布爾運算可以實現(xiàn)我們熟悉的加法、減法、乘法等簡單運算,這便是計算機的指令,大量的指令構成一個集合,能完成一個特定的任務,我們稱之為程序(program,比如PPT,QQ,瀏覽器等等)。把計算機完成的功能分解成指令的集合是最自然的想法,因為這樣我們就可以靈活地編寫各種各樣的程序來完成不同的任務,計算機因此得以應用在方方面面,編寫程序的過程就叫做編程(programming)。馮·諾依曼于1946年提出存儲程序原理,把程序本身當作數(shù)據(jù)來對待,程序和該程序處理的數(shù)據(jù)用同樣的方式儲存,計算機按照程序順序執(zhí)行,這就是馮·諾依曼體系結構(von Neumann architecture)。為了存儲程序和數(shù)據(jù),上面所說的計算設備應該包含存儲設備(主存、磁盤),而為了執(zhí)行程序的指令,計算設備還應包含實現(xiàn)算術運算和邏輯運算的運算器,以及指揮各部件有條不紊協(xié)同工作的控制器。
計算機素有軟硬件之分,下面我將從軟硬件的大致分界處先向下(底層硬件),再向上(應用、網(wǎng)絡)一一引出計算機科學與技術專業(yè)本科涉及的主要專業(yè)基礎課程,然后再介紹本專業(yè)所要求的數(shù)學基礎課程。
1,軟硬件分界面
當計算機同時運行多個程序時,如何有效管理和分配計算機的軟硬件資源便成為了一個復雜的問題,因此人們引入了操作系統(tǒng)的概念。操作系統(tǒng)是最底層的軟件,向應用程序和用戶提供調(diào)用計算機資源的接口以及使用計算機的交互界面,需要實現(xiàn)的功能主要有內(nèi)存管理、進程調(diào)度、文件系統(tǒng)等。學習操作系統(tǒng)的理論原理和技術實現(xiàn)的課程就叫「操作系統(tǒng)原理」。
計算機應該包含哪些部件?各部件要完成哪些功能?哪些功能由硬件子系統(tǒng)完成,哪些功能交由軟件完成?回答這些問題的課程便是「計算機體系結構」。計算機體系結構是程序員所看到的計算機的屬性,即概念性結構與功能特性(1964年,C.M.Amdahl),一般包含數(shù)據(jù)表示、尋址方式、寄存器組織、指令集、存儲系統(tǒng)、中斷機制、輸入輸出結構、信息保護等。
2,硬件
當確定了計算機的體系結構后,如何實現(xiàn)各部件的功能以及各部件的連接關系就是「計算機組成原理」。舉個例子,當我們確定一臺計算機的指令集應當包含乘法指令時,是用加法電路實現(xiàn)還是用加法和移位電路共同實現(xiàn)乘法指令呢?這個問題就屬于計算機組成原理的范疇。計算機組成原理包含CPU中指令的具體執(zhí)行過程、數(shù)值的基礎運算、存儲系統(tǒng)和結構、外圍設備、I/O接口等等概念和原理。
在計算機組成原理的理論知識儲備下,「微機接口技術」進一步帶我們了解它們在工程上的實現(xiàn),比如現(xiàn)有的通用或專門的芯片認識與實現(xiàn)。該課程將會涉及到具體CPU(如Inter x86系列)的引腳功能、總線周期,I/O端口的地址分配等等細致的工程知識。
搭建CPU、存儲器等組件,離不開組合邏輯電路和時序電路等基本電路單元,實現(xiàn)基礎運算即布爾運算,離不開與或非等邏輯門電路,如何用三極管實現(xiàn)這些電路,是「數(shù)字電子技術基礎」所學的內(nèi)容,而三極管的原理則在「模擬電子技術基礎」里學到,這門課同時還會講基本放大電路、波形的發(fā)生和轉換等等與常用半導體器件相關聯(lián)的知識。其中,電路的基本概念和理論知識便是「電路分析基礎」所講授的內(nèi)容,再往下就是單個電子的運動了,這些知識包含在「大學物理」中的電磁場部分。
3,軟件
如前所說,程序是大量指令的集合,用于編寫程序的語言就叫編程語言,計算機能夠直接識別和執(zhí)行的是二進制的機器語言(機器指令編碼),早期的程序員是直接編寫機器語言的,顯然這樣效率極低,后來人們使用助記符代替指令的操作碼,用地址符號或標號代替指令或操作數(shù)的地址,這便誕生了匯編語言,匯編語言與硬件高度相關,是一門低級語言,再后來又發(fā)展出了編寫效率和抽象層次更高的c/c++、JAVA、Python這樣的高級語言。大多數(shù)學校都會開設一門高級編程語言課程作為入門,比如答主所在學校是「程序設計基礎(C語言)」,入門之后,還會開設「匯編語言程序設計」這門課程,幫助我們了解編程語言與指令集之間的關系,理解程序執(zhí)行的本質過程。大多數(shù)學校還會選擇一門面向對象語言作為面向對象編程的入門,比如答主所在學校是「面向對象程序設計(C++)」。學習了編程語言之后,如何將高級語言翻譯為機器能夠識別的機器語言?更一般的,如何將某種源語言翻譯為另一種目標語言?這就是「編譯原理與設計」所要學習的知識了。
當然,能編寫出程序還遠遠不夠,計算資源是有限的,如何降低程序運行的時間和空間復雜度便成為了必要,這要求我們學習「計算理論與算法分析設計」,掌握基本的復雜度分析手段、經(jīng)典的算法思想,以及更加抽象的圖靈機、NP完全性等計算理論。在使用算法的時候,往往要求我們按照特定的結構組織數(shù)據(jù),這便是「數(shù)據(jù)結構」的知識,數(shù)據(jù)結構是指相互之間存在一種或多種特定關系的數(shù)據(jù)元素的集合,精心選擇的數(shù)據(jù)結構常??梢詭砀叩倪\行或者存儲效率。
當軟件變得越來越龐大和復雜,無論是開發(fā)、測試,還是更新維護,都變得非常困難,研究用工程化方法構建和維護有效的、實用的和高質量的軟件的學科就是軟件工程,這方面的概念基礎課程為「軟件工程基礎」。將數(shù)據(jù)與軟件獨立開來,以一定方式儲存在一起,實現(xiàn)多用戶共享的統(tǒng)一管理的數(shù)據(jù)集合叫做數(shù)據(jù)庫,學習相關理論和技術的課程為「數(shù)據(jù)庫原理和設計」。
到此為止我們都是還只是止步于單臺計算機,如何將處于不同地理位置的多臺計算機連接起來呢?計算機網(wǎng)絡就是多臺計算機連接起來實現(xiàn)資源共享和信息傳遞的計算機系統(tǒng)。就像一個城市的交通系統(tǒng)有許多交通規(guī)則一樣,許許多多的計算機之間要進行通信,也需要制定規(guī)范的“交通規(guī)則”,這便是協(xié)議。人們將計算機網(wǎng)絡分為多個協(xié)議層,「計算機網(wǎng)絡」這門課程學習的主要內(nèi)容就是每層的協(xié)議。
4,數(shù)學基礎
未完待續(xù)……