软件编程与数学思维
| 軟件編程與數(shù)學(xué)思維 □ 張水坤 《大眾科學(xué)·科學(xué)研究與實(shí)踐》 2007年第08期 [摘要]近年來(lái),學(xué)科的高速發(fā)展已經(jīng)明確地反映出這樣一個(gè)特點(diǎn):學(xué)科基礎(chǔ)研究和技術(shù)開(kāi)發(fā)越來(lái)越多地同數(shù)學(xué)建立更為緊密的聯(lián)系,對(duì)各種數(shù)學(xué)工具的使用不僅越來(lái)越廣泛,而且越來(lái)越深入。要掌握好軟件編程,數(shù)學(xué)思維是非常重要的。先討論軟件編程與數(shù)學(xué)的聯(lián)系,再以一些具體的代碼作為例子,結(jié)合實(shí)際經(jīng)驗(yàn)談點(diǎn)看法。? [關(guān)鍵詞]軟件編程 數(shù)學(xué)思維 耦合性? 中圖分類號(hào):O14 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1002-6908(2007)0420-2? ? 一、引 言? ? 數(shù)學(xué)是一門(mén)工具性很強(qiáng)的科學(xué),它與別的科學(xué)比較起來(lái)還具有較高的抽象性等特征。起初是計(jì)算機(jī)科學(xué)工作者離不開(kāi)數(shù)學(xué),而數(shù)學(xué)工作者認(rèn)為計(jì)算機(jī)對(duì)他們可有可無(wú),但是現(xiàn)在是互相都離不開(kāi)對(duì)方了,計(jì)算機(jī)也提高了數(shù)學(xué)工作者在人們心目中的地位,大部分的數(shù)學(xué)工作者開(kāi)始認(rèn)識(shí)到計(jì)算機(jī)的重要性,并越來(lái)越多地進(jìn)入到計(jì)算機(jī)領(lǐng)域發(fā)揮作用。但是隨著人工智能、GPS(全球定位系統(tǒng))等飛速的發(fā)展和計(jì)算機(jī)運(yùn)算性能飛躍性的提升,計(jì)算機(jī)的優(yōu)勢(shì)越來(lái)越深入到思維領(lǐng)域,于是計(jì)算機(jī)將高深的數(shù)學(xué)理論用到實(shí)際中來(lái),十分有效地解決了許多實(shí)際問(wèn)題,例如著名難題四色問(wèn)題就是被計(jì)算機(jī)證明的。問(wèn)題的求解過(guò)程中有許多具有實(shí)用價(jià)值的數(shù)學(xué)分支如分析幾何、小波分析、離散數(shù)學(xué)、仿生計(jì)算、數(shù)值計(jì)算中的有限單元方法等。它讓人們知道計(jì)算機(jī)程序設(shè)計(jì)結(jié)合的就是數(shù)學(xué)知識(shí)和數(shù)學(xué)思想。? 軟件編程是基于數(shù)學(xué)模型的基礎(chǔ)上面的,所以,數(shù)學(xué)是計(jì)算機(jī)科學(xué)的主要基礎(chǔ),以離散數(shù)學(xué)為代表的應(yīng)用數(shù)學(xué)是描述學(xué)科理論、方法和技術(shù)的主要工具。軟件編程中不僅許多理論是用數(shù)學(xué)描述的,而且許多技術(shù)也是用數(shù)學(xué)描述的。從計(jì)算機(jī)各種應(yīng)用的程序設(shè)計(jì)方面考察,任何一個(gè)可在存儲(chǔ)程序式電子數(shù)字計(jì)算機(jī)上運(yùn)行的程序,其對(duì)應(yīng)的計(jì)算方法首先都必須是構(gòu)造性的,數(shù)據(jù)表示必須離散化,計(jì)算操作必須使用邏輯或代數(shù)的方法進(jìn)行,這些都應(yīng)體現(xiàn)在算法和程序之中。此外,到現(xiàn)在為止,算法的正確性、程序的語(yǔ)義及其正確性的理論基礎(chǔ)仍然是數(shù)理邏輯,或進(jìn)一步的模型論。真正的程序語(yǔ)義是模型論意義上的語(yǔ)義。于是軟件編程思想運(yùn)行的嚴(yán)密性、學(xué)科理論方法與實(shí)現(xiàn)技術(shù)的高度一致是計(jì)算機(jī)科學(xué)與技術(shù)學(xué)科同數(shù)學(xué)學(xué)科密切相關(guān)的根本原因。從學(xué)科特點(diǎn)和學(xué)科方法論的角度考察,軟件編程的主要基礎(chǔ)思想是數(shù)學(xué)思維,特別是數(shù)學(xué)中以代數(shù)、邏輯為代表的離散數(shù)學(xué),而程序技術(shù)和電子技術(shù)僅僅只是計(jì)算機(jī)科學(xué)與技術(shù)學(xué)科產(chǎn)品或?qū)崿F(xiàn)的一種技術(shù)表現(xiàn)形式。? ? 二、軟件編程與數(shù)學(xué)思維的聯(lián)系? ? (一)數(shù)學(xué)在計(jì)算機(jī)領(lǐng)域的發(fā)展? 如今形形色色的軟件,都與數(shù)學(xué)有必然的聯(lián)系,它們相互相成。例如,邏輯學(xué)在學(xué)科中的應(yīng)用從早期的數(shù)理邏輯發(fā)展到今天的程序設(shè)計(jì)模型論;數(shù)學(xué)在學(xué)科中的應(yīng)用從早期的抽象代數(shù)發(fā)展到今天的圖形學(xué)、工程問(wèn)題方面;幾何學(xué)的應(yīng)用從早期的二維平面計(jì)算機(jī)繪圖發(fā)展到今天的三維動(dòng)畫(huà)軟件系統(tǒng),并在與復(fù)分析的結(jié)合中產(chǎn)生了分形理論與技術(shù);在游戲、圖形軟件開(kāi)發(fā)中引用了線性代數(shù)中大量的坐標(biāo)變換,矩陣運(yùn)算;在數(shù)據(jù)壓縮與還原、信息安全方面引入了小波理論、代數(shù)編碼理論等。? (二)軟件編程的思維定式? 軟件編程的思維定式?jīng)Q定了一個(gè)人編程的水平,在編程過(guò)程中,數(shù)學(xué)思維清晰,編寫(xiě)出來(lái)的程序讓人耳目一新。結(jié)合教學(xué),通過(guò)調(diào)查分析,了解到超過(guò)85%的學(xué)生,他們?cè)诰幊虝r(shí)是根據(jù)語(yǔ)法而編寫(xiě)程序,完全脫離了軟件編程的思維,這種思維定式使得他們編寫(xiě)的程序相當(dāng)糟糕,沒(méi)有一點(diǎn)邏輯。? 之所以造成這種軟件編程的思維,是因?yàn)樗麄兤綍r(shí)對(duì)數(shù)學(xué)思維的培養(yǎng)不夠重視。很多學(xué)計(jì)算機(jī)的學(xué)生想:學(xué)高數(shù),這有什么用?學(xué)線性代數(shù)有什么用?學(xué)離散數(shù)學(xué),有什么用?于是他們很少去上這些課,馬馬虎虎,整天悶在寢室里,玩玩游戲,裝裝軟件,看看C語(yǔ)言。只知道概率問(wèn)題和矩陣知識(shí)在其它課程上起到了互補(bǔ)作用,學(xué)的不是很深。但是當(dāng)他們看到<<數(shù)據(jù)結(jié)構(gòu)和算法>>時(shí),感到其中的內(nèi)容對(duì)他們而言感覺(jué)相當(dāng)?shù)钠D澀難懂,這時(shí)他們就隱約感覺(jué)到了數(shù)學(xué)思維的作用了。在此之前,他們不僅荒廢了大學(xué)的高等數(shù)學(xué),連初中的初等數(shù)學(xué)也忘的好多,當(dāng)他們進(jìn)行高抽象思維時(shí),確實(shí)感覺(jué)自己的思維已經(jīng)很遲鈍了。學(xué)計(jì)算機(jī)的學(xué)生之所以覺(jué)得《數(shù)據(jù)結(jié)構(gòu)》這門(mén)課程很難,就是因?yàn)樗麄兊臄?shù)學(xué)思維鍛煉的不夠!其實(shí)生活中有很多這樣的例子:對(duì)于一個(gè)剛畢業(yè)的,編應(yīng)用軟件的大學(xué)生,在編程中用到《線性代數(shù)》的矩陣時(shí),恐怕便會(huì)想,在大學(xué)把線性代數(shù)學(xué)好就好了;當(dāng)在程序中用到動(dòng)態(tài)鏈表、樹(shù)時(shí),恐怕也會(huì)想“在大學(xué)時(shí)花點(diǎn)時(shí)間去學(xué)《數(shù)據(jù)結(jié)構(gòu)》,會(huì)多么的有意義”;當(dāng)學(xué)數(shù)據(jù)結(jié)構(gòu)時(shí),恐怕也會(huì)想“學(xué)《離散數(shù)學(xué)》時(shí)為什么要逃那么多的課,要不然學(xué)離散的時(shí)候就會(huì)很輕松”。所以數(shù)學(xué)思維不夠,在軟件編程會(huì)有很多的疑慮,顯的有點(diǎn)縮手縮尾,而且寫(xiě)的程序也不夠健全,缺乏邏輯。? (三)軟件編程與數(shù)學(xué)思維的融合? 很多專業(yè)人士覺(jué)得數(shù)學(xué)和軟件編程能力就像太極和拳擊,軟件編程能力很強(qiáng)就好比出拳速度很快很重,能直接給人以重?fù)?#xff1b;數(shù)學(xué)很好的話就好像一個(gè)太極高手,表面上看沒(méi)有太大的力量但是內(nèi)在的能量是更強(qiáng)大的,但是好的拳擊手是越年輕越好,而太極大師都是資歷越深越厲害。所以數(shù)學(xué)是成就大師的必備能力,雖然很多學(xué)生看上去感覺(jué)沒(méi)有什么用途,但是到了一定的水平之后就會(huì)體會(huì)它的力量了。? ? 三、數(shù)學(xué)思維在軟件編程中的應(yīng)用? ? 目前很多出名的IT公司在筆試的時(shí)候,都會(huì)在程序設(shè)計(jì)題中考察應(yīng)聘者的數(shù)學(xué)思維能力,因此,這應(yīng)該引起廣大學(xué)生在平時(shí)的學(xué)習(xí)中注意鍛煉自己的數(shù)學(xué)思維,有機(jī)會(huì)的話參加一下數(shù)學(xué)建模比賽,你便會(huì)有很深刻的體會(huì)---原來(lái)數(shù)學(xué)和計(jì)算機(jī)結(jié)合得這樣緊密。下面典型的代碼,在設(shè)計(jì)過(guò)程中充分的運(yùn)用了數(shù)學(xué)思維。? 題目一:從3個(gè)紅球,5個(gè)白球,6個(gè)黑球中任意取出8個(gè)球,且其中必須有白球,輸出所有可能的方案。? 程序一:? #include "stdio.h" void main()? {? int i,j,k; //I代表紅球,j代表白球,k代表黑球? printf("\n red write black\n");? for(i=0;i<=3;i++)? for(j=1;j<=5;j++) //j=1是因?yàn)轭}目中要求必須要有白球? {? k=8-i-j; //黑球的個(gè)數(shù)? if(k>=0&&k<=6)? {? printf("%3d,%3d,%3d",i,j,k); //輸出組成方案? }? }? }? 從上面的例子中我們可以隱隱知道數(shù)學(xué)思維在軟件編程中的應(yīng)用。盡管學(xué)習(xí)數(shù)學(xué)帶給計(jì)算機(jī)專業(yè)人士的回報(bào)大過(guò)常人,但現(xiàn)今社會(huì)里每個(gè)人都能由此受益,是讓人們提高自己思維能力,變得聰穎的絕佳方法。這種思維能力能讓人們?cè)诟鞣矫媸芤?#xff01;但實(shí)際上,數(shù)學(xué)上功底扎實(shí),在軟件編程上的優(yōu)勢(shì)盡顯,項(xiàng)目的設(shè)計(jì)模式格外地優(yōu)化,程序邏輯條理也格外地清晰。因?yàn)閿?shù)學(xué)可以培養(yǎng)人的邏輯思維能力,而程序設(shè)計(jì)需要很強(qiáng)的邏輯思維能力。? 這些讓我們深刻的體會(huì)到數(shù)學(xué)思維與軟件編程的耦合性,其實(shí)我們國(guó)家的計(jì)算機(jī)軟件水平的落后不是因?yàn)槲覀內(nèi)鄙俪绦騿T,而是因?yàn)槿狈Χ當(dāng)?shù)學(xué)的高質(zhì)量的程序員。一個(gè)具有數(shù)學(xué)修養(yǎng)的程序員在寫(xiě)代碼時(shí)更有可能寫(xiě)出邏輯嚴(yán)密的最簡(jiǎn)化的高質(zhì)量代碼。而目前一些龍頭IT公司,比如微軟公司總裁比爾 蓋茨年青時(shí)就對(duì)數(shù)學(xué)很癡迷,而他們的項(xiàng)目經(jīng)理,必須得具備超強(qiáng)的數(shù)學(xué)思維,而且有些還是數(shù)學(xué)專業(yè)的博士,從這也可以看出微軟公司對(duì)于數(shù)學(xué)人才的重視程度。? ? 四、結(jié)束語(yǔ)? ? 軟件編程的思想最重要是算法,而算法是建立在數(shù)學(xué)思維上的,其實(shí)說(shuō)白了,程序只是一件衣服,算法才是它的靈魂,算法就來(lái)自于數(shù)學(xué),沒(méi)有深厚的數(shù)學(xué)思維功底,是弄不懂算法的。所以,如果你想從事軟件編程,那么就認(rèn)真的培養(yǎng)自己的數(shù)學(xué)思維吧!? ? 參考文獻(xiàn):? [1] Keith Devlin,《數(shù)學(xué)基因:數(shù)學(xué)思考如何演進(jìn)及數(shù)為什么像閑言碎語(yǔ)》(Basic Books, 2000) |
總結(jié)
- 上一篇: vsftpd默认用户名/密码
- 下一篇: 业务技术协同线上化的研发管理实战