图灵社区按: 
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月

结城 浩