《像计算机科学家一样思考Java》—— 导读

    xiaoxiao2024-01-28  159

    前言

    像计算机科学家一样思考Java我们从别人的发明中享受了很大益处,我们也应该乐于以我们的任何一种发明为别人服务,并且这种事我们应该自愿地和慷慨地去做。

    ——本杰明·富兰克林,引用自Edmund S. Morgan所著的《本杰明·富兰克林传》

    我为什么写这本书1999年,当我还在科尔比学院教书的时候,我便开始写这本书了。现在,这已经是第5个版本了。那时,我正使用Java程序设计语言来教授计算机科学导论课程,但始终没有找到一本合适的教材。一方面,这些书的内容太多,让学生去阅读一本800页的技术书籍显然不可能,即便是我硬叫他们去读也不可能,更何况我并不想他们这么做。另外,书中多数内容的针对性都很强,比如Java语言的细节和Java类库等内容,而这些类库在学期结束时很有可能就已经过时了。这样的书籍显然不是我需要的。

    另一方面,我发现一开始就讲面向对象编程并不合适。很多在其他方面表现得很好的学生,一旦接触到对象就一头雾水了。于是我开始写这本书,每天写一章,一共写了13天,第14天编辑,然后是复印和装订。上课第一天我便把书分发给学生们,并叫他们每周阅读一章,这样一来,他们阅读的速度比我书写的速度慢了7倍。

    背后的哲学以下是我写这本书的一些想法:

    词汇很重要。学生应该有能力去讨论程序并且能够听懂我所讲的话。我尝试着引入尽可能少的术语,并在第一次使用这些术语时精心地给出定义,然后在每章的最后附上术语表。在我的课程中,我会在小测验和考试中包含一些和词汇相关的题目,然后要求学生使用恰当的术语进行回答。要编写程序。学生应该理解算法,知晓程序设计语言本身,并能够调试程序。太多的书籍都将程序调试内容给忽略掉了。本书最后的附录D讲述程序调试的内容,附录C讨论程序开发内容(可以帮你避免调试)。我建议学生们尽早地阅读这些内容,并且时常回过头来复习。有些概念需要时间来消化。对于一些较难的内容,本书将反复讲到,这样可以给学生更多的机会去复习和巩固。如果第一次没有学会,可以在后面赶上。我试图尽量少地使用Java语言来教会学生获得尽量多的编程能力。本书的目的在于教学生如何编写程序和一些计算机科学导论方面的概念,而不是Java语言。因此,我去除了一些Java语言特性方面的内容,比如switch语句便没有必要了,多数类库也不在本书的教授范围之内,特别是一直在变并很可能被替换掉的AWT。这种最小化的方式有它的优点。除了章后练习,每章大概10页左右。在我的课程中,我要求学生提前阅读要讲的章节,他们都愿意这么做并且理解得很好。这样一来,我们便有时间来讨论一些更抽象的内容、做一些课内练习和学习本书之外的内容。

    但是,这种最小化方式也有缺点。从本质上讲,这种方式没有多少有趣的地方。书中的多数例子只是在展现基本的语言特性,并且很多练习都包含了字符串操作和数学相关的知识。我认为其中的一些内容是有趣的,但是还有很多能够激发学生兴趣的内容,比如图形、声音和网络应用只是一带而过。

    问题在于,很多令人兴奋的内容都包含大量的细节,而其中的概念并不多。从教学上讲,这样浪费了太多的努力但又达不到教学目的。因此,在取悦学生和富含知识之间便出现了一个折中。我让老师们自己去解决这种平衡。作为帮助,本书的附录中包含图形、键盘输入和文件输入等内容。

    面向对象编程有些书一上来便介绍对象,另一些书先通过面向过程的编程方式进行引导,再逐渐讲授面向对象编程方式。本书采用后一种方式。

    Java中许多面向对象特性都是由先前语言出现的问题来驱动的,并且它的实现也受到了这些语言发展历史的影响。在学生不了解他们需要解决的问题的情况下,有些特性是很难解释的。推迟讲面向对象编程并不是我的意图所在,相反,我会尽快地涉及到这些内容,只是我每次只讲一个概念,并且尽可能清晰,以使学生可以相对独立地练习每一个知识点,然后再加入后续的概念。但是我也承认,达到这样的目的确实需要时间。

    目录

    第1章 程序之道1.1 什么是编程语言1.2 什么是程序1.3 什么是调试1.4 形式语言和自然语言1.5 第一个程序1.6 术语表1.7 练习第2章 变量和类型第3章 无返回值方法第4章 条件语句和递归第5章 GridWorld(第一部分)第6章 有返回值方法第7章 迭代和循环第8章 字符串第9章 可变对象第10章 GridWorld(第二部分)第11章 创建对象第12章 数组第13章 对象数组第14章 数组对象第15章 面向对象编程第16章 GridWorld(第三部分)

    最新回复(0)