近日,一位網友在知乎上發起提問:計算機學生在大學四年應是以數據結構和算法為重還是技術為重?引來網友紛紛圍觀!
讀計算機專業的你,大學四年是否還在迷茫是以數據結構和算法為重還是技術為重? 要想解除疑惑,先要知道計算機科學與技術這個專業都包含了什麼。 顧名思義,科學與技術是構成這一專業的主要兩個部分,所學課程也主要以這兩部分內容為主,像作業系統、計算機網絡、數據結構與算法等課程都屬於科學側,而web網頁設計、C++程序設計等課程則屬於技術側。
數據結構和算法:決定大廠面試成敗的關鍵
Pascal之父尼古拉斯·沃斯曾靠一個公式「算法+數據結構=程序」獲得了冠有計算機界諾貝爾獎之稱的圖靈獎。從這個公式中不難看出,編程從本質上來說就是算法加數據結構,而算法是編程思想的核心部分。
編程可以將現實世界中的具體需求「翻譯」為代碼,數據結構和算法為我們如何翻譯和解決現實問題提供思路,就能使用程式語言與計算機進行溝通從而實現各種需求。
網友紛紛表示,「應當以數據結構算法為重,一線大廠更多考察的是對數據結構和算法的掌握程度。」
「如果不會數據結構和算法,面試這一關都過不去。」
數據結構和算法為什麼那麼重要?
1、升職加薪的依據。數據結構和算法能夠高效解決面臨的複雜問題,是為boss省錢的技術。
2、進入大廠的敲門磚。比起程式語言、框架,面試官其實更看重候選人能否能運用數據結構與算法來高效解決給定問題。
數據結構與算法功底紮實的程式設計師,其技術實力、業務能力、自學能力大多都不會差。對於大廠招人來講,如果候選者的算法基礎很好,就意味著以後進入公司學習新技術的成本會大大減少。
就如同金字塔一樣,數據結構和算法在最底層,而技術只是最上面的一部分。地基沒打紮實,將來定會遇到瓶頸。因為脫離數據結構和算法的技術往往門檻低,可替代性強。你會的,他人通過社會培訓也可以在短時間內掌握一定的技術,無疑將來會在自己的崗位競爭很激烈。
騰訊安全聯合實驗室表示,「包括騰訊在內的許多大廠,會把數據結構和算法,特別是算法作為面試中的重點內容,是取得offer的關鍵。」
「而一個人對數據和算法的理解,可以體現出他是否能在編程工作中靈活選用合適的數據結構和算法,有效降低代碼的複雜度並提升任務的完成效率,能夠直接體現出一個人對於編程這項工作的理解深度和實力。」
業務和技術掛鈎,而非數據結構和算法
討論中,「數據結構和算法」的支持者似乎佔了大半,只有零星的開發者站在了技術側。 當然,這樣的場景也合乎常理。這就好像你問高中教育是「應試教育」重要還是「素質教育」重要,我相信會有超過一半的人站在「應試教育」的一側,原因很簡單,應試能力決定了你是否能進好的大學。 同樣,在開發者程式設計師的領域,數據結構和算法掌握的牢固才能過大廠的面試,不然你也沒機會展示你的技術能力。這就直接導致了凡是有「轉碼」念頭的求職者全民刷leetcode,這盛況讓我想起了高考時期的《五年高考三年模擬》。
然而知乎用戶@老張的一針見血了:雖然大廠用leetcode來考面試者的數據結構和算法,但那本質也是「應試」——你刷的那些算法之後大概率也不會接觸到;接觸到,你也不會用。
換而言之,你掌握的leetcode層次的數據結構和算法,很可能只是讓你做個題。真正講到學術性的數據結構和算法的時候,你也得啞然了。 另一個知乎用戶@清寰就指出了,真正的算法,入門門檻很高,並不是刷題就能解決的,需要你有很強的邏輯思維能力。同時他還表示,技術是為業務去服務的,沒有業務要求的算法毫無意義。
也有計算機系的學生現身說法。知乎用戶@yuantailing就指出,數據結構與算法在本科課程中的比重寥寥,最後真正在科研中選擇算法也很少。
誠然,想要斬獲大廠offer你需要在數據結構和算法的題目上有出色的表現,但要在實際落地中表現出色,則是考驗開發者的技術能力。
選擇並不互斥:數據結構算法和技術都可以做的很出色
小孩子才做選擇,大人只會說「我全都要」。
知乎用戶@maggch就指出,這兩個選擇不是互斥的。如果真的想要在計算機領域有所成績,那麼兩個部分都需要你付出努力。
同時他還指出,刷leetcode並不是僅僅為了應試,有的時候去理解吃透題目的出題知識點和出發點是很重要的。除了會使用工具進行應用開發,還要去了解背後的原理細節。不然學任何方面都只是皮毛。
的確,另一個知乎用戶@Ire寫了這樣的一個比喻:
這和知乎用戶@橘貓胖胖的觀點不謀而合:
數據結構與算法就是開發者的基本功,很多時候決定了你能到什麼樣高度的平臺。但是,到達這樣的平臺之後,和工作更貼近的還是技術,這也決定了你的工作上升空間。因此,是否有合格的基本功需要自己判斷,究竟需要在哪個方面下功夫是因人而異的。
就像知乎用戶@路鵝甲說的那樣,這不是一件非左即右的事情。
最後,在這個討論裡面看到了一個很有趣的觀點和大家分享一下:
真的沒有熱愛計算機的程式設計師嗎?