初金來
(哈爾濱師范大學文理學院計算機系2006級,黑龍江 哈爾濱 150000)
學好離散數(shù)學是學好計算機的基礎,這是為什么考計算機專業(yè)的研究生,離散數(shù)學都采用最難試題的原由,當然這也能促使一些新的交叉學科--如數(shù)學與應用軟件、信息與計算科學專業(yè)的飛速發(fā)展。程序設計中解決的相當一大部分問題都會涉及各式各樣的科學計算,這都需要程序員具有怎么樣的基礎呢?大多數(shù)離散數(shù)學基礎很好的人,如果熟悉了某一種計算機語言,他可以很快地理解某些算法的精湛,并且能夠運用自如,不可能寫出時間與空間復雜度都有明顯改善的算法的實際問題都轉換成為程序的問題,只有這樣,我們才能建立一套設計完整的程序。要經(jīng)歷一個對問題抽象的行程,建立起完善的離散數(shù)學模型,其中我們不難看出數(shù)學學科在編程領域的不可取代的位置。計算理論與算法是計算機程序設計中的靈魂,是發(fā)揮程序設計員嚴謹,思維敏銳的最佳工具,所有的程序設計語言都試圖把它發(fā)揮得淋漓盡致。
程序設計者都需要一定的數(shù)學修養(yǎng),不僅僅是編程本身的需求,還是培養(yǎng)邏輯思維和嚴謹?shù)木幊塘晳T的需要。離散數(shù)學可以磨練我們的思維能力,可以幫助我們更高的學習哲學,可以幫助我們來解決現(xiàn)實中的實際問題。為何經(jīng)常有人對一些科學計算程序一籌莫展,他可以讀懂任意一行代碼,可是卻無法預測程序的結果,甚至對程序的功能和結構也一知半解,給他一個比較復雜點的離散數(shù)學公式,也許他就不知道怎么將其變成計算機程序。很多程序員還停留在做做簡單的,寫寫簡單的classes或用SQL語句實現(xiàn)查詢等基礎的編程工作,對于一些需要用到離散數(shù)學知識的編程的工作就遠而避之,當然實現(xiàn)中一個累加程序或者一個稅率的換算程序還不是程序員的離散數(shù)學修養(yǎng)一朝一夕就可以培養(yǎng)的。離散數(shù)學知識和離散數(shù)學修養(yǎng)不一樣,修養(yǎng)則需要一個長期的過程,而知識的學習可能只要一段短暫的學習時間。下面是我個人對于程序員怎么樣提高與培養(yǎng)自己的基本看法。
成為一個優(yōu)秀的程序員,一定的數(shù)學修養(yǎng)是非常重要也是必要的。離散數(shù)學是自然科學的基礎,計算機科學實實上是離散數(shù)學的一個分支。計算機理論其實是很多數(shù)學知識的融合,軟件工程需要圖論,密碼學需要數(shù)論,軟件測試需要組合離散數(shù)學,計算機程序的編制更需要很多的離散數(shù)學知識,如集合論、排隊論、離散數(shù)學、統(tǒng)計學,當然還有微積分。計算機科學一個最大的特征是信息與知識更新速度很快,隨著離散數(shù)學知識與計算機理論的進一步結合,數(shù)據(jù)挖掘、模式識別、神經(jīng)網(wǎng)絡等分支科學得到了迅速發(fā)展,控制論、模糊數(shù)學、耗散理論、分形科學都促進了計算機軟件理論、信息管理技術的發(fā)展。嚴格的說,一個離散數(shù)學基礎不扎實的程序不能算一個合格的程序員,很多介紹計算機算法的書籍本身也就是數(shù)學知識的應用與計算機實現(xiàn)手冊。
數(shù)學是一門眾多分支的學科,我們無法在短短的一生中學會所有的數(shù)學知識,像混沌理論,泛函理論以及一些非線性數(shù)學問題不是一天半天就可以掌握的。數(shù)學是自然科學的基礎,計算機技術將理論與實踐的結合,更需要把離散數(shù)學的精髓融入其中。數(shù)學修養(yǎng)的培養(yǎng)并不在于積累離散數(shù)學知識的多少,但是要求程序員具有良好的數(shù)學學習能力,能夠迅速地把一些離散數(shù)學知識和自己正在思考的問題聯(lián)系起來,很多理學教授雖然不是數(shù)學系出身,但是他們對離散數(shù)學都有靈活的理解能力與敏銳的觀察力,于是一系列新的學科就這樣產(chǎn)生了,例如計算化學、計算生物學、生物信息學、化學信息學、計算材料學,計算物理學等等。從計算機的產(chǎn)生來看它就是在離散數(shù)學的基礎之上誕生的,最簡單的1,0進制就是一個悠久的數(shù)學問題。程序設計成為一項創(chuàng)造力超強的職業(yè),它不但需要程序員自身有一定的數(shù)學修養(yǎng),還要具有一定的離散數(shù)學知識的積累,可以完美地把一些數(shù)學定理和思想聯(lián)系于實際的計算機編程工作中來。學無止境,提高修養(yǎng)的必經(jīng)之路是不斷的學習。
有大部分高等學校開了一門這樣的課程——《數(shù)學模型》。它把很多學科與離散數(shù)學都聯(lián)系在一起,通過很多離散數(shù)學模型來解決實際生活中的生產(chǎn)與生活問題,很多問題的解決都需要計算機程序來實現(xiàn)。事實上,目前的程序設計從一些角度上來看就是個離散數(shù)學建模的過程,模型的好壞關系到系統(tǒng)的優(yōu)劣,現(xiàn)在的離散數(shù)學建模的思想已經(jīng)用于計算機的許多相互關聯(lián)關學科中,不只是計算機程序設計與算法分析。應該知道,離散數(shù)學是一門需要在實踐中展露其特有魅力的學科,而計算機程序的設計也是為幫助解決實際問題而編制的。因此,盡量使它們結合起來,為我們在這個方面為所欲為,計算機密碼學是我認為運用離散數(shù)學知識最深最為廣泛的,每一個完美的加密算法的背后都有一個數(shù)學理論的依據(jù),例如橢圓曲線、背包問題、素數(shù)理論,函數(shù)等。作為一名優(yōu)秀的程序員,必須在實際的工作中根據(jù)需要靈活運用數(shù)學原理,養(yǎng)成一定的離散數(shù)學建模能力,善于歸納與總結,慢慢使自己的數(shù)學知識更加全面,進而提高自身的編程能力。
許多程序員的培養(yǎng)體制都存在著很大的缺陷,一開始就要求學員能迅速精通某種語言,以語言為中心,對算法的核心思想與相關的數(shù)學知識都一筆帶過,講得很少,這造成很多程序員成為背程序的機器,這樣很不利于程序員自身的快速成長,也不利于程序員創(chuàng)新的解決問題。通過離散數(shù)學用問題來做編程的熱身運動,使學員在離散數(shù)學試題中激發(fā)自己的思維能力,記得有位專家曾經(jīng)說過,經(jīng)常做做離散數(shù)學題目會使自己變聰明,很長時間不去接觸離散數(shù)學問題會使自己思維遲鈍。很多初學程序者往往寫程序時有時候會有思維中斷,或者對一些稍難的程序就覺得無從下手,而我采用了一些課前解決離散數(shù)學小問題的方法來激起大家的學習興趣,這些小問題不僅僅是腦筋急轉彎,其中有不少是很有代表意義的離散數(shù)學思考題。我們可以通過實際的離散數(shù)學問題來培養(yǎng)學員的思維跳躍性和嚴謹性與完整性。為將來進行編程工作打下良好的基礎。
離散數(shù)學作為計算機專業(yè)很重要的一門基礎課,對于后續(xù)課程,如數(shù)據(jù)結構,數(shù)據(jù)庫原理,編譯等課程起到重要的影響,同時對培養(yǎng)學生編程過程中所需要的邏輯思維能力,抽象思維能力都起著非常重要的作用。
[1]左孝凌.離散數(shù)學的形成、發(fā)展及其在計算機科學中的作用與地位[J].自然雜志,2005.
[2]陳敏,李澤軍.離散數(shù)學在計算機學科中的應用[J].電腦知識與技術,2009.
[3]錢程東.基于動態(tài)劃分的數(shù)據(jù)挖掘及其在教務管理系統(tǒng)中的應用[J].國防科學技術大學,2006.