通过一些耳熟能详的故事(例如格林童话,福尔摩斯,哈利波特,回到未来,绿野仙踪,等)来解释计算的本质,讲述一种系统化的问题求解思路。
本书致力于为读者提供一个关于故事和计算的新视角,希望读者欣赏这些故事中的计算内容,并且这种新颖的观点能激发读者对计算机科学的兴趣。全书分两篇:算法和语言。算法篇用《糖果屋》的故事讲述了计算与算法,用夏洛克·福尔摩斯的故事讲述了表示与数据结构,用印第安纳·琼斯的故事讲述了问题求解与其局限。语言篇用《飞跃彩虹》讲述了语言与语义,用《土拨鼠之日》讲述了控制结构与循环,用《回到未来》讲述了递归,用《哈利·波特》的故事讲述了类型与抽象。
前 言Once Upon an Algorithm: How Stories Explain Computing当人们问起我的工作时,话题很快就转向了什么是计算机科学。说计算机科学是计算机的科学是一种误导(尽管严格来说并非不正确),因为大多数人会把计算机理解为个人计算机或笔记本计算机,并推断计算机科学家整天在构造硬件。其实,将计算机科学定义为对计算的研究只是在转移问题,因为它立即引出了计算是什么的问题。多年来,我逐渐意识到,仅仅通过介绍一个又一个的概念来教学并不是很有效,它太抽象了。现在,我通常首先将计算机科学描述为对系统性解决问题的研究。每个人都知道问题是什么,每个人也都理解问题的解。在通过一个例子解释了这个观点之后,我就有机会介绍算法的概念了,这使我能够指出计算机科学和数学之间的重要区别。大多数时候,我不需要谈论编程语言、计算机和相关的技术问题,但即使涉及这些问题,通过具体的问题也可以很容易地说明这些概念。本书是对这种方法的详细阐述。计算机科学是科学俱乐部的一名相对较新的成员,有时它似乎还没有赢得像物理、化学和生物等严肃科学学科那样的声望。想象一个涉及物理学家的电影场景。你可能会看到有人在讨论黑板上复杂的公式,或者穿着实验服做实验。这位物理学家是一位声誉卓著的科学家,他的知识受到珍视。现在想象一个涉及计算机科学家的类似场景。你可能会看到一个书呆子坐在一个黑暗、凌乱的房间里,眼睛紧盯着计算机屏幕。他疯狂地敲击键盘,可能是想破解一些代码或密码。在这两个场景中,他们都正在解决一个重要的问题,但是物理学家可能会对如何解决这个问题提供一些合理的解释,而计算机问题的解仍然是神秘的,往往是神奇的,而且太复杂了,导致无法向非专业人士解释。如果计算机科学对外行来说是无法解释的,还会有人尝试进一步了解或理解它吗?计算机科学的主题是计算,这是一种影响每个人的现象。我指的不仅仅是手机、笔记本计算机或互联网。想想折纸飞机、开车去上班、做饭,甚至是DNA转录(当你读这句话的时候在你的细胞中发生了数百万次的过程),这些都是计算—一种解决问题的系统方法的例子—尽管大多数人并不这样认为。科学使我们对自然界如何运作有了基本的了解,并为我们提供了可靠地建立这种知识的科学方法。适用于一般科学的东西也适用于计算机科学,特别是因为我们在众多不同情况下遇到了众多形式的计算。因此,对计算有基本理解就像具备物理、化学和生物基础知识一样,可以更好地理解这个世界,更有效地解决许多现实世界的问题。这方面的计算能力通常被称为计算思维。本书的一个主要目标是着重于计算的一般性质,进而强调计算机科学的广泛适用性。我希望这能激发人们对计算机科学更广泛的兴趣,使人们愿意对计算机科学有更多了解。我首先指出日常活动中的计算,然后通过大家熟知的故事解释相应的计算机科学概念。日常情景取自一个典型的工作日:早上起床,吃早餐,上下班,工作场所的情节,预约医生,午后的爱好活动,晚餐,晚上反思一天的事件。这些小插曲都将引出书中的一章。然后,这些章节用七个流行的故事解释了计算的概念。每个故事贯穿2或3章,围绕计算机科学的一个主题展开讨论。本书分两篇:算法和语言。它们是计算概念所依赖的两个主要支柱。表1概述了本书要讲的故事和它们所说明的计算机科学概念。 表1 本书中的故事故事 章 主题第一篇 《糖果屋》 1、2 计算与算法 夏洛克·福尔摩斯 3、4 表示与数据结构 印第安纳·琼斯 5、6、7 问题求解与其局限第二篇 《飞跃彩虹》 8、9 语言与语义 《土拨鼠之日》 10、11 控制结构与循环 《回到未来》 12、13 递归 《哈利·波特》 14、15 类型与抽象我们都喜欢好故事。故事给予我们安慰、希望和力量。它们向我们讲述这个世界,让我们意识到我们面临的问题,有时还会提出解决方案。故事也可以为我们的生活提供指导。当你思考故事教给我们的东西时,你可能会想到爱、冲突、人类的状况,但我还会想到计算。当莎士比亚笔下的朱丽叶问及名字意味着什么时,她谈到了一个关于表示的重要问题。阿尔贝·加缪的《西西弗斯的神话》提出了如何面对生活的荒谬以及如何发现永无止境的计算的问题。故事有多层意义,它们通常包括一个计算层。本书努力揭开这一层面纱,并为读者提供一个关于故事和计算的新视角。我希望读者能欣赏这些故事中的计算内容,并且这种新颖的观点能激发读者对计算机科学的兴趣。
马丁·埃尔维格(Martin Erwig)俄勒冈州立大学电子工程和计算机科学学院计算机科学教授。主要研究领域包括:语言设计和特定领域语言、函数式编程、可视化语言。他是Journal of Visual Languages and Computing的副主编,还是PEPM、SLE和EUSES指导委员会成员。
目 录Once Upon an Algorithm: How Stories Explain Computing译者序前言致谢引言 1第一篇 算法计算与算法——《糖果屋》 10第1章 理解计算之路 13第2章 走一遍:计算真正发生的时候 21表示与数据结构——夏洛克·福尔摩斯 28第3章 符号的秘密 30第4章 侦探笔记:事后从犯 39问题求解与其局限——印第安纳·琼斯 49第5章 寻找完美的数据结构 52第6章 解决排序 66第7章 难解的任务 77第二篇 语言语言与语义——《飞跃彩虹》 88第8章 语言多棱镜 90第9章 寻找正确的语气:声音的意义 101控制结构与循环——《土拨鼠之日》 108第10章 揉搓,冲洗,重复 111第11章 结局不一定圆满 120递归——《回到未来》 128第12章 事半功倍 131第13章 只是解释的问题 144类型与抽象——《哈利·波特》 153第14章 魔法类型 156第15章 鸟瞰:从细节到抽象 166