Google工程师:如何看待程序员普遍缺乏数据结构和算法知识?
出處:極客時(shí)間《數(shù)據(jù)結(jié)構(gòu)與算法之美》
很多技術(shù)人都很迷茫,覺(jué)得自己做的項(xiàng)目沒(méi)有技術(shù)含量,成天就是賣(mài)苦力。技術(shù)的東西,日新月異,有些人總在忙于追求熱點(diǎn)新技術(shù),東學(xué)學(xué)、西學(xué)學(xué),平時(shí)泛泛地看技術(shù)書(shū)籍、技術(shù)文章,但始終根本抓不住技術(shù)的本質(zhì),干了三五年之后,感覺(jué)并沒(méi)有積累到什么東西,跟剛畢業(yè)的大學(xué)生能力差不多,因此深深的感到焦慮。
實(shí)際上,本質(zhì)的原因,還是我們沒(méi)有掌握到,做為程序員,我們?cè)摲e累什么東西?是各種知識(shí)、技術(shù)本身嗎?我覺(jué)得不是,我覺(jué)得最應(yīng)該積累的是“能力”。
能力就像是內(nèi)功,而知識(shí)就像是招式。知識(shí)會(huì)過(guò)時(shí),而能力永遠(yuǎn)都不會(huì)過(guò)時(shí)。初級(jí)程序員才比招式,高級(jí)程序員只看內(nèi)功。
對(duì)于一個(gè)程序員來(lái)說(shuō),如何修煉內(nèi)功呢?首要是打好基本功,比如掌握操作系統(tǒng)、編譯原理、數(shù)據(jù)庫(kù)理論等,但最基礎(chǔ)的應(yīng)該就是扎實(shí)的掌握數(shù)據(jù)結(jié)構(gòu)和算法了。
不過(guò),雖然道理都懂,但你可能還是會(huì)有很多困惑,比如下面這些:
- 總感覺(jué)數(shù)據(jù)結(jié)構(gòu)和算法是“屠龍技”、“虛招式”,除了面試,工作中根本用不著;
- 不懂算法,只要編程語(yǔ)言API、開(kāi)發(fā)框架用得熟練,代碼照樣寫(xiě)得“飛”起來(lái)。
實(shí)際上,如果你做的只是簡(jiǎn)單的業(yè)務(wù)邏輯翻譯工作,開(kāi)發(fā)的系統(tǒng)沒(méi)有性能壓力,那你確實(shí)只需要掌握API、框架用法就足夠,但是,你真的就甘心做一個(gè)天花板很低的CRUD碼農(nóng)嗎?
如果你開(kāi)發(fā)的業(yè)務(wù)比較復(fù)雜,你就需要設(shè)計(jì)復(fù)雜的架構(gòu)來(lái)應(yīng)對(duì),進(jìn)而就要用到各種復(fù)雜的技術(shù)、中間件、框架。要想更好地用好這些東西,你就需要了解它們的底層原理。而為了保證性能、擴(kuò)展性等,它們底層使用了大量的數(shù)據(jù)結(jié)構(gòu)和算法,比如我們常用Redis的有序集合來(lái)實(shí)現(xiàn)排行榜功能,但你知道它底層是依賴什么數(shù)據(jù)結(jié)構(gòu)和算法嗎?為什么要用跳表和散列表兩種數(shù)據(jù)結(jié)構(gòu)來(lái)構(gòu)建索引呢?扎實(shí)的數(shù)據(jù)結(jié)構(gòu)和算法功底,可以幫助你快速的讀懂源碼,更加從本質(zhì)上理解它的設(shè)計(jì)原理。
如果你開(kāi)發(fā)系統(tǒng)有很高的性能壓力,那一個(gè)簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的選擇問(wèn)題(比如是用數(shù)組來(lái)還是鏈表),就可能會(huì)產(chǎn)生成千上萬(wàn)倍的性能差別。這個(gè)時(shí)候,數(shù)據(jù)結(jié)構(gòu)和算法的價(jià)值就完全凸顯出來(lái)了。而且,即便你是用編程語(yǔ)言提供的現(xiàn)成的類(lèi)來(lái)開(kāi)發(fā),但如果你不知道這些類(lèi)庫(kù)背后的原理,不懂得時(shí)間、空間復(fù)雜度分析,那你又如何有信心能用好、用對(duì)它們?你又該如何評(píng)估代碼的性能和資源的消耗?
不過(guò),你可能會(huì)說(shuō),我是一個(gè)有追求的程序員,我知道數(shù)據(jù)結(jié)構(gòu)和算法很重要,但是,國(guó)外有這么多經(jīng)典的數(shù)據(jù)結(jié)構(gòu)和算法書(shū)籍、視頻、動(dòng)畫(huà),為啥要花錢(qián)來(lái)學(xué)習(xí)這個(gè)專欄呢?
盡管有很多書(shū)籍講的通俗易懂,也有很多書(shū)籍全面、經(jīng)典,但是大部分都偏理論,書(shū)中的例子也大多脫離真實(shí)的軟件開(kāi)發(fā)。看完書(shū)之后,很多人只是死記硬背了一些知識(shí)點(diǎn)而已。這樣填鴨式的學(xué)習(xí),對(duì)于鍛煉思維、開(kāi)拓眼界并沒(méi)有太多作用。而且,從基礎(chǔ)理論到應(yīng)用實(shí)踐,有一個(gè)非常大的鴻溝要跨越,這是大學(xué)教育的普遍不足之處,這也是為什么我們常常覺(jué)得大學(xué)里學(xué)過(guò)的很多知識(shí)都沒(méi)用。
所以,我并非只是單純地把某個(gè)知識(shí)點(diǎn)講清楚,而是結(jié)合我的理解、實(shí)踐和經(jīng)驗(yàn)來(lái)講解,力爭(zhēng)成為一個(gè)跟所有國(guó)內(nèi)、國(guó)外經(jīng)典書(shū)籍都不一樣的專欄,一個(gè)可以長(zhǎng)期影響一些人的專欄。
我的專欄最大特色就是,列舉大量實(shí)際軟件開(kāi)發(fā)中的場(chǎng)景,給你展示如何利用數(shù)據(jù)結(jié)構(gòu)和算法解決真實(shí)的問(wèn)題。我掰著指頭數(shù)了下,整個(gè)專欄會(huì)涵蓋100多個(gè)算法真實(shí)項(xiàng)目場(chǎng)景案例。我還手繪了一些清晰易懂的詳解圖(總共有300多張),讓晦澀難懂的算法變得輕松有趣。
手繪圖—出自《數(shù)據(jù)結(jié)構(gòu)與算法之美》現(xiàn)在,專欄已經(jīng)更新完畢,72篇文章,27萬(wàn)字,這期間也陸陸續(xù)續(xù)有 48000+ 程序員加入學(xué)習(xí),是極客時(shí)間訂閱量最好、好評(píng)最多的專欄之一。很多讀者對(duì)我評(píng)價(jià)都很高,覺(jué)得我真的不只是技術(shù)好、邏輯性強(qiáng),還很會(huì)講,能夠點(diǎn)出技術(shù)的本質(zhì)、算法的本質(zhì),娓娓道來(lái),聽(tīng)得十分過(guò)癮。很多學(xué)員都跟追劇一樣,每天早上第一件事就是看我的更新。說(shuō)實(shí)話,我自己都沒(méi)想到會(huì)這么受歡迎。
留言區(qū)贊美的話太多了,現(xiàn)在我截取很少的一部分,展示給你。如果你感興趣,可以試讀一下專欄中“結(jié)束語(yǔ) | 送君千里,終須一別”那篇文章,里面的留言足以看出讀者對(duì)我的無(wú)比認(rèn)可!
我是誰(shuí)?
王爭(zhēng),前Google工程師,之前從事谷歌翻譯相關(guān)的開(kāi)發(fā)工作。在業(yè)余時(shí)間,持續(xù)研究數(shù)據(jù)結(jié)構(gòu)和算法,幾乎讀過(guò)所有的數(shù)據(jù)結(jié)構(gòu)和算法書(shū)籍,切過(guò)上千道算法題目。除此之外,我一直沒(méi)有脫離一線編程工作,所以有大量的數(shù)據(jù)結(jié)構(gòu)和算法的實(shí)戰(zhàn)經(jīng)驗(yàn),希望我的專欄能開(kāi)啟你算法學(xué)習(xí)之門(mén)。
你能獲得什么?
1.掌握常用的數(shù)據(jù)結(jié)構(gòu)與算法的由來(lái)、原理、實(shí)現(xiàn)、特點(diǎn)
不僅讓你搞懂每種數(shù)據(jù)結(jié)構(gòu)和算法的原理和實(shí)現(xiàn),還讓你知道,他們的歷史背景和由來(lái)。真正弄明白我們?yōu)槭裁葱枰@個(gè)數(shù)據(jù)結(jié)構(gòu)和算法,它是為了解決什么樣的問(wèn)題才被創(chuàng)造出來(lái)的。掌握每個(gè)數(shù)據(jù)結(jié)構(gòu)和算法的本質(zhì),也就能掌握創(chuàng)新的源頭。
2.鍛煉邏輯思維、算法思維,提高編碼質(zhì)量、編程能力
邏輯思維,對(duì)于一個(gè)程序員來(lái)說(shuō)是非常重要的,而算法思維,對(duì)于寫(xiě)出高性能的代碼也是非常關(guān)鍵的。專欄不僅僅是數(shù)據(jù)結(jié)構(gòu)和算法知識(shí)的一種填鴨式的灌輸,更加側(cè)重于對(duì)你邏輯思維、算法思維的訓(xùn)練。通過(guò)72篇文章,跟隨著我的邏輯講解,潛移默化地提高你的邏輯思維、算法思維。
3.教會(huì)你如何將算法應(yīng)用于實(shí)戰(zhàn),如何在實(shí)戰(zhàn)中應(yīng)用算法
我在講解每種數(shù)據(jù)結(jié)構(gòu)和算法的時(shí)候,都會(huì)配合一到兩個(gè)真實(shí)軟件開(kāi)發(fā)中的問(wèn)題來(lái)講解,同時(shí)還會(huì)配合一到兩個(gè)非常考驗(yàn)?zāi)闼季S的課后思考題,加深你的理解。除此之外,我還通過(guò)幾個(gè)大的實(shí)戰(zhàn)項(xiàng)目,完整的給你展示了,在一個(gè)大項(xiàng)目中,如何利用數(shù)據(jù)結(jié)構(gòu)和算法,來(lái)解決問(wèn)題,提升性能。
可以點(diǎn)擊《數(shù)據(jù)結(jié)構(gòu)與算法之美》試看專欄內(nèi)容,下面是專欄目錄:
戳我試讀或訂閱
總結(jié)
以上是生活随笔為你收集整理的Google工程师:如何看待程序员普遍缺乏数据结构和算法知识?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【软件工程】技术规格说明书
- 下一篇: Python 框架篇