軟體程式設計與數學思維
□ 張水坤 《大眾科學·科學研究與實踐》 2023年第08期
[摘要]近年來,學科的高速發展已經明確地反映出這樣乙個特點:學科基礎研究和技術開發越來越多地同數學建立更為緊密的聯絡,對各種數學工具的使用不僅越來越廣泛,而且越來越深入。要掌握好軟體程式設計,數學思維是非常重要的。先討論軟體程式設計與數學的聯絡,再以一些具體的**作為例子,結合實際經驗談點看法。
一、引 言
數學是一門工具性很強的科學,它與別的科學比較起來還具有較高的抽象性等特徵。起初是電腦科學工作者離不開數學,而數學工作者認為計算機對他們可有可無,但是現在是互相都離不開對方了,計算機也提高了數學工作者在人們心目中的地位,大部分的數學工作者開始認識到計算機的重要性,並越來越多地進入到計算機領域發揮作用。但是隨著人工智慧、gps(全球定位系統)等飛速的發展和計算機運算效能飛躍性的提公升,計算機的優勢越來越深入到思維領域,於是計算機將高深的數學理論用到實際中來,十分有效地解決了許多實際問題,例如著名難題四色問題就是被計算機證明的。問題的求解過程中有許多具有實用價值的數學分支如分析幾何、小波分析、離散數學、仿生計算、數值計算中的有限單元方法等。它讓人們知道計算機程式設計結合的就是數學知識和數學思想。
軟體程式設計是基於數學模型的基礎上面的,所以,數學是電腦科學的主要基礎,以離散數學為代表的應用數學是描述學科理論、方法和技術的主要工具。軟體程式設計中不僅許多理論是用數學描述的,而且許多技術也是用數學描述的。從計算機各種應用的程式設計方面考察,任何乙個可在儲存程式式電子數字計算機上執行的程式,其對應的計算方法首先都必須是構造性的,資料表示必須離散化,計算操作必須使用邏輯或代數的方法進行,這些都應體現在演算法和程式之中。此外,到現在為止,演算法的正確性、程式的語義及其正確性的理論基礎仍然是數理邏輯,或進一步的模型論。真正的程式語義是模型論意義上的語義。於是軟體程式設計思想執行的嚴密性、學科理論方法與實現技術的高度一致是電腦科學與技術學科同數學學科密切相關的根本原因。從學科特點和學科方**的角度考察,軟體程式設計的主要基礎思想是數學思維,特別是數學中以代數、邏輯為代表的離散數學,而程式技術和電子技術僅僅只是電腦科學與技術學科產品或實現的一種技術表現形式。
二、軟體程式設計與數學思維的聯絡
(一)數學在計算機領域的發展
如今形形色色的軟體,都與數學有必然的聯絡,它們相互相成。例如,邏輯學在學科中的應用從早期的數理邏輯發展到今天的程式設計模型論;數學在學科中的應用從早期的抽象代數發展到今天的圖形學、工程問題方面;幾何學的應用從早期的二維平面計算機繪圖發展到今天的三維動畫軟體系統,並在與復分析的結合中產生了分形理論與技術;在遊戲、圖形軟體開發中引用了線性代數中大量的座標變換,矩陣運算;在資料壓縮與還原、資訊保安方面引入了小波理論、代數編碼理論等。
(二)軟體程式設計的思維定式
軟體程式設計的思維定式決定了乙個人程式設計的水平,在程式設計過程中,數學思維清晰,編寫出來的程式讓人耳目一新。結合教學,通過調查分析,了解到超過85%的學生,他們在程式設計時是根據語法而編寫程式,完全脫離了軟體程式設計的思維,這種思維定式使得他們編寫的程式相當糟糕,沒有一點邏輯。
之所以造成這種軟體程式設計的思維,是因為他們平時對數學思維的培養不夠重視。很多學計算機的學生想:學高數,這有什麼用?學線性代數有什麼用?學離散數學,有什麼用?於是他們很少去上這些課,馬馬虎虎,整天悶在寢室裡,玩玩遊戲,裝裝軟體,看看c語言。只知道概率問題和矩陣知識在其它課程上起到了互補作用,學的不是很深。但是當他們看到《資料結構和演算法》時,感到其中的內容對他們而言感覺相當的艱澀難懂,這時他們就隱約感覺到了數學思維的作用了。在此之前,他們不僅荒廢了大學的高等數學,連初中的初等數學也忘的好多,當他們進行高抽象思維時,確實感覺自己的思維已經很遲鈍了。學計算機的學生之所以覺得《資料結構》這門課程很難,就是因為他們的數學思維鍛鍊的不夠!其實生活中有很多這樣的例子:對於乙個剛畢業的,編應用軟體的大學生,在程式設計中用到《線性代數》的矩陣時,恐怕便會想,在大學把線性代數學好就好了;當在程式中用到動態鍊錶、樹時,恐怕也會想「在大學時花點時間去學《資料結構》,會多麼的有意義」;當學資料結構時,恐怕也會想「學《離散數學》時為什麼要逃那麼多的課,要不然學離散的時候就會很輕鬆」。所以數學思維不夠,在軟體程式設計會有很多的疑慮,顯的有點縮手縮尾,而且寫的程式也不夠健全,缺乏邏輯。
(三)軟體程式設計與數學思維的融合
很多專業人士覺得數學和軟體程式設計能力就像太極和拳擊,軟體程式設計能力很強就好比出拳速度很快很重,能直接給人以重擊;數學很好的話就好像乙個太極高手,表面上看沒有太大的力量但是內在的能量是更強大的,但是好的拳擊手是越年輕越好,而太極大師都是資歷越深越厲害。所以數學是成就大師的必備能力,雖然很多學生看上去感覺沒有什麼用途,但是到了一定的水平之後就會體會它的力量了。
三、數學思維在軟體程式設計中的應用
目前很多出名的it公司在筆試的時候,都會在程式設計題中考察應聘者的數學思維能力,因此,這應該引起廣大學生在平時的學習中注意鍛鍊自己的數學思維,有機會的話參加一下數學建模比賽,你便會有很深刻的體會---原來數學和計算機結合得這樣緊密。下面典型的**,在設計過程中充分的運用了數學思維。
題目一:從3個紅球,5個白球,6個黑球中任意取出8個球,且其中必須有白球,輸出所有可能的方案。
程式一:
#include "stdio.h"
void main()
}
}
從上面的例子中我們可以隱隱知道數學思維在軟體程式設計中的應用。儘管學習數學帶給計算機專業人士的回報大過常人,但現今社會裡每個人都能由此受益,是讓人們提高自己思維能力,變得聰穎的絕佳方法。這種思維能力能讓人們在各方面受益!但實際上,數學上功底紮實,在軟體程式設計上的優勢盡顯,專案的設計模式格外地優化,程式邏輯條理也格外地清晰。因為數學可以培養人的邏輯思維能力,而程式設計需要很強的邏輯思維能力。
這些讓我們深刻的體會到數學思維與軟體程式設計的耦合性,其實我們國家的計算機軟體水平的落後不是因為我們缺少程式設計師,而是因為缺乏懂數學的高質量的程式設計師。乙個具有數學修養的程式設計師在寫**時更有可能寫出邏輯嚴密的最簡化的高質量**。而目前一些龍頭it公司,比如微軟公司總裁比爾 蓋茨年青時就對數學很痴迷,而他們的專案經理,必須得具備超強的數學思維,而且有些還是數學專業的博士,從這也可以看出微軟公司對於數學人才的重視程度。
四、結束語
軟體程式設計的思想最重要是演算法,而演算法是建立在數學思維上的,其實說白了,程式只是一件衣服,演算法才是它的靈魂,演算法就來自於數學,沒有深厚的數學思維功底,是弄不懂演算法的。所以,如果你想從事軟體程式設計,那麼就認真的培養自己的數學思維吧!
[1] keith devlin,《數學基因:數學思考如何演進及數為什麼像閒言碎語》(basic books, 2000)
數學思維和程式設計思維
1 程式設計沒有數學基礎不行 2 但懂數學不等於懂程式設計 舉乙個例子 求1 2 3 4 99 100的和。數學解法通常是 1 1 100 100 2 5500 2 小學生的解法 1 2 3 3 3 6 這樣累算下去。程式設計解法呢?跟數學解法2相同,如下 static void main stri...
程式設計需要的數學思維
程式設計所需要的數學思維,足夠抽象,但又需要落實到向量和矩陣的具體資料結構層次來實現各種程式。其中初級的模仿是仿照微積分的構建,通過對極限層次的無窮小量來遍歷疊加來構建高維的結構。然後我們可以構建邏輯的微積分,這是基於圖靈機的序列運算,本質上是對資訊的確定,是對不確定性的消減。序列的運算可以考慮數學...
數學與程式設計
好些人來信問我,要成為乙個好的程式設計師,數學基礎要達到什麼樣的程度?十八年前,當我成為大學計算機系新生的時候,也為同樣的問題所困擾。面對學數學,物理等學科的同學,我感到自卑。經常有人說那些專業的知識更加精華一些,難度更高一些,那些專業的人畢業之後如果做程式設計工作,水平其實比計算機系畢業的還要高。...