計算機專業入門探討及相關推薦

理学硕士 2024-04-05 17:36 13次浏览 0 条评论 taohigo.com

本文概要

針對大學計算機專業的新生或者計算機初學者,本文從課程安排、計算機專業特征以及課程之間關系進行瞭探討,重新梳理瞭對計算機專業的認識與學習方法;並整理一系列經典計算機書籍、在線課程和資源網站清單,推薦給廣大初學者,期待投桃報李。

一、計算機專業入門探討

1、重視計算機科學導論

計算機專業的第一門課程,一般是計算機科學導論,這門課程的目標是為瞭讓學生建立起計算機科學的基本知識框架。作為初學者的引路人,它所涉及內容太多,往往是淺嘗輒止。因此,計算機科學導論的作用往往被作者或者讀者所忽視。

其實,計算機科學導論除瞭提供基本知識框架,還應該提供深入探索計算機的話題,以便於給後續課程提供傳導作用。這裡,給初學者推薦《計算機科學概論》,可以作為計算機專業學習的大綱,詳見“二、書籍課程推薦”。在學習計算機科學導論的同時,也可以並行學習一門編程課程,比如Java、Python、C,在《計算機科學概論》裡就采用瞭Python代碼。

2、編程是計算機專業的核心

計算機專業的第二門課程,選擇什麼?可以根據個人情況而定,建議編程學得越早越好,甚至可以把編程放第一門課程。如果學習計算機科學導論時沒有學編程,那麼,第二門課程就可以安排編程語言瞭。請選擇容易入門的編程語言,比如Python、Java,盡量不要選擇學C語言,它的學習周期太長,況且後面操作系統課程也需要瞭解C語言,沒必須提前去學。程序設計課程,推薦《Python編程》、《Java核心技術·卷 I》、‍《編程珠璣》、《C程序設計語言》、《C Primer Plus》

任何一門編程語言的學習都是從入門到實踐,並不是學一門編程課、考試過關就結束瞭,考試過關隻是代表入門,真正的實踐尚未開始。編程是計算機專業的核心,就像工人如何操作機器、農民如何種地。學習編程是一個長期過程,不同階段、不同應用場景,對應的編程層級不一樣。學習編程的目的不是為瞭學習,而是為瞭借助計算機來提升解決問題的能力。所以,除瞭課程學習,遇到機會應該參與到一些編程項目中,比如開源軟件項目、商業軟件開發項目、編程競賽項目、課題項目等。

曾經在網上看到,有人選擇離散數學作為第二門課程。這樣選擇不太合理,離散數學難度比較大,容易勸退初學者。對於絕大多數初學者,本來就是學應用技術的,不太可能做計算機科學理論研究,未來工作時使用離散數學的可能性微乎其微。離散數學是計算機理論基礎這些理論都是無數個數學傢研究的結果,本身就不是入門級,作為入門非常不合適。這些“基礎”並不代表基本功、必經之路,而計算機專業真正的基礎,就是編程。

3、計算機是一個系統

第三門課程,可以選擇計算機組成原理,課程內容是計算機硬件基礎知識;也可以選擇操作系統課程,操作系統是管理和使用硬件資源的基礎軟件。當然也可以把操作系統和組成原理放在一起學習,這裡推薦《深入理解計算機系統》,即CSAPP,這本書是CMU的計算機導論教材。這個“導論”並不是計算機科學導論,比《計算機科學概論》內容更深入細節,其內容整合瞭組成原理和操作系統知識。

國內的教學喜歡把計算機專業分的很細,學硬件時不講軟件,學軟件時不談硬件。其實瞭解計算機來源,就知道計算機硬件和軟件在邏輯功能上是等同的,同樣的邏輯功能硬件可以實現,軟件也可以實現;軟件可以用硬件方式實現,硬件也可以通過軟件模擬實現。計算機設計者根據性能價格比、技術條件來決定哪些邏輯功能用硬件實現,哪些用軟件實現。由於計算機的邏輯功能是一致的,因此計算機是一個系統,我們在學習計算機專業時,一定要把它作為一個系統去看待,而不是把系統割裂去研究。

圖片來源:知乎

在學習計算機組成原理時,等遇到邏輯電路問題,再去瞭解和學習邏輯電路這門課程中相關內容;在學習操作系統時,等遇到數據結構和編程問題,再去瞭解數據結構和算法課程、程序語言設計課程的關聯內容。當看到操作系統底層代碼中會涉及到匯編語言、編譯器,再去瞭解匯編語言、編譯原理。遇到問題,通過解決問題去學習,才能逐步形成系統。計算機組成原理,推薦《編碼》、《計算機組成與設計》;操作系統,推薦《操作系統概念》、《現代操作系統》。

4、計算機是一個程序

計算機是什麼?圖靈模型把計算機定義為用來計算的機器,如下圖

圖靈模型

馮諾依曼模型把計算機定義為數據處理機,如下圖

馮諾依曼模型

而尼古拉斯·沃斯提出Algorithms + Data Structures = Programs(算法+數據結構=程序),正好把圖靈和馮諾依曼兩人的認識完美結合在一起。

計算機誕生的目標,就是為瞭讓計算機解決問題,而所有問題的解決都依賴於編程。這樣,我們可以把計算機等同於程序,即計算機是一個程序,編程就是操作計算機解決問題。所以,在學習計算機專業時,所有知識將圍繞編程進行展開,對於知識的理解亦不能離開編程。數據結構與算法課程,推薦《算法》;編譯原理課程,沒有太好的入門書,推薦《計算機程序的構造和解釋》裡面涉及編譯原理部分。

5、課程之間的關系

計算機專業的課程之間,存在各種邏輯關系,但並非每個人都從最底層開始學習,越是底層越難,越不容易入門,因為底層理論和技術往往是科學傢和工程師長期研究出來的。想學好計算機,首先面對的不是它的數學和物理學基礎,而是實際操作或者解決問題的程序。

除瞭上述層級關系,還有互為依存的關系。編程語言和操作系統之間的邏輯關系:操作系統是用編程語言寫出來的,而編程語言必須在一個操作系統環境中運行,聽起來似乎有點雞生蛋、蛋生雞的關系,這是操作系統和編程語言互相迭代的過程。操作系統和組成原理的關系,首先是用戶和資源的關系,用戶通過編程來操作硬件資源,其次對應著軟件和硬件兩者逐漸升級的過程。

很多人學計算機,學完導論之後就從底層開始,電工電子、邏輯電路、組成原理、微機應用、編程語言、數據結構與算法、操作系統、網絡、數據庫系統……讓人就頭暈(見下圖)

圖片來源:知乎

大傢都覺得東西太多,導致什麼都沒學通,最終失去瞭興趣。其實很多編程高手,都不是計算機專業的。在使用計算機編程時,需要解決什麼問題,再瞭解涉及的學科。

首先,學習計算機導論對計算機系統有瞭初步認識,再學習編程、組成原理、操作系統;這三者學好之後,我們就可以把學到的知識應用到實踐中,需要什麼再去展開,比如需要網絡編程時,就去學習計算機網絡;需要數據庫操作時,去瞭解數據庫系統。計算機網絡課程,推薦《計算機網絡—自頂向下方法》;數據庫系統課程,推薦《數據庫系統概念》。

二、書籍課程推薦

需要電子版和資源的請在公眾號或本文留言

1、《計算機科學概論》

作者:J.Glenn Brookshear/Dennis Brylo

推薦:英文第13版或中文第12版(多看英文版)

資源:

https://www.pearson.com/us/higher-education/program/Brookshear-Computer-Science-An-Overview-13th-Edition/PGM1949505.html

需要中文第12版的習題答案,請留言,分享下載

這本書既可以作為入門課程又可以作為未來計算機專業學習的大綱。內容深入淺出,既有知識傳遞,又有閱讀思考。它對計算機科學做瞭全景式的精彩描述,包括數據編碼和存儲、組成原理、操作系統、網絡、算法與數據結構、編程語言、軟件工程、數據庫、計算機圖形學、人工智能、計算理論,以及計算機科學的發展歷史和新趨勢。

采用Python編程語言作為探索和實驗工具。閱讀本書,采用一種編程策略:就是先根據設想的算法寫下偽代碼;偽代碼類似設計草圖,使用簡單描述的代碼,像程序但不能運行;根據不斷修正偽代碼,讓自己的想法更加成熟,之後,再根據偽代碼編寫真正的程序。

2、《編碼》

作者:Charles Petzold

推薦:《編碼的奧秘》2000年版、《編碼》2010年版

本書主要描述計算機工作原理,內容以硬件位主。作者想象力豐富,把復雜的理論描述得清晰明瞭、通俗易懂,可以作為計算機組成原理的先行讀物。

3、《深入理解計算機系統》

作者:Randal E.Bryant/David O'Hallaron

推薦:中文或英文版第3版

資源:http://csapp.cs.cmu.edu/

課程:https://www.bilibili.com/video/BV1iW411d7hd

這是一門很特別的“計算機系統導論”,需要一些編程經驗,內容糅合瞭計算機系統結構和操作系統,講解瞭計算機如何設計和工作,以及操作系統的重點知識。講清楚原理並處處有代碼:匯編語言、 C語言、Linux系統編程、網絡編程分佈其中。

4、《計算機組成與設計》

作者:David A.Patterson/John L.Hennessy

推薦:英文或中文第5版

課程:https://www.bilibili.com/video/BV1fC4y147iZ

https://www.bilibili.com/video/BV1Gf4y1Q7Eh

計算機組成與設計的經典暢銷教材,采用MIPS處理器講解計算機硬件技術、匯編語言、計算機算術、流水線、存儲器層次結構以及I/O等基本功能。

5、《現代操作系統》

作者:Andrew S. Tanenbaum/Herbert Bos

推薦:英文或中文版第4版

資源:https://www.pearson.com/us/higher-education/program/Tanenbaum-Modern-Operating-Systems-4th-Edition/PGM80736.html

本書討論瞭操作系統的基本原理,包括進程、線程、存儲管理、文件系統、輸入/輸出、死鎖等,同時還包含瞭有關計算機安全、多媒體操作系統、掌上計算機操作系統、微內核、多核處理機上的虛擬機以及操作系統設計等方面的內容。Tanenbaum教授還編寫瞭MINIX(小型的UNIX),這是Linux的源頭。

6、《操作系統概念》

作者:Abraham Silberschatz/Peter B. Galvin/Greg Gagne

推薦:英文第10版或中文第9版(多看英文版)

資源:http://os-book.com/

課程:https://www.bilibili.com/video/BV1nb411K7DT

操作系統“恐龍書”,和《現代操作系統》相比偏理論化。本身詳細講解瞭進程管理、內存管理、存儲管理、保護與安全等概念,而且涵蓋重要的理論結果和案例研究,並且給出瞭供讀者深入學習的推薦讀物。

7、《Python編程》

作者:Eric Matthes

推薦:中文第2版

資源:https://ehmatthes.github.io/pcc/

課程:https://www.bilibili.com/video/av35698354

面向入門的人和需要提高的Python開發者,每一步都細致解釋,讓毫無編程基礎的人很好地進入編程環境中。

8、《Java核心技術》

作者:Cay S.Horstmann

推薦:英文或中文第11版

資源:https://horstmann.com/corejava/

卷 I基礎知識,入門必備,介紹瞭java的基本語言概念和特性;卷 II高級特性,對高級UI特性、企業編程、網絡、安全和Java強大的模塊系統等內容的討論。

9、《C程序設計語言》

作者:Brian W. Kernighan/Dennis M. Ritchie

推薦:中文第2版·新版

資源:GitHub搜索代碼

本書作者是C語言的設計者、UNIX系統開發者Ritchie和Kernighan合著的一本介紹C語言的經典著作,這就是C語言標準,但不適合初學者,初學者可以先從《C Primer Plus》開始。

10、《C Primer Plus》

作者:Stephen Prata

推薦:中文第6版

資源:需要中文第6版的代碼、習題答案等資源,請留言,分享下載

對初學者和希望進一步提高編程技術的程序員,本書都很適合。

11、《算法》

作者:Robert Sedgewick/Kevin Wayne

推薦:中文第4版(Java代碼描述)

資源:https://algs4.cs.princeton.edu/

課程:https://www.bilibili.com/video/BV1u441127b5

本書是經典的算法參考書,比《算法導論》更適合初學者,這裡指算法的初學者,並非計算機初學者。書中詳細講解瞭常見的50個算法,並用 Java 模塊化的編程方法實現瞭這些算法,特別適合程序員使用和改造。

12、《計算機網絡》

作者:James F. Kurose/Keith W. Ross

推薦:中文第7版

資源:https://www.pearson.com/us/higher-education/program/Kurose-Computer-Networking-A-Top-Down-Approach-7th-Edition/PGM1101673.html

課程:http://ocw.nthu.edu.tw/ocw/index.php?page=course&cid=13&

作者獨創的自頂向下方法來講授計算機網絡的原理及其協議,應用層能夠激發學生學習這本書書其餘部分的積極性。

13、《數據庫系統概念》

作者:Abraham Silberschatz/Henry F.Korth

推薦:英文第7版或中文第6版(多看英文)

資源:https://db-book.com/

課程:https://www.bilibili.com/video/BV1rN411f7Ef

適合自學,並且非常詳細,算法偽代碼多,對算法的理解很透徹。

14、《編程珠璣》

作者:Jon Bentley

推薦:中文第2版•修訂版

選取許多具有典型意義的復雜編程和算法問題,引導讀者像真正的程序員和軟件工程師那樣富於創新性地思考。

15、《計算機程序的構造和解釋》

作者:Harold Abelson/Gerald Jay Sussman/Julie Sussman

推薦:中文第2版

資源:https://mitpress.mit.edu/sicp

課程:https://www.bilibili.com/video/BV1Xx41117tr

麻省理工學院計算機科學入門課程,采用瞭 Scheme編程語言 (一種Lisp方言),難度大、不易入門。本書大部分重要程序設計系統都重新修改並做過測試,包括各種解釋器和編譯器。

三、計算機專業網站

1、開源代碼托管和社交平臺

https://github.com/,基於Git的全球最大開源代碼托管平臺,以及軟件開發者社交平臺(程序員找工作必備),除瞭分享代碼,還能遇到各種意想不到的信息寶藏。

https://gitee.com/,國內對標的有Gitee。https://sourceforge.net/,曾經最大的開源代碼托管網站,基於SVN、CVS。

2、技術問答網站

https://stackoverflow.com/,與編程技術相關的問答網站,相當於程序員的"知乎"。

https://segmentfault.com/,國內對標的有SegmentFault。

3、技術分享和探索

https://www.v2ex.com/,關於分享技術和探索的網站,上面有很多各大公司的程序員。

4、編程學習網站

https://pythontutor.com/ ,學習編程的好工具。通過可視化代碼執行來幫助學習 Python、JavaScript、C、C++ 和 Java。

https://code.org/,讓全球少年兒童初學者學習編程和計算機科學的公益網站。

https://www.coursera.org/,國外IT技術公開課

https://open.163.com/,網易公開課

https://www.bilibili.com/,嗶哩嗶哩

5、IT技術社區網站

https://www.infoq.cn/ ,綜合類IT技術社區網站

https://www.oschina.net/,國內開源社區

6、編程刷題網站

https://leetcode.com/,用戶不需要編寫數據輸入和輸出的代碼,專註於功能的編寫,習題多數來源於各個大型互聯網公司的面試題。

歡迎關註微信公眾號“萬物一心”