作為計(jì)算機(jī)專業(yè)學(xué)生最應(yīng)該學(xué)習(xí)的課程前五位是什么?_第1頁
作為計(jì)算機(jī)專業(yè)學(xué)生最應(yīng)該學(xué)習(xí)的課程前五位是什么?_第2頁
作為計(jì)算機(jī)專業(yè)學(xué)生最應(yīng)該學(xué)習(xí)的課程前五位是什么?_第3頁
作為計(jì)算機(jī)專業(yè)學(xué)生最應(yīng)該學(xué)習(xí)的課程前五位是什么?_第4頁
作為計(jì)算機(jī)專業(yè)學(xué)生最應(yīng)該學(xué)習(xí)的課程前五位是什么?_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、作為計(jì)算機(jī)專業(yè)學(xué)生,最應(yīng)該學(xué)習(xí)的課程前五位是什么?先列一下我心目中的 T0P5:數(shù)學(xué)課(線性代數(shù),概率 統(tǒng)計(jì),離散數(shù)學(xué),高等數(shù)學(xué) /數(shù)學(xué)分析)算法和數(shù)據(jù)結(jié)構(gòu)可計(jì) 算理論組成原理和體系結(jié)構(gòu)操作系統(tǒng)另外,這個(gè)問題其實(shí)意 義不大,因?yàn)槿绻阆氤蔀橐粋€(gè)基礎(chǔ)扎實(shí)的CSer,其它課就算不在 TOP5 里面你還得學(xué),比如數(shù)電 /模電、編譯原理、數(shù) 據(jù)庫、計(jì)算機(jī)網(wǎng)絡(luò) .一個(gè)更有意義的問題是: 學(xué)了那么多課, 如何把它們串起來,在腦子里這些課程不再是離散的點(diǎn),而 是一副連通圖,有一種俯瞰的感覺,然后真正形成自己的核 心競(jìng)爭(zhēng)力?關(guān)鍵在于抽象能力。第一次接觸抽象是大學(xué)低年 級(jí)學(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候,記得很清楚當(dāng)時(shí)學(xué)一個(gè)概

2、念叫抽象數(shù) 據(jù)類型(abstract data type),大概意思就是一個(gè)數(shù)據(jù)結(jié)構(gòu), 接口是一回事,實(shí)現(xiàn)是另一回事,比如棧,作為使用者你只 需要知道它有 push、pop、isEmpty 等方法,但它的底層實(shí)現(xiàn) 到底是 array 還是 linked list ,你是不需要知道的。用通俗一 點(diǎn)的話說,抽象就是你好好做自己的事,以及知道別人能幫 你干什么事,至于別人是如何幫你完成的,你沒必要知道。 這個(gè)簡(jiǎn)單的思想大大提高了開發(fā)者的效率,讓開發(fā)者只專注 于要解決的問題,而不是一些細(xì)枝末節(jié)的事。孟巖在他的文 章里也提到過“關(guān)注重點(diǎn)”這件事,雖然沒有明顯地提及抽 象二字,但他的意思和抽象表達(dá)的意思是

3、一樣的:我主張, 在具備基礎(chǔ)之后,學(xué)習(xí)任何新東西,都要抓住主線,突出重 點(diǎn)。對(duì)于關(guān)鍵理論的學(xué)習(xí),要集中精力,速戰(zhàn)速?zèng)Q。而旁枝 末節(jié)和非本質(zhì)性的知識(shí)內(nèi)容,完全可以留給實(shí)踐去零敲碎 打。原因是這樣的,任何一個(gè)高級(jí)的知識(shí)內(nèi)容,其中都只有一小 部分是有思想創(chuàng)新、有重大影響的,而其它很多東西都是瑣 碎的、非本質(zhì)的。因此,集中學(xué)習(xí)時(shí)必須把握住真正重要那 部分,把其它東西留給實(shí)踐。對(duì)于重點(diǎn)知識(shí),只有集中學(xué)習(xí) 其理論,才能確保體系性、連貫性、正確性,而對(duì)于那些旁 枝末節(jié),只有邊干邊學(xué)能夠讓你了解它們的真實(shí)價(jià)值是大是 小,才能讓你留下更生動(dòng)的印象。 如果你把精力用錯(cuò)了地方, 比如用集中大塊的時(shí)間來學(xué)習(xí)那些本來只

4、需要查查手冊(cè)就 可以明白的小技巧,而對(duì)于真正重要的、思想性東西放在平 時(shí)零敲碎打,那么肯定是事倍功半,甚至適得其反。計(jì)算機(jī) 專業(yè)課程之間完全可以用抽象來聯(lián)系:每一門課想做的事就 是利用下層提供的接口, 實(shí)現(xiàn)功能,然后再給上層提供接口。 這樣一層一層的抽象就構(gòu)成了幾乎所有的專業(yè)課。先來看最 高層,問題。剛學(xué)編程的時(shí)候,會(huì)先學(xué)一門課導(dǎo)論課或者編 程入門課,我當(dāng)時(shí)的入門課叫做“程序設(shè)計(jì)”,課程內(nèi)容是介紹一些問題,然后介紹一點(diǎn)編程語言的知識(shí),作業(yè)是一些 編程問題,比如八皇后、素性測(cè)試之類的比較常規(guī)的編程題。 這門課的目的一般都是介紹“問題”的,介紹計(jì)算機(jī)科學(xué)有哪些有挑戰(zhàn)的問題,讓學(xué)生對(duì)計(jì)算機(jī)專業(yè)有一個(gè)

5、感性的認(rèn) 識(shí),而不是對(duì)特定編程語言或者算法的學(xué)習(xí),所以這類課程 一般用 python 來編程。再往下一層,算法和數(shù)據(jù)結(jié)構(gòu)。這一 層的目的是學(xué)習(xí) /實(shí)現(xiàn)各種算法 /數(shù)據(jù)結(jié)構(gòu),提供給上層功能。 比如排序,問題解決者只要知道這里應(yīng)該用快速排序,而不 是選擇排序,而把快速排序的實(shí)現(xiàn)留給這一層的開發(fā)者,從 而使各種優(yōu)化都可以對(duì)上層透明,比如小數(shù)組變插入排序、 中位數(shù)取 pivot 、三向快速排序等, 這些優(yōu)化調(diào)用者完全不必 要知道, 他只需要知道: 哇,這個(gè)庫提供的快速排序還真快。 再往下一層,語言層,畢竟所有算法都要由某一門語言來實(shí) 現(xiàn)。這一層的存在使得算法的設(shè)計(jì)可以脫離具體的語言。不 同語言又提供了

6、不同的抽象,像函數(shù)式語言就比命令式語言 的抽象級(jí)高,更高的抽象級(jí)意味著更加專注問題本身(不需 要考慮內(nèi)存布局、 CPU 使用等)以及更少的代碼量。再往下 一層,編譯器 /解釋器。我們編寫代碼是用高級(jí)語言,而cpu上執(zhí)行的是機(jī)器碼,所以這個(gè)抽象層幫我們做了這個(gè)轉(zhuǎn)化。 這個(gè)抽象層的好處是,高級(jí)代碼的編寫者完全不需要知道這 個(gè)程序所運(yùn)行的操作系統(tǒng)和硬件平臺(tái),任何有該語言編譯器 /解釋器的機(jī)器,程序都可以跑(從而實(shí)現(xiàn)了跨平臺(tái))。應(yīng)用層開發(fā)者可以不用知道這個(gè)由高級(jí)語言到機(jī)器碼的轉(zhuǎn)化具 體是怎么實(shí)現(xiàn)的,畢竟編譯器優(yōu)化的編寫和優(yōu)化完全是一個(gè) 團(tuán)隊(duì)的工作量,開發(fā)者關(guān)注問題的解決,編譯器負(fù)責(zé)轉(zhuǎn)化出高效的機(jī)器碼,

7、 各干各的, 這正是抽象的重點(diǎn)。 再往下一層, 操作系統(tǒng)。OS向開發(fā)者抽象了硬件(CPU、內(nèi)存、Disk、 NIC等),并且以syscall的形式向用戶提供服務(wù)。OS的設(shè)計(jì)是最能體現(xiàn)抽象的,虛擬內(nèi)存和進(jìn)程讓程序以為自己獨(dú)占著 內(nèi)存和CPU,同時(shí)隔離了不同進(jìn)程以防惡意進(jìn)程;文件系統(tǒng)讓用戶可以方便地讀取存儲(chǔ)數(shù)據(jù),而不需要直接操作底層的 硬盤;文件描述符抽象了底層的設(shè)備(pipe/file/device/socket/ )。再往下一層,ISA (Instruction set architecture),俗稱軟件與硬件的接口。這個(gè)俗稱是非常形象的。指令集架構(gòu),說得簡(jiǎn)單點(diǎn)就是機(jī)器碼,也可以理解為一 個(gè)

8、協(xié)議。 ISA 標(biāo)準(zhǔn)制定者指定一套指令集(比如x86、PowerPC、SPARC),然后編譯器開發(fā)者需要根據(jù)這個(gè)標(biāo)準(zhǔn)/協(xié)議來編寫對(duì)應(yīng)的編譯器; CPU 制造商需要根據(jù)這個(gè)標(biāo)準(zhǔn) / 協(xié)議來制造出支持這套 ISA的CPU (比如intel的CPU支持 x86/x86_64 )。也就是說,軟件/硬件都依照這個(gè)ISA來設(shè)計(jì), 那么就可以對(duì)接了。再往下一層,組成原理和體系結(jié)構(gòu)。這 一層要做的事情是借助數(shù)字電路給它提供的功能(組合電路 和鎖存器),來設(shè)計(jì)一個(gè)能實(shí)現(xiàn)某種ISA的CPU,讓編譯器生成的指令可以在此 CPU 上運(yùn)行。大學(xué)里一般會(huì)開一門叫 “計(jì)算機(jī)組成原理” 的課, 一開始學(xué)單周期 CPU 的實(shí)現(xiàn)

9、(取 指、譯碼、執(zhí)行),為了提高效率又提出了流水線的實(shí) 現(xiàn)。為了發(fā)掘更高的效率,之后又會(huì)學(xué)一門叫“計(jì)算機(jī)體系 結(jié)構(gòu)”的課,這門課的目的是為了發(fā)掘更高的并行,從而制 造出更快的 CPU 。那這一層是如何用數(shù)字電路提供的功能? 舉兩個(gè)典型例子:一、 CPU 為了做計(jì)算會(huì)有 ALU 模塊,而 ALU 模塊正是一個(gè)組合電路 (輸入確定那么輸出確定) ;二 在流水線寄存器中每一個(gè)時(shí)鐘上升沿都會(huì)保存輸入的值,在 這個(gè)時(shí)鐘周期內(nèi)組合電路會(huì)根據(jù)這個(gè)新值計(jì)算出結(jié)果傳輸 到下一級(jí)流水線寄存器的輸入,等待下一個(gè)時(shí)鐘上升沿的到 來,這里的流水線寄存器正是某種鎖存器的實(shí)現(xiàn),而 CPU 開發(fā)者并不需要這個(gè)數(shù)字電路模塊是怎

10、么實(shí)現(xiàn)。再往下一 層,數(shù)字電路。這門課的目的是教學(xué)生如何利用基本的門電 路(與非或門)來實(shí)現(xiàn)一些高級(jí)的功能(譯碼器、多路復(fù)用 器、鎖存器、時(shí)序電路),然后給上層提供功能。上數(shù) 字電路課是一個(gè)用磚搭房子的過程,由基本的門電路開始, 慢慢構(gòu)造出復(fù)雜的電路。數(shù)字電路不需要關(guān)心基本的門電路 是如何實(shí)現(xiàn)的,因?yàn)檫@正是模擬電路向上層提供的功能。再 往下一層,模擬電路。這一層實(shí)現(xiàn)了與或非等基本門電路。 比如非門、與非門、或非門都可以通過若干個(gè) p/n 型 MOS 晶體管構(gòu)成,而與門可以通過連接一個(gè)與非門和非門構(gòu)成, 或門可以通過連接一個(gè)或非門和非門構(gòu)成。很多同學(xué)都覺得 模電對(duì)于計(jì)算機(jī)的同學(xué)不必要學(xué),而我認(rèn)為相反,它是你構(gòu) 建整個(gè)計(jì)算機(jī)抽象層級(jí)的基石。再往下一層,就不是計(jì)算機(jī) 領(lǐng)域研究的事了。當(dāng)然,還有很多專業(yè)課我并沒有提及,比 如網(wǎng)絡(luò),它是 OS 提供的抽象之一,以文件的形式提供給用 戶使用;在網(wǎng)絡(luò)協(xié)議棧實(shí)現(xiàn)的細(xì)節(jié)里,又分了好幾層抽象, 這就是我們熟知的 OSI 七層網(wǎng)絡(luò)模型(有時(shí)候被抽象為五層:Appl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論