- 计算思维与Python编程
- (美)玛丽亚·利特文 加里·利特文
- 2108字
- 2020-08-27 09:05:13
前言
本书是我们早期的Mathematics for the Digital Age and Programming in Python一书的“更早讲Python”的版本。在本书中,我们更早地介绍了Python特性,为读者提供了必要的工具,使读者可以更快地以更加“Python式(pythonic)”的惯用方式,开始编写Python代码。在本书中,我们增加了两章(“第9章 海龟绘图”和“第14章 向量和矩阵”),以及介绍斐波那契数列的一节(“第10章 序列与和”的10.5节);更新了许多示例、练习和解答;更改了标题,从而更好地匹配这一系列主题和快速变化的技术环境与词汇。
但这本书的主要理念仍然没有改变:介绍离散数学概念和思维,我们认为这些概念是所有有基础的编程人员的基本知识。这种数学知识很容易学习,但美国大多数中小学数学课程还没有包括离散数学的内容。本书的数学部分包括许多动手编程练习,这些练习可以强化学生对编程和数学的认识。
“那么,这是一本数学书还是一本计算机编程书?”这可能是心急的读者心中的第一个问题。但为什么必须选择呢?这是图书管理员的困境:“它是属于数学类还是计算机类?”有一个简单的解决方案:在每类书架上各放一本。
本书的目的是教授一种特定的思维方式——精确思维,以及如何解决需要这种思维方式的问题。数学和计算机编程都能培养精确思维的能力,并解决那些需要精确解的问题。
数学教会我们欣赏严谨论证的美。从长远来看,这比解决当前实际问题的课程更有价值。数学并不是存在于真空中的——它的抽象植根于几个世纪以来积累的实践知识。数学教学借鉴了我们周围世界的例子和类比,至少它应该如此。然而,我们周围的世界变化得越来越快。在过去的五六十年间,我们的世界变得数字化了。这种变化如此深刻,以至于人们有时难以完全理解。我们的中小学数学课程在很大程度上忽略了这种变化,这是否就是人们难以理解这种变化的原因?
如果我们能够造出“时间机器”,让欧几里得穿越时空来到现代化的世界,他会觉得很欣慰,因为在现代技术的浪潮中,他熟悉的几何学仍然在学校里教授。“老对手”牛顿和莱布尼茨都会感到非常满意,因为成千上万的美国高二和高三学生正在学习如何求导和使用积分。但是,离现在不远的乔治·布尔(George Boole),尽管他的名字在每一种现代计算机编程语言中都是不朽的,但他仍然需要搜寻几十本教材才能找到他提出的代数。至于约翰·冯·诺依曼(John von Neumann),这位才华横溢的数学家,也是计算机技术的先驱之一……好吧,按照他一贯的乐观态度,他会预测在20年左右的时间里,每个小学生都会学习与门、或门和非门。但是,为什么事实不是如此呢?
在本书中,我们汇集了一些与数字世界相关的更容易理解的数学主题。其中许多主题,通常在大学新生课程中以“离散数学”之名讲授。离散数学已成为所有基础数学的代名词,但在标准的初中和高中代数、微积分初步和微积分课程中,这种数学都被忽略了。在20世纪70年代,唐纳德·克努特(Donald Knuth)和他在斯坦福大学的同事创造了“具体数学”这一名词(融合了连续数学和离散数学,并且也很具体,不是太抽象),来描述克努特在斯坦福大学教授的课程。后来,“具体数学”成为了他们的一本阅读起来很愉快的书的标题。正如他们在序言中解释的那样,克努特“发现他的技能中缺少一些数学工具,他需要一些数学工具,以便对计算机程序有彻底的、充分的理解,这些数学工具与他在大学里作为数学专业学生所学的东西完全不同”。
因此,如果你对计算机编程感兴趣,我们希望本书能让你成为更好的计算机程序员。如果你对数学更感兴趣,你将有充分的机会解决有趣的问题,并在计算机程序中,对其中的一些问题进行建模。你将熟悉通常初中生和高中生不会接触到的有趣的数学;你将学会解决真实问题(即你事先并不知道如何解决的问题);你将感受到数学推理和证明的力量。作为奖励,你将获得Python(一种流行的经济有效的编程语言)编程的实用技能。
我们选择Python有几个原因。首先,Python让你有机会在交互式环境中,通过即时反馈来体验该语言。其次,Python的语法并不太复杂。再次,Python具有简单但强大的功能,可用于处理列表和“字典”(映射)。最后,Python易于安装和使用,它是免费的。当然,还有其他编程语言具有类似的属性,可以满足我们的需求。归根结底,重要的不是特定的编程语言,而是能够精确地思考数学知识和计算机程序。
本书得益于计算机科学和数学界的许多朋友和同行的帮助及精到见解。
我们要特别感谢北野山高中(Northfield Mount Hermon High School)的Abby Ross,他仔细阅读了整本书,并提出了许多有价值的更正意见和建议。穆罕默德王子大学(Prince Mohammad Bin Fahd University)的Patricia M. Davies博士是自本书早期版本以来的支持者,他仔细阅读了这个版本(即本书),并提供了许多有用的修订建议。尼达姆高中(Needham High School)的Hans Batra也提供了有用的建议。
本书之前的版本得到了很多朋友的帮助,包括J. Adrian Zimmer博士(俄克拉荷马科学与数学学院)和Kenneth S. Oliver(以前在康涅狄格州伍德布里奇的Amity Regional高中)。时任南卡罗来纳大学哥伦比亚分校计算机科学与工程系主任的Duncan A. Buell教授阅读了全部草稿,提出了许多改进建议,尤其是关于“第18章 数论和密码学”。
我们感谢Henry Garden对编写教材的方法的建议,感谢Margaret Litvin帮助校对。和往常一样,我们最感谢玛丽亚的数学和计算机科学专业的学生,他们测试了本书的编程练习,做了很多很好的修正,并用他们的热情鼓舞了我们。
玛丽亚·利特文(Maria Litvin)
加里·利特文(Gary Litvin)