前谷歌工程师:如何看待程序员普遍缺乏数据结构和算法知识?
很多技術(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ò),雖然道理都懂,但很多人還是很多困惑,比如下面這些:
總感覺(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)排行榜功能,但你知道它底層是依賴(lài)什么數(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è)專(zhuān)欄呢?
盡管有很多書(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è)專(zhuān)欄是市面上唯一一個(gè)適用于工程師的專(zhuān)欄,它列舉了大量實(shí)際軟件開(kāi)發(fā)中的場(chǎng)景,給你展示如何利用數(shù)據(jù)結(jié)構(gòu)和算法解決真實(shí)的問(wèn)題,并非只是單純地把某個(gè)知識(shí)點(diǎn)講清楚,而是結(jié)合作者(前 Google 工程師王爭(zhēng))的理解、實(shí)踐和經(jīng)驗(yàn)來(lái)講解,認(rèn)真學(xué)習(xí)完你就知道他是一個(gè)跟所有國(guó)內(nèi)、國(guó)外經(jīng)典書(shū)籍都不一樣的專(zhuān)欄,一個(gè)可以長(zhǎng)期影響你的專(zhuān)欄。
我掰著指頭數(shù)了下,整個(gè)專(zhuān)欄會(huì)涵蓋 100 多個(gè)算法真實(shí)項(xiàng)目場(chǎng)景案例。還手繪了一些清晰易懂的詳解圖(總共有 300 多張),讓晦澀難懂的算法變得輕松有趣。
手繪圖—出自《數(shù)據(jù)結(jié)構(gòu)與算法之美》
現(xiàn)在,專(zhuān)欄已經(jīng)更新完畢,72 篇文章,27 萬(wàn)字,這期間也陸陸續(xù)續(xù)有 55000+ 程序員加入學(xué)習(xí),是極客時(shí)間訂閱量最好、好評(píng)最多的專(zhuān)欄之一。作者真的不只是技術(shù)好、邏輯性強(qiáng),還很會(huì)講,能夠點(diǎn)出技術(shù)的本質(zhì)、算法的本質(zhì),娓娓道來(lái),聽(tīng)得十分過(guò)癮。跟追劇一樣,每天早上第一件事就是看的專(zhuān)欄更新。
留言區(qū)贊美的話(huà)太多了,現(xiàn)在我截取很少很少一部分,展示給你。如果你感興趣,可以試讀一下專(zhuān)欄中“結(jié)束語(yǔ) | 送君千里,終須一別”那篇文章,很多程序員因?yàn)閷W(xué)習(xí)了這個(gè)專(zhuān)欄從此踏入算法之門(mén)!
算法對(duì)于一個(gè)程序員來(lái)說(shuō)為什么如此重要?拋開(kāi)最現(xiàn)實(shí)的職場(chǎng)競(jìng)爭(zhēng)力,薪資等等,往深遠(yuǎn)點(diǎn)說(shuō),掌握了數(shù)據(jù)結(jié)構(gòu)與算法,你看待問(wèn)題的深度,解決問(wèn)題的角度就會(huì)完全不一樣。因?yàn)檫@樣的你,就像是站在巨人的肩膀上,拿著生存利器行走世界。數(shù)據(jù)結(jié)構(gòu)與算法,會(huì)為你的編程之路,甚至人生之路打開(kāi)一扇通往新世界的大門(mén)。
總結(jié)
以上是生活随笔為你收集整理的前谷歌工程师:如何看待程序员普遍缺乏数据结构和算法知识?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 全球首个自适应机械臂:精准抗干扰,斯坦福
- 下一篇: 五大主流深度学习框架Google趋势比较