图书前言

计算机科学技术的发展不仅极大地促进了整个科学技术的发展,而且明显地加快了经济信息化和社会信息化的进程。因此,计算机教育在各国备受重视,计算机知识与能力已成为21世纪人才素质的基本要素之一。

清华大学自1990年开始将计算机教学纳入基础课的范畴,作为校重点课程进行建设和管理,并按照“计算机文化基础”、“计算机技术基础”和“计算机应用基础”三个层次的课程体系组织教学:

第一层次“计算机文化基础”的教学目的是培养学生掌握在未来信息化社会里更好地学习、工作和生活所必须具备的计算机基础知识和基本操作技能,并进行计算机文化道德规范教育。

第二层次“计算机技术基础”是讲授计算机软硬件的基础知识、基本技术与方法,从而为学生进一步学习计算机的后续课程,并利用计算机解决本专业及相关领域中的问题打下必要的基础。

第三层次“计算机应用基础”则是讲解计算机应用中带有基础性、普遍性的知识,讲解计算机应用与开发中的基本技术、工具与环境。

以上述课程体系为依据,设计了计算机基础教育系列课程。随着计算机技术的飞速发展,计算机教学的内容与方法也在不断更新。近几年来,清华大学不断丰富和完善教学内容,在有关课程中先后引入了面向对象技术、多媒体技术、Internet与互联网技术等。与此同时,在教材与CAI课件建设、网络化的教学环境建设等方面也正在大力开展工作,并积极探索适应21世纪人才培养的教学模式。

为进一步加强计算机基础教学工作,适应高校正在开展的课程体系与教学内容的改革,及时反映清华大学计算机基础教学的成果,加强与兄弟院校的交流,清华大学在原有工作的基础上,重新规划了“清华大学计算机基础教育课程系列教材”. 

该系列教材有如下几个特色:

1 自成体系: 该系列教材覆盖了计算机基础教学三个层次的教学内容。其中既包括所有大学生都必须掌握的计算机文化基础,又包括适用于各专业的软、硬件基础知识;既包括基本概念、方法与规范,又包括计算机应用开发的工具与环境。

2 内容先进: 该系列教材注重将计算机技术的最新发展适当地引入教学中来,保持了教学内容的先进性。例如,系列教材中包括了面向对象与可视化编程、多媒体技术与应用、Internet与互联网技术、大型数据库技术等。

3 适应面广: 该系列教材照顾了理、工、文等各种类型专业的教学要求。

4 立体配套: 为适应教学模式、教学方法和手段的改革,该系列教材中多数都配有习题集和实验指导、多媒体电子教案,有的还配有CAI课件以及相应的网络教学资源。

本系列教材源于清华大学计算机基础教育的教学实践,凝聚了工作在第一线的任课教师的教学经验与科研成果。我希望本系列教材不断完善,不断更新,为我国高校计算机基础教育做出新的贡献。

 注: 周远清,曾任教育部副部长,原清华大学副校长、计算机专业教授。

近几年来计算机程序设计基础教育出现了很多新情况和新问题,其中最突出的就是素质教育、能力教育的教学目标与旧有的教材内容、教学模式方面存在巨大的鸿沟。

在大学课时普遍缩短的现象出现以前,学生在学习计算机程序设计基础课程时就遇到了很多难题。例如,大多数学生对于实际应用程序的开发完全没有概念,当学习程序设计基础知识时毫无问题,但在使用这些知识解决问题时却发现能力欠缺得厉害。

为什么会产生这种眼高手低,或者说“一看就懂,一用就不会”的现象?师者,所以传道授业解惑也。在培养学生的抽象思维能力、程序设计实践能力上到底需要学生掌握什么?更详细地说,什么样的知识是必须具备的,什么样的知识是可以在未来需要时逐步补充的,什么样的知识是完全可以忽略的?

很遗憾,目前的教材、教学多没有对此展开讨论和研究。在学生毫无实际程序开发经验的情况下,过去就已经导致了实际教学效果与教学目标存在相当大的差距,更何况当前是课时普遍缩短?

对于计算机程序设计基础类的课程,尤其是以C语言这样知识要素零碎、语法规则灵活、功能实用强大的计算机程序设计语言为载体的课程,使用大量知识性材料在短时间内猛烈轰炸学生头脑除了使学生完全淹没在“知识的海洋”中并最终溺水殒命之外,没有什么显而易见的好处。

在C语言中,除了必要的能够解决实际问题的语法知识,所有其他知识都是可有可无的。没有了它们,可能最终的程序效率不高,看上去不美,但是可以解决问题。这是关键。我们需要学生能够解决问题,或者说需要学生能够学习到解决问题的能力。

因此,每个知识点的引入都应该和解决实际问题联系起来。教材与教学应该满足这样的需要,即学生在学习了一个知识点之后能够立即成功地动手实践,并将它转化为他(她)的技能。

遵照这样的想法,本书按照与以往教材不太一致的思路组织。

第1章讨论C语言的基本概念并简要介绍了两种程序开发环境(Turbo C 3.0和Visual C++ 6.0) ,第2章讨论数据对象和数据类型,第3章讨论运算与操作,第4章研究程序基本结构。这4章的概念非常基本,并且非常简单。如果读者仔细阅读了这些内容,课后习题一定都能够顺利完成。

第5章与第6章研究分支结构与循环结构。这两类结构是结构体程序设计的基石。C语言提供了两种分支结构和4种循环结构(包括goto语句)。这些知识并不都是必要的。所以本书在知识点上进行了裁切,舍弃了do…while循环结构与goto语句--即使只有两种循环结构,学生也能够顺利地将知识转换为技能。

第7章与第8章分别讨论函数与算法,这是非常重要的两章。衡量一个程序的好坏,最关键的就是函数、算法的设计与实现的质量。这里仅仅告诉学生如何实现一个函数、算法是不够的,还应该告诉学生如何才能设计一个好的函数、算法。注意,好与坏的标准并不是代码量的大小,不是问题的难易程度,不是实现策略的难易程度,也不简单是程序效率的高低,而是在解决实际问题时该函数、算法的适用性、易用性、可读性、可理解性与效率的折中。所以,程序设计这事,还真是一个系统工程。

那么,就用系统工程的观点分析它。基本原则是,并不要求所有学生都具备解决领域内所有问题的能力。一些复杂领域问题的解决需要艰深的学科知识和数学背景,这些都可以留给那个专业的牛人去做,而大多数学生学会使用他们制造好的工具即可。但是,为着素质教育的目标,又需要学生能够基本具备解决实际问题的能力。怎么办?

将这样的疑问映射到计算机程序设计基础课程的教学,可以归结为如何培养学生学习、使用大量已有的基础架构构造适合问题的解决方案上。这是第9章及以后各章的根本目标。

第9章讨论程序组织的一般方法。虽然部分教材已涉及此方面讨论,但仍不够。仅仅告诉学生在需要多个文件时,工程项目应该如何组织是没有意义的,教学内容还应该包括为什么需要将工程项目分割成多个文件,以及如何分割才更合理,程序质量更高。

第10~14章分别讨论数组、结构体与共用体、指针、字符串、文件等内容,这些内容之间有很大关联--它们是一个整体。在解决实际问题时,经常需要混合使用这些知识才能顺利完成设计。为尽可能平滑学习曲线,这几章同样对内容进行了大量删节,略去了很多纯技术性的、使用场合很少的知识点,而着重研究数据组织方法的核心--可以用它们干什么。这几章的很多例题和习题紧密相关,读者会频繁地发现后面的代码不过就是以前出现过的代码以一种改头换面的形式再次粉墨登场而已。我们对计算机程序设计的认识就是在这种不断的重复中得到升华。

第15章链表是本书最后一章,也是最重要的一章。读者会在这一章里看到很多“老面孔”,也会认识一些“新朋友”。通过一些例题和习题,本章不断告诉读者,这里有一个问题,请给出解决方案。读者给出一种解决方案。好的,还是这个问题,再给出一个更一般的解决方案。又有了?好的,仍是这个问题,重新给出一个“更更一般”的解决方案。这种不断从特殊到一般的认识过程,不是抽象思维能力还能是什么?只有理解这一章的内容,并且独立完成本章也是本书最后一道习题,才可以认为自己已经基本掌握程序设计的精髓--抽象。

只要读者领会程序设计的基本思想和方法,所有本书故意遗漏的知识点都很容易理解,没有必要占用宝贵的时间。

这是编者的一点浅见,愿与读者探讨。

特别感谢课程组的王行言、冯铃、黄维通、郑莉、刘宝林、孟威、余小沛老师,在课程建设与教材写作的过程中,与他们的讨论使作者获益良多,本书的最终完成离不开从诸位同仁那里获得的宝贵经验和帮助。

乔林于清华园2009年2月