為什么要學習算法和數據結構


網絡上有很多文章都描述了算法的重要性,包括大公司面試,有大量的算法題。如果算法弱,那么極大可能與大公司錯過。下面談一談為什么算法和數據結構重要,並且算法知識需要沉淀。

作為Java web開發人員,如果剛開始沒有進入大公司,而進入小公司,又忙於項目,忙於學習各種框架,忽視了底層的學習,經過兩三年之后,總會意思到自己在某方面的薄弱,特別是想深入一些框架底層知識,Java源碼的內容等。為什么出現這種情況,因為在前期學習框架的內容時,框架是易學的,按照文檔規范去做就可以了,甚至可以不用思考。我在剛入一家公司做Java開發時,大牛將框架已經搭建完成,而自己要完成的工作就是寫接口,並且寫接口需要完全按照一定的規范去實現,有一套標准化的流程,到了最后,自己可以不需要太多思考,按模板去套。當這樣持續了一年之后,發現自己除了一套按照規范實現功能的技能,其他技能都非常薄弱,大牛的框架底層實現相對復雜一點,但都已經封裝好了,上手的人可以不需要知道框架是如何運行的,但對個人的成長在某方面是缺失的。如果自己不努力學習。

之后去啃框架內的知識時,需要了解的內容才讓我打開眼界。一個簡單的例子,程序會將所有的操作都放入都一個隊列中,然后由線程中隊列中取出,再丟給其他線程去操作,隊列是先進先出的,這樣不會因為放入的操作超時太長時間。也許會覺得這個很好理解,是的隊列的知識很簡單,但是它會經常被使用。如果以前沒有學過,可能對這個概念不太了解,如果這個概念不了解,后續的其他操作就變得很麻煩,逐漸的,就會喪失繼續研究代碼的動力。

現在是2019年,互聯網發展已經進入到新的階段,而不在像前兩年的野蠻生長,現階段會對從業人員的要求會提高,畢竟市場上的人也逐漸增多,我知道的一個Java崗位,一天就有2000個簡歷投遞進入,而想要打敗這么多的人,能力不突出那么就會被淘汰掉,而什么是自己突出的能力,就需要好好思考一番。

突出能力包括解決復制問題的能力,有深入框架底層,能夠解決一些疑難雜症的能力,有快速學習,快速上手的能力,而這些都需要靠一些知識沉淀,這些知識的沉淀都還得是計算機知識。

為什么學習算法可以讓自己的知識沉淀,通過編程語言實現算法,能夠讓自己邏輯更清晰,讓自己思考的更全面,比如二叉樹,B-樹,B+樹,通過一些學習和實現,能夠理解為什么數據庫中實現B+樹作為存儲結構。在實現過程中,也能夠檢驗自己對編程語言的駕馭能力,而不是通過堆砌代碼來實現簡單的接口任務。沉淀的還有自己的架構能力,雖然這種方式與架構能力八竿子打不着,但是確可以深深地影響自己以后架構能力,如果對算法,數據結構了解不深,那么就根本不會去思考框架的優劣,不去思考框架給自己項目帶來哪些影響。

萬變不離其宗的是那些算法和理論,在日新月異的互聯網中,框架變化太快,追逐框架,自己的精力永遠也更不上。而最新的人工智能等新技術,對算法的要求特別高,應該說,如果一個人的算法知識不夠,那么對新技術的知識就會完全不懂,更不談通過這些新技術而衍生的方面,自己就只能錯過這些。而對於從事Java web開發領域,如果一個簡單的排序,一般會想到For循環遍歷,是否會想到冒泡排序,是否會使用到Java已經封裝好了的排序規則,而底層實現就是用到的那些算法。

並不是算法有多么的好,必須要像算法開發工程師那樣精通算法,其實不是,也不是需要短時間掌握的,而是通過學習算法和數據結構,以達到知識的一種沉淀。

如果真的開發了幾年的程序員,沒有計算機知識的沉淀,那么自己就可能無法競爭的過年輕的程序員。前幾年還好,大齡程序員因為市場野蠻生長,已經獲得了足夠的經驗和地位,而之后對於新進入的程序員,要求就非常嚴苛,畢竟互聯網也在升級。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM