如果還沒看前一篇的人,可以按下面連結去看上一篇文章
今天我們又回來講本科系的學生在學校學了什麼
除了大量個基本功之外,剩下的時間就是在學演算法
演算法這一個東西,是一種好玩、無聊、很難的課程
看到這裡一定有人會覺得奇怪,為什麼是又好玩又無聊?
會好玩的原因在於,在學演算法的過程中,會看到人類為了追求更快的電腦效,而想出各式各樣奇奇怪怪的方法去解,這時會覺得人類真的聰明阿
會無聊的原因在於,很多演算法最後有程式都包裝起來了
舉例來說,我們要將一串的資料從小排到大,演算法的課程會交各種奇怪的方式去加速,把資料從小排到大
然而真的在寫程式的時候,其實大部分的程式都有內建sort,這一個函數就已經使用了教科書上最快的方式幫你把資料從小排到大
所以會有一種,我學了這麼多的東西,結果真的要用用不到的感覺
至於難,演算法是真的很難,畢竟裡面牽扯一堆數學和電腦架構,還有一兩個是連數學都無法解釋經驗法則去計算
總而言之,演算法是本科系出來的人必備的知識
既然又難而且都有function把他們包起來了,那是不是就不需要會?
我還是會建議大家有機會可以看一下演算法
原因有三
有一些公司面試就是喜歡考研算法,特別是外商
你要先知道有這樣的演算法,才會知道有這樣的函數可以呼叫
遇到一些奇怪的情況,還是要親自下去寫這一些演算法
第一個原因我猜應該非常的好理解,很多公司就是喜歡考演算法
第二的原因是我遇過的碰到的,有一些非本科系的出生的工程師,因為沒有學過演算法的課程,根本就不知道有這樣的方法,就也不會也不知道關鍵字去搜尋這一些方法,就只能自己用很差的方式想辦法寫出來
舉裡來說,在開發一項功能的時候,使用圖論中的某一些演算法就可以將問題迎刃而解,然而開發者因為沒有學過圖論,所以就只能憑藉自己的想像寫了一堆的程式,先不說花了一堆時間,寫出來的東西漏洞百出而且效能很差
記得那時候,我就直接給他一些圖論的關鍵字重構之後,效能提升跟漏洞減少,然後還被當作偶像崇拜(有一點開心)
第三的原因也是我碰到的,有一些奇怪的情況之下,我們沒有辦法輕易地使用內建的方法,如果是開發一些新的功能,多多少少會這一件事情,所以這時候只能回去翻書,把教科書上的知識吸收之後再轉化,這時就會有一種書到用時方恨少的感概,或是為甚麼有一些知識還給了老師的悲痛
根據上述三個理由,我會建議對於非本科系的出生的工程師,有空去看一下演算法的書籍或是課程,至少當遇到問題的時候,才會知道還有這樣的方式可以解
最後,我知道演算法不好學,所以可以從以下的方式來學
- 要知道有這樣的方法
- 這一個方法可以達到怎樣的效果
這樣未來遇到問題,才會知道該怎麼辦
最後,喜歡我的文章,歡迎到FB粉絲頁 -
如峰小教室 按讚
我也會在FB粉絲頁中不時地發表一些小品的知識