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