自學(xué)計(jì)算機(jī)專業(yè)

前排提示 本文轉(zhuǎn)載自公眾號(hào) 良許Linux

重點(diǎn)三大塊

計(jì)算機(jī)基礎(chǔ)知識(shí)
特定業(yè)務(wù)技能
解決問(wèn)題的能力

計(jì)算機(jī)基礎(chǔ)知識(shí),是根本,是任何從事編程工作的工程師都應(yīng)該具備的能力,包括:計(jì)算機(jī)組成原理、計(jì)算機(jī)操作系統(tǒng)、計(jì)算機(jī)編譯原理、數(shù)據(jù)結(jié)構(gòu)與算法、各種編程語(yǔ)言等等。

基礎(chǔ)知識(shí)是基本功,你基礎(chǔ)打扎實(shí)了從事任何一個(gè)領(lǐng)域的工作,都會(huì)游刃有余。

特定業(yè)務(wù)技能,就是你所從事的細(xì)分領(lǐng)域所應(yīng)具備的業(yè)務(wù)及專業(yè)技能。比如,你做嵌入式,就需要學(xué)習(xí)一些硬件知識(shí);做算法,就需要掌握比較深的數(shù)學(xué)及算法知識(shí);做人工智能,就要學(xué)習(xí)更多專業(yè)技能了。

現(xiàn)在企業(yè)的業(yè)務(wù)各不相同,所以細(xì)分出來(lái)的領(lǐng)域也非常多。想要做到每個(gè)領(lǐng)域都精通,幾乎不可能。所以大部分程序員只能挑選少數(shù)幾個(gè)領(lǐng)域進(jìn)行深耕。

解決問(wèn)題的能力,這個(gè)應(yīng)該是各個(gè)企業(yè)都非常看重。企業(yè)是請(qǐng)你來(lái)解決問(wèn)題,不是吃干飯,更不是來(lái)創(chuàng)造問(wèn)題。這是程序員的軟實(shí)力,你是菜鳥程序員還是資深程序員,差別就在這。

在學(xué)校里,遇到程序問(wèn)題還可以跟同學(xué)們甚至老師一起討論,但在企業(yè)里,大家都很忙,遇到問(wèn)題幾乎都需要自己想辦法解決。

業(yè)務(wù)技能及解決問(wèn)題能力,需要自己長(zhǎng)時(shí)間的積累,以及刻意訓(xùn)練,甚至貫穿程序員的整個(gè)職業(yè)生涯。

而計(jì)算機(jī)基礎(chǔ)知識(shí),大家學(xué)習(xí)的內(nèi)容都差不多,下面我就給大家總結(jié)一下,作為計(jì)算機(jī)專業(yè)的學(xué)生,應(yīng)該掌握哪些基礎(chǔ)知識(shí)。


俗話說(shuō),基礎(chǔ)不牢,地動(dòng)山搖。所以如果你想學(xué)好CS,一定要在學(xué)習(xí)編程語(yǔ)言、計(jì)算機(jī)組成、計(jì)算機(jī)操作系統(tǒng)、編譯原理、數(shù)據(jù)結(jié)構(gòu)/算法等等之前,先打好最基礎(chǔ)部分。

最基礎(chǔ)的部分一般包括以下內(nèi)容:

數(shù)學(xué)
英語(yǔ)
這兩塊內(nèi)容,對(duì)于任何想學(xué)習(xí)CS的專業(yè)課之前,是必修的基礎(chǔ)課。

其實(shí),等你工作到一定年限之后你就會(huì)發(fā)現(xiàn),代碼只是工具而已,不管你是用Java、Python、還是C++,其實(shí)這些語(yǔ)言都或多或少有相通性,最終的結(jié)果都是要用來(lái)解決實(shí)際問(wèn)題的。

所以,為什么會(huì)有很多人非常擅長(zhǎng)寫代碼,卻成不了一個(gè)好的「軟件工程師」。這也正是區(qū)別「碼農(nóng)」與「工程師」的關(guān)鍵之處。

而如果你想擁有非常好的業(yè)務(wù)能力,肯定會(huì)離不開(kāi)數(shù)據(jù)結(jié)構(gòu)和算法。而這兩塊都需要很強(qiáng)的數(shù)學(xué)功底。

而現(xiàn)在國(guó)外的計(jì)算機(jī)水平領(lǐng)先國(guó)內(nèi)幾十年,一些新技術(shù)、新框架往往都會(huì)先出現(xiàn),所以你需要扎實(shí)的英文水平第一時(shí)間獲取到這方面的信息。同時(shí),如果編程過(guò)程中遇到問(wèn)題,還可以在國(guó)外的論壇上得到更多的解答。

二、專業(yè)理論基礎(chǔ)

計(jì)算機(jī)組成原理
計(jì)算機(jī)組成原理介紹了計(jì)算機(jī)的基礎(chǔ)知識(shí),包括計(jì)算機(jī)的各子系統(tǒng)(運(yùn)算器、存儲(chǔ)器、控制器、外部設(shè)備和輸入輸出子系統(tǒng)等)的基本組成原理、設(shè)計(jì)方法、相互關(guān)系以及各子系統(tǒng)互相連接構(gòu)成整機(jī)系統(tǒng)的技術(shù)。

學(xué)好了這門課程,你的七大姑八大姨,或者你暗戀很久的翠花,叫你修電腦的時(shí)候,就會(huì)游刃有余。

這門課程不僅介紹了計(jì)算機(jī)軟硬件的相關(guān)知識(shí),也介紹了計(jì)算機(jī)的各大基本部件的組成原理、設(shè)計(jì)方法及相互關(guān)系。

書籍推薦

  • 入門系列

《計(jì)算機(jī)是怎樣跑起來(lái)的》

《程序是怎樣跑起來(lái)的》

《Computer Organization》

  • 深入系列

《計(jì)算機(jī)組成與設(shè)計(jì):硬件 / 軟件接口》

《深入理解計(jì)算機(jī)系統(tǒng)》

《計(jì)算機(jī)組成:結(jié)構(gòu)化方法》

《計(jì)算機(jī)體系結(jié)構(gòu):量化研究方法》

視頻教程推薦

1) 國(guó)外視頻

視頻則推薦伯克利大學(xué) Brian Harvey 的 SICP 課程,CS61A。建議至少學(xué)完 SICP 的前三章,并把練習(xí)題做完。

CS 61A: Structure and Interpretation of Computer Programs

如果你覺(jué)得 SICP 的課程太難,可以選擇 How to Design Programs。

How to Design Programs

還有兩門課也很經(jīng)典:

  • Harvard的CS50

CS50: Introduction to Computer Science

  • MIT的6.001

mit-6.001

2) 國(guó)內(nèi)視頻

  • 清華大學(xué)劉衛(wèi)東老師的課程:

https://www.bilibili.com/video/BV1c4411w7nd?from=search&seid=12578695357351557326

  • 哈工大劉宏偉(135講)

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

計(jì)算機(jī)操作系統(tǒng)
即使不是程序員,每個(gè)人幾乎每天都跟操作系統(tǒng)打交道(PC or phone)。簡(jiǎn)單來(lái)講,操作系統(tǒng)是在為應(yīng)用程序提供服務(wù),比如:內(nèi)存分配、進(jìn)程調(diào)度、管理虛擬存儲(chǔ)器,管理中斷,管理磁盤,等等。

所以,對(duì)于程序員而言,你學(xué)了操作系統(tǒng),你就會(huì)更加清楚如何去進(jìn)行內(nèi)存管理,如何進(jìn)行進(jìn)程調(diào)度。編寫出來(lái)的程序也會(huì)比不懂操作系統(tǒng)的程序員更加優(yōu)雅。

而且,不管對(duì)于大廠還是小公司,在面試或筆試的時(shí)候,都很經(jīng)常考到操作系統(tǒng),所以不管是工作還是為了應(yīng)付面試,都需要好好學(xué)習(xí)一下操作系統(tǒng)。

書籍推薦

  • 入門系列

《現(xiàn)代操作系統(tǒng)》

《操作系統(tǒng)導(dǎo)論》

  • 深入系列

《深入理解計(jì)算機(jī)系統(tǒng)》

《自己動(dòng)手寫操作系統(tǒng)》

《操作系統(tǒng)真象還原》

視頻教程推薦

1) 國(guó)外視頻

2) 國(guó)內(nèi)視頻

  • 《操作系統(tǒng)原理》,清華大學(xué)老師的課程,講得很淺顯易懂。

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

  • 《操作系統(tǒng)》,哈工大李治軍老師,32講

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

計(jì)算機(jī)編譯原理
編譯簡(jiǎn)單來(lái)講就是把高級(jí)語(yǔ)言翻譯成計(jì)算機(jī)可識(shí)別的機(jī)器語(yǔ)言,但這個(gè)過(guò)程并不容易,而且,你理解這個(gè)過(guò)程也同樣不容易。

編譯原理是計(jì)算機(jī)技術(shù)中相當(dāng)基礎(chǔ)的一門技術(shù),同時(shí)它也是計(jì)算科學(xué)中技術(shù)含量較高的一門學(xué)科,它和算法、數(shù)據(jù)結(jié)構(gòu)、編程語(yǔ)言等都有非常密切的聯(lián)系,對(duì)這些相關(guān)技術(shù)的深入學(xué)習(xí)提供基本的理論基礎(chǔ),所以學(xué)好編譯原理不但對(duì)該技術(shù)非常重要,而且對(duì)于學(xué)習(xí)相關(guān)的技術(shù)也非常重要,掌握編譯原理你才有機(jī)會(huì)掌握更多的技術(shù)。

編譯原理非常難,而且非常枯燥,需要要很強(qiáng)的功底才可以入門學(xué)習(xí)。

書籍推薦

《編譯器設(shè)計(jì)-第二版》

《編譯原理》

視頻教程推薦

1) 國(guó)外視頻

  • CS143: Introduction to Compilers
  • CS243 - Program Analysis and Optimizations
  • CS 343
  • https://www.cs.cmu.edu/~410/
  • 15-411: Compiler Design (Fa'12)
  • 15-440/640, Spring 2015: Distributed Systems

2) 國(guó)內(nèi)視頻

  • 《編譯原理》,哈工大,81集

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

  • 《編譯原理》,東南大學(xué),廖力老師主講,全64講

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

計(jì)算機(jī)網(wǎng)絡(luò)
在互聯(lián)網(wǎng)如此發(fā)達(dá)的今天,幾乎沒(méi)有應(yīng)用軟件不連接網(wǎng)絡(luò)的,所以對(duì)于一個(gè)程序員而言,不懂計(jì)算機(jī)網(wǎng)絡(luò)的話簡(jiǎn)直寸步難行。

學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò),你需要懂得Socket編程,知道TCP/IP網(wǎng)絡(luò)模型,了解OSI七層網(wǎng)絡(luò)架構(gòu),知道一個(gè)數(shù)據(jù)包是如何層層包裝,再層層拆包,從客戶端發(fā)送到服務(wù)端。

計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)該是除操作系統(tǒng)與算法之外,另一個(gè)面試常考的方向。所以,準(zhǔn)備面試的小伙伴計(jì)網(wǎng)也一定需要好好準(zhǔn)備一下。

書籍推薦

《網(wǎng)絡(luò)是怎么連接的》

《計(jì)算機(jī)網(wǎng)絡(luò)-自頂向下方法》

《圖解HTTP》

視頻教程推薦

1) 國(guó)外視頻

2) 國(guó)內(nèi)視頻

  • 《計(jì)算機(jī)網(wǎng)絡(luò)》(謝希仁第七版)-方老師

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

  • 《計(jì)算機(jī)網(wǎng)絡(luò)》,哈爾濱工業(yè)大學(xué),李全龍老師

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

數(shù)據(jù)庫(kù)基礎(chǔ)
數(shù)據(jù)庫(kù)當(dāng)然就是存儲(chǔ)數(shù)據(jù)的地方,很多人自稱CRUD工程師,但如果你連數(shù)據(jù)庫(kù)都不懂,恐怕連這個(gè)稱號(hào)都擔(dān)不起。

一個(gè)軟件在運(yùn)行過(guò)程中,需要保存大量的輸入信息,同時(shí)也會(huì)產(chǎn)生很多中間信息,所以數(shù)據(jù)庫(kù)是必不可少的一個(gè)組成部分。它無(wú)所不在,網(wǎng)站的背后、應(yīng)用的內(nèi)部,單機(jī)軟件,區(qū)塊鏈里,甚至在離數(shù)據(jù)庫(kù)最遠(yuǎn)的Web瀏覽器中,都有它的身影。

數(shù)據(jù)庫(kù)分為關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù),但近年來(lái)又出現(xiàn)了個(gè)NewSQL的東東,也需要稍微了解一下。學(xué)習(xí)數(shù)據(jù)庫(kù),你不僅要懂得SQL語(yǔ)句,表設(shè)計(jì)結(jié)構(gòu)這些基礎(chǔ)部分,還要懂索引、慢查詢優(yōu)化,配置參數(shù)調(diào)優(yōu),更深入的還要學(xué)習(xí)SQL優(yōu)化、備份與恢復(fù)、架構(gòu)優(yōu)化等等進(jìn)階內(nèi)容。

書籍推薦

  • 入門系列

《MySQL必知必會(huì)》

《SQL學(xué)習(xí)指南(第2版 修訂版)》

  • 深入系列

《MySQL技術(shù)內(nèi)幕——InnoDB存儲(chǔ)引擎》

《Redis設(shè)計(jì)與實(shí)現(xiàn)》

《ZooKeeper:分布式過(guò)程協(xié)同技術(shù)詳解》

視頻教程推薦

1) 國(guó)外視頻

2) 國(guó)內(nèi)視頻

  • 《數(shù)據(jù)庫(kù)系統(tǒng)概論》,王珊老師,中國(guó)人民大學(xué)

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

三、編程語(yǔ)言

現(xiàn)在網(wǎng)上關(guān)于第一門編程語(yǔ)言的選擇有很多不同的看法,主要都在爭(zhēng)論是C還是python。雖然現(xiàn)在很多大V能說(shuō)出很多理由選python,但是我在這里比較推薦C。

因?yàn)橄駊ython這樣的高級(jí)編程語(yǔ)言更多的是面向API編程,或者說(shuō)就是熟悉API,很容易給人造成一種假象:計(jì)算機(jī)就是調(diào)包然后各種花里胡哨。

然而C這種更偏向“底層”的語(yǔ)言更注重的是邏輯,可以幫你培養(yǎng)出非常良好的編程思維和習(xí)慣,尤其是指針章節(jié),雖然的確新手不好理解,但是這塊知識(shí)非常適合給新手初窺一下計(jì)算機(jī)系統(tǒng)的門徑,后面學(xué)習(xí)其他語(yǔ)言和理論知識(shí)也是事半功倍。

而且C也沒(méi)有OOP(面向?qū)ο?的特性,剛上手不推薦學(xué)很多很雜的理念,很容易把人的思維搞亂。

書籍推薦

《C程序設(shè)計(jì)語(yǔ)言》

C語(yǔ)言三劍客(《C和指針》,《C專家編程》,《C陷阱與缺陷》)

《C primer plus》

不推薦譚浩強(qiáng)的書,寫得很爛,里面還各種錯(cuò)誤。

視頻教程推薦

1) 國(guó)外視頻

如果聽(tīng)得懂澳大利亞的口音的話,這門課是從C語(yǔ)言入門編程最好的公開(kāi)課。

講課的教授幽默風(fēng)趣,知識(shí)豐富。面向的學(xué)生也是大一新生。絕對(duì)值得一學(xué)。

C programming by Richard Buckland UNSW 2008

2) 國(guó)內(nèi)視頻

強(qiáng)烈推薦翁愷老師的這門公開(kāi)課,講得淺顯易懂,口碑十分好!

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

四、數(shù)據(jù)結(jié)構(gòu)與算法

4. 數(shù)據(jù)結(jié)構(gòu)與算法

大家或多或少都聽(tīng)說(shuō)過(guò),在企業(yè)面試的時(shí)候,數(shù)據(jù)結(jié)構(gòu)與算法是必考的一部分內(nèi)容。所以,你如果想要進(jìn)入一個(gè)心儀的公司,一定要學(xué)好數(shù)據(jù)結(jié)構(gòu)與算法。

但是,難道除了面試,數(shù)據(jù)結(jié)構(gòu)與算法就沒(méi)有用武之地了嗎?肯定不是的!即使你整天的工作就是CRUD,但是如何你不懂時(shí)間、空間復(fù)雜度,你如何更合理調(diào)用那些API?如何降低功耗,提高程序運(yùn)行效率?

而且,作為業(yè)務(wù)開(kāi)發(fā),我們會(huì)用到各種框架、中間件和底層系統(tǒng),比如 Spring、RPC 框架、消息中間件、Redis 等等。在這些基礎(chǔ)框架中,一般都揉和了很多基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)和算法的設(shè)計(jì)思想。

如果你能弄明白這些底層原理,你就能更好地使用它們。即便出現(xiàn)問(wèn)題,也很容易就能定位。因此,掌握數(shù)據(jù)結(jié)構(gòu)和算法,不管對(duì)于閱讀框架源碼,還是理解其背后的設(shè)計(jì)思想,都是非常有用的。

書籍推薦

  • 入門系列

《算法圖解》

《大話數(shù)據(jù)結(jié)構(gòu)》

  • 深入系列

《算法-第四版》

《算法導(dǎo)論》

視頻教程推薦

1) 國(guó)外視頻

  • Stanford: Algorithms

這門課由斯坦福大學(xué)計(jì)算機(jī)科學(xué)系教授Tim Roughgarden授課,適合至少掌握一種編程語(yǔ)言的編程學(xué)習(xí)者。斯坦福的課強(qiáng)調(diào)理論和概念上的理解。學(xué)完這門課后,對(duì)你今后面對(duì)技術(shù)面試時(shí)將會(huì)非常有利。

  • UCSD:數(shù)據(jù)結(jié)構(gòu)與算法

Daniel M Kane、Pavel Pevzner等五位老師共同授課,這門課程的最大特點(diǎn)是理論和實(shí)踐的結(jié)合,你將學(xué)習(xí)到解決各種計(jì)算問(wèn)題的算法技巧,并實(shí)現(xiàn)大約100個(gè)算法編碼問(wèn)題。

  • Prin:Algorithms, Part I

Kevin Wayne和Robert Sedgewick共同授課,涵蓋了有關(guān)算法和數(shù)據(jù)結(jié)構(gòu)的基本信息,重點(diǎn)是Java實(shí)現(xiàn)的應(yīng)用程序和科學(xué)性能分析。第一部分包括基本數(shù)據(jù)結(jié)構(gòu)、排序和搜索算法。第二部分重點(diǎn)討論了圖形和字符串處理算法。

2) 國(guó)內(nèi)視頻

  • 《數(shù)據(jù)結(jié)構(gòu)》,浙江大學(xué)陳越和何欽銘教授聯(lián)合授課,其大名在計(jì)算機(jī)領(lǐng)域可謂耳熟能詳了。

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

  • 《數(shù)據(jù)結(jié)構(gòu)與算法C++版》,由由北京大學(xué)張銘教授等七位授課老師全力打造,國(guó)家精品公開(kāi)課。

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

  • 《數(shù)據(jù)結(jié)構(gòu)》,武漢大學(xué)李春葆教授

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容