程式本科系學了什麼(四) - 演算法

閱讀時間約 2 分鐘
如果還沒看前一篇的人,可以按下面連結去看上一篇文章
今天我們又回來講本科系的學生在學校學了什麼
除了大量個基本功之外,剩下的時間就是在學演算法
演算法這一個東西,是一種好玩、無聊、很難的課程
看到這裡一定有人會覺得奇怪,為什麼是又好玩又無聊?
會好玩的原因在於,在學演算法的過程中,會看到人類為了追求更快的電腦效,而想出各式各樣奇奇怪怪的方法去解,這時會覺得人類真的聰明阿
會無聊的原因在於,很多演算法最後有程式都包裝起來了
舉例來說,我們要將一串的資料從小排到大,演算法的課程會交各種奇怪的方式去加速,把資料從小排到大
然而真的在寫程式的時候,其實大部分的程式都有內建sort,這一個函數就已經使用了教科書上最快的方式幫你把資料從小排到大
所以會有一種,我學了這麼多的東西,結果真的要用用不到的感覺
至於難,演算法是真的很難,畢竟裡面牽扯一堆數學和電腦架構,還有一兩個是連數學都無法解釋經驗法則去計算
總而言之,演算法是本科系出來的人必備的知識
既然又難而且都有function把他們包起來了,那是不是就不需要會?
我還是會建議大家有機會可以看一下演算法
原因有三
有一些公司面試就是喜歡考研算法,特別是外商
你要先知道有這樣的演算法,才會知道有這樣的函數可以呼叫
遇到一些奇怪的情況,還是要親自下去寫這一些演算法
第一個原因我猜應該非常的好理解,很多公司就是喜歡考演算法
第二的原因是我遇過的碰到的,有一些非本科系的出生的工程師,因為沒有學過演算法的課程,根本就不知道有這樣的方法,就也不會也不知道關鍵字去搜尋這一些方法,就只能自己用很差的方式想辦法寫出來
舉裡來說,在開發一項功能的時候,使用圖論中的某一些演算法就可以將問題迎刃而解,然而開發者因為沒有學過圖論,所以就只能憑藉自己的想像寫了一堆的程式,先不說花了一堆時間,寫出來的東西漏洞百出而且效能很差
記得那時候,我就直接給他一些圖論的關鍵字重構之後,效能提升跟漏洞減少,然後還被當作偶像崇拜(有一點開心)
第三的原因也是我碰到的,有一些奇怪的情況之下,我們沒有辦法輕易地使用內建的方法,如果是開發一些新的功能,多多少少會這一件事情,所以這時候只能回去翻書,把教科書上的知識吸收之後再轉化,這時就會有一種書到用時方恨少的感概,或是為甚麼有一些知識還給了老師的悲痛
根據上述三個理由,我會建議對於非本科系的出生的工程師,有空去看一下演算法的書籍或是課程,至少當遇到問題的時候,才會知道還有這樣的方式可以解
最後,我知道演算法不好學,所以可以從以下的方式來學
  1. 要知道有這樣的方法
  2. 這一個方法可以達到怎樣的效果
這樣未來遇到問題,才會知道該怎麼辦
最後,喜歡我的文章,歡迎到FB粉絲頁 - 如峰小教室 按讚
我也會在FB粉絲頁中不時地發表一些小品的知識
作品和產品的區別,不只有程式工程師,PM和老闆更必須要知道,才能讓公司的運轉更加地順利。我們以前在學校寫的作業和練習,就是程式作品,如果用一個術語就是,程式作品是比最小可行性的產品還要再小,那產品比作品還要多注意甚麼東西呢? 讓我們在這一個專欄中一起來探討吧!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
如峰小教室的沙龍 的其他內容
作品和產品的區別,不只有程式工程師,PM和老闆更必須要知道,才能讓公司的運轉更加地順利 我們以前在學校寫的作業和練習,就是程式作品
上一集有說,我們以前在學校要教很多作業,扣除那一些夭壽難的題目,其實大多數都是在練基本功 而外面許多書籍、課程和公司內的學習,則是強調實用和解決問題的方法 例如如何寫一個爬蟲程式、如何寫一個影像處理的程式、如何做使用者界面
身為電機系畢業的學生,我們以前在學校最常見的就是被迫去寫很多程式 作業從的難易很廣,最簡單的hello world到很複雜的模擬電腦運作的程式都有可能是老師出的作業
最近發現,很多人對於程式本科生有著莫名的幻想 例如電機系和資工系出來寫的程式一定比較好 或是非本科生就會有莫名的自卑感
作品和產品的區別,不只有程式工程師,PM和老闆更必須要知道,才能讓公司的運轉更加地順利 我們以前在學校寫的作業和練習,就是程式作品
上一集有說,我們以前在學校要教很多作業,扣除那一些夭壽難的題目,其實大多數都是在練基本功 而外面許多書籍、課程和公司內的學習,則是強調實用和解決問題的方法 例如如何寫一個爬蟲程式、如何寫一個影像處理的程式、如何做使用者界面
身為電機系畢業的學生,我們以前在學校最常見的就是被迫去寫很多程式 作業從的難易很廣,最簡單的hello world到很複雜的模擬電腦運作的程式都有可能是老師出的作業
最近發現,很多人對於程式本科生有著莫名的幻想 例如電機系和資工系出來寫的程式一定比較好 或是非本科生就會有莫名的自卑感
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
大學記憶中的程式課,我過得很痛苦。以為懂了,作業卻永遠寫不出來。有鑑於過往痛苦的經歷,學程式語言類似學習外語,應該從需求出發,並且以生活中可理解的事物當作範例學習。所以去年大膽的進行了一個實驗:我們來上中小學生的 Python 課程,透過寫程式解數學題目培養直覺。男孩們選了一個非常瓊瑤的題目!
Thumbnail
本文分享了在面試演算法工程師時經常會遇到的問題及解題方法,包括複雜度分析、五大演算法的介紹、排序方法及動態規劃等。希望這些資訊能幫助求職者在面試時有更好的準備、提高自信,並提供參考資料以便深入學習相關內容。
數學系的訓練,與上面閱讀原始碼的優先順序,本質上是反過來的。在數學的訓練中,是先把函數定義的非常清楚,再進一步去看函數應用在具體的數據上會發生什麼行為,然後就到此為止,不太會再有進一步的討論。但如上面西尾泰和所述,工程師看事情的角度,是先掌握全局,然後再進一步細化每一層的細節。
離開工程師的工作之後,我轉往兒童程式教育的跑道,這份工作將我原有的程式技能結合上我所關心與有興趣的兒童教育,轉換跑道的路上並不輕鬆,不論是工作方式或心境的調整,在克服的路上都是學習。 我很幸運用最快速的方式接觸到不同年齡層的學生,第一個班級就是18個中班孩子只能用慘烈來形容每堂課的準備與挫敗,當然
你正在學習編程,探索算法和數據結構,在這個過程中,你會遇到許多複雜的問題,比如如何分析算法的性能、如何證明算法的正確性,以及如何解決優化問題。這時,你會發現《Concrete Mathematics》是一個非常有用的資源。
Thumbnail
面對數學的困難,許多學生總是會質疑為何要學這門學科。 本文以個人教學經驗,分享了數學在日常生活和未來規劃中的重要性, 並透過真實故事強調數學訓練思考邏輯的價值。 「為甚麼要學數學?以後又用不到。」 這篇文章是一個數學老師的回答。
計算機組織不難,但東西很多 這個科目也是我比較不熟悉的,在此之前都是自學,所以會寫的更詳細一點 1.計算機組織在學什麼? 想像計算機的架構就像一個蛋糕有好多層,上半是軟體下半則是硬體,對我來說,軟硬體的兩端是電腦的核心(應用程式&半導體),而中間的每一層都是串接兩端的橋樑;那計算機組織就是要探
Thumbnail
無論是現在、過去還是未來,學習如何學習都是終身受用的技能。迭代和進步是軟體工程師的追求。文章提出學習程式的四大關鍵:實踐、輸出、整理、思考,並期望讀者能在選擇的路上一路前行。
這個系列的文章主要專注於物件導向到函數式編程的差異與分析,並針對概念與機制上的不同進行比較。很多人說物件導向和函數式編程沒有哪個比較好的問題,只有哪個比較適合的問題,然而我並不這麼認為,我透過這一系列的文章從各個角度討論它們之間的優缺點就是為了闡述我的觀點。物件導向錯在沒有理論基礎,但它贏在熟悉性,
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
大學記憶中的程式課,我過得很痛苦。以為懂了,作業卻永遠寫不出來。有鑑於過往痛苦的經歷,學程式語言類似學習外語,應該從需求出發,並且以生活中可理解的事物當作範例學習。所以去年大膽的進行了一個實驗:我們來上中小學生的 Python 課程,透過寫程式解數學題目培養直覺。男孩們選了一個非常瓊瑤的題目!
Thumbnail
本文分享了在面試演算法工程師時經常會遇到的問題及解題方法,包括複雜度分析、五大演算法的介紹、排序方法及動態規劃等。希望這些資訊能幫助求職者在面試時有更好的準備、提高自信,並提供參考資料以便深入學習相關內容。
數學系的訓練,與上面閱讀原始碼的優先順序,本質上是反過來的。在數學的訓練中,是先把函數定義的非常清楚,再進一步去看函數應用在具體的數據上會發生什麼行為,然後就到此為止,不太會再有進一步的討論。但如上面西尾泰和所述,工程師看事情的角度,是先掌握全局,然後再進一步細化每一層的細節。
離開工程師的工作之後,我轉往兒童程式教育的跑道,這份工作將我原有的程式技能結合上我所關心與有興趣的兒童教育,轉換跑道的路上並不輕鬆,不論是工作方式或心境的調整,在克服的路上都是學習。 我很幸運用最快速的方式接觸到不同年齡層的學生,第一個班級就是18個中班孩子只能用慘烈來形容每堂課的準備與挫敗,當然
你正在學習編程,探索算法和數據結構,在這個過程中,你會遇到許多複雜的問題,比如如何分析算法的性能、如何證明算法的正確性,以及如何解決優化問題。這時,你會發現《Concrete Mathematics》是一個非常有用的資源。
Thumbnail
面對數學的困難,許多學生總是會質疑為何要學這門學科。 本文以個人教學經驗,分享了數學在日常生活和未來規劃中的重要性, 並透過真實故事強調數學訓練思考邏輯的價值。 「為甚麼要學數學?以後又用不到。」 這篇文章是一個數學老師的回答。
計算機組織不難,但東西很多 這個科目也是我比較不熟悉的,在此之前都是自學,所以會寫的更詳細一點 1.計算機組織在學什麼? 想像計算機的架構就像一個蛋糕有好多層,上半是軟體下半則是硬體,對我來說,軟硬體的兩端是電腦的核心(應用程式&半導體),而中間的每一層都是串接兩端的橋樑;那計算機組織就是要探
Thumbnail
無論是現在、過去還是未來,學習如何學習都是終身受用的技能。迭代和進步是軟體工程師的追求。文章提出學習程式的四大關鍵:實踐、輸出、整理、思考,並期望讀者能在選擇的路上一路前行。
這個系列的文章主要專注於物件導向到函數式編程的差異與分析,並針對概念與機制上的不同進行比較。很多人說物件導向和函數式編程沒有哪個比較好的問題,只有哪個比較適合的問題,然而我並不這麼認為,我透過這一系列的文章從各個角度討論它們之間的優缺點就是為了闡述我的觀點。物件導向錯在沒有理論基礎,但它贏在熟悉性,
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。