插入篇 |程序员进阶之推荐书目
針對(duì)入門的趣味書
入門的同學(xué),我建議你不要過(guò)度追求上去就看經(jīng)典書。像《算法導(dǎo)論》《算法》這些書,雖然比較經(jīng)典、比較權(quán)威,但是非常厚。初學(xué)就去啃這些書肯定會(huì)很費(fèi)勁。而一旦啃不下來(lái),挫敗感就會(huì)很強(qiáng)。所以,入門的同學(xué),我建議你找一些比較容易看的書來(lái)看,比如《大話數(shù)據(jù)結(jié)構(gòu)》和《算法圖解》。不要太在意書寫得深淺,重要的是能不能堅(jiān)持看完。
《大話數(shù)據(jù)結(jié)構(gòu)》 這本書最大的特點(diǎn)是,它把理論講得很有趣,不枯燥。而且每個(gè)數(shù)據(jù)結(jié)構(gòu)和算法,作者都結(jié)合生活中的例子進(jìn)行了講解, 能讓你有非常直觀的感受。雖然這本書有 400 多頁(yè),但是花兩天時(shí)間讀完,應(yīng)該是沒(méi)問(wèn)題的。如果你之前完全不懂?dāng)?shù)據(jù)結(jié)構(gòu)和算法,可以先從這本書看起。
《算法圖解》 跟《大話數(shù)據(jù)結(jié)構(gòu)》走的是同樣的路線,就像這本書副標(biāo)題寫的那樣,“像小說(shuō)一樣有趣的算法入門書”,主打“圖解”,通俗易懂。它只有不到 200 頁(yè),所以內(nèi)容比較少。作為入門,看看這本書,能讓你對(duì)數(shù)據(jù)結(jié)構(gòu)和算法有個(gè)大概的認(rèn)識(shí)。
這些入門書共同的問(wèn)題是,缺少細(xì)節(jié),不夠系統(tǒng),也不夠嚴(yán)謹(jǐn)。所以,如果你想要系統(tǒng)地學(xué)數(shù)據(jù)結(jié)構(gòu)和算法,看這兩本書肯定是不夠的。
針對(duì)特定編程語(yǔ)言的教科書
講數(shù)據(jù)結(jié)構(gòu)和算法,肯定會(huì)跟代碼實(shí)現(xiàn)掛鉤。所以,很多人就很關(guān)心,某某書籍是用什么語(yǔ)言實(shí)現(xiàn)的,是不是自己熟悉的語(yǔ)言。市面大部分?jǐn)?shù)據(jù)結(jié)構(gòu)和算法書籍都是用 C、C++、Java 語(yǔ)言實(shí)現(xiàn)的,還有些是用偽代碼。而使用 Python、Go、PHP、JavaScript、Object-C 這些編程語(yǔ)言實(shí)現(xiàn)的就更少了。
我這里推薦《數(shù)據(jù)結(jié)構(gòu)和算法分析》。國(guó)內(nèi)外很多大學(xué)都拿這本書當(dāng)作教材。這本書非常系統(tǒng)、全面、嚴(yán)謹(jǐn),而且又不是特別難,適合對(duì)數(shù)據(jù)結(jié)構(gòu)和算法有些了解,并且掌握了至少一門編程語(yǔ)言的同學(xué)。而且,這個(gè)作者也很用心。他用了三種語(yǔ)言,寫了三個(gè)版本,分別是:《數(shù)據(jù)結(jié)構(gòu)與算法分析 :C 語(yǔ)言描述》《數(shù)據(jù)結(jié)構(gòu)與算法分析:C++ 描述》《數(shù)據(jù)結(jié)構(gòu)與算法分析:Java 語(yǔ)言描述》。
如果你熟悉的是 Python 或者 JavaScript,可以參考《數(shù)據(jù)結(jié)構(gòu)與算法 JavaScript 描述》《數(shù)據(jù)結(jié)構(gòu)與算法:Python 語(yǔ)言描述》 。至于其他語(yǔ)言的算法書籍,確實(shí)比較少。如果你有推薦,可以在留言區(qū)補(bǔ)充一下。
面試必刷的寶典
算法對(duì)面試很重要,很多人也很關(guān)心。我這里推薦幾本有益于面試的書籍,分別是:《劍指 offer》《編程珠璣》《編程之美》。
從《劍指 offer》這本書的名字就可以看出,作者的寫作目的非常明確,就是為了面試。這本書幾乎包含了所有常見(jiàn)的、經(jīng)典的面試題。如果能搞懂這本書里的內(nèi)容,應(yīng)付一般公司的面試應(yīng)該不成問(wèn)題。
《編程珠璣》這本書的豆瓣評(píng)分非常高,有 9 分。這本書最大的特色就是講了很多針對(duì)海量數(shù)據(jù)的處理技巧。這個(gè)可能是其他算法書籍很少涉及的。面試的時(shí)候,海量數(shù)據(jù)處理的問(wèn)題也是經(jīng)常會(huì)問(wèn)的,特別是校招面試。不管是開(kāi)拓眼界,還是應(yīng)付面試,這本書都很值得一看。
《編程之美》這本書有多位作者,其中絕大部分是微軟的工程師,所以書的質(zhì)量很有保證。不過(guò),這里面的算法題目稍微有點(diǎn)難,也不是很系統(tǒng),這也是我把它歸到面試這一部分的原因。如果你有一定基礎(chǔ),也喜歡鉆研些算法問(wèn)題,或者要面試 Google、Facebook 這樣的公司,可以拿這本書里的題,先來(lái)自測(cè)一下。
經(jīng)典大部頭
很多人一提到算法書就會(huì)搬出《算法導(dǎo)論》和《算法》。這兩本確實(shí)非常經(jīng)典,但是都太厚了,看起來(lái)比較費(fèi)勁,我估計(jì)很少有人能堅(jiān)持全部看下來(lái)。如果你想更加深入地學(xué)一學(xué)數(shù)據(jù)結(jié)構(gòu)和算法,我還是強(qiáng)烈建議你看看。
我個(gè)人覺(jué)得,《算法導(dǎo)論》這本書的章節(jié)安排不是循序漸進(jìn)的,里面充斥著各種算法的正確性、復(fù)雜度的證明、推導(dǎo),數(shù)學(xué)公式比較多,一般人看起來(lái)會(huì)比較吃力。所以,作為入門書籍,并不
是很推薦。
《算法》這本書也是一本經(jīng)典大部頭,不過(guò)它比起《算法導(dǎo)論》來(lái)要友好很多,更容易看懂,更適合初學(xué)者入門。但是這本書的缺點(diǎn)也很明顯,就是內(nèi)容不夠全面,比如動(dòng)態(tài)規(guī)劃這么重要的知識(shí)點(diǎn),這本書就沒(méi)有講。對(duì)于數(shù)據(jù)結(jié)構(gòu)的東西,它講的也不多,基本就是偏重講算法。
#殿堂級(jí)經(jīng)典
說(shuō)到殿堂級(jí)經(jīng)典書,如果《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》稱第二,我想沒(méi)人敢稱第一。這本書包括很多卷。說(shuō)實(shí)話,我也只看過(guò)比較簡(jiǎn)單的幾卷,比如《基本算法》《排序和查找》。
這套書的深度、廣度、系統(tǒng)性、全面性是其他所有數(shù)據(jù)結(jié)構(gòu)和算法書籍都無(wú)法相比的。但是,如果你對(duì)算法和數(shù)據(jù)結(jié)構(gòu)不是特別感興趣,沒(méi)有很好的數(shù)學(xué)、算法、計(jì)算機(jī)基礎(chǔ),想要把這套書讀完、讀懂是比較難的。你可以把它當(dāng)作你算法學(xué)習(xí)的終極挑戰(zhàn)。
閑暇閱讀
算法無(wú)處不在。我這里再推薦幾本適合閑暇時(shí)間閱讀的書:《算法帝國(guó)》《數(shù)學(xué)之美》《算法之美》。
這些書共同的特點(diǎn)是,都列舉了大量的例子,非常通俗易懂。夸張點(diǎn)說(shuō),像《算法帝國(guó)》,文科生都能讀懂。當(dāng)你看這些書的時(shí)候,你常常會(huì)深深感受到算法的力量,被算法的優(yōu)美之處折服。即便不是從事 IT 工作的,看完這幾本書也可以開(kāi)拓眼界。
每節(jié)課中有需要代碼實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)和算法,我都另外用 Java 語(yǔ)言實(shí)現(xiàn)一遍,然后放到 Github 上,供你參考。Github 的地址我放在這里,你可以收藏一下:代碼實(shí)現(xiàn)。
至于其他語(yǔ)言的同學(xué),比如 C、C++、Python、Go、PHP、JavaScript、Object-C 等,我想了一個(gè) crowd sourcing 的方法。
我希望基礎(chǔ)較好的同學(xué),參照我的 Java 實(shí)現(xiàn),用你熟悉的編程語(yǔ)言再實(shí)現(xiàn)一遍,并且將代碼留言給我。如果你寫得正確,我會(huì)將你的代碼上傳到 Github 上,分享給更多人。
留言區(qū)經(jīng)典評(píng)論
老師推薦的書80以上都看過(guò),總結(jié)一下:
1:《算法第四版》Java語(yǔ)言寫的,不過(guò)動(dòng)態(tài)規(guī)劃(沒(méi)記錯(cuò)的話)沒(méi)有涉及、很厚!這本書挺推薦的、特別是javaer!
2:《劍指offer》個(gè)人覺(jué)得題目經(jīng)典都是老題!但是難度好像很一般啊(還是學(xué)生 不太清楚面試內(nèi)容)、然后里面確實(shí)講了一些很細(xì)的東西值得學(xué)習(xí)!還有本書所有題目作者都提供了C代碼和大量的測(cè)試案例!nice;
3:編程珠璣:國(guó)外作者,這本書我看了不多 但是初步覺(jué)得好像是對(duì)超大量數(shù)據(jù)處理的算法!
4:編程之美:微軟的書、難度較高、題目很深!這本書里面的題 代碼不超過(guò)2頁(yè)的估計(jì)作者都不會(huì)選上!!!!書不厚 、一般般
5:數(shù)據(jù)結(jié)構(gòu)和算法分析:我們大學(xué)教材!我們老師教的書里都有、代碼是偽代碼!
6:算法導(dǎo)論:這本書我用來(lái)墊電腦!很厚 很無(wú)聊0.0!!!
老師推薦的書大部分我都了解過(guò),寫一寫我個(gè)人的感受吧。
如果是Java程序員的話,強(qiáng)烈推薦《算法》,書中的代碼特別的簡(jiǎn)潔,水準(zhǔn)特別高。書的配套資源也相當(dāng)不錯(cuò),B站有教學(xué)視頻、Github有官方代碼、還有專門的測(cè)試數(shù)據(jù)。
至于輕松一些的《大話數(shù)據(jù)結(jié)構(gòu)》,代碼和書的基本源于嚴(yán)蔚敏老師的《數(shù)據(jù)結(jié)構(gòu)》。代碼是C語(yǔ)言,但因?yàn)樽髡邲](méi)有考慮工程上的抽象,代碼的水準(zhǔn)并不是特別高,至少,我個(gè)人是不太喜歡那種編碼方式。
《算法圖解》很薄,圖的風(fēng)格我也很喜歡,非常基礎(chǔ),小白入門首選。代碼實(shí)現(xiàn)是基于Python。
《算法導(dǎo)論》能啃下來(lái),就夠了。但是全書偽代碼,如果能把公式搞懂、代碼自己實(shí)現(xiàn)一次,基本上足以秒殺絕大多人了。如果想讀懂這本書,必要的級(jí)數(shù)、概率還是要學(xué)一下的。
接下來(lái),墊筆記本電腦的《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》。這套書非常偉大,據(jù)說(shuō)高德納老爺子剛寫了兩卷就拿到了圖靈獎(jiǎng)。時(shí)間復(fù)雜度理論分析算法也是高德納老爺子奠定的,大半個(gè)算法領(lǐng)域的結(jié)論幾乎都是高德納老爺子證明的。如果你真想讀這本書,首先我要告訴你,書中代碼是古老的MIX匯編,其次,你可能需要更多的數(shù)學(xué)基礎(chǔ)。就如同書中所說(shuō),必要的復(fù)變函數(shù)的基礎(chǔ)是必要的。
如果你想提高一下個(gè)人的計(jì)算機(jī)數(shù)學(xué)功底,為了算法的話,可以讀《離散數(shù)學(xué)及其應(yīng)用》。當(dāng)然,如果你想要啃《算法導(dǎo)論》或者近距離膜拜《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》,推薦高德納老爺子參與編著的《具體數(shù)學(xué)》。
我自己覺(jué)得,掌握《算法導(dǎo)論》一書的90%,就已經(jīng)是非常、非常優(yōu)秀的程序員了。殿堂級(jí)的書買回來(lái)收藏、墊筆記本電腦或者顯示屏,實(shí)在不行,鎮(zhèn)宅辟邪也是極好的,就沒(méi)必要費(fèi)力地讀了。?
總結(jié)
以上是生活随笔為你收集整理的插入篇 |程序员进阶之推荐书目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: k8s加固 hardening
- 下一篇: 官方 AppStore 下载的 OS X