電腦學科漫談

來源:互聯網
上載者:User

標籤:

在這篇博文裡,我想和大家聊一聊自己對電腦學科的理解。當下本科階段的電腦專業教學涉及電腦學科的方方面面,分類繁雜,有時可能令新人茫然不知所措。那麼,對電腦專業的學者來說,什麼是最重要的呢?我相信,一千個讀者,一千個哈姆雷特,同樣的,每個電腦的學習者都有自己對專業的一番認識。如果說本科四年的電腦專業課程是對專業知識的橫向積累,那麼把握電腦專業的本質的內容則需要縱向的思考。因此我個人的觀點是:對電腦系統整體概念的理解在電腦專業學習中尤其關鍵。於是我把自己對專業的理解和認識總結出來,希望對想瞭解這方面的讀者有所協助,當然也歡迎大家提出自己的觀點和建議。

說起電腦,一般都會按照軟體和硬體的兩個大方向考慮。確實,如果硬體是電腦的經濟基礎,那麼軟體自然就是電腦的上層建築。這裡我們也按照這個分類進行討論。不過我自己插入了第三個分類——基礎學科,我們都知道電腦學科是數學學科延伸而來,數學理論在電腦學科的地位自然不用多說。

一、硬體

首先,我們談一談電腦的硬體知識。我們都知道傳統的電腦是馮·諾依曼結構的,即滿足儲存程式原理。這也恰好反應了電腦硬體的兩個最重要的方面——計算和儲存,對應硬體就是CPU和記憶體。CPU負責代碼的運算和控制,記憶體負責儲存電腦程式的資料和代碼。而電腦的其他部分,比如磁碟、滑鼠、鍵盤、網卡等,統統是電腦的外設部分。

作為電腦的核心——CPU,有三個關鍵的部分:運算器、控制器和寄存器。運算器負責執行算術、邏輯等運算,是電腦計算的靈魂;控制器負責控制執行代碼指令,一般包括提取、解碼、執行、寫回四個大的步驟;而寄存器用於緩衝計算資料(通用寄存器)和控制資料(指令寄存器、程式計數器)。不過這其實是對CPU的邏輯的分類,實際工作由CPU內部相應的運算電路、控制電路等整合電路完成。

電腦的核心儲存組件其實邏輯上分為兩類:記憶體和快取。不過在物理上,目前的主流CPU一般都把快取整合到CPU內部了。記憶體一般使用DRAM儲存組件,這類組件可整合度高,價格低廉,不過速度較慢。而快取一般使用SRAM儲存組件,其特性與DRAM恰恰相反,可整合度低,價格昂貴,不過速度快於DRAM,因此用於緩衝CPU和記憶體之間的臨時資料,增大記憶體資料的訪問效率。

電腦學科與以上知識相關度最高的課程分為兩大類。一類是電子技術類,另一類是組成與體繫結構類。

《電路分析》是電子技術的理論基礎,它提供了電子電路特性分析的理論和方法。而和電腦相關度最高的電子技術課程便是《模電》和《數電》了。模電關心三極體的放大特性,常用於電腦外設部分的訊號處理、放大電路等功能實現。而數電關心三極體的邏輯特性,是電腦二進位的基石,它提供邏輯電路、整合電路、數字邏輯等相關理論。為CPU和記憶體的構建提供了理論基礎。

在組成和體繫結構類的課程中,《電腦群組成原理》提供了CPU、記憶體、IO等電腦子系統的構造原理,尤其是指令系統,是對電腦底層硬體的第一次抽象,也是軟體訪問電腦硬體的根基。《電腦體繫結構》和組成原理的描述角度截然不同,如果說組成原理著重講述電腦的每個細節,那麼體繫結構則是從宏觀的角度描述電腦的設計和架構。不過它們和電腦的硬體內容貼合緊密,比如指令流水等內容涉及到CPU具體功能組件的設計,因此這裡把它們歸為一類。

以上便是本科電腦課程內和電腦硬體相關的課程,不知大家是否和我有同感,本科電腦課程中硬體部分的內容只是佔據了整個專業課程的小部分,更多的空間留給了軟體部分(當然,這和不同高校的教學計劃相關)。

二、軟體

對於電腦的軟體方向,我們從三個角度來談:底層、系統和應用。

軟體底層方向主要介紹對電腦硬體的直接操縱,前邊提到,指令系統是對電腦硬體的第一次抽象。因此底層編程便是利用這層抽象,間接控制電腦的工作,其中最重要的便是組合語言。

在《組合語言》課程內,一般都會把彙編描述為電腦指令的助記符。事實上我們也能發現這層關係,比如組合語言最關鍵的兩個方面:指令和寄存器就是對CPU內部結構的直接抽象。彙編指令中的算術運算指令和邏輯運算指令的內容,對應著CPU的運算電路的功能,而整個彙編指令的解釋執行都是由CPU的控制電路完成。同樣的,CPU內的大部分寄存器都可以在組合語言中直接存取,記憶體的資料以記憶體位址訪問的形式表示在組合語言內部。

如果說彙編為電腦硬體提供了抽象層次的通用訪問,那麼《介面技術》課程將重點放在如何使用彙編對電腦的外設進行細節的訪問,它給出了如何控制外設的具體資訊和方法。

而真正全面利用彙編知識對電腦訪問的內容在《單片機原理》課程中體現的更明確。雖然單片機只是一個微型的電腦系統,但正是“麻雀雖小,五髒俱全”,使用單片機提供的組合語言控制單片機的工作不僅要考慮單片機的核心晶片的設計結構和介面資源,還要考慮單片機的外接裝置的控制和訪問細節。

雖然以上三門課程提供的內容基本上可以對電腦進行低層級的全面控制,但是事實人們的要求遠不止於此。由於原始的彙編編程很難滿足對電腦的資源進行動態調度,充分發揮電腦的效能。比如記憶體的動態申請與釋放,比如IO任務等待時,讓CPU去計算其他的任務等。這些需求需要人們提供一個負責資源管理的程式協助完成,這便產生了作業系統。另外,當面臨大量的組合語言編程工作時,人們需要更高效的方式去和電腦互動,這樣進階語言便誕生了。而把進階語言翻譯為底層彙編的任務就落在了編譯器的身上。

《作業系統原理》課程詳細描述了作業系統對CPU、記憶體、裝置、磁碟的管理細節,而將這些理論只是付諸實踐,便有了更多的相關課程。《Windows編程》、《Linux環境編程》等類似的課程提供了熟悉作業系統原理和作業系統API(系統調用)的手段,《嵌入式》的課程將這種鍛煉更近一步,通過交叉編譯、核心裁剪的學習對作業系統的核心的細節瞭解的更加透徹。而真正清晰瞭解作業系統的細節則是通過《核心源碼分析》這樣的課程完成的,通過對核心源碼的解讀,以開發人員的角度去學習作業系統。另外,關於作業系統的安全的《電腦安全》課程又從另一種非常規的思維模式去作業系統,間接地操作操縱硬體,繼而操縱電腦。而從學習病毒、木馬、蠕蟲、漏洞等知識的學習中反過來進一步加深了對作業系統的瞭解。

《編譯原理》課程從另一個角度描述電腦的控制——程式設計語言。相比於作業系統作為電腦管理程式的形態,編譯器則是作為轉換程式的形態出現。雖然真正在電腦上執行的是應用程式提供的控制邏輯,但是作業系統是把電腦的資源充分地利用去完成既定的控制邏輯,而編譯器則是將應用程式提供的控制邏輯更好的轉換到電腦底層,這包括代碼的翻譯和最佳化。代碼的翻譯並非像組合語言那樣是一個簡單的直接映射,隨著進階語言的複雜度的變化,編譯器的分析工作難度也會不同,而《形式語言與自動機》提供了程式碼分析的理論基礎。

如前所述,作業系統和編譯器並非電腦真正的工作內容。真正使用電腦服務於人們的是應用程式提供的功能,是應用程式發揮了電腦的價值。不過應用程式是建立在作業系統之上的,因為作業系統是對電腦系統的抽象。

我把電腦關於電腦應用的課程劃分以上六個方面(極可能不完全,歡迎補充建議),我們先從電腦應用最核心的工具開始——程式設計語言。

每個人都學習了各種各樣的程式設計語言,每個人擅長的程式設計語言可能也不盡相同。我是C++的愛好者,因此用C++作為討論的例子。C++是一個多範式的程式設計語言,面向過程、基於對象、物件導向、泛型程式設計、函數式編程等等。每種編程都有自己的特點和優勢,不過每個學習程式設計語言的人都有自己的選擇和愛好。《C++程式設計》應該是電腦學科的必修課了,不過只要談到程式設計語言,就甩不掉《資料結構》和《演算法》。不同的程式設計語言對資料結構和演算法的支援庫不盡相同,這些都是程式設計語言的基石。無論是非可視化編程,還是可視化編程(MFC、QT),都離不開資料結構和演算法的支援。Java作為目前另一主流的(目前使用最廣泛的)程式設計語言,也有同樣的特徵。不論是《Java程式設計》學習的基本的Java案頭編程,還是提供更多學習空間的《Java Web程式設計》。從JavaSE、JavaEE到SSH、Android、Hadoop,都能看到程式設計語言構造的千變萬化的應用程式。

電腦圖形是電腦程式可視化的核心。《電腦圖形學》描述了基本圖形的顯示和變換演算法,三維環境的構造方法,包括相機、光找、陰影、文理、貼圖、粒子系統等等。而《電腦圖形影像處理》更偏重於映像的採集和處理,《多媒體技術》也是類似。它們都是特定領域的應用,運用了大量的數學理論基礎,也正是它們,讓電腦的世界變得色彩斑斕。

資料處理方向課程是電腦背後的無言功臣,無論是老生常談的《人工智慧》、《資料倉儲》、《資料採礦》,還是目前大放光彩的《機器學習》、《大資料處理》,我們在螢幕上無法直接看到這些課程的身影。然而這些課程描述了電腦如何思考問題,如何更好更快的處理電腦的資料,滿足人們的實際需要。這些課程背後,仍是靠數學理論和資訊理論作為強力支撐的。

不管實現什麼樣的應用程式,當軟體達到足夠大規模時,軟體設計的理論支援就顯得愈來愈重要。《軟體工程》提供了軟體開發流程的模型和相關理論,《物件導向方法學》更是專註於物件導向設計領域。學生時代覺得這些理論過於遙不可及,只有經過大型多人合作項目的曆練,才能深刻理解前人留下的這些珍貴的經驗財富。

這裡把《電腦網路》劃分為軟體應用其實稍有不妥。電腦網路是多個電腦的互聯集合,它擁有自身的硬體和軟體。不過我們從作業系統的支援角度來看的話,電腦網路的協議和通訊都是建立在系統之上的。這其實並不重要,重要的是電腦網路改變了電腦的世界,將原本孤立的電腦聯絡起來,形成了一個新的電腦世界——網路環境。《TCP/IP協議分析》詳盡描述了電腦網路原理實現的細節,《思科網路技術》讓我們學習到如何控制電腦裡的每個裝置,從獨立的電腦到網關,從區域網路到Internet。

當然,說起電腦網路,就無法不談起網路編程,而這些編程介面由作業系統提供了介面。而網路通訊協定本身就是一個規模巨大的演算法,它是有成千上網的程式分布式構成的。而程式避免不了缺陷和bug,這就為網路安全買下了“禍根”。如何利用系統提供的功能和已有的電腦應用和策略防範網路安全也成了人們研究的話題。

《資料庫》學科的誕生也是來源於人們的實際需要。當然機械的資訊檢索無法滿足實際需要時,人們想到使用更好的資料結構儲存群組織資料。而針對磁碟資料的管理,檔案系統已經不能滿足頻繁快速查詢的需求時,資料庫的資料管理方式則變得尤其重要。資料庫學科描述了資料的關聯式模式,結構化查詢語言 (SQL)SQL,以及在和應用程式結合時如何設計資料庫的方法。傳統資料庫是建立在作業系統的檔案系統之上的,當然這裡不考慮記憶體資料庫的形式,它們都有自身特點的內部實現形式,比如B+樹等。資料庫種類繁多,有滿足中小型應用的SQL Server,有滿足大型應用的Oracle,有開源MySQL,也有在Android嵌入式裝置上的SQLite。另外,資料庫也是傳統的資料採礦、機器學習、人工智慧演算法的資料來源形式。

通過對不同電腦應用學科的學習,處理掌握不同學科自身領域的知識、理論、演算法外,同樣會加深對電腦系統的理解。比如一個應用如何設計、如何提供使用者介面、如何轉化為機器語言、如何運行在電腦硬體上,直到應用運行時改變的電腦硬體的每一個門電路的狀態等。

三、基礎學科

我們常常在學習專業知識的時候,忽略非專業領域學科的意義。飲水思源,若非基礎學科強大的基礎,是無法構建電腦世界的千姿百態的。

前邊提到,電腦是數學的延伸。數學理論構建了電腦學科的基石。《高等數學》的重要性不必多說,的微積分、無窮級數、傅裡葉變換等等內容在電腦硬體電路、影像處理演算法、關係理論等領域隨處可見。《離散數學》的圖論、數理邏輯理論更是體現在電腦的各個方面,無論是硬體邏輯門設計、演算法的NP問題還是作業系統任務調度、編譯最佳化等,都提供了理論支援。《線性代數》在圖形學的表現尤為突出,比形的變換矩陣、三維世界的類比等。《計算方法》是工程數學,電腦程式的科學計算、線性方程組求解、程式庫設計等都有它的身影。《機率論與數理統計》的內容也應用到電腦隨機數演算法、動態規划算法的移步轉移方程、樣本分類等領域。最後需要提及的一個非數學學科《唯物主義與辯證法》的重要性,辯證法內提及的事物之間的聯絡和矛盾的對立統一性等思想在軟體設計領域、作業系統設計、電腦體繫結構設計領域都有體現。

正所謂“磨刀不誤砍柴工”,將學科的基礎打紮實,其實能協助我們更好地學習專業的理論,更能加深對專業學科本質的理解。

四、總結

綜上所述,我們從電腦硬體組成的基本細節,逐漸向上擴充,瞭解了電腦硬體的抽象,繼而瞭解如何利用這層抽象直接操縱電腦。然後根據電腦發展的需要,引出作業系統和編譯器的在電腦內的地位,並認識到操作系是電腦的資源管理者,而編譯器是進階語言與電腦硬體的傳遞者。接著我們描述了每個應用學科涉及的理論和內容,並泛談了一下它們和電腦系統的關係。最後,我們將基礎學科在電腦系統中的地位重新審視了一番。相信通過以上的描述,或許我們對電腦專業有了一個別樣的認識。

 分類: 其他

電腦學科漫談

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.