02.15 如何自學計算機專業課程

一.計算機專業的自學路線圖

美國計算機學會ACM發佈了《計算機科學課程體系》的報告,當前最新版是2013年的。計算機科學被劃分為18個知識領域。如下:

如何自學計算機專業課程

計算機的18個領域

如何自學計算機專業課程

計算機的18個領域

雖然計算機科學被劃分為18個領域,但是這18個領域有著緊密的聯繫,構成了知識之網。這是我們的核心任務。

如何自學計算機專業課程

計算機自學路線圖

帶著目的去學習:

  • 掌握上層應用的開發,為了能夠在IT公司找一份工作。是以就業為目的的自學。
  • 以考試為目的的自學
  • 為了解決工作中遇到的特定問題,提升專業技能,升職加薪。以個人的職業發展為目的。

對於小白而言,首先要對計算機科學和計算機產業形成整體的認識。這方面可以讀導論或者科普讀物。建議先讀吳軍博士的《浪潮之巔》。這本書講IT產業非常精彩。

緊接著,要做兩件事:(1)掌握一門編程語言;(2)學好數學。這兩者是並行的。

(1)掌握一門編程語言:

  • 第一種:C是一種結構化的編程語言。如果不會C,後面的課程根本學不下去。
  • 第二種:Java是一種典型的面向對象的語言。Java有活躍的社區和數之不盡的開源項目。
  • 第三種:JavaScript 或者Python。這兩個語言都是屬於動態編程語言的範疇,應用極為廣泛。JavaScript是全世界使用人數最多的一種語言,並且JS的各種框架層出不窮,進步飛快,業界的工作機會眾多,對找工作是非常有幫助的。但實話實說,JS在計算機專業課程中用的並不多。Python卻不同,它被國內外的很多大學選為新生的第一門語言。尤其是在這個大數據時代,Python真是火爆。

上面這四種語言,是學軟件開發必須要掌握的,從任何一個語言開始學起都可以。

(2)對於數學,我們必須掌握四門課程:

  • 高等數學
  • 離散數學
  • 線性代數
  • 概率論與數理統計

在掌握了編程語言,用編程語言寫了一些應用程序之後,又學習了一些數學之後,你就可以進入計算機專業基礎課程的學習。這些課程構成了計算機的核心課程群,我們通常把它稱為「專業基礎課」。專業基礎課有十多門,其中最重要的是四門如下(這四個課程也是考研科目):

  • 數據結構與算法
  • 計算機組成原理
  • 操作系統
  • 計算機網絡

除此之外,計算機基礎課還包括:

  • 編譯原理
  • 面向對象的方法
  • 關係數據庫的理論
  • 軟件工程等等

這次我們就只針對那四個考研科目進行介紹。

這裡我要強調的是:計算機專業基礎課程的學習,和我們在工作中實用技術的學習,這兩者不是相互矛盾的,而是相互促進的。比如計算機網絡課程,對web開發框架有幫助;反過來,如果寫了web框架,就能更深刻的理解計算機網絡這門課程。

在完成專業基礎課和實用技術的學習之後,就進入了一個新的自學階段。這個階段可以針對你感興趣的特定領域深入鑽研了。比如你對人工智能感興趣,那可以學一下機器學習、spark等等。這個時候的學習目的非常明確,即:培養特定領域的專業技能,讓你成為特定領域的專家。

二.選書和看書的基本原則

當某人告訴你,某書是某領域最好的書籍,不要盲目相信,要經過自己親自試驗再下結論。通常情況下,一本別人眼中的好書,可能的確質量很高,但如果閱讀它超過了你的能力,那對於你而言,它就不是一本好書,因為你不具備所需要的背景知識,和相關的技術經驗。

第二個原則是,選擇那些你已經具備讀懂前提的書。

如何自學計算機專業課程

分類閱讀法

閱讀科普書籍的最主要目的是:瞭解特定領域的背景知識、明瞭這個領域的基本數據和概念,建立全局觀。

如何自學計算機專業課程

多遍閱讀法

讀者:多讀幾遍真的很重要,我在看js的時候,把廖雪峰的教程看了好多遍,敲了好多遍。

如何自學計算機專業課程

多遍閱讀法的實例

上圖是計算機網絡的經典教材。我們拿著兩本書來舉例。

比如《計算機網絡:系統方法》這本書,作者在前言中就很明確地說明,它是針對網絡設計者寫的。注意是網絡設計者,不是網絡應用開發者。這本書講的是計算機網絡的基本原理。介紹的是最初的設計者遇到了什麼問題。

讀第一遍時,第一章一定要認真閱讀,包含了很多的術語。

讀第二遍時,每章的開頭很重要。

比如《計算機網絡:系統方法》這本書,裡面講到的網絡安全這一章,如果你當前還沒有涉及到這一塊兒,這一遍就可以跳過。但是有關PCP協議的內容,在實際開發中用的很多,就很重要,這些內容分佈於書中的各個章節,這就需要你把它們抽取出來。

如何自學計算機專業課程

難書和厚書的典型

比如上面的這本《離散數學》,一頁紙就要啃兩個小時。

如何自學計算機專業課程

應對難書和厚書

與書籍相比,視頻的優點是很獨特的,特別適合展示動的過程,比如程序的調試過程、算法的運行步驟等。

如何自學計算機專業課程

計算機和數學的關係

有很多編程工作屬於工程領域,按部就班,有很多現成的套路,創造性並不強,數學在這些項目中並非成敗的關鍵因素。項目中,確實有算法在底層做支撐,但這算法往往都有現成的底層庫。你只需要知道如何調用就行,並不需要理解算法的細節,並需要具備多深的數學功底。對於初級程序員來說,主要乾的是搬磚的活兒,特別是CRUD類的代碼。

如何自學計算機專業課程

計算機和數學的關係

如何自學計算機專業課程

國內數學教材

同濟的《高等數學》教材還是不錯的,但是國內數學教材有個最大的問題就是:往往只講法則、定理、證明、習題,不講數學的發展歷史、具體應用、也不強調解決特定問題的思路,不適合自學。

如何自學計算機專業課程

國外的數學教材

普林斯頓的《微積分讀本》,最大的特點是,講的很細,採用內心獨白的方式介紹微積分,有高中基礎即可。內容雖然沒有同濟的多和深,但學習計算機來說,也基本夠用了。

讀者:這裡也給大家推薦本冷門數學書,名字叫考研數學三部曲,銷量很少。因為這本書優點是由淺入深,缺點是又臭又長,適合文科生看。

如何自學計算機專業課程

考研數學三部曲

《計算機科學概論》起到的是建立全局觀的作用。

如何自學計算機專業課程

如何自學計算機專業課程

讀者:想從Python 入門的同學,也推薦Headfirst Python。整個headfirst 系列都推薦。

讀者:headfirst真的很不錯,同推薦,特別設計模式。

如何自學計算機專業課程

《深入理解計算機系統》這本書,對於形成計算機系統的全局觀非常有用。這本書簡稱為CSAPP,很有名。這本是最大的特點是從使用者,而不是從設計者的角度來組織材料的,難度適中,文字流暢。但這本書不適合零基礎入門,你至少應該首先學過計算機導論,並且有一定的C語言開發經驗,會用Linux。

如何自學計算機專業課程

讀者:CSAPP看的時候要動C語言並且要看計算機專業導論,不然看不懂的。

考研的四門課

下面介紹計算機專業的幾門骨幹和和核心課程。同時也是考研的四門課程:數據結構與算法、計算機網絡、操作系統、計算機組成原理。

(1)數據結構:

如何自學計算機專業課程

上圖中,數據結構與算法包括了兩部分內容。

現在的大數據和人工智能,完全就是算法。

如何自學計算機專業課程

上圖中,第一本書有兩個版本:java版本和C語言版本,難度適中。後兩本書,較難。

如何自學計算機專業課程

如何自學計算機專業課程

對於多數人來說,掌握算法,只需要知道算法的思想、應用場景和優缺點就可以。實際開發中,你要設計新算法的機會並不多,並且那些應用很廣的算法,都已經在框架裡提供了現成的組件。這些組建內部已經實現了算法,你只需要知道是怎麼回事,會調用就可以了。比如說加密和解密的算法。

考研和大公司面試,也不會考到複雜的算法,準備前多刷幾遍即可。

(2)計算機組成原理:

如何自學計算機專業課程

如何自學計算機專業課程

計算機組成原理主要是介紹計算機由哪些部件組成的,這些部件是如何互相協作、完成處理功能、同時用來滿足各種成本和功耗指標的。

學習這門課程之前,通常需要學習數字電路基礎。

學完計算機組成原理之後,再去學操作系統和編譯原理。

如何自學計算機專業課程

學習計算機組成原理之前,建議大家先看《編碼》這本書。

(3)操作系統:

如何自學計算機專業課程

如何自學計算機專業課程

上圖中,操作系統的書分為兩類:教材和專著。

如何自學計算機專業課程

操作系統的教材裡,數學公式不多,但它並不是說操作系統者這門課就很容易學,學好操作系統的關鍵是一定要把它和軟件開發、動手實踐結合起來。

很多操作系統都是用C語言寫的,建議大家在學習操作系統之前,先學習C語言。

學習操作系統,最重要的是明白操作系統的內部機理。推薦大家實用C語言在Linux下學習。

進程和線程也是屬於操作系統的範疇。

讀者:補一個金老師的網易雲課堂:http://mooc.study.163.com/u/8050019871#/c

(4)計算機網絡

如何自學計算機專業課程

如何自學計算機專業課程

我推薦大家實用C、java、Phthon這三種語言去編寫網絡應用程序。

另外必須要學會操作系統。網路協議棧通常都是由操作系統來負責實現的,網絡應用基本都是多線程的。

上圖中這裡介紹了三本經典書籍。計算機網絡中一個重要的特點是分層。我們會發現這三個經典教材是三個視角。

  • 第一本:從上層協議介紹到下層協議。
  • 第二本:從頂向上介紹。
  • 第三本:橫切的方式,針對特定的問題(比如安全問題、性能問題)來展開介紹。
如何自學計算機專業課程

學習計算機網絡的關鍵,是明白上面這三個問題。

一旦瞭解了計算機網絡的這些基本原理,你就會發現,理解實際開發中的各種通信協議和各種網絡庫,就會比較容易。

掌握好相應的網路協議,是掌握上層應用軟件開發技術的關鍵。比如,如果連http協議都沒掌握,就去寫web應用, 好比在沙灘上蓋樓。

如何自學計算機專業課程

如何自學計算機專業課程


分享到:


相關文章: