回覆列表
  • 1 # 使用者7598172305071

    計算機科學與技術(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,數學基礎

    未完待續……

  • 中秋節和大豐收的關聯?
  • 俄羅斯聯邦將來可能解體嗎?