计算机科学概论(第13版)
上QQ阅读APP看书,第一时间看更新

本书遵循自底向上的计算机科学研究方法,先从读者有亲身体验的主题开始(如计算机硬件),继而引出比较抽象的主题(如算法复杂性和可计算性)。结果是,我们的学习遵循这样的模式:随着我们对主题理解的深入,我们构建的抽象工具会越来越大。

我们先学习与设计和构造执行算法的机器有关的主题。在第1章(数据存储)中,我们学习信息是如何编码和存储在现代计算机中的。在第2章(数据操控)中,我们研究简单计算机的内部基本操作。虽然部分学习内容涉及技术,但总体上是独立于具体技术的。也就是说,像数字电路设计、数据编码与压缩系统,以及计算机体系结构这样的主题,与很多技术都相关,并且不管未来技术的发展方向如何,它们的相关性都不会变。

在第3章(操作系统)中,我们学习控制一台计算机总体操作的软件,这种软件称为操作系统。操作系统控制机器与其外部世界之间的接口:保护机器及其内部存储数据不被非授权用户访问;允许计算机用户请求执行各种程序;协调内部活动,以满足用户请求。

在第4章(组网及因特网)中,我们将学习计算机是如何连接成计算机网络的,网络又是如何连接成互联网的。这些知识涉及很多主题,如网络协议、因特网结构与内部操作、万维网以及众多安全问题。

在第5章(算法)中,我们将比较正式地学习算法研究。我们将研究如何发现算法,确定几种基本的算法结构,开发几项用于表示算法的基本技术,并介绍算法效率和正确性的主题。

在第6章(程序设计语言)中,我们讨论的主题是算法表示和程序开发过程。在这一章中,我们会发现,人们在不断改善程序设计技术的过程中,创造出了各种各样的程序设计方法学或范型,每一种都有它自己的一套程序设计语言。我们除了研究这些范型和语言,还会考虑语法和语言翻译的问题。

第7章(软件工程)将介绍计算机科学的一个分支——软件工程。软件工程处理的是开发大型软件系统时遇到的问题。底层主题是,大型软件系统的设计是一项复杂的任务,会遇到传统工程未涉及的许多问题。因此,软件工程这一学科已经成为计算机科学中一个重要的研究领域,它借鉴了诸如工程、项目管理、人事管理、程序设计语言设计,甚至是建筑学等众多领域的研究经验。

在接下来的两章中,我们将学习在计算机系统中组织数据的方法。在第8章(数据抽象)中,我们介绍传统上用于在计算机的主存储器中组织数据的技术,然后探索数据抽象的演变发展,从原语的概念一直到如今的面向对象技术。在第9章(数据库系统)中,我们介绍传统上用于在计算机海量存储器中组织数据的方法,并研究如何实现极其庞大的复杂数据库系统。

在第10章(计算机图形学)中,我们将探索图形学和动画的主题,一个涉及创建并图像化虚拟世界的领域。在计算机科学传统领域(如机器体系结构、算法设计、数据结构和软件工程)发展的基础上,图形学和动画学科取得了重大进展,业已发展成为激动人心、充满活力的学科。此外,这个领域体现了计算机科学的各个组成部分是如何与物理、艺术和摄影等学科相结合产生显著成果的。

在第11章(人工智能)中,我们将了解到,为了开发更有用的机器,计算机科学已一马当先转向研究人类智能。研究人员希望通过对自己的思维推理和认知的了解,设计出模拟这些过程的算法,从而将类似的能力转移到机器上。结果,计算机科学就有了人工智能这个领域,它非常依赖于心理学、生物学和语言学等领域的研究。

我们的学习到第12章(计算理论)结束,这一章将研究计算机科学的理论基础,这个主题会让我们了解算法(和机器)的局限性。这里我们不但明确了几个算法上无法解决的问题(因而超出了机器的能力),而且认识到许多其他问题的解决方案需要大量的时间或空间,以至于从实践的角度来看它们也是不可解的。因此,通过本章的学习,我们将能够掌握算法系统的范围和局限性。

我们的目标是,每一章主题的探讨都足够深入,使读者真正理解。我们希望所阐述的计算机科学知识对大家的工作能有所帮助——使读者了解自己身处的技术化社会,打好跟随科技进步自我学习的基础。