文/zollty
這是乙個充滿爭議的話題。
那麼,到底誰對誰錯?作為程式設計師的我們應該把演算法擺在什麼的位置?
或者實際一點,我們準備 應聘 或者 面試別人,是否需要重視演算法這一塊兒?
我試著理性地來分析一下。
首先,「演算法是電腦科學領域最重要的基石之一」,這一點毋庸置疑。
而演算法的基礎**於數學理論。
是的,演算法可以有不同的理解。但是演算法不只是存在於**和教科書中,它可以被有意無意的運用來解決問題。
例如生活中的很多現實問題,比如商場打折問題(是打折划算還是滿減划算),百錢買百雞、猴子分桃、雞兔同籠等有趣的問題。
而對於程式設計來說,是無時無刻都在使用演算法,每個if-else,每個計算和賦值,都是演算法。
演算法的本質是解決問題,只要是能解決問題的**就是演算法。
只不過,對於簡單演算法,一般不需要學習,也不會拿出來考察別人,所以我們經常所說的演算法,是指具備一定難度的、比較高階的演算法,具體來說,就是那些經常見諸於大學教科書中的經典演算法,比如快速排序、二分查詢。
優勝劣汰,是自然界的規律,熟練掌握各種演算法,是程式設計師的一大優勢,這一點也毋庸置疑。但是,反過來,優秀的程式設計師,就一定熟練掌握各種演算法嗎??那也未必,因為現在的it行業分得很細,只要在某乙個領域做到世界一流,就足夠優秀。
總結一下就是:
圖1-懂演算法的程式設計師
圖2-不懂演算法的程式設計師
1、演算法基礎——基本的資料結構
包括鍊錶、陣列、佇列、棧、樹、雜湊表、圖。
2、經典的演算法思維
有迭代法、窮舉搜尋法、分支界限法(剪枝法)、遞推法、遞迴法、回溯法、分治法、貪婪法和動態規劃法等。
3、經典演算法:快速排序(建議掌握)
4、經典演算法:二分查詢演算法(建議掌握)
5、堆排序演算法(熟悉)
6、歸併排序(熟悉)
7、bfprt(線性查詢演算法)(熟悉)
三、寫在最後
就我本人而言,大學的時候學過各種演算法(專業數學+計算機),比較喜歡根據興趣自學。
我覺得有點意思的課程包括:
我覺得這些都比較重要,是真正的精華。但是,大學課程只能學一點基礎,有興趣必須要自己去圖書館多借幾本書看看,有英文版的教材會更好。
但是話說回來,理論層面需適可而止,專業和實踐才是關鍵,程式設計師畢竟不是科研型人才,而是工程型人才。我們在考察乙個工程型人才的時候,更應該看他的實踐經驗和成果。
程式設計師懂演算法玩「淮安摜蛋」是否更有優勢?
清明節放假在家休息,突然想寫點什麼。一直困擾我的迷,今天有了小小的觸動。我感覺很開心!迷是這樣的。一直以來,我很早起床,很晚睡覺,但進步並不是很大。有事甚至對自己產生懷疑,以為自己大腦退化,有點老年痴呆了。昨天晚上,和 keiven 發現h5上趕集的縮圖變成預設的了,點進去發現是有的。今天處理這個問...
作為程式設計師為什麼要懂物聯網?
如果你仔細地觀察過去25年裡的科技企業,你就會發現變化一直在發生。每隔3 7年,企業就必須對它們進行重塑。那些錯過了一次技術轉型的公司如果能迎頭趕上的話,那麼還有可能重新恢復過來。而那些錯過了兩次技術轉型的公司,則有可能已經消失了。當我們在網路上看著90後 佛系 中年人 的話題捧腹大笑的時候,其實我...
程式設計師要讀的書
thoughtworks作為一家學習型組織,頗為看重每一位員工的學習能力。事實上,大多數thoughtworker的骨子裡,都溢滿了讀書的基因。與書相伴,與書為伍,既是一種樂趣,又是一種習慣。當習慣成為自然時,書籍就成為生活和工作不可或缺的一部分了。如果說人文歷史哲學等書籍是一碗心靈雞湯,技術書籍大...