數學對於編程有多重要?

只是一隻魚

這個要分情況來看。

初級的編程不要太多深奧的數學知識,更多是一種邏輯思維的理解,對於各種規則的運用。這個時候編程有點像工具或者搭積木的感覺,很多初中甚至小學的變成天才,其實也沒有太高深的數學知識,但是照樣玩得轉。

但問題是,編程,或者說計算機科學,發展到最後,則幾乎要很大程度上地依賴數學。

有一位Facebook員工跟我講,決定一個程序員上限的有兩條:一個是代碼的感覺,另一個是數學的水平。

嚴格意義上來說呢,編程搞到最後也是兩條出路:工程型和學術型。

工程型的比如說大家都在上淘寶,為什麼你點開一個圖片,就打開了一個鏈接?那是web工程師的功勞,再比如你看很多手機頁面設計的美輪美奐,那或許是一個兼具工業設計和編程能力的人的成果。

工程型的程序員,其實沒有多少創新,他們其實就是把已知的一些編程技術熟練的掌握,要說數學知識,會在處理一些技術難題的時候用到。

還記得facebook創始人馬克扎克伯格創辦撕破臉時,借鑑的一個公式嗎?那就涉及到統計數學的一些原理。

另外一種就是學術型的編程。這個就厲害了,搞的東西會非常深奧,某種程度上就是在研究數學和計算機的結合。

舉個例子,每年雙十一,全國有好幾億人在短短的幾分鐘內湧入淘寶買東西,你想想看,如果發生在現實中,一個大樓估計都要被壓塌,這麼大的數據流量,如何保持系統不崩潰,沒有差錯?

這就涉及到非常高深的數學理論。而阿里巴巴,騰訊的高薪養的那些科學家級別的人才,就是成天和數學打交道。

當然了,普通人的話,不需要學到那麼高深,一個年薪五十萬的程序員,大概掌握以下知識就可以了:

  • 《算法競賽入門經典(第二版)》:把書啃透,然後把書上每道題在OJ上AC了。
  • 《機器學習》(周志華):把書上每個算法實現,每個公式推導一遍。
  • 《UNIX環境高級編程》:很多人都缺少的對操作系統的深入瞭解。(補充:我覺得光看這本書是比較片面的,前兩點像是在修煉內功,那麼這一條就是在修煉外功。而這本書作為起點是一個還不錯的選擇。)
  • 光搞數學也不行,英語還要好,託福 100+:跟進前沿paper,與國外同行交流

但是這幾條絕對不是明面上這麼簡單,前面說了,你在研究編程的同時,還要對數學涉獵有一定廣度和深度。

比如現在最火的人工智能,大家都曉得吧?要搞清楚人工智能的最厲害的書《機器學習》,你就需要對微積分,線性代數,概率論,數理統計,甚至是隨機過程都有一定的基礎。

清華學神韓衍雋跟我說:他編代碼的感覺不是很好,所以就走學術型編程道路,現在一大半時間都是在研究數學。


綜上所述,如果你只是想找個基礎的編程工作,並不需要對數學有太深瞭解;但是如果你想搞一些前沿的東西,那麼光編程還不行,還要補補數學的課。


佩子臨

數學是一切科學的基礎,也是計算機科學的基礎。

不僅一切算法基於數學,而且沒有數學,是無法編程的。

編程中的加減乘除運算基於數學。

編程中的if/else判斷是數學的邏輯判斷。

編程中的進制轉換是基於數學。

數據庫的left join等也是運用了數學中的集合。

光這些基礎的,可能有人不以為然。再看一道編程題。

給定表達式[x/2] + y + x * y, 其中x,y都是正整數。其中的中括號表示下取整,例如[3/2] = 1 , [5/2] = 2。
有些正整數可以用上述表達式表達出來,例如正整數2,當取x = y = 1時,可以把2表達出來 ( 解釋下:當x=y=1時, [x / 2] + y + x * y = [1 / 2] + 1 + 1 * 1 = 0+1+1 = 2 );
有些數可以有多種方式表達,例如13可以由 x = 2 y = 4 以及x = 3 y = 3來表示;
有些數無法用這個表達式表達出來,比如3。
從1開始第n個不能用這個表達式表示出來的數,我們叫做an,例如a1=1 a2=3,給定n,求an。
輸入:n值 1<=n<=40 輸出:an % 1000000007的結果(因為結果較大,輸出an %1000000007的結果)

這道題可以說不懂梅森質數,大數取模(a^n mod b)是不可能做出來的。

數據結構中的圖論等等基於數學,一切算法皆基於數學

“高等數學在數學計算機科學基本用不上”,這句話可以說大錯特錯。說出這句話的,要麼壓根就不是編程人員,要麼就是連編程的大門都找不著。

就拿現在最火爆的人工智能來說,先看最簡單的近鄰算法。

再看決策樹

再看貝葉斯

再看梯度上升/下降。

svm

可以說,沒有高等數學,連人工智能的門都找不著,如何編程?

數學不是異常糟糕的語言,更不是落後的語言,相反,數學是最簡潔最優雅的語言。

編程不過是數學實現的一種工具。

如果想在編程路上走,尤其想在人工智能這條路走,請好好啃數學

個人編程多年,一如老老實實啃數學。


IT老友

借用名人的一句話:任何一個學科如果沒有發展到能與數學緊密聯繫到一起的程度說明該學科發展還不完善。


電子維修

對於很多業務代碼搬運工,都是if else的存在,比較少感受到數學的存在、感受到算法的存在重要性。

這就是為什麼很多人會問,面試面算法有啥用? 對於這種問題一般都看的回答了,如果你相信,先去學了,再來問為什麼。

當然,其實我們職場很多崗位確實不需要那麼多的要求,能實現業務代碼就好,這就是國內面試喜歡問你做過什麼項目,遇到什麼問題,怎麼解決,學到什麼,諸如此類的問題。


編程教育佈道師

數學知識可能高中就差不多了。但數學思維,多少都不會多,推理歸納,這可能就是碼農和程序員的區別了,最後拼到底就是這些內功了。


聽書問道

數學只是提供編程思路。中學數學足夠了。我最多用到圓周率和三角函數。比如算GPS座標距離。

但高等數學真沒有用到過。

另外,計算機是隻會加法的。太高級的公式並不會使程序速度變快。


mbing1

數學並不是萬能的,但沒有數學就是萬萬不能的。任何科學技術的發展都離不開數學。凡涉及到數量計算的都是數學的範疇。小到數量的累積,大到天體計算。我的語文老師說:語文是一切科學之父。數學老師接過話茬說:數學是一切科學之母。話雖是玩笑,但也不能不說有道理。古人從數羊開始進行了記載,不同的文明承載了不同的文化,形成了不同的文字和語言,我們既不能片面地否定數學的功能和作用,也不能狹義地理解數學的本質和影響。任何事物都要一分為二地看待。如果沒有數學,我們仍然每天吃樹皮甚至被凍死、餓死或因疾病夭折。任何事情不能走極端。我想說的是:不要因貧窮(知識的貧乏)影響了你的想象力。

應該講,沒有數學就不可能有像現在這樣的生活。沒有數學就不可能使人類社會向前發展。計算機是一門應用科學,它包含的不僅是數學,還有很多自然科學類別。從應用上講,數學是一種公共語言,它可以用最簡單的數字通過組合,形成非常微妙的語言,通過計算機的邏輯排列可以製作完成各種絢麗多彩的世界。數學是計算機的基礎,計算機使數學向前發展。就這樣。能看懂本短文的都是高人,看不懂的,只能說你還有很大很大的提升空間。歡迎大家來噴。


手機遊客1234567890

數學並不是計算機科學的基礎

  很多人都錯誤的認為,計算機科學是數學的一個分支,數學是計算機科學的基礎,數學是更加博大精深的科學。這些人以為只要學會了數學,編程的事情全都不在話下,然而事實卻並非如此。

  事實其實是這樣的:

  • 計算機科學其實根本不是數學,它只不過借用了非常少、非常基礎的數學,比高中數學還要容易一點。所謂“高等數學”,在計算機科學裡面基本用不上。
  • 計算機是比數學更加基礎的工具,就像紙和筆一樣。計算機可以用來解決數學的問題,也可以用來解決不是數學的問題,比如工程的問題,藝術的問題,經濟的問題,社會的問題等等。
  • 計算機科學是完全獨立的學科。學習了數學和物理,並不能代替對計算機科學的學習。你必須針對計算機科學進行學習,才有可能成為好的程序員。
  • 數學家所用的語言,比起常見的程序語言(比如C++,Java)來說,其實是非常落後而糟糕的設計。所謂“數學的美感”,其實大部分是夜郎自大。
  • 99%的數學家都寫不出像樣的代碼。

  數學是異常糟糕的語言

  這並不是危言聳聽。如果你深入研究過程序語言的理論,就會發現其實數學家們使用的那些符號,只不過是一種非常糟糕的程序語言。數學的理論有些是有用的,然而數學家門用於描述這些理論所用的語言,卻是紛繁複雜,缺乏一致性,可組合性(composability),簡單性,可用性。這也就是為什麼大部分人看到數學就頭痛。這不是他們不夠聰明,而是數學語言的“設計”有問題。人們學習數學的時候,其實只有少部分時間在思考它的精髓,而大部分時間是在折騰它的語法。

編程是一門藝術

  從上面你也許已經明白了,普通程序員使用的編程語言,就算是C++這樣毛病眾多的語言,其實也已經比數學家使用的語言高明很多。計算機科學並不是數學的一個分支,它在很大程度上是優於數學,高於數學的。有些數學的基本理論可以被計算機科學所用,然而計算機科學並不是數學的一部分。數學在語言方面帶有太多的歷史遺留糟粕,它其實是泥菩薩過河,自身難保,它根本解決不了編程中遇到的實際問題。

  編程真的是一門藝術,因為它符合藝術的各種特徵。藝術可以利用科學提供的工具,然而它卻不是科學的一部分,它的地位也並不低於科學。和所有的藝術一樣,編程能解決科學沒法解決的問題,滿足人們新的需求,開拓新的世界。所以親愛的程序員們,別再為自己不懂很多數學而煩惱了。數學並不能幫助你寫出好的程序,然而能寫出好程序的人,卻能更好的理解數學。


網羅大事小事

我感覺,數學對於業務層代碼幫助不大,但是對於涉及算法、高速數學計算部分還是很有幫助的,業務層一般用到數學的不多!但是不代表不重要,也不代表非常重要!編程的邏輯性強,但不一定和數學有關係;我個人認為數學不等於邏輯,邏輯也不等於數學。


鵬城程序猿

數學對於編程異常重要,或者說對任何學科都是異常重要。數學是一種形式科學。

這體現在方方面面。首先數學是編程的基礎,受過正統計算機教育的人都知道,離散數學、數據結構、算法和可計算性的知識都是編程必不可少的,而這些都是數學。如果你連O(logN)這些都搞不清楚,你肯定不是一個優秀的程序員。也許很多人不知道,遞歸的數學解釋就是數學歸納法。

其次,數學是很多計算機應用的基礎。數值計算是計算機科學的一個分支,包含LU分解、有限元分析等,這些都要深厚的數學功底。人工智能中,你必須知道梯度、vector calculus才能理解什麼是反向傳播算法。計算機圖形學中,無時無刻不用到矩陣向量的概念。例子太對了,不勝枚舉。

如果你是沒有經受過正統的科班教育的碼農,那也許你會覺得數學不重要。可如果你是一個計算機專業畢業的程序員,你就會覺得數學無比重要!


分享到:


相關文章: