今天有很多年輕人或經(jīng)驗不足的程序員在論壇發(fā)帖、在 Stack Exchange 網(wǎng)站問:「為了成為優(yōu)秀的程序員,我需要擅長數(shù)學嗎?」,在我還年輕的時候,我也問自己同樣的問題。最近,我醉醺醺地、也是出于無聊,竟然 Google 了同樣問題,差不多有 10 多年沒有思考過這個問題了。在我瀏覽相關(guān)話題時,出現(xiàn)的答案模式被歸結(jié)為以下三個主要類別:
貌似「需要」 和「不需要」經(jīng)常帶有個人主觀偏見,反而顯得有點兒草率的反應(yīng)綜合征。因此我把精力更多地放在「看情況」的選項上,以確!感枰贡蛔C明為一種更加普通的 觀點。我決定就這個問題寫點兒東西,考慮到這一點,我的醉醺醺的念頭開始興奮起來,這將促使我不會再忽視它。為了成為一名優(yōu)秀的程序員,一個人是否需要擅 長數(shù)學的問題,可以從哲學和技術(shù)兩個方面解答。我打算堅持哲學層面。意識到它為什么對我重要,是因為一個更年輕的我,為了找到基于不成熟和懶惰而萌生的 「不需要」選項,將要投入更多的時間。
首 先,我們必須嘗試建立擅長數(shù)學的資格。一個人可以在既定數(shù)學原理或建模方程上,明白全局概念以適應(yīng)情況,而另外一個人或許在數(shù)學的分析部分,比如長于計 算、以及操作表達式和方程。在我看來,這兩種情況下,二者的平均數(shù)學能力都不錯。然而,在上面提到的兩個特征上有著高度競爭力的一個人,可能成為被視作 「擅長」數(shù)學的最佳候選人(記得把鳳毛麟角的約翰·馮·諾伊曼歸入精通數(shù)學的類別)。就我目前在大學數(shù)學課上觀察到的,那些真正擅長數(shù)學的人們不屬于大多 數(shù)。這使得答案更加復(fù)雜,「看情況」選項的有效性得到了增強。
在「Hello World」和 C++ 的名字到處亂放、而不明白其所以然時,成為一名程序員的階段通常從掌握基礎(chǔ)的教程開始,例子通常包含了數(shù)學。設(shè)想一下,打算編程的某個人,將很可能自然而然地深究問題,開始懷疑數(shù)學在編程中能否發(fā)揮切實作用。
坐下來為了編程而編程,除了學習既定編程語言的語法和機制,不會摻雜太多目的。最終,編程是要解決問題,并在數(shù)字王國里創(chuàng)新。通過為計算機編程,你想解決或 創(chuàng)新什么?如果你想編寫網(wǎng)頁或自動化任務(wù)的腳本,數(shù)學不會起到較大作用。然而,如果你對圖形編程、開發(fā)業(yè)務(wù)和科學方面的應(yīng)用有興趣,那么數(shù)學在開發(fā)周期里 將發(fā)揮很大作用。
一旦你在特定領(lǐng)域有了客觀目標,問題就更多地變成了學習與該領(lǐng)域相關(guān)的數(shù)學。有了必需的數(shù)學,以及數(shù)學思維的強大基礎(chǔ), 就可以產(chǎn)出偉大的軟件。因此它真正取決于你想用編程完成什么任務(wù)。不管怎樣,上面的說法不是要否定學習數(shù)學。在學習編程中,我已經(jīng)注意到了一個地方,問自 己是否應(yīng)該學習新東西,是極端錯誤的。因為軟件開發(fā)根植于新技術(shù)的持續(xù)學習。
一個人為了成為優(yōu)秀的程序員是否需要擅長數(shù)學,對于這個問 題,我們現(xiàn)在考慮它的一個選項「需要」。對于不擅長的人而言,我建議他們看看數(shù)字計算機的歷史、以及那些推動機器革命的幕后人。數(shù)字計算和編程根植于數(shù) 學。學習數(shù)學有助于提高問題解決的技巧和分析思維。是的,如果你想解決需要數(shù)學的、各種領(lǐng)域的復(fù)雜問題,那么擅長數(shù)學對于優(yōu)秀程序員而言,是不可或缺的。 我盡量從不設(shè)限,當困難出現(xiàn)時,就勇往直前吧。