[TEAP早期試讀]《程式設計師的數學》- 前言

flashjerry發表於2012-02-11
圖靈社群按: 
TEAP是什麼?TEAP是Turingbook Early Access Program的簡稱,即早期試讀,它公佈的是圖靈在途新書未經編輯的內容。一本書的翻譯週期約為3到6個月,如果在翻譯過程中,譯者就能與讀者進行溝通和交流,對整本書的翻譯品質是有幫助的。通過TEAP,讀者可以提前閱讀將來才能出版的內容,譯者也能收穫寶貴的反饋意見,改進翻譯,提高質量。 

本書原名為《プログラマの數學》,中文暫定名為《程式設計師的數學》,有問題可以在這裡留言,也歡迎大家與我或者編輯聯絡交流,本篇內容選自書中前言。
作者結城浩(1963年7月 - ),是身在日本東京武藏野市的一位經驗豐富的程式設計師,也是一位資深技術作家。開發出了有名的YukiWiki軟體。結城浩經常在雜誌上發表程式入門連載文章和翻譯技術類文章,除此之外還著有程式、數學方面的圖書達30多本,其中有多部被翻譯成英語和韓語在國外出版。由他所著的設計模式入門書長期暢銷,被媒體譽為日本國內普及設計模式的功臣。

■前言
大家好!我是結城浩。歡迎閱讀《程式設計師的數學》。

本書是為程式設計師朋友們寫的數學書。
程式設計的基礎是電腦科學,而電腦科學的基礎是數學。因此,學習數學能有助於紮實程式設計的基本功,寫出更健壯的程式。
“但我很不擅長數學啊。”,有的讀者會有這樣的想法。特別是“一出現算式,就跳過不讀”的讀者會有不少吧。坦率而言,我自己遇到書中的算式,也想跳過去。
本書儘可能減少了“令人想跳過不讀的算式”。也沒有過多的定義、定理和證明。
這是專為程式設計師更好地理解日常程式設計而寫的書。希望您能通過本書學到有助於程式設計的“數學思維”。

■數學思維示例
學習“數學思維”說起來太抽象了,我們來舉些具體例子。

【條件分支和邏輯】
在程式設計時,我們根據條件將處理分為多個“分支”。C和Java語言中使用的是if語句。我們是這樣控制處理流程的,當條件滿足時執行這個處理,當條件不滿足時執行那個處理。這時,我們使用了數學領域之一的“邏輯”來控制程式。因此,必須熟練掌握程式設計中構成“並且”、“或者”、“非……”、“如果……”等邏輯的元素。

【迴圈和數學歸納法】
我們在處理大量的資訊時,使用程式進行“迴圈”操作。例如,使用for語句可以迴圈處理大量資料。支援迴圈的就是“數學歸納法”。

【分情況和數數法則】
將許多條件和資料“分情況”時,程式設計師必須注意千萬不能看漏。這時加法法則、乘法法則、排列、組合等“數數法則”將助你一臂之力。這是程式設計師應該熟記於心的數學工具。
通過本書,也可以學到遞迴、指數、餘數等基本卻重要的思維方式。

■人類和計算機的共同戰線
我們寫程式是為了解決人類解不出的問題。程式設計師理解問題,編寫程式。計算機執行程式,解決問題。
人類不擅長重複勞動,很容易產生厭倦和出錯。但人類卻擅長解決問題。與此相對,計算機很擅長重複勞動,但不能自行解決問題。
即人機合力就能解決問題。
遇到難題,光靠人類不能解決,光靠計算機也不能解決。而人機合力就能解決問題。也是本書要傳達的主旨之一。
不過,編寫程式也有難度。無論人類和計算機如何合力出擊,總有解決不好的問題存在。本書,也對人類和計算機的界限進行了分析。
在讀完本書時,希望您能對以程式為媒人機共同要完成的事情有更深刻的理解。

■本書的讀者物件
本書的主要物件讀者是程式設計師。不過,若您對程式設計或數學感興趣,讀起來也會一樣有意思。
您不需要精通數學。書中不會出現∑和∫等很難的算式,因此自認為不擅長數學的讀者也完全可以閱讀。順利閱讀本書所需要的知識,只需四則運算(+-×÷)和乘方(2的3次方=2×2×2)這種程度就行了。除此以外的知識,都會在書中加以說明。
如果您對數和邏輯感興趣,定會更津津有味地閱讀本書吧。
您也不需要精通程式設計。只要稍有一些程式設計經驗,就會對理解本書內容有很大的幫助。有一部分說明是用C語言寫的程式,不過就算不懂C語言也無妨。

■本書結構
本書各章內容,可以以任意順序閱讀,但筆者推薦從第1章開始按順序閱讀。
第1章,對0進行了討論。以按位計數法為主題,學習0的存在簡化了規則。並對“無即是有”的意思進行了思考。
第2章,學習使用邏輯來整理繁瑣的內容。介紹邏輯表示式、真值表、德・摩根定律、三值邏輯、卡諾圖等
第3章的話題是餘數。我們要記住“餘數就是分組”的觀點。這章會學習到對於難題,只要找到週期性就有獲解可能。
第4章,學習數學歸納法。數學歸納法只需要2個步驟就能證明無窮的斷言。還會介紹使用迴圈不變式寫出正確迴圈的例子。
第5章,學習排列組合等數數法則。數數的關鍵在於“認清數數物件的性質”。
第6章,學習自己定義自己的遞迴。通過漢諾塔、斐波納契數列、分形圖形等,練習從複雜事物中發現遞迴結構。
第7章,學習指數爆炸。含有指數爆炸的問題,用計算機也不容易解決。我們要將指數爆炸為我所用,解決大規模問題。還會學到二分法檢索,理解將問題空間一分為二的意義。
第8章,以停機問題為主題,認識到許多程式上的問題,是無論計算機如何發展都不可解的。本章也會學到反證法和對角論證法
第9章,回顧本書學習內容,思考人類認清結構的能力是如何作用於解決問題的,人機協作又具有何種意義。

■謝辭
首先要感謝Martin Gardner。小時候我痴迷於閱讀您所著的《數學遊戲》,至今記憶猶新。
我還要感謝支援我的廣大讀者和為我祈禱的基督教朋友們。
以下各位為本書原稿校審並給予了寶貴建議,在此深表謝意!(按日語五十音圖順)
天野勝、石井勝、巖澤正樹、上原隆平、佐藤勇紀、
武笠夏子、前原正英、三宅喜義
特別感謝在本書創作過程中給予極大關切和支援的SoftBank出版有限公司的野澤喜美男主編。
感謝一直鼓勵我的我最愛的妻子和2個兒子。
在餐桌上教我方程式乃至微積分的父親,本書也是獻給您的。非常感謝父親!

2005年2月

結城 浩

相關文章