這個要分情況來看。
初級的編程不要太多深奧的數學知識,更多是一種邏輯思維的理解,對于各種規則的運用。這個時候編程有點像工具或者搭積木的感覺,很多初中甚至小學的變成天才,其實也沒有太高深的數學知識,但是照樣玩得轉。
但問題是,編程,或者說計算機科學,發展到最后,則幾乎要很大程度上地依賴數學。
有一位Facebook員工跟我講,決定一個程序員上限的有兩條:一個是代碼的感覺,另一個是數學的水平。
嚴格意義上來說呢,編程搞到最后也是兩條出路:工程型和學術型。
工程型的比如說大家都在上淘寶,為什么你點開一個圖片,就打開了一個鏈接?那是web工程師的功勞,再比如你看很多手機頁面設計的美輪美奐,那或許是一個兼具工業設計和編程能力的人的成果。
工程型的程序員,其實沒有多少創新,他們其實就是把已知的一些編程技術熟練的掌握,要說數學知識,會在處理一些技術難題的時候用到。
還記得facebook創始人馬克扎克伯格創辦撕破臉時,借鑒的一個公式嗎?那就涉及到統計數學的一些原理。
另外一種就是學術型的編程。這個就厲害了,搞的東西會非常深奧,某種程度上就是在研究數學和計算機的結合。
舉個例子,每年雙十一,全國有好幾億人在短短的幾分鐘內涌入淘寶買東西,你想想看,如果發生在現實中,一個大樓估計都要被壓塌,這么大的數據流量,如何保持系統不崩潰,沒有差錯?
這就涉及到非常高深的數學理論。而阿里巴巴,騰訊的高薪養的那些科學家級別的人才,就是成天和數學打交道。
當然了,普通人的話,不需要學到那么高深,一個年薪五十萬的程序員,大概掌握以下知識就可以了:
- 《算法競賽入門經典(第二版)》:把書啃透,然后把書上每道題在OJ上AC了。
- 《機器學習》(周志華):把書上每個算法實現,每個公式推導一遍。
- 《UNIX環境高級編程》:很多人都缺少的對操作系統的深入了解。(補充:我覺得光看這本書是比較片面的,前兩點像是在修煉內功,那么這一條就是在修煉外功。而這本書作為起點是一個還不錯的選擇。)
- 光搞數學也不行,英語還要好,托福100+:跟進前沿paper,與國外同行交流
但是這幾條絕對不是明面上這么簡單,前面說了,你在研究編程的同時,還要對數學涉獵有一定廣度和深度。
比如現在最火的人工智能,大家都曉得吧?要搞清楚人工智能的最厲害的書《機器學習》,你就需要對微積分,線性代數,概率論,數理統計,甚至是隨機過程都有一定的基礎。
清華學神韓衍雋跟我說:他編代碼的感覺不是很好,所以就走學術型編程道路,現在一大半時間都是在研究數學。