大家好,我是梁唐。 前兩天有同學(xué)私信我,讓老梁推薦一下算法工程師入門(mén)書(shū)單。今天就和大家拋磚引玉聊聊這個(gè)話題。 對(duì)于一個(gè)算法工程師來(lái)說(shuō),能力一般可以拆解成幾個(gè)部分:
我們就從這幾個(gè)角度逐一來(lái)說(shuō)。 語(yǔ)言基礎(chǔ)推薦配置:Python、C++、Java(或Go),重要性依次遞減。 PythonPython毫無(wú)疑問(wèn)是必須的,畢竟現(xiàn)在絕大多數(shù)的算法模型都是用Python搭建的。那么基本的Python編程能力肯定是要有的,但一般也不會(huì)涉及過(guò)多的Python技能。像是什么裝飾器、元類這些都很少用到,主要還是停留在對(duì)于Python的基礎(chǔ)語(yǔ)法以及常用工具的應(yīng)用層面,并且面試過(guò)程當(dāng)中一般也不會(huì)進(jìn)行Python相關(guān)的考察。 推薦書(shū)籍: Python cookbookfluent Python(流暢的Python)C++C++主要用在面試時(shí)的算法題和白板編程,目前來(lái)說(shuō),在刷題領(lǐng)域C++還是主流的刷題語(yǔ)言。個(gè)人感覺(jué)要比Java和Python更加適合一些。 除此之外,在搜索算法等一些領(lǐng)域也會(huì)使用到C++,因此基本的C++開(kāi)發(fā)能力還是必須的。 既然要使用C++進(jìn)行刷題,除了C++基本語(yǔ)法之外,同樣還需要學(xué)會(huì)使用STL的基本用法,可以大大簡(jiǎn)化刷題時(shí)的編碼。 推薦書(shū)籍: C++ Primereffective STL算法數(shù)據(jù)結(jié)構(gòu)這幾年各大公司的面試風(fēng)格越來(lái)越向外企靠攏,更加看重算法和數(shù)據(jù)結(jié)構(gòu)。夸夸其談?wù)f得天花亂墜,題沒(méi)寫(xiě)出來(lái)也只能涼涼。 但是說(shuō)到算法和數(shù)據(jù)結(jié)構(gòu),很多人第一想到的就是《算法導(dǎo)論》和《算法》這種經(jīng)典的大部頭書(shū)。老實(shí)講這些書(shū)并不是質(zhì)量不好,而是太過(guò)偏理論,實(shí)際看完可能理論學(xué)了一大堆,但是具體算法應(yīng)該怎么用,代碼應(yīng)該怎么寫(xiě)可能還是懵的。而且太過(guò)理論的書(shū)老實(shí)講讀起來(lái)也挺費(fèi)勁。 所以這方面還是更推薦一些偏實(shí)際應(yīng)用和實(shí)戰(zhàn)的書(shū),主要也是一些競(jìng)賽的入門(mén)書(shū)籍。 推薦書(shū)籍: 編程之美劍指offer挑戰(zhàn)程序設(shè)計(jì)競(jìng)賽算法競(jìng)賽入門(mén)經(jīng)典基本開(kāi)發(fā)技能開(kāi)發(fā)技能和書(shū)籍其實(shí)關(guān)系不大,主要在于一些實(shí)戰(zhàn)訓(xùn)練。 可以適當(dāng)做一些小項(xiàng)目鍛煉一下工程能力,比如開(kāi)發(fā)一個(gè)網(wǎng)站,做一個(gè)小app等等。 機(jī)器學(xué)習(xí)與深度學(xué)習(xí)機(jī)器學(xué)習(xí)與深度學(xué)習(xí)是算法工程師的立身之本,也是面試?yán)锏拇箢^。 這里面的東西很多,既有理論也有實(shí)戰(zhàn),因此想要全部吃透是一個(gè)大工程,絕不是隨隨便便看兩本書(shū)就可以搞定的。書(shū)籍只能作為入門(mén)學(xué)習(xí)的資料,除了讀書(shū)之外一些實(shí)戰(zhàn)也必不可少。 推薦書(shū)籍: 統(tǒng)計(jì)學(xué)習(xí)方法機(jī)器學(xué)習(xí)(周志華)機(jī)器學(xué)習(xí)實(shí)戰(zhàn)(基于sklearn,keras和TensorFlow)機(jī)器學(xué)習(xí)實(shí)戰(zhàn)動(dòng)手學(xué)深度學(xué)習(xí)(pytorch版)TensorFlow 官方文檔大數(shù)據(jù)基礎(chǔ)知識(shí)算法工程師要做算法模型,離不開(kāi)海量數(shù)據(jù),自然也就離不開(kāi)大數(shù)據(jù)相關(guān)的基礎(chǔ)知識(shí)。 由于只是使用方,而不是開(kāi)發(fā)和維護(hù)方,所以也并不需要太過(guò)深入的知識(shí)儲(chǔ)備。只需要對(duì)于大數(shù)據(jù)的各個(gè)系統(tǒng)有一定的認(rèn)知,知道原理,能夠使用就可以了。 這里推薦買的也是一些入門(mén)讀物。 推薦書(shū)籍: hadoop權(quán)威指南系列精通spark數(shù)據(jù)科學(xué)利用Python進(jìn)行數(shù)據(jù)分析專業(yè)知識(shí)這部分主要基于想要從事的算法方向來(lái)決定。 比如說(shuō)目前算法常規(guī)可以分成:搜廣推(搜索、廣告、推薦)、CV(計(jì)算機(jī)視覺(jué))、NLP(自然語(yǔ)言處理)、知識(shí)圖譜等幾個(gè)領(lǐng)域。 這些領(lǐng)域相對(duì)來(lái)說(shuō)都比較前沿,文獻(xiàn)較多,但成體系的書(shū)籍很少。老梁沒(méi)有接觸過(guò)CV和知識(shí)圖譜等領(lǐng)域,只能推薦幾本我相對(duì)比較熟悉的書(shū)。 推薦書(shū)籍: 深度學(xué)習(xí)推薦系統(tǒng)自然語(yǔ)言處理入門(mén)李飛飛 CS231(斯坦福公開(kāi)課,大佬推薦)不知道大家看到這么多書(shū)有什么感覺(jué),估計(jì)看著就覺(jué)得頭大,怎么這么多內(nèi)容。 我在整理的時(shí)候看著也有點(diǎn)恐怖,但回顧一下當(dāng)初學(xué)習(xí)的過(guò)程,其實(shí)倒也還好,沒(méi)有這么痛苦。很多事情只是開(kāi)頭艱難,入門(mén)了之后會(huì)越來(lái)越快。比如機(jī)器學(xué)習(xí)的基礎(chǔ)打扎實(shí)了再學(xué)深度模型,不說(shuō)輕輕松松,但用到的思路和方法論都是完全相通的。 中間可能也會(huì)遇到許多困難,但整體上來(lái)說(shuō)理解起來(lái)要容易很多。再比如有了一些開(kāi)發(fā)經(jīng)驗(yàn)之后再去研究大數(shù)據(jù)相關(guān)的知識(shí),尤其是再結(jié)合一些分布式系統(tǒng)的原理和理論的話,你會(huì)發(fā)現(xiàn)大數(shù)據(jù)、分布式、后端、 算法,這一套閉環(huán)當(dāng)中很多內(nèi)容是相通的。 另外,這當(dāng)中的內(nèi)容老梁基本上都是自學(xué)的,其實(shí)也不只是我,據(jù)我所知大部分業(yè)內(nèi)人士也一樣是自學(xué)的。畢竟算法領(lǐng)域日新月異,每年都有新技術(shù)、新方法、新思路提出,整個(gè)產(chǎn)業(yè)都在飛速的迭代升級(jí)。想要跟上時(shí)代,跟上技術(shù)潮流就是要不斷學(xué)習(xí)的,這是大勢(shì)所趨。 所以不要畏懼,也不要心虛,只有自己最了解自己,也只有自己是自己最好的老師,勇敢地去自學(xué)吧。 加油! |
|