優秀的程序員需要懂那些數學知識?

請問,優秀的程序員需要具備哪些數學知識?

針對所需數學知識,在國內外有哪些優秀的書籍?

本人更喜歡優化類數學模型的研究,請問數學建模這塊對編程能起到哪方面的幫助?

煩請各位高人解答,謝謝!


數論、離散數學、線性代數、張量、統計學,這幾個吧。

對演算法優化、狀態表示、數據結構設計、時間 - 空間複雜度分析都有很大幫助。


學抽象代數吧,雖然對你解決老闆的問題沒有直接幫助,但是對於你了解各個語法結構和計算模型之間怎麼變形有顯著效果。


如果你正好要做機器學習或者數據挖掘的工作,你會發現高數,線性代數,概率論,統計,矩陣論,他喵的你都要學的無比精深才行啊~


我先從大學本科CS科班基本要求說起:無疑是高等數學,線性代數,概率論和數理統計,離散數學

當然這四門是最普通也最常見的開設課程,不說程序員,前三門應該是所有大學工科學生基本素養(理科要求更高)。

接下來就可能是一些根據自己方向不斷要加強和補充的:

  1. 深入掌握矩陣的相關理論:計算機視覺,圖形圖像。

  2. 離散數學:網路安全,最優化方法,演算法的設計實現,推薦Rosen的《離散數學及其應用》。

  3. 隨機過程:這個可視為概率數理統計課的升級版本,這個課程中某些內容非常重要,特別是在大數據和雲計算的應用,科研方面更不用說(幾乎是整個NLP領域的起點),對轉金融領域也有好處。書籍推薦Ross的《應用隨機過程—概率模型導論》。

  4. 組合數學與初等數論:這些對於演算法設計與實現也有很大幫助,但不必深究,屌絲程序員還是多看點面試題靠譜

  5. ......還有我沒答道的地方還希望大家補充~

關於答主的最後一個問題:我想說的是對於程序員而言實踐更重要,主要指代碼的數量和質量。數學建模可以做,但更多的是為科研,成為理論研究者而準備的(或者可以保研)。個人認為,程序員學數學,學的是思維,用的是工具,一定要有,但體現你作為一個程序員的價值還是代碼


學組合數學和數論對比賽很有幫助


高德納的&<具體數學&>你值得擁有~!


狂學數學,真的。遇到什麼學什麼。


其實一般的 組合分析 圖論 線性代數 基本夠用 ,如果要方便轉一些比較特殊領域的話 分析 傅立葉級數 抽代 應用概率論 資訊理論 組合優化 凸優化 數值分析 今後大部分的特殊應用好上手………


推薦閱讀:

如何證明這個關於π的方程?
如何自學高數(同濟第六版)下?——以穩過期末考試(75分+)為目的?
割圓術是錯的嗎?
怎樣才算是理解了一個東西,比如理解了一個概念?
存在導函數每一點都不連續的函數嗎?

TAG:程序員 | 數學 | 編程 |