數據結構與算法真的那么重要么?

本文作者:李明杰


很多同學對數據結構與算法的第一印象,可能是覺得它復雜、深奧、難以理解。之所以會有這種觀念,我認為主要是因為沒有找到適合自己的學習方法及學習資料。其實學習任何知識點,只要找到對的學習方法和學習資料,都能做到攻克難點,牢牢掌握。


另外,同學們可能還有一個疑問:在平時的開發工作中,一個產品,從開發到上線,似乎都不會用到數據結構與算法,也就是說即使不懂數據結構與算法,也能出色地完成日常的工作任務,照樣能拿到高薪。那我們為什么還要學習數據結構與算法呢?


其實,一個很重要的原因是為了應對面試,數據結構與算法,是很多名企面試的必考題。國內外一線的大型互聯網公司,在面試的過程中,多少都會問到一些關于數據結構與算法的題目。而且規模越大的公司,就越注重數據結構與算法。甚至,現在很多中小型公司的面試題都會涉及到算法知識。這個我們其實不難理解,無論什么類型的公司,為了篩選出更優秀的人才,面試題的難度都會越來越高。


說到這,同學們可能會覺得很奇怪,平時工作中很少接觸的數據結構與算法,為什么會經常出現在面試題中呢?這不是讓人很難理解嗎?甚至還有人會覺得這很不公平,會導致企業錯失人才。比如有這樣一個人,他擁有至少5年開發經驗,技術實力、業務能力、學習能力都很強,公司安排的每項任務都能出色完成,但可能只是因為他不會數據結構與算法,就被大公司拒之門外,而事實上他的綜合能力可能比一些大公司的人都要強。


這樣的情況,其實不是沒有,2015年,Homebrew的作者去google面試,但不幸的是他被google拒絕了。Homebrew大家應該都聽說過,它是Mac平臺的安裝包管理工具,全世界大大小小互聯網公司的程序員可能都在用這個工具。這足以說明Homebrew作者的技術實力了吧?可他還是被拒絕了,當時他發了條twiiter吐槽。


 google回應:“我們90%的工程師都在使用你寫的Homebrew工具,你卻不能白板編程一個二叉樹的翻轉,所以請滾蛋吧”。不過后來,還是有很多硅谷的大公司搶著要他。


所以說,同學們的擔心是有可能發生的,大公司面試著重考察數據結構與算法,確實可能會錯失一些人才,那他們為什么還要這樣做呢?


其實不管哪個公司,都想盡可能地招到更優秀的人才。但是在短短幾個小時的面試過程中,想了解清楚一個人,太難了。所以很多大公司招聘的第一步,就是學歷要求:本科、碩士、甚至是博士。因為從概率上講,高學歷出現優秀人才的幾率會更大一點。舉個例子:一個是毫無開發經驗的計算機專業碩士,而另一個是擁有3年開發經驗的大專生,很多大公司可能會選擇招聘那位碩士。因為他們看重的是一個人的長期潛力,而技術是可以通過培訓獲得的,潛力卻不是每一個人都擁有的。當然除了通過學歷篩選人才,在面試時考察數據結構與算法,也是在短時間內考察一個人長期潛力的捷徑。


因為數據結構與算法功底扎實的程序員,其技術實力、業務能力、自學能力大多都不會差。其次,如果面試題內容都是平時工作中常用的技術點,其實大家的答案都大同小異,而且還有很多人會靠背題來應付面試。而算法題因為其范圍很大,可以盡可能地避免這種情況的發生,而且這種問題考驗的更多的是一個人的編程功底和長期積累。所以很多大公司都會使用算法題來篩選人才。


總而言之,要想進入更大的公司,數據結構與算法是你必須要跨過去的坎。


一開始提到,可能在大家平時的開發過程中,不怎么用到數據結構與算法的知識。那是因為我們的很多開發任務,都可以直接用各種第三方框架來完成。然而,很多第三方框架內部都用到了大量的數據結構與算法的知識。如果你懂數據結構與算法,就可以更好地去讀懂框架源碼,體會作者的設計思想,也能讓你更好地使用框架,把框架的價值發揮到最大。平時沒用到數據結構與算法,也可能是因為自己目前開發的項目還太小。當開發大型項目,面對海量數據處理,或者要求性能的極致優化時,必然要用到數據結構與算法來優化程序。所以,很多時候,并不是數據結構與算法沒有用,而可能是自己的境界還不夠高。


另外,在計算機編程領域,數據結構與算法的應用是無處不在。比如圖像視頻處理、數據庫、游戲開發、編譯器、搜索引擎、AR、VR、人工智能、區塊鏈等領域,都是以數據結構算法為基石。


扎實的數據結構與算法功底,能讓我們站在更高的角度去思考代碼、寫出性能更優的程序,能讓我們更快速地學習上手各種新技術(比如人工智能、區塊鏈等),能讓我們敲開更高級編程領域的大門。為什么有些人學新技術這么快?比如區塊鏈、人工智能等,很可能就是因為別人數據結構與算法的功底更扎實。


Pascal之父Nicklaus Wirth曾經憑借一個公式獲得了圖靈獎(計算機領域的諾貝爾獎)。

·  算法 + 數據結構 = 程序


由此可見數據結構與算法的重要性!


隨著年齡的增長,無論是學習能力,還是體力都會有一定程度地下降。所以,我們更應該珍惜時間,不要在應該努力奮斗的年紀選擇安逸,學習和積累都要趁早。如果你想在IT路上走得更遠,站得更高,那就必須掌握數據結構與算法。更何況這真的是一種一次掌握,終生受益的技術。


上一篇: 小碼哥教育榮獲騰訊課堂《2018年度教育突破獎》!

下一篇: 有獎征文|寫學習心得,贏華為P30、漫步者音響!

分享到: 更多