數學對於編程有多重要?
數學並不是計算機科學的基礎
很多人都錯誤的認為,計算機科學是數學的一個分支,數學是計算機科學的基礎,數學是更加博大精深的科學。這些人以為只要學會了數學,編程的事情全都不在話下,然而事實卻並非如此。
事實其實是這樣的:
- 計算機科學其實根本不是數學,它只不過借用了非常少、非常基礎的數學,比高中數學還要容易一點。所謂「高等數學」,在計算機科學裡面基本用不上。
- 計算機是比數學更加基礎的工具,就像紙和筆一樣。計算機可以用來解決數學的問題,也可以用來解決不是數學的問題,比如工程的問題,藝術的問題,經濟的問題,社會的問題等等。
- 計算機科學是完全獨立的學科。學習了數學和物理,並不能代替對計算機科學的學習。你必須針對計算機科學進行學習,才有可能成為好的程序員。
- 數學家所用的語言,比起常見的程序語言(比如C++,Java)來說,其實是非常落後而糟糕的設計。所謂「數學的美感」,其實大部分是夜郎自大。
- 99%的數學家都寫不出像樣的代碼。
數學是異常糟糕的語言
這並不是危言聳聽。如果你深入研究過程序語言的理論,就會發現其實數學家們使用的那些符號,只不過是一種非常糟糕的程序語言。數學的理論有些是有用的,然而數學家門用於描述這些理論所用的語言,卻是紛繁複雜,缺乏一致性,可組合性(composability),簡單性,可用性。這也就是為什麼大部分人看到數學就頭痛。這不是他們不夠聰明,而是數學語言的「設計」有問題。人們學習數學的時候,其實只有少部分時間在思考它的精髓,而大部分時間是在折騰它的語法。
編程是一門藝術
從上面你也許已經明白了,普通程序員使用的編程語言,就算是C++這樣毛病眾多的語言,其實也已經比數學家使用的語言高明很多。計算機科學並不是數學的一個分支,它在很大程度上是優於數學,高於數學的。有些數學的基本理論可以被計算機科學所用,然而計算機科學並不是數學的一部分。數學在語言方面帶有太多的歷史遺留糟粕,它其實是泥菩薩過河,自身難保,它根本解決不了編程中遇到的實際問題。
編程真的是一門藝術,因為它符合藝術的各種特徵。藝術可以利用科學提供的工具,然而它卻不是科學的一部分,它的地位也並不低於科學。和所有的藝術一樣,編程能解決科學沒法解決的問題,滿足人們新的需求,開拓新的世界。所以親愛的程序員們,別再為自己不懂很多數學而煩惱了。數學並不能幫助你寫出好的程序,然而能寫出好程序的人,卻能更好的理解數學。
數學是一切科學的基礎,也是計算機科學的基礎。
不僅一切演算法基於數學,而且沒有數學,是無法編程的。
編程中的加減乘除運算基於數學。
編程中的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
可以說,沒有高等數學,連人工智慧的門都找不著,如何編程?
數學不是異常糟糕的語言,更不是落後的語言,相反,數學是最簡潔最優雅的語言。
編程不過是數學實現的一種工具。
如果想在編程路上走,尤其想在人工智慧這條路走,請好好啃數學。
個人編程多年,一如老老實實啃數學。
如果贊同觀點,請點贊支持,謝謝。
數學對於編程異常重要,或者說對任何學科都是異常重要。數學是一種形式科學。
這體現在方方面面。首先數學是編程的基礎,受過正統計算機教育的人都知道,離散數學、數據結構、演算法和可計算性的知識都是編程必不可少的,而這些都是數學。如果你連O(logN)這些都搞不清楚,你肯定不是一個優秀的程序員。也許很多人不知道,遞歸的數學解釋就是數學歸納法。
其次,數學是很多計算機應用的基礎。數值計算是計算機科學的一個分支,包含LU分解、有限元分析等,這些都要深厚的數學功底。人工智慧中,你必須知道梯度、vector calculus才能理解什麼是反向傳播演算法。計算機圖形學中,無時無刻不用到矩陣向量的概念。例子太對了,不勝枚舉。
如果你是沒有經受過正統的科班教育的碼農,那也許你會覺得數學不重要。可如果你是一個計算機專業畢業的程序員,你就會覺得數學無比重要!
數學對嚴謹的邏輯思維能力很有幫助,只要是對邏輯思維能力有比較大幫助的學科,轉到編程這一行都不會有太大問題,當然還要學習編程語言、數據結構和演算法、操作系統、框架等等,而掌握這些知識和技巧需要花費很多時間和精力。
關於數學對編程很重要,只有數學好才能編程,數學不好編程肯定不行,等等這些說法都過於機械化,忽略了計算機作為一門學科的重要性。編程這個行業需要各個領域的人才,科學計算只是很小的一部分。
計算機編程的大門對所有人打開,很多編程高手並不都是數學家,框架設計和應用、界面前端編程等等都用不到多麼高深的數學知識,人工智慧的應用也不需要頂尖的數學天才,只有頂尖數學天才,才能使用的「人工智慧」一定是騙人的。
對於編程必須啃數學的說法,是誤人子弟,有故弄玄虛之嫌。
數學只是提供編程思路。中學數學足夠了。我最多用到圓周率和三角函數。比如算GPS坐標距離。
但高等數學真沒有用到過。
另外,計算機是只會加法的。太高級的公式並不會使程序速度變快。
我感覺,數學對於業務層代碼幫助不大,但是對於涉及演算法、高速數學計算部分還是很有幫助的,業務層一般用到數學的不多!但是不代表不重要,也不代表非常重要!編程的邏輯性強,但不一定和數學有關係;我個人認為數學不等於邏輯,邏輯也不等於數學。
這個很重要,只要涉及到數據結構,演算法,都需要良好的數學功底。簡單的說,吃飯需要筷子??一樣。
首先聲明,作為一個並不喜歡,甚至討厭數學的數學系研究生,想說一下自己的看法,數學並不是科學,不是誰創造這門學科,數學本身就是存在的,一切科學的源頭與終結都是數學,有人說數學是門糟糕的語言,讓我想起了我的數學分析老師有次堂課說的一句話,數學是上帝的語言,她太有趣又太難了。
沒有必然關係。編程不等於數學,不等於算術,不等於邏輯,不等於演算法,不等於軟體,不等於寫軟體,不等於工具,不等於黑客,不等於底層,不等於破解,不等於程序,不等於代碼,不等於模塊,不等於類,不等於高級語言,不等於函數,不等於API,不等於英語,不等於單詞,不等於錢。
底層演算法需要數學,如果只是搭積木用現成模塊的話並不太依賴數學功底。
建築師會建房子不一定要會燒制磚塊,澆築水泥。了解這些建材的外部性能特點就可以了。
所以才有計算機科學家和碼農的區別。。。
推薦閱讀:
※奧迪A6L現在算不算豪車,一般人能開的上嗎?
※我這回數學考試沒考好,只考了68分,但老師讓家長簽字,怎麼辦啊?大家幫我想想辦法?
※如何證明不可計算的函數比可計算的函數多?
※如何用沒有刻度的尺,筆畫出等邊三角形?
※1乘1可以用一個正方形表示,3個1乘可以用一個正方體表示,那麼4個1乘應該用什麼圖形表示呢?