再也不怕數據結構和算法之開篇

爲什麼要學習算法和數據結構

算法和數據結構是程序員的基本內功,基本內功修煉不好,以後修煉一些招式,如設計模式、架構,新的技術熱點如區塊鏈,新的技術語言go等,都會感覺非常喫力。

喜歡看武俠小說的知道,張無忌正是因爲內功精純,再加乾坤大挪移加持,學習任何武功招式都如探囊取物,短時間內即可融匯貫通。程序員的內功-數據結構和算法,乾坤大挪移-設計模式。

說實話,作爲一個渣渣程序員,非CS專業出身,基礎本就比較薄弱。正好藉着寫文章的機會,把數據結構和算法及設計模式都系統的學習一遍,並且把這些以比較容易理解的形式表達出來,授人以漁,同時自己也能理解的更透徹,何樂而不爲。

扯的好像有點遠了,言歸正傳,爲什麼要學習數據結構和算法,我覺得有以下幾個主要原因:

  1. 應對技術面試,面過廣大的程序員們,通過層層簡歷篩選,然後技術面試,大家的項目經歷各部相同,很難深入挖掘,那怎麼甄別候選人的技術能力呢?最簡單也是最直接有效的方式當然就是考考你數據結構和算法咯。
  2. 程序員成長之路的基石,如同高樓大廈的地基,在有了良好的數據結構和算法的基礎之上,程序員的學習能力和成長潛力才更大,以後才能走的更高更遠。
  3. 面對一些問題,根據已有的數據結構和算法經驗,能夠設計出比較優雅及高效的解決方法。分析和解決問題的能力也會比數據結構和算法薄弱的同學更強。隨着經驗的慢慢積累,可以不斷的設計、實現高性能系統,向着開源代碼作者和架構師之路邁進。

數據結構和算法真這麼重要嗎?

爲什麼程序員被稱爲碼農呢?大家都知道,越是大公司,分工越精細,每個人幾乎都是一顆可以隨時替代的螺絲釘。每天的工作也無非就是在原有的系統之上,做一些bug修復,一些小的功能點迭代。涉及到的編碼無非是一些curd操作,尤其是現在在一些優秀的框架之下,程序員的編程幾乎是傻瓜式的。

那怎麼才能體現你的價值?告別curd boy呢?

連一些基本的數據結構和算法都掌握不了,一些普通的算法題解法都不會,你怎麼能在這近百萬的程序員之中脫穎而出呢?任何羣體都如金字塔,處於塔尖的人很少,不能掌握好數據結構和算法,那你就基本只能處於程序員金字塔的最底端。

任何公司,都會有一些技術討論吧!有時候技術leader拉你們一起討論一些問題,人家說這很簡單嘛,就是揹包問題,或者這個用dfs算法不就ok了嘛,你如果連這些都聽不懂,那是不是覺得自己很low,根本無法同別人溝通交流。更別提在技術方面有一些自己的獨到見解了,也就無從談起去一些公開場合分享自己的觀點。

世界天天在變,技術熱點千變萬化,但是處於最基礎的數據結構和算法確是處於基本不變的。學好了數據結構和算法,你就能夠很雲淡風輕的笑傲不斷變化的新技術及新趨勢,額,這歸根到底不還說xx算法麼,就是封裝了一下而已,在數據結構和算法的基石之上,不斷提升自己的思維、邏輯分析、抽象總結能力,那你就是一個越來越逼格的程序員了。

怎麼學習數據結構和算法呢?

終於到了最重要的時刻,前面廢了半天話,無非是想打動你這顆如頑石般的心,讓你覺得學數據結構和算法好像很有用哦,那我是應該好好學啊。如果你意識到這一點,並覺得有時候面試算法對自己像是一種折磨和煎熬,又或者感覺好像自己從來就沒掌握過數據結構和算法,那麼恭喜你,咱們接下來可以一起學習進步了。

怎麼學呢?

看到這篇文章的估計大部分已經是大學生或者已經參加工作了吧,相信你在這麼多年的不斷打怪升級中,總結了不少學習方法吧?在這裏,我分享一下我的學習經歷。

我基礎比較薄弱嘛,曾經好幾次發誓要學好數據結構和算法,買了書,買了課程,每次都是看完數組和鏈表,頂多到了遞歸,後面就堅持不下去了,覺得真是太難了,跟天書一般,這都是誰設計的啊。

我覺得可能90%的人都有跟我類似的經歷,人本身惰性比較強,遇到挫折容易找自我安慰,但是我們真的甘心墮落嗎?真的想一輩子當一個底層curd boy?從來沒想過多賺點錢,早點贏取白富美,走上人生巔峯?

咳咳咳,心裏想到白富美,是不是頓時感覺渾身充滿了動力,白富美捨我其誰啊,那就好好跟我一起邁過數據結構這道坎(偷偷告訴你,其實是大家一起邁,我也沒邁過去呢)。

  1. 數據結構和算法,先有數據結構,後有算法,首先要知道有哪些數據結構,每種數據結構是幹啥的,怎麼用,各有什麼優缺點,分別適用於解決什麼問題的場景。
  2. 多總結,多分析。任何事情,只要你不斷分析總結,付出努力,總會慢慢收穫的。一遍看不懂,那就看三遍,三遍不行,那就看五遍。今天看不懂,不代表以後看不懂,說不定某天就會豁然開朗。學習貴在堅持,總結,分析。
  3. 多動手,多練習,多刷題。紙上得來終覺淺,絕知此事要躬行。LeetCode應該是程序員們刷題最多的網站了,但我們也要刷題有道,不要爲了刷題而刷題。所謂題海無涯,而學有涯,要掌握題目的本質,解決問題的思路,而不是沉浸在大量的、枯燥的題海戰術上。

數據結構和算法的知識點

爲了讓你對數據結構和算法能有個全面的認識,這裏借用小爭哥的一張圖,裏面幾乎涵蓋了所有數據結構和算法書籍中都會講到的知識點。

所謂按圖索驥,哪裏不懂學哪裏,直到某一天,你閉上眼睛,這一幅腦包圖可以完整的出現在你的腦子裏,並且可以清晰的回憶起每個知識點,分別對應LeetCode上哪些典型題目及經典解法,和有哪些坑點,能總結出什麼經驗來,平時在項目中可能會怎麼用到,那你就真的是學到了。

作爲一名典型普通程序員,我也跟你一樣,很懶。如果你覺得寫的有點道理,並且想和我一起好好邁過數據結構和算法這道坎,記得點個👍哦,如果能留言評論交流就更好了。

在這裏插入圖片描述

程序員之道,在無止境,掃碼關注催更,一起無止境學習吧!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章