每次读结城浩的书都有一种很轻松的感觉,之前给大家推荐的《数学女孩》是这样的,今在要给大家推荐的这本《程序员的数学》也是这样,这是结城浩的另一代表作。 本书面向程序员介绍编程中常用的数学知识,借以培养初级程序员的数学思维。读者无需精通编程,也无需精通数学,只需要具备四则运算和乘方等基础知识,就可以阅读本书。所以这是一本面向初级程序员,重在培养数学思维的书,而不是教你如何编程的书。当然如果你懂点编程的知识将更加有助于理解本书内容。 既然是重在培养数学思维的书,那么对于不是程序员的朋友来说,读起来也一样会有收获。 如果你是学生家长,想从小培养孩子的编程能力,这是一本难得的书,初中及初中以上的学生可阅读。 编程中的“数学思维” 通过本书,你将学习到编程中常用的“数学思维”,“数学思维”说起来太抽象,我们来举几个具体的例子: 1)条件分支和逻辑 在编程时,我们按照条件将处理方法分为多个“分支”。C 语言和Java 语言中使用的是if 语句。处理方法为: 当满足条件时执行这条语句,不满足条件时执行另一语句。这时,我们就使用了数学领域的“逻辑”来控制程序。因此,编程时必须熟练掌握“ 与”“、或”“、非”、“蕴涵”等逻辑构成元素。 2)循环和数学归纳法 我们在处理大量的信息时,使用程序进行“循环”操作。比如使用for 语句可以循环处理大量数据。循环中使用的就是“数学归纳法”。 3)分类和计数方法 在将许多条件和数据“分类”时,程序员必须注意不能有遗漏。这时加法法则、乘法法则、排列、组合等“计数方法”将助你一臂之力。这是程序员应该熟记于心的数学工具。 通过本书,还可以学到递归、指数、对数、余数等重要的基础思维方式。 编程之外的“数学思维” 我很赞赏结城浩的书,因为他总能把数学思维的过程用通俗易懂的方式和盘托出,读起来是一种享受。除了编程中的“数学思维”,我们还能向结城浩学习到哪些“数学思维”呢? 1)善用自己的语言总结数学 我们小学就学过余数,但是如果别人问你余数是什么?余数有什么用?你能很快回答出来吗? 也许你会搬出课本上的定义:在整数的除法中,只有能整除与不能整除两种情况。当不能整除时,就产生余数。 再来看结城浩是如何用自己的语言概括余数的,他说:“余数就是作除法运算时剩下的数。”并提出:“余数就是分组。”道出了余数的作用。 再来看,什么是排列组合?排列组合是解决计数问题的方法。那什么是递归呢?递归就是自己定义自己。数学归纳法有什么作用?它是用来征服无穷数列的工具。而逻辑,他把它总结为真与假的二元世界。等等。 如果我们在学习数学的过程也能试着用这样简短的语言去概括、总结你所过的数学知识和方法,那么就不会有学了之后不知道数学有什么用的困惑了。 2)善用图表展现数学思维的过程 在书中我们经常能够看到类似于下面的有意思的图表,它可以向读者很好的展现数学思维的过程。 在余数这一节的结尾处,作者用一个想象的“七角时钟”和“六角时钟”来直观的表示“周期为7”和“周期为6”的规律。 有了这个图,可以很直观地看到,“100除以7的余数为2”表示这个时钟前进100个刻度后指针指向“2”这个顶点。而100除以7的商为14,表示时针转了14圈。 在数学学习的过程中,如果我们能善用图表,将有助于我们更好地理解数学。 3)从简单到复杂的数学思维 以“汉诺塔”游戏为例。数学家爱德华·卢卡斯(edouard Lucas)于1883年发明了一个叫“汉诺塔”的游戏:有三根细柱(A、B、C),A柱上套着6个圆盘,这个圆盘大小各异,按从大到小的顺序自下而上摆放。现在要把套在A柱上的6个圆盘全部移到B柱上,并且在移动圆盘时须遵守下述规则。
将1个圆盘从一根柱子移到另一根柱子,算移动“1次”。那么,将6个圆盘全部从A移到最少需要移动几次? 解决这个问题的思维就是从简单的问题着手——先找出“3层小汉诺塔”的解法,再找出解决“6层汉诺塔”问题的方法,最后再过度到“n层汉诺塔”问题的解法。 这就是一种从简单到复杂的数学思维方法。当然书中你还将学到很多其他的思维方法,这里仅举几例,绝对是挂一漏万。 好玩的数学题 本书还有一个亮点是,书中为我们展示了许多有趣的数学问题的解法。比如上面说的汉诺塔问题,还有斐波那契的兔子繁殖问题、黑白棋通信问题、寻找恋人问题、铺设草席问题、哥尼斯堡七桥问题(一笔画问题)、高斯求和问题等。如果你对编程不感兴趣,把它当作数学问题集来看也是不错的。 ↓↓↓更多详情可点击阅读原文查看。 |
|
来自: 昵称16619343 > 《办公技能》