论题选择
为了制定这本CS0教材的论题大纲,我们利用了许多资源,包括课程目录、教材大纲,并进行了问卷调查。设计调查问卷的目的在于了解我们的同事对这门课程内容的想法。我要求大家(包括自己)列出下列三种清单:
如果CS0这门课是学生在大学阶段学习的唯一一门计算机科学的课程,请列出四种你认为他们应该掌握的论题。
请列出四种你想要学生在进入CS1这门课之前掌握的论题。
请补充四种你想要学习CS1的学生熟悉的论题。
这些资源的交集反映出的大多数人的意见,也就构成了本书的大纲。本书作为核心的CS0教材,对计算领域进行了广泛的介绍,适合作为计算机科学原理先修课程的教材,也可以用于程序设计语言的导论书或参考书。
结构说明
本书从介绍硬件和软件的历史开始,并且用洋葱的结构来类比计算机系统的结构。处理器和它的机器语言构成了洋葱的芯,软件层和更复杂的硬件一层层地裹住了这个芯。下一层是高级语言,包括FORTRAN、Lisp、Pascal、C、C++和Java。在介绍这些语言的同时,还介绍了利用它们进行程序设计的过程,包括自顶向下的设计和面向对象的设计。我们已经深刻地理解了抽象数据类型所扮演的角色及其实现。操作系统及其资源管理技术(包括更大、更快的二级存储介质上的文件)包围着这些程序,并对它们进行管理。
接下来的一层由更复杂的通用或专用软件系统构成,它们覆盖了操作系统。这些功能强大的程序开发由计算机科学中的理论推动。最后一层由网络和网络软件构成,网络软件包括计算机之间通信必需的所有工具。Internet和万维网给这一层画上了最后一笔,而这些章节也会将关于影响我们在线交流的信息安全话题的讨论推向高潮。
当这些层随着时间的推移逐渐出现时,用户对计算机系统的硬件接触得越来越少。每个层都是它下面的计算机系统的抽象。随着每个层的发展,新层的用户和内部层的用户联合起来构成了经济领域高科技部门的生产力。本书的目的是提供各个层的概述,介绍基本的硬件和软件技术,使学生了解和欣赏计算系统的方方面面。
在介绍这种洋葱式结构时,我们有两种选择,一种是从内向外逐层介绍,另一种是从外向内进行介绍。从外向内的方法看起来非常吸引人。我们可以从最抽象的层开始介绍,一次剥掉一个层,直至具体的机器层。但是,研究表明,比起抽象的例子,学生们更容易理解具体的例子。因此,我们选择从具体的机器层开始,按照层的创建顺序进行分析,当学生完全理解了一个层之后,再转移到下一个层就比较容易了。
第7版中的变化
在计划这次改版时,我们咨询了同事以及本书之前版本的一些读者,请求他们给予一些反馈。非常感谢这些有见解的回应。
第7版对全书进行了很多修改,其中之一是我们有意识地加入对特定主题的讨论,这些特定主题会在计算机原理课程的先修课中进行介绍。本书适合和先修课教材一起使用,但是针对更新的内容提出了很多见解。除此之外,在第1章中添加了计算领域的基本思想,这些思想组成了原理课程中的高级框架。
其他的重大改变是,本版加强了对云计算的介绍,并更新了第5章关于计算机描述的案例。第12章讨论了电子表格可视化,并添加了大数据的介绍。第13章添加了对智能语音助手(例如Amazon Echo和Google Home)的讨论。第15章引入了区块链,并且在第17章更新了对信息安全的讨论。
第7版的另一个大的变化是第6章中使用的虚拟机从Pep8升级到了Pep9,并对基本系统进行了改进,从而在机器语言和汇编层次对程序设计进行描述。
除了新的章节,本书的特色板块也进行了全面的修订和更新。现在每章结尾部分的“道德问题”都进行了更新。新增了若干个“你知道吗”板块,并且对一些板块进行了更新。除此之外,“名人传记”部分也进行了更新。
对于每一版,我们都力求提高覆盖面,改进措辞和使用的案例,以帮助读者理清楚主题。
摘要
第1章是我们探索计算机科学的基础,描述了本书的组织结构。第2章和第3章则分析包含在物理硬件中的层。这个层称为信息层,它反映了如何在计算机上表示信息。第2章介绍二进制数制以及它与其他数制(如人们日常用的十进制系统)的关系。第3章研究如何获取多种类型(如数字、文本、图像、音频和视频)的信息以及如何用二进制格式表示它们。
第4章和第5章介绍硬件层。计算机硬件包括的设备有晶体管、门和电路,它们都按照基本原理控制电流。正是这些核心电路使专门的硬件部件(如计算机的中央处理器(CPU)和存储器)得以运转。第4章介绍门和电路。第5章介绍计算机的元件,以及在冯·诺伊曼体系结构中这些元件是如何交互的。
第6~9章介绍程序设计层。第6章使用模拟计算机Pep9介绍机器语言和汇编语言的概念。该章引入了用伪代码编写算法的功能,介绍了循环与选择的概念,并在Pep9中以伪代码的方式实现。
第7章分析问题求解过程,同时涉及人类和计算机的问题求解方法。引导这个论题的是George Polya的人类问题求解策略。该章介绍了自顶向下的方法来设计简单算法,并在讨论算法时选择经典的搜索和排序算法。因为算法是对数据进行操作,所以在此研究数据的结构,以便更有效地处理数据。该章也介绍了子算法(子程序)语句。
第8章介绍抽象数据类型和容器,容器是只知道其属性或行为的复合结构。该章介绍了列表、有序列表、栈、队列、二叉检索树和图,扩展讨论了子算法,包括引用参数与值参、参数传递。
第9章介绍高级程序设计语言的概念。许多杰出的高级语言包含与面向对象编程相关的功能,我们绕过它们,而是先介绍了设计过程,讨论了语言范型以及编译过程。我们用四种编程语言设计了一些小例子来说明伪代码的概念,即Python、VB.NET、Java和C++。
第10章和第11章介绍操作系统层。第10章讨论操作系统的资源管理任务,介绍一些用于实现这些任务的基本算法。第11章介绍文件系统,包括什么是文件系统,以及操作系统如何管理它们。
第12~14章介绍应用层。这一层由人们用来解决问题的通用应用程序和专用应用程序构成。我们根据这些程序,把这一层分到了计算机科学的几个子学科中。第12章分析信息系统,第13章分析人工智能,第14章分析模拟、图形学、游戏和其他应用。
第15~17章介绍通信层。第15章说明计算机之间通信的理论和应用。第16章介绍万维网和它涉及的各种技术。第17章讨论计算机安全,涵盖了当今信息时代与保护信息安全相关的各个方面。
第2~17章都是说明计算机可以做什么以及它是如何做的。第18章进行总结,讨论计算机硬件和软件的固有局限性,以及计算机能够解决和不能解决的问题。在讨论算法的有效性时,采用了大O符号,以便讨论算法的分类。此外还介绍了停机问题,以说明某些不能解决的问题。
本书的第1章和最后一章就像一对书档,第1章说明了计算系统是什么,第18章告诫我们计算系统不能做什么。其余章节则深入探讨了构成计算系统的各个层。
为何不使用特定的语言
本书中并没有使用特定的程序设计语言(例如,Java、C++或其他语言),而是将选择语言的权利交给了读者。导论章节与本书的设计相一致,它们的代码可以使用Java、C++、JavaScript、Visual Basic .NET、Python、SQL、Ruby、Perl、Alice和Pascal进行编写。
如果学生对于一种编程语言的语义和基本语法有充足的知识,并且掌握了本书背景材料中的内容,那么仅需要对必要的章节进行学习即可。这些章节可以用来丰富那些具有较强知识背景的读者的学习。
特色板块
名人传记
本书具有三个特色板块,用于强调计算的历史、广度以及新技术带来的道德义务。
第一个特色板块是每章都有的简短名人传记,介绍对计算做出杰出贡献的人。这些人包括对数据层做出贡献的George Boole和Ada Lovelace,以及对通信层做出贡献的Doug Engelbart和Tim Berners-Lee。这些传记的目的是让学生了解计算界的历史以及那些对计算界做出贡献的人。
你知道吗
第二个特色板块为“你知道吗”。这部分显示在方框中,是过去、现在和未来的一些逸闻趣事,它们来自历史记录、当今的报纸和作者的见闻。这些小插曲的目的是使学生开心,鼓舞他们,激发他们的兴趣,当然也为了教育他们。
道德问题
第三个特色板块是每章中的“道德问题”小节。这些小节的目的是说明在利用计算的好处时要承担的义务。隐私权、黑客、病毒和言论自由都属于我们的论题。在每章练习的结尾处有一节叫“思考题”,涉及这些道德问题和这一章的内容。
致谢
对于这一版来说,读者是最有用的信息和建议来源。衷心感谢受调查者花时间填写了我们的网络调查问卷。还要感谢前几版的审校者,他们是:
Warren W. Sheaffer,圣保罗学院;
Tim Bower,堪萨斯州立大学;
Terri Grote,圣路易斯社区学院;
Susan Glenn,戈登州立大学;
Simon Sultana,弗雷斯诺太平洋大学;
Shruti Nagpal,伍斯特州立大学
Sandy Keeter,佛罗里达塞米诺尔州立学院
S. Monisha Pulimood,新泽西学院
Roy Thelin,岭角中学
Robert Yacobellis,芝加哥洛约拉大学
Richard Croft,东俄勒冈州立大学
Raymond J. Curts,乔治梅森大学
Mia Moore,克拉克亚特兰大大学
Melissa Stange,费尔法克斯勋爵社区学院
Matthew Hayes,路易斯安那泽维尔大学
Marie Arvi,索尔兹伯里大学
Linda Ehley,艾维诺学院
Keson Khieu,塞瑞亚学院
Keith Coates,杜瑞大学
Joon Kim,布伦特伍德学校
Joe Melanson,康宁—佩恩提德波斯特
Joan Lucas,纽约州立大学布罗克波特学院
Jeffrey L. Lehman,亨廷顿大学
Janet Helwig,加州多明尼克大学
James Thomas Davis,A.克劳福德莫斯利中学
James Hicks,洛杉矶西南学院
Jacquilin Porter,亨利福特学院和贝克学院
Homer Sharafi,北弗吉尼亚社区学院
Gil Eckert,蒙莫斯大学
Gary Monnard,圣安布鲁斯大学
David Klein,霍夫斯特拉大学
David Adams,格罗夫城市学院
Christopher League,长岛大学布鲁克林分校
Carol Sweeney,维拉学院
Brian Bradshaw,特尔学院
Bill Cole,赛瑞亚学院(洛克林)
Aparna Mahadev,伍斯特州立大学
Anna Ursyn,北卡罗来纳州
Ann Wojnar,博蒙特学校
特别感谢凯尼休斯学院的Jeffrey McConnell,他编写了第14章中的图形学部分;感谢里韦学院的Herman Tavani,他参与了修改“道德问题”的工作;感谢波士顿学院的Richard Spinello,