編程需要知道多少數學知識?你有一把錘子,你會把一切看成是釘子

數學和編程有一種容易讓人誤解的聯繫。許多人認爲在開始學習編程之前必須對數學很在行或者數學分數很高。但一個人爲了編程的話,需要學習多少數學呢?

這篇文章中我會深入探討編程中所需要的數學知識。你可能已經都知道了。

對於基本的編程,你需要知道下面的:

●  加減乘除— 實際上,電腦會幫你作加減乘除運算。你僅需要知道什麼時候運用它們。

● 模運算— 模運算是用來計算餘數,它的符號通常用%百分號來表示。所以23除以7等於3,餘數是2。23 mod 7 = 2。

● 判斷是奇數還是偶數的模運算— 如果你想知道一個數是奇數還是偶數,用它mod 2來作模運算。如果結果是0,它就是偶數。如果結果是1,就是奇數。23 mod 2等於1,所以23是奇數,24 mod 2等於0,24是偶數。

● 對一個數作百分數運算,就是用這個數來乘以一個百分數。譬如你要得到279的54%,就是用0。54*279。這就意味着爲什麼1.0等於100%,0.0等於0%。

● 知道負數是什麼。負數乘以負數等於正數。負數乘以正數等於負數。就這麼簡單。

● 知道笛卡爾座標系統。在編程中,(0,0)代表屏幕左上角,Y座標的正軸往下。

● 知道勾股定律,因爲它是用來計算笛卡爾座標中兩點之間的距離的。勾股定律a^2 + b^2 = c^2。(x1, y1)和(x2, y2)兩點之間的距離等於( (x1 – x2)^2 + (y1 – y2)^2 )。

● 知道十進制、二進制、十六進制。十進制就是我們通常用的十個數:0-9。通常認爲這個十進制系統是人類發明的,因爲我們有十個手指。

電腦採用二進制數據,只有兩個數字:0和1。這是因爲我們用電子元件來構建的電腦,讓電腦只識別兩種狀態更便宜些(一種代表0,另一種代表1)。

數是一樣的,但是在不同的進制系統裏的表現形式不同,因爲不同進制包含的數的個數不同。十六進制比十進制多六個數字,所以我們用A-F表示超過9的數。能夠表現這些進制系統的最簡單方法就是用一個計數器(odometer)。下面三種不同的計數器顯示的是同一個數,但在不同的進制系統中的形式不同:

在新窗口中查看計數器頁面

你甚至不需要知道怎麼從一個進制系統轉換成另一個系統。每種編程語言都有幫你轉換的函數。

(提示一下,十六進制的使用是因爲一個十六進制的數可以表示四個二進制的數。因爲十六進制中的3和二進制中的0011對應,十六進制的A和二進制的1010對應,所以十六進制中的3A(十進制的58)可以寫成二進制的00111010。十六進制在編程中的使用是因爲它是對二進制的簡化。沒人喜歡寫出的數全是0和1。)

就是這麼多了。除了進制系統以外,你可以已經知道編程所需的數學知識了。雖然普遍認爲編程需要學習許多數學,但實際上並不需要那麼多。你可能爲了編寫一個程序,譬如說地震模擬器,而需要學習數學。其實你更需要學習地震的數學,而不是因爲要編寫地震模擬器而學習數學。

 

某些編程領域中更爲高級的數學

有一些領域中需要更多的數學知識(但95%的軟件中,你都不需要知道它們。)

● 3D遊戲和3D繪圖 — 3D通常需要涉及三角函數和線性代數(用矩陣來解決問題的數學)。當然,有許多3D圖形庫已經實現了這些數學編程,你不需要知道這些數學。

● 2D物理(譬如憤怒的小鳥)和3D物理(譬如許多流行的3D遊戲) — 爲了寫涉及到物理的編程,你需要學習一些物理方程和公式(尤其是力學,如彈力,重力,球滾下斜坡等物理。)然而,已經有一些物理引擎和軟件庫幫你實現了,所以你也不需要知道遊戲(如憤怒的小鳥)中的物理公式。

● 加密學 — 事實上我指的是RSA。你需要知道質數的有關知識,以及如何求最大公約數(其實是個非常簡單的算法,還有許多編程語言中都有gcd()函數,幫你求解最大公約數)其他的編碼大部分就是將數據按照某種步驟挪動。舉個例子,下面的flash就是AES“Rijndael”編碼的步驟。所有的步驟包含用一些數減去另一些數,將行向上移,將列數字打亂,再作簡單的加法運算。

如果你要寫你自己的加密算法(通常不需要你做,因爲已經有許多很好的工具了,並且如果你不是加密學的專家的話,你的程序也許會很容易被破解。)如果你僅僅想加密一些數據的話,已經有許多加密和解密的軟件庫了。

所以就算是以上的情況,你也不需要真正的知道3D圖像,物理或者加密的數學。你只需要學習運用軟件庫就行了。

當然,去學更多的數學,可以讓你成爲更出色的程序員。但是爲了學習編程需要多少數學?真的非常少。

我想我應該在基本知識點中增加基本代數,但僅僅需要知道的如 如果X * 3 = 12,知道X等於4。

在編程過程中,我們運用的數學知識,其實只是在用其中的數學邏輯而已,邏輯比知識更重要!

——————

雖然大多數開發人員會告訴你,他們在工作中從來不需要數學,但是經過一番沉思後,我有了個想法:就是反馬斯洛的錘子理論:當你有一把錘子,你會把一切看成是釘子。

如果你想要獲取更多C語言、C++、Windows以及QT的知識!

這裏有一個C/C++編程學習交流俱樂部,傳送通道:【

還有編程學習文件(源碼,項目實戰教學視頻以及給小白的零基礎教程),歡迎初學者和正在進階中的小夥伴們!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章