图书前言

不知各位读者是否曾有将一门学科或课程“读通”的感觉?那种喜悦、成就感和自信用言语无法形容,那种感觉是历时长久、回味在心的,可以说是人生最大的享受之一。笔者希望同学们都能够向“读通”计算机科学的路上迈进,即便是没有读通,也希望在这个过程中能感受到它的美丽,进而能产生出要持续亲近的感情。然而笔者对近年来计算机科学的基础教育是忧心忡忡的。有些学校对基础课程的安排过于重视语言的学习(如Java),而忽视了对计算机科学整体内涵的理解。这样所产生的弊端是让学生又陷入了中学时条条框框、死记硬背的学习方式中,学生哪里会对所学的知识有什么情感呢?学生学习计算机的原因难道只是工作机会多和薪水高吗?是的,这样说也没错,学好计算机知识的同学们是薪水高,工作机会又多,然而重点是如何学好计算机。笔者认为想要学好计算机就要融会贯通,就要能体会它的美丽,而“第一本书”的学习至关重要。

本书第1版的完成耗费了笔者很大的心血,它的效果是让人欣喜的。大一的新生们读了这本书后对计算机科学有了正确的了解,对计算机科学的美丽有了较深刻的体会和认识。由于理解它的美,有更多其他专业的学生因而想要转进计算机专业。也有不少大四的学生觉得阅读这本书收获很大,能将前面所学的知识清楚地连贯起来,他们此前迷惘于每门课程的片段知识,而今因为能融汇成有组织的知识而欣喜。

本书在第1版的基础上精益求精,将一些章节的文意表达得更清楚,也增加了一些例子,例如第1章增加了Python的例子。本书最大的亮点在于有新的一章加入——并行计算。这使得第1版的8章内容变成本书的9章。笔者在多核并行计算的领域浸淫20多年,这些年来多核系统已经是无所不在,手机都已经配备8核及以上,超级电脑更是有数百万核。现今许多通用的软件平台也都需要使用多核并行的编程方式,如云计算和大数据平台Hadoop、Spark等。然而一般学生的计算机科学基础教育多年来仍然较少涵盖多核并行等知识。其实多核并行的概念应该是在学习计算机科学导论时就要引入的。所以本书增加的第7章将介绍并行计算,而第1版的第7章、第8章就顺延为本书的第8章、第9章。

下面简单介绍第7章“并行计算”的内容。多核系统简言之就是一个系统可以使用多个计算和存储单元,并且在多个核之间有通信和同步的机制。并行计算是基于多核系统的软件编程技术。并行计算能提供两个优势: 第一,充分利用多核硬件,使得执行时间大幅缩短; 第二,直接、方便地利用计算机来模拟真实的多并发情景,使得编程能够简化。这一章讨论并行计算的基本概念,也提供了许多Python多进程的实例,其中有计算方差等科学运算的例子,这些例子体现了并行计算加速执行速度的能力。在模拟情景方面,有对于商品市场考虑供给与需求的价格模拟的编程,这个例子非常有趣,对于同学们理解经济学有相当的帮助。另外,还有对于多部电梯的控制模拟的编程,同学们从这个例子可以理解,虽然各部电梯是独立运行的,但是每部电梯的运行方向及开停仍然需要其他电梯的信息。最后,本章对并行计算做较深刻的讨论,也会讲述云计算的概念。这一章能为将来学习并行计算及多核系统结构打好基础。

本书与第1版的理念是一致的,那就是试图写出一本最好的计算机导论的书,为中国的计算机教育做一点实质性的贡献!本书的完成要感谢姜炜文、谷守珍、陈咸彰等人的协助。

本书的PPT课件等教学资料可以从清华大学出版社网站www.tup.com.cn下载,关于本书及课件的使用问题请联系fuhy@tup.tsinghua.edu.cn。为阅读方便,本书中所有变量和数学符号都为正体。

最后祝福大家幸福美满。

作者

2016年6月