致教师
本教材所包含的内容很难在一个学期内讲授完,因此一定要果断砍掉不适合自己教学目标的那些主题,或者根据需要重新调整讲授顺序。你会发现,尽管本书有它固有的结构体系,但各个主题在很大程度上是相对独立的,完全可以根据需要做出选择。我写本书的目的是把它作为一种课程的资源,而非课程的定义。我们建议鼓励学生自己阅读课堂上没有讲授的内容。如果我们认为所有的东西都一定要在课堂上讲,那就低估学生的能力了。我们应该教会他们独立学习。
关于本书从具体到抽象的组织结构,我们觉得有必要多言几句。作为学者,我们总以为学生会欣赏我们对于学科的观点,这些观点通常是我们在某一领域的多年工作中形成的。但作为教师,我们认为最好从学生的视角呈现教材内容。这就是为什么本书首先介绍数据的表示/存储、计算机体系结构、操作系统以及组网,因为这些都是学生们最容易产生共鸣的主题:他们很可能听说过JPEG、MP3这些术语,可能用DVD和闪存盘刻录过数据,应用过某一操作系统,日常使用过因特网和智能手机。从这些主题开始讲授这门课程,学生可以为许多让他们困惑多年的问题找到答案,并且把这门课看成实践课程而不是纯理论的课程。由此,就会很自然地过渡到较抽象的算法、算法结构、程序设计语言、软件开发方法、可计算性以及复杂性等内容上,而这些内容就是我们本领域的人认为的计算机科学的主要内容。正如前面所说的,以这种方式呈现全书并不是强求大家都按此顺序讲课,只是鼓励大家如此尝试一下。
我们都知道,学生能学到的东西要远远多于我们直接传授的内容,而且潜移默化传授的知识更容易被吸收。当要“传授”问题的解决方法时,就更是如此。学生不可能通过学习问题求解的方法变成问题的解决者,他们只有通过解决问题,而且不仅仅是解决那些精心设计过的“教科书式的问题”,才能成为问题的解决者。因此,本书加入了大量的问题,并特意让其中一些问题模棱两可——这意味着正确方法或正确答案不一定是唯一的。我们鼓励大家采用并拓展这些问题。
“潜移默化学习”类的其他话题还有职业精神、道德和社会责任感。我认为这种内容不应该独立成章,而是应该在有所涉及时讨论,而这正是本书的编排方法。你会发现,3.5节、4.5节、7.9节、9.7节和11.7节分别在操作系统、组网、软件工程、数据库系统和人工智能的上下文中提及了安全、隐私、责任和社会意识的问题。你还会发现,每一章都包含了一些社会问题,这些问题将鼓励学生思考他们所生活的现实社会与教材中的内容的关系。
感谢你对本书感兴趣。无论你是否选用本书作为教材,我都希望你认同它是一部好的计算机科学教育文献。