一個大學生將來的作為與他的數(shù)學修養(yǎng)有很大的關(guān)系。
——四川大學數(shù)學學院曹廣福
數(shù)學:必然考查的能力
下面是一道世界第一大軟件公司(微軟)招聘程序員的測試題:
中間只隔一個數(shù)字的兩個素數(shù)被稱為素數(shù)對,比如5和7,17和19,證明素數(shù)對之間的數(shù)字總能被6整除(假設(shè)這兩個素數(shù)都大于6)。
這樣的試題還有很多很多,這些題目看上去都是一些數(shù)學問題。但是世界上一些著名的公司都把它們用于招聘測試,可見這些公司對新員工的數(shù)學基礎(chǔ)非常重視。數(shù)學試題與應(yīng)用程序試題是許多大型軟件公司面試中指向性最明顯的一類試題,這些試題就是考查應(yīng)聘者的數(shù)學能力與計算機能力。
某咨詢公司的一名高級顧問曾說過,微軟是一家電腦軟件公司,當然要求其員工有一定的計算機和數(shù)學能力,面試中自然就會考查這類能力。微軟的面試題目就考查了應(yīng)聘人員對基礎(chǔ)知識的掌握程度、對基礎(chǔ)知識的應(yīng)用能力,甚至暗含了對計算機基本原理的考查。所以,這樣的面試題目的確很“毒辣”,足以篩選到合適的人。
四川大學數(shù)學學院的曹廣福教授曾說過:“一個大學生將來的作為與他的數(shù)學修養(yǎng)有很大的關(guān)系?!贝髮W計算機專業(yè)畢業(yè)生都有感觸,計算機專業(yè)課程中最難的幾門課程莫過于離散數(shù)學、編譯原理、數(shù)據(jù)結(jié)構(gòu)。當然,像組合數(shù)學、密碼學、計算機圖形學等課程也令許多人學起來相當吃力,很多自認為數(shù)據(jù)庫學得很好的學生在范式、函數(shù)依賴、傳遞依賴等數(shù)學性比較強的概念面前感到力不從心,這些都是數(shù)學基礎(chǔ)不扎實或者說缺乏數(shù)學知識所造成的。
數(shù)學是計算機的基礎(chǔ),這也是攻讀計算機專業(yè)研究生的數(shù)學試卷都采用最難試卷的原因。當然這也能促使一些新的交叉學科如數(shù)學與應(yīng)用軟件、信息與計算科學專業(yè)等飛速發(fā)展。
基礎(chǔ):敏銳嚴謹?shù)臄?shù)學思維
程序設(shè)計當中解決的相當一部分問題都會涉及各種各樣的科學計算,這需要程序員具有什么樣的基礎(chǔ)呢?面對實際問題,程序員往往需要建立完美的數(shù)學模型,只有這樣,才能設(shè)計出良好的程序。算法與計算理論是計算機程序設(shè)計領(lǐng)域的靈魂所在,是發(fā)揮程序設(shè)計者嚴謹、敏銳思維的有效工具,任何程序設(shè)計語言都試圖將之發(fā)揮得淋漓盡致。
程序員需要一定的數(shù)學修養(yǎng),不單是編程本身的需要,也是培養(yǎng)邏輯思維以及嚴謹?shù)木幊套黠L的需要。數(shù)學可以鍛煉我們的思維能力,可以幫助我們解決現(xiàn)實中的問題,可以幫助我們更好地學習知識與分析問題。
一名有過十多年開發(fā)經(jīng)驗的老程序員曾說過,所有程序的本質(zhì)就是邏輯,盡管你已經(jīng)較好地掌握了編程技術(shù),但是只有提高了邏輯能力,你才能成為一名職業(yè)程序員。打一個比方吧,你會十八般武藝,刀槍棍棒都很精通,偏偏就是內(nèi)力不夠,所以永遠都上不了戰(zhàn)場。這個內(nèi)力對程序員而言就是邏輯能力,其本質(zhì)是一個人的數(shù)學修養(yǎng),而不是簡單的數(shù)學知識。
磨煉:成就數(shù)學素養(yǎng)
程序員的數(shù)學修養(yǎng)不是一朝一夕就可以培養(yǎng)出來的。數(shù)學修養(yǎng)與數(shù)學知識不一樣,修養(yǎng)需要一個長期的過程,而知識的學習可能只是一段短暫的時間。
下面是一些對于程序員如何提高與培養(yǎng)自己的數(shù)學修養(yǎng)的基本看法。
首先,應(yīng)該意識到數(shù)學修養(yǎng)的重要性。若想成為優(yōu)秀的程序員,一定的數(shù)學修養(yǎng)是十分重要也是必要的。數(shù)學是自然科學的基礎(chǔ),計算機科學實際上是數(shù)學的一個分支。
計算機理論其實是很多數(shù)學知識的融合,軟件工程需要圖論,密碼學需要數(shù)論,軟件測試需要組合數(shù)學,計算機程序的編制需要更多的數(shù)學知識,如集合論、排隊論、離散數(shù)學、統(tǒng)計學,當然還有微積分。
計算機科學一個最大的特征是信息與知識更新速度很快,隨著數(shù)學知識與計算機理論的進一步結(jié)合,數(shù)據(jù)挖掘、模式識別、神經(jīng)網(wǎng)絡(luò)等分支科學得到了迅速發(fā)展,控制論、模糊數(shù)學、耗散理論、分形科學都促進了計算機軟件理論、信息管理技術(shù)等的發(fā)展。
嚴格的說,一個數(shù)學基礎(chǔ)不扎實的程序員不能算一個合格的程序員,很多介紹計算機程序設(shè)計的書籍本身也就是數(shù)學知識的應(yīng)用與計算機實踐的手冊。
其次,自身數(shù)學知識的積累,培養(yǎng)自己的空間思維能力和邏輯判斷能力。像泛函理論、混沌理論以及一些非線性數(shù)學問題不是三五幾天就可以掌握的。數(shù)學修養(yǎng)的培養(yǎng)要求程序員有良好的數(shù)學學習能力,能夠很快地把一些數(shù)學知識和自己正在解決的問題聯(lián)系起來。
很多理學大師雖然不是數(shù)學專業(yè)出身,但是他們對數(shù)學有敏銳的觀察力和很強的理解力,于是一系列新的學科誕生了,如計算化學、計算生物學、生物信息學、化學信息學、計算物理學、計算材料學等等。
從計算機的誕生來看,它就是在數(shù)學的基礎(chǔ)上產(chǎn)生的,最簡單的0、1進制就是一個古老的數(shù)學問題。學無止境,不斷的學習是提高修養(yǎng)的必經(jīng)之路。
最后,多在實踐中運用數(shù)學。有些高等學校開設(shè)了數(shù)學建模課程,這門課程把很多相關(guān)的學科與數(shù)學都聯(lián)系在一起,通過很多數(shù)學模型來解決實際的生產(chǎn)生活問題,很多問題最終的解決需要計算機程序來實現(xiàn)。
實際上,現(xiàn)在的程序設(shè)計從某些角度來看就是一個數(shù)學建模的過程,模型的好壞關(guān)系到系統(tǒng)的優(yōu)劣成敗,現(xiàn)在的數(shù)學建模思想已經(jīng)用于計算機的許多相關(guān)學科中,不單是計算機程序設(shè)計與算法分析。應(yīng)該知道,數(shù)學是一門需要在實踐中展示其魅力的科學,而計算機程序也是為了幫助解決實際問題而編制的。因此,應(yīng)該盡量使它們充分結(jié)合起來。在這個方面,計算機密碼學是運用數(shù)學知識最深最廣的,每一個好的加密算法后面都有一個數(shù)學理論的支持,如橢圓曲線、背包問題、素數(shù)理論等。
總之,要想成為一名有潛力和發(fā)展前途的程序員,或者想成為程序員中的佼佼者,就一定要培養(yǎng)良好的數(shù)學修養(yǎng)。