一個基礎學科,為啥這麼硬核?
「程序員不需要學數學,因為工作中根本用不到。有那功夫,還不如認真把設計模式、計算機網路、操作系統等硬知識學好。」 這是很多人的觀點,是的,作為程序員,你不需要任何數學知識,也能寫代碼。
但是,編程的世界不止條件和循環語句,程序員的人生應該是創造的舞台,只要想在這個領域持續深耕,學好數學就是充分必要條件,會決定一個程序員未來的發展潛力。
所以,很多大公司在招人時,都會優先考慮數學專業的畢業生,因為數學基礎好,編程會更容易上手。在大數據和智能化的時代,學好數學更是門檻本身。
數學的正確打開方式,他們說…
Steve Yegge | 資深程序員
學習數學的正確方法是廣度優先,而非深度優先。你要了解的是整個數學領域每個概念的名字,並知道它們要解決什麼問題。
把數學當成文科來學,先不用重點看那些演算法和證明,只需要了解數學概念的名字、作用、大致步驟、發明人、發明時間、局限等。
數學符號是關閉你通往另一個世界的符咒,如果你看到一堆自己不懂的數學符號,就把它的實現功能簡單地當成一個原子操作好了,不要深究太多。
徐文浩 | bothub.ai 創始人
從工作相關的領域開始了解數學,可以隨學隨用,在工作中累計實操經驗,更容易獲得正反饋。
把正在學習的數學問題的解法,寫一個演算法程序實現出來,是非常有效的練習方式。
你可以選擇追一門數學的在線課程,跟著老師的節奏系統理解數學,對學習有一個聯繫和反饋的過程,做到有始有終。
劉超 | 《趣談網路協議》專欄作者
程序員是否需要學好數學?我在學數學分析、概率論和線性代數的時候,也沒想過數學和寫程序有啥關係,但隨著研究的開源軟體越來越多,我發現很多技術深入下去,本質就是數學。
程序員應該怎麼學數學呢?我不建議你將大學的相關書籍拿出來啃一遍,耗費大量時間不說,關鍵是跟實際應用無法結合,結果往往是:該看的忽略了,不該看的費了半天勁還用不上,等過一陣字就又忘了。
我們在了解新技術時,通常會分成三個階段,第一階段是,怎麼使用;第二階段是,如何實現,原理是什麼;第三階段是,為什麼這樣實現。學數學也是這樣,也有這樣三個階段,先用起來,了解原理,再知道為什麼這麼做。
用一句話總結,我們不能為了數學而學數學,要和具體的應用結合在一起。
可保存後分享給朋友或轉發至朋友圈
綜合三位老師的觀點,其中的共性就是:學習數學,「實用」優先。因此,我繪製了一張「程序員的數學應用地圖」,包含四個部分:數據結構、編程語句、通用演算法和機器學習演算法。
數據結構和編程語句,你肯定非常熟悉,這些基礎的內容涵蓋的數學思維毋庸置疑。例如,數組和鏈表就體現了迭代和遞歸的思想,判斷語句使用了邏輯(布爾)代數。
架構在數據結構和編程語言之上的演算法(為了將這些演算法和機器學習的演算法區分開,我稱其為通用演算法),除了迭代和遞歸,也體現了排列、組合和動態規劃等思想。
對於機器學習的演算法,我們更需要理解概率統計和線性代數的核心思想,包括什麼是概率、貝葉斯定理、數據的統計分布、向量、矩陣、線性方程等。
在此,向大家推薦我在極客時間的專欄「程序員的數學基礎課」。
在專欄中,我會從數學的角度出發,逐步推進到這些知識在計算機中的應用。而值得一提的是,在繪製這張應用地圖時,我特意反其道而行,從計算機編程的角度出發,為你展示程序員應該如何看待編程中的數學知識,告訴你計算機領域常用的數學思想有哪些。
我有充足的信心,通過學習這個專欄,你會加深對數學的理解,在分析問題時能快、准、穩地找到解決方案。今後在面對系統框架設計、性能優化、準確率提升等難題時,你會從更高更廣的角度出發思考問題,而不只是以「熟練工」的視角增刪改查。


※四大維度,看華為雲布局人工智慧的野心為何?
※分散式系統的本質其實就是這兩個問題
TAG:InfoQ |