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