前言
昨晚聽(tīng)了一期知乎live:如何自學(xué)計(jì)算機(jī)專(zhuān)業(yè)課程仓犬。
學(xué)習(xí)后發(fā)現(xiàn)秀撇,里面的內(nèi)容更適合計(jì)算機(jī)專(zhuān)業(yè)的在校生以及計(jì)算機(jī)基礎(chǔ)較弱的小白伏伯。此外,作者推薦的一些教材倒是不錯(cuò)捌袜,在此分享说搅。
Test Post Data From PC to see whether it is auto refreshed in Mobile App.
完全可以。計(jì)算機(jī)專(zhuān)業(yè)是人類(lèi)歷史上第一個(gè)可以通過(guò)互聯(lián)網(wǎng)學(xué)習(xí)到幾乎所有專(zhuān)業(yè)知識(shí)的這么一個(gè)專(zhuān)業(yè)虏等。
計(jì)算機(jī)專(zhuān)業(yè)的自學(xué)路線(xiàn)圖
美國(guó)計(jì)算機(jī)學(xué)會(huì)ACM發(fā)布了《計(jì)算機(jī)科學(xué)課程體系》的報(bào)告弄唧,當(dāng)前最新版是2013年的。計(jì)算機(jī)科學(xué)被劃分為18個(gè)知識(shí)領(lǐng)域霍衫。如下:
知識(shí)的掌握程度劃分為三級(jí):
雖然計(jì)算機(jī)科學(xué)被劃分為18個(gè)領(lǐng)域候引,但是這18個(gè)領(lǐng)域有著緊密的聯(lián)系,構(gòu)成了知識(shí)之網(wǎng)敦跌。這是我們的核心任務(wù)澄干。
學(xué)計(jì)算機(jī)的目的:
掌握上層應(yīng)用的開(kāi)發(fā)逛揩,為了能夠在IT公司找一份工作。是以就業(yè)為目的的自學(xué)麸俘。
以考試為目的的自學(xué)
為了解決工作中遇到的特定問(wèn)題辩稽,提升專(zhuān)業(yè)技能,升職加薪从媚。以個(gè)人的職業(yè)發(fā)展為目的逞泄。
對(duì)于小白而言,首先要對(duì)計(jì)算機(jī)科學(xué)和計(jì)算機(jī)產(chǎn)業(yè)形成整體的認(rèn)識(shí)拜效。這方面可以讀導(dǎo)論或者科普讀物喷众。建議先讀吳軍博士的《浪潮之巔》。這本書(shū)講IT產(chǎn)業(yè)非常精彩紧憾。
緊接著到千,要做兩件事:(1)掌握一門(mén)編程語(yǔ)言;(2)學(xué)好數(shù)學(xué)赴穗。這兩者是并行的父阻。
(1)掌握一門(mén)編程語(yǔ)言:
第一種:C是一種結(jié)構(gòu)化的編程語(yǔ)言探膊。如果不會(huì)C所森,后面的課程根本學(xué)不下去盔粹。
第二種:Java是一種典型的面向?qū)ο蟮恼Z(yǔ)言。Java有活躍的社區(qū)和數(shù)之不盡的開(kāi)源項(xiàng)目煤篙。
第三種:JavaScript 或者Python。這兩個(gè)語(yǔ)言都是屬于動(dòng)態(tài)編程語(yǔ)言的范疇毁腿,應(yīng)用極為廣泛辑奈。JavaScript是全世界使用人數(shù)最多的一種語(yǔ)言,并且JS的各種框架層出不窮已烤,進(jìn)步飛快鸠窗,業(yè)界的工作機(jī)會(huì)眾多,對(duì)找工作是非常有幫助的胯究。但實(shí)話(huà)實(shí)說(shuō)稍计,JS在計(jì)算機(jī)專(zhuān)業(yè)課程中用的并不多。Python卻不同裕循,它被國(guó)內(nèi)外的很多大學(xué)選為新生的第一門(mén)語(yǔ)言臣嚣。尤其是在這個(gè)大數(shù)據(jù)時(shí)代,Python真是火爆剥哑。
上面這四種語(yǔ)言硅则,是學(xué)軟件開(kāi)發(fā)必須要掌握的,從任何一個(gè)語(yǔ)言開(kāi)始學(xué)起都可以株婴。
(2)對(duì)于數(shù)學(xué)怎虫,我們必須掌握四門(mén)課程:
- 高等數(shù)學(xué)
- 離散數(shù)學(xué)
- 線(xiàn)性代數(shù)
- 概率論與數(shù)理統(tǒng)計(jì)
在掌握了編程語(yǔ)言,用編程語(yǔ)言寫(xiě)了一些應(yīng)用程序之后,又學(xué)習(xí)了一些數(shù)學(xué)之后大审,你就可以進(jìn)入計(jì)算機(jī)專(zhuān)業(yè)基礎(chǔ)課程的學(xué)習(xí)蘸际。這些課程構(gòu)成了計(jì)算機(jī)的核心課程群,我們通常把它稱(chēng)為「專(zhuān)業(yè)基礎(chǔ)課」饥努。專(zhuān)業(yè)基礎(chǔ)課有十多門(mén)捡鱼,其中最重要的是四門(mén)如下(這四個(gè)課程也是考研科目):
- 數(shù)據(jù)結(jié)構(gòu)與算法
- 計(jì)算機(jī)組成原理
- 操作系統(tǒng)
- 計(jì)算機(jī)網(wǎng)絡(luò)
除此之外,計(jì)算機(jī)基礎(chǔ)課還包括:
- 編譯原理
- 面向?qū)ο蟮姆椒?/li>
- 關(guān)系數(shù)據(jù)庫(kù)的理論
- 軟件工程等等
這次我們就只針對(duì)那四個(gè)考研科目進(jìn)行介紹酷愧。
這里我要強(qiáng)調(diào)的是:計(jì)算機(jī)專(zhuān)業(yè)基礎(chǔ)課程的學(xué)習(xí)驾诈,和我們?cè)诠ぷ髦袑?shí)用技術(shù)的學(xué)習(xí),這兩者不是相互矛盾的溶浴,而是相互促進(jìn)的乍迄。比如計(jì)算機(jī)網(wǎng)絡(luò)課程,對(duì)web開(kāi)發(fā)框架有幫助士败;反過(guò)來(lái)闯两,如果寫(xiě)了web框架,就能更深刻的理解計(jì)算機(jī)網(wǎng)絡(luò)這門(mén)課程谅将。
在完成專(zhuān)業(yè)基礎(chǔ)課和實(shí)用技術(shù)的學(xué)習(xí)之后漾狼,就進(jìn)入了一個(gè)新的自學(xué)階段。這個(gè)階段可以針對(duì)你感興趣的特定領(lǐng)域深入鉆研了饥臂。比如你對(duì)人工智能感興趣逊躁,那可以學(xué)一下機(jī)器學(xué)習(xí)、spark等等隅熙。這個(gè)時(shí)候的學(xué)習(xí)目的非常明確稽煤,即:培養(yǎng)特定領(lǐng)域的專(zhuān)業(yè)技能,讓你成為特定領(lǐng)域的專(zhuān)家囚戚。
自學(xué)效果的好壞高度依賴(lài)于個(gè)人的學(xué)習(xí)動(dòng)機(jī)酵熙,以及自學(xué)過(guò)程中采用的方式、方法驰坊、策略匾二。要想取得好的學(xué)習(xí)效果,了解一些學(xué)習(xí)理論是非常重要的拳芙,這里推薦一本書(shū)叫《學(xué)習(xí)之道》假勿。書(shū)中介紹了很多學(xué)習(xí)有關(guān)的新成果。
選書(shū)和看書(shū)的基本原則
當(dāng)某人告訴你态鳖,某書(shū)是某領(lǐng)域最好的書(shū)籍转培,不要盲目相信,要經(jīng)過(guò)自己親自試驗(yàn)再下結(jié)論浆竭。通常情況下浸须,一本別人眼中的好書(shū)惨寿,可能的確質(zhì)量很高,但如果閱讀它超過(guò)了你的能力删窒,那對(duì)于你而言裂垦,它就不是一本好書(shū),因?yàn)槟悴痪邆渌枰谋尘爸R(shí)肌索,和相關(guān)的技術(shù)經(jīng)驗(yàn)蕉拢。
第二個(gè)原則是,選擇那些你已經(jīng)具備讀懂前提的書(shū)诚亚。
閱讀科普書(shū)籍的最主要目的是:了解特定領(lǐng)域的背景知識(shí)晕换、明了這個(gè)領(lǐng)域的基本數(shù)據(jù)和概念,建立全局觀站宗。
讀者:多讀幾遍真的很重要闸准,我在看js的時(shí)候,把廖雪峰的教程看了好多遍梢灭,敲了好多遍夷家。
上圖是計(jì)算機(jī)網(wǎng)絡(luò)的經(jīng)典教材。我們拿著兩本書(shū)來(lái)舉例敏释。
比如《計(jì)算機(jī)網(wǎng)絡(luò):系統(tǒng)方法》這本書(shū)库快,作者在前言中就很明確地說(shuō)明,它是針對(duì)網(wǎng)絡(luò)設(shè)計(jì)者寫(xiě)的钥顽。注意是網(wǎng)絡(luò)設(shè)計(jì)者义屏,不是網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)者。這本書(shū)講的是計(jì)算機(jī)網(wǎng)絡(luò)的基本原理耳鸯。介紹的是最初的設(shè)計(jì)者遇到了什么問(wèn)題。
讀第一遍時(shí)膀曾,第一章一定要認(rèn)真閱讀县爬,包含了很多的術(shù)語(yǔ)。
讀第二遍時(shí)添谊,每章的開(kāi)頭很重要财喳。
比如《計(jì)算機(jī)網(wǎng)絡(luò):系統(tǒng)方法》這本書(shū),里面講到的網(wǎng)絡(luò)安全這一章斩狱,如果你當(dāng)前還沒(méi)有涉及到這一塊兒耳高,這一遍就可以跳過(guò)。但是有關(guān)PCP協(xié)議的內(nèi)容所踊,在實(shí)際開(kāi)發(fā)中用的很多泌枪,就很重要,這些內(nèi)容分布于書(shū)中的各個(gè)章節(jié)秕岛,這就需要你把它們抽取出來(lái)碌燕。
比如上面的這本《離散數(shù)學(xué)》误证,一頁(yè)紙就要啃兩個(gè)小時(shí)。
與書(shū)籍相比修壕,視頻的優(yōu)點(diǎn)是很獨(dú)特的愈捅,特別適合展示動(dòng)的過(guò)程,比如程序的調(diào)試過(guò)程慈鸠、算法的運(yùn)行步驟等蓝谨。
有很多編程工作屬于工程領(lǐng)域,按部就班青团,有很多現(xiàn)成的套路譬巫,創(chuàng)造性并不強(qiáng),數(shù)學(xué)在這些項(xiàng)目中并非成敗的關(guān)鍵因素壶冒。項(xiàng)目中缕题,確實(shí)有算法在底層做支撐,但這算法往往都有現(xiàn)成的底層庫(kù)胖腾。你只需要知道如何調(diào)用就行烟零,并不需要理解算法的細(xì)節(jié),并需要具備多深的數(shù)學(xué)功底咸作。對(duì)于初級(jí)程序員來(lái)說(shuō)锨阿,主要干的是搬磚的活兒,特別是CRUD類(lèi)的代碼记罚。
同濟(jì)的《高等數(shù)學(xué)》教材還是不錯(cuò)的墅诡,但是國(guó)內(nèi)數(shù)學(xué)教材有個(gè)最大的問(wèn)題就是:往往只講法則、定理桐智、證明末早、習(xí)題,不講數(shù)學(xué)的發(fā)展歷史说庭、具體應(yīng)用然磷、也不強(qiáng)調(diào)解決特定問(wèn)題的思路,不適合自學(xué)刊驴。
普林斯頓的《微積分讀本》姿搜,最大的特點(diǎn)是,講的很細(xì)捆憎,采用內(nèi)心獨(dú)白的方式介紹微積分舅柜,有高中基礎(chǔ)即可。內(nèi)容雖然沒(méi)有同濟(jì)的多和深躲惰,但學(xué)習(xí)計(jì)算機(jī)來(lái)說(shuō)致份,也基本夠用了。
讀者:這里也給大家推薦本冷門(mén)數(shù)學(xué)書(shū)础拨,名字叫考研數(shù)學(xué)三部曲知举,銷(xiāo)量很少瞬沦。因?yàn)檫@本書(shū)優(yōu)點(diǎn)是由淺入深,缺點(diǎn)是又臭又長(zhǎng)雇锡,適合文科生看逛钻。
《計(jì)算機(jī)科學(xué)概論》起到的是建立全局觀的作用。
讀者:想從Python 入門(mén)的同學(xué)锰提,也推薦Headfirst Python曙痘。整個(gè)headfirst 系列都推薦。
讀者:headfirst真的很不錯(cuò)立肘,同推薦边坤,特別設(shè)計(jì)模式。
《深入理解計(jì)算機(jī)系統(tǒng)》這本書(shū)谅年,對(duì)于形成計(jì)算機(jī)系統(tǒng)的全局觀非常有用茧痒。這本書(shū)簡(jiǎn)稱(chēng)為CSAPP,很有名融蹂。這本是最大的特點(diǎn)是從使用者旺订,而不是從設(shè)計(jì)者的角度來(lái)組織材料的,難度適中超燃,文字流暢区拳。但這本書(shū)不適合零基礎(chǔ)入門(mén),你至少應(yīng)該首先學(xué)過(guò)計(jì)算機(jī)導(dǎo)論意乓,并且有一定的C語(yǔ)言開(kāi)發(fā)經(jīng)驗(yàn)樱调,會(huì)用Linux。
讀者:CSAPP看的時(shí)候要?jiǎng)覥語(yǔ)言并且要看計(jì)算機(jī)專(zhuān)業(yè)導(dǎo)論届良,不然看不懂的笆凌。
考研的四門(mén)課
下面介紹計(jì)算機(jī)專(zhuān)業(yè)的幾門(mén)骨干和和核心課程。同時(shí)也是考研的四門(mén)課程:數(shù)據(jù)結(jié)構(gòu)與算法士葫、計(jì)算機(jī)網(wǎng)絡(luò)乞而、操作系統(tǒng)、計(jì)算機(jī)組成原理为障。
(1)數(shù)據(jù)結(jié)構(gòu):
上圖中晦闰,數(shù)據(jù)結(jié)構(gòu)與算法包括了兩部分內(nèi)容放祟。
現(xiàn)在的大數(shù)據(jù)和人工智能鳍怨,完全就是算法。
上圖中跪妥,第一本書(shū)有兩個(gè)版本:java版本和C語(yǔ)言版本鞋喇,難度適中。后兩本書(shū)眉撵,較難侦香。
對(duì)于多數(shù)人來(lái)說(shuō)落塑,掌握算法,只需要知道算法的思想罐韩、應(yīng)用場(chǎng)景和優(yōu)缺點(diǎn)就可以憾赁。實(shí)際開(kāi)發(fā)中,你要設(shè)計(jì)新算法的機(jī)會(huì)并不多散吵,并且那些應(yīng)用很廣的算法龙考,都已經(jīng)在框架里提供了現(xiàn)成的組件。這些組建內(nèi)部已經(jīng)實(shí)現(xiàn)了算法矾睦,你只需要知道是怎么回事晦款,會(huì)調(diào)用就可以了。比如說(shuō)加密和解密的算法枚冗。
考研和大公司面試缓溅,也不會(huì)考到復(fù)雜的算法,準(zhǔn)備前多刷幾遍即可赁温。
(2)計(jì)算機(jī)組成原理:
計(jì)算機(jī)組成原理主要是介紹計(jì)算機(jī)由哪些部件組成的坛怪,這些部件是如何互相協(xié)作、完成處理功能束世、同時(shí)用來(lái)滿(mǎn)足各種成本和功耗指標(biāo)的酝陈。
學(xué)習(xí)這門(mén)課程之前,通常需要學(xué)習(xí)數(shù)字電路基礎(chǔ)毁涉。
學(xué)完計(jì)算機(jī)組成原理之后沉帮,再去學(xué)操作系統(tǒng)和編譯原理。
學(xué)習(xí)計(jì)算機(jī)組成原理之前贫堰,建議大家先看《編碼》這本書(shū)穆壕。
(3)操作系統(tǒng):
上圖中,操作系統(tǒng)的書(shū)分為兩類(lèi):教材和專(zhuān)著其屏。
操作系統(tǒng)的教材里喇勋,數(shù)學(xué)公式不多,但它并不是說(shuō)操作系統(tǒng)者這門(mén)課就很容易學(xué)偎行,學(xué)好操作系統(tǒng)的關(guān)鍵是一定要把它和軟件開(kāi)發(fā)川背、動(dòng)手實(shí)踐結(jié)合起來(lái)。
很多操作系統(tǒng)都是用C語(yǔ)言寫(xiě)的蛤袒,建議大家在學(xué)習(xí)操作系統(tǒng)之前熄云,先學(xué)習(xí)C語(yǔ)言。
學(xué)習(xí)操作系統(tǒng)妙真,最重要的是明白操作系統(tǒng)的內(nèi)部機(jī)理缴允。推薦大家實(shí)用C語(yǔ)言在Linux下學(xué)習(xí)。
進(jìn)程和線(xiàn)程也是屬于操作系統(tǒng)的范疇珍德。
讀者:補(bǔ)一個(gè)金老師的網(wǎng)易云課堂:http://mooc.study.163.com/u/8050019871#/c
(4)計(jì)算機(jī)網(wǎng)絡(luò)
我推薦大家實(shí)用C练般、java矗漾、Phthon這三種語(yǔ)言去編寫(xiě)網(wǎng)絡(luò)應(yīng)用程序。
另外必須要學(xué)會(huì)操作系統(tǒng)薄料。網(wǎng)路協(xié)議棧通常都是由操作系統(tǒng)來(lái)負(fù)責(zé)實(shí)現(xiàn)的敞贡,網(wǎng)絡(luò)應(yīng)用基本都是多線(xiàn)程的。
上圖中這里介紹了三本經(jīng)典書(shū)籍摄职。計(jì)算機(jī)網(wǎng)絡(luò)中一個(gè)重要的特點(diǎn)是分層嫡锌。我們會(huì)發(fā)現(xiàn)這三個(gè)經(jīng)典教材是三個(gè)視角。
- 第一本:從上層協(xié)議介紹到下層協(xié)議琳钉。
- 第二本:從頂向上介紹势木。
- 第三本:橫切的方式,針對(duì)特定的問(wèn)題(比如安全問(wèn)題歌懒、性能問(wèn)題)來(lái)展開(kāi)介紹啦桌。
學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的關(guān)鍵,是明白上面這三個(gè)問(wèn)題及皂。
一旦了解了計(jì)算機(jī)網(wǎng)絡(luò)的這些基本原理甫男,你就會(huì)發(fā)現(xiàn),理解實(shí)際開(kāi)發(fā)中的各種通信協(xié)議和各種網(wǎng)絡(luò)庫(kù)验烧,就會(huì)比較容易板驳。
掌握好相應(yīng)的網(wǎng)路協(xié)議,是掌握上層應(yīng)用軟件開(kāi)發(fā)技術(shù)的關(guān)鍵碍拆。比如若治,如果連http協(xié)議都沒(méi)掌握,就去寫(xiě)web應(yīng)用感混, 好比在沙灘上蓋樓端幼。
讀者:對(duì)于很多朋友,你提的問(wèn)題弧满,其實(shí)更多的需要從自己自身出發(fā)婆跑,沒(méi)有一個(gè)完全標(biāo)準(zhǔn)的答案,再你問(wèn)問(wèn)題之前庭呜,自己先思考一分鐘滑进。
其他
本次Live介紹的是如何自學(xué)計(jì)算機(jī)科學(xué)理論知識(shí),第二場(chǎng)Live——“如何自學(xué)編程”:https://www.zhihu.com/lives/860490807847841792
第二場(chǎng)live介紹了如何訓(xùn)練編程技能募谎。
第三場(chǎng)Live——“如何自學(xué)Java:入門(mén)與編程技能訓(xùn)練”:https://www.zhihu.com/lives/889495940065538048
第三場(chǎng)live是第二場(chǎng)Live所介紹之自學(xué)編程基本原則與方法的踐行篇扶关,同時(shí)也展示了計(jì)算機(jī)科學(xué)理論學(xué)習(xí)是如何與具體的編程技術(shù)(以Java技術(shù)領(lǐng)域?yàn)槔W(xué)習(xí)以及軟件開(kāi)發(fā)實(shí)踐相輔相成的。
https://www.zhihu.com/lives/860490807847841792
https://www.zhihu.com/lives/889495940065538048
2017年12月21日舉辦Live近哟,如何高效地掌握Android開(kāi)發(fā)技術(shù):https://www.zhihu.com/lives/916265051361529856