1. 程式人生 > >程式設計師普遍都缺乏資料結構和演算法知識?你怎麼看?

程式設計師普遍都缺乏資料結構和演算法知識?你怎麼看?

有人說,演算法,先於計算機存在於世,比程式語言本身更為重要,語言只是工具,而演算法才是靈魂。而程式就等於演算法加資料結構。足以可見,想要在程式設計之路上走的更長遠,資料結構與演算法就是必須要掌握的基本功。

可是,“真實”的情況是什麼樣的呢?

儘管大學學過這門課程,甚至網上有很多學習資料,依舊對對資料結構和演算法一竅不通?
只聽說過陣列、連結串列、快排這些最最基本的資料結構和演算法,稍微複雜一點的就完全沒概念?
資料結構和演算法,跟作業系統、計算機網路一樣,是脫離實際工作的知識?除了面試,可能這輩子也用不著?
就算不懂這塊知識,只要Java API、開發框架用得熟練,照樣可以把程式碼寫得“飛”起來?

事實真的是這樣嗎?
為什麼要學習資料結構和演算法?
想要通關大廠面試,千萬別讓資料結構和演算法拖了後腿
很多大公司,比如BAT、Google、Facebook,面試的時候都喜歡考演算法、讓人現場寫程式碼。有些人雖然技術不錯,但每次去面試都會“跪”在演算法上,很是可惜。那你有沒有想過,為什麼這些大公司都喜歡考演算法呢?

校招的時候,面試的學生通常沒有實際專案經驗,只能考察基礎知識是否牢固。社招就更不用說了,越是厲害的公司,越是注重考察資料結構與演算法這類基礎知識。相比短期能力,他們看中你的長期潛力。

你可能要說了,我不懂資料結構與演算法,照樣找到了好工作啊。那我是不是就不用學資料結構和演算法呢?當然不是。你別忘了,我們學任何知識都是為了“用”的,是為了解決實際工作問題的,學習資料結構和演算法自然也並不例外,那麼它實際工作中到底能起到多大的作用呢?

業務開發工程師,你真的願意做一輩子CRUD boy嗎?
如果你是一名業務開發工程師,你可能要說,我整天就是做資料庫CRUD(增刪改查),哪裡用得到資料結構和演算法啊?

是的,對於大部分業務開發來說,我們平時可能更多的是利用已經封裝好的現成的介面、類庫來堆砌、翻譯業務邏輯,很少需要自己實現資料結構和演算法。但是,不需要自己實現,並不代表什麼都不需要了解。

如果不知道這些類庫背後的原理,不懂得時間、空間複雜度分析,你如何能用好、用對它們?儲存某個業務資料的時候,你如何知道應該用ArrayList,還是LinkedList呢?呼叫了某個函式之後,你又該如何評估程式碼的效能和資源的消耗?
基礎架構研發工程師,寫出達到開源水平的框架才是你的目標!
現在網際網路上的技術文章、架構分享、開源專案滿天飛,照貓畫虎做一套基礎框架並不難。高手之間的競爭反而在細節。這些細節就包括,你用的演算法是不是夠優化,資料存取的效率是不是夠高,記憶體是不是夠節省等等,這些累積起來,就決定了一個框架是不是優秀。
對程式設計還有追求?不想被社會淘汰?就不要只是能寫出湊合能用的程式碼!
為什麼說初級程式設計師才比招式,高階程式設計師只看內功呢?

何為程式設計能力強?
是程式碼的可讀性好、健壯?還是擴充套件性好?我覺得沒法列,也列不全。但是,
如果你在一個成熟的公司,或者像BAT這樣的大公司,面對的是千萬級甚至億級的使用者,開發的是TB、PB級別資料的處理系統。效能幾乎是開發過程中時刻都要考慮的問題。

一個簡單的ArrayList、Linked List的選擇問題,就可能會產生成千上萬倍的效能差別。這個時候,資料結構和演算法的意義就完全凸顯出來了。一旦掌握資料結構和演算法,你就會常常被它的強大威力所折服。之前你可能需要費很大勁來優化的程式碼,需要花很多心思設計的架構,現在很容易就可以解決了。

那麼你覺得
1、資料結構和演算法知識重要嗎?

2、何為程式設計能力強?

3、對程式設計有怎麼樣的追求?打算怎樣實現它?

參與話題,有機會獲得以下獎品哦!