天天看點

《數學與泛型程式設計:高效程式設計的奧秘》一1.1 程式設計與數學

那麼,這種泛型程式設計的想法是從哪裡來的?我們又應該怎樣來學習它呢?這種想法是從數學中衍生出來的,尤其與抽象代數(abstract algebra)這個數學分支有關。為了使大家能夠了解這種程式設計方式,本書會對抽象代數做一些介紹,并着重講解怎樣從抽象的運算屬性來認識對象。這個話題一般是數學專業的大學生才去研究的,然而筆者認為,它對于我們了解泛型程式設計會起到關鍵的作用。

實際上,還有很多基本的程式設計概念也同樣來自數學。對這些概念的産生及變化過程加以學習,能夠促使我們更好地思考軟體的設計問題。比方說,歐幾裡得(Euclid)的《幾何原本》(Elements)雖然是兩千多年前寫成的書,但是其中的範例仍然具有很高的參考價值,它可以告訴我們,怎樣用一些較小且較易了解的元件來建構一套複雜的系統。

盡管抽象是泛型程式設計的要義,但這個抽象卻并不是本來就有的。我們必須從具體的事物入手,才能夠獲得更為抽象的認識,要想對某個領域進行正确的抽象,就必須了解該領域的細節。

抽象代數裡面的抽象很大程度上是從另外一個數學分支的具體成果中得出的,那個分支比抽象代數更為古老,它叫做數論(number theory)。為此,我們還需要介紹數論中的某些關鍵概念,這些概念與整數的屬性有關,其中尤其值得注意的是可除性(divisibility)。

我們在學習這些數學知識時所使用的思路可以對程式設計技巧起到提升作用,此外我們還會看到,對于目前某些軟體來說,有一些數學成果本身就具有極其重要的意義,這尤其展現在給網絡隐私與電子商務軟體提供支援的加密協定上。本書最後會舉例來說明某些數學知識在此類協定中的運用情況。

筆者會在數學和程式設計之間來回遊走。當我們講解某些重要的數學概念時,筆者會穿插一些對具體算法和通用程式設計技巧的讨論。筆者對其中某些算法隻會給出簡要的描述,而對另外一些算法則會在整本書裡進行詳細的講解,并将其泛化。除了個别章節隻談數學或隻談程式設計之外,大部分章節都會同時涉及數學和程式設計這兩個方面。

繼續閱讀