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

简介: 1999年,当我还在科尔比学院教书的时候,我便开始写这本书了。现在,这已经是第5个版本了。那时,我正使用Java程序设计语言来教授计算机科学导论课程,但始终没有找到一本合适的教材。一方面,这些书的内容太多,让学生去阅读一本800页的技术书籍显然不可能,即便是我硬叫他们去读也不可能,更何况我并不想他们这么做。

439c3628e1e9a312eade824bb313ff596e171ae7

前言

像计算机科学家一样思考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(第三部分)

相关文章
|
Java 编译器
《像计算机科学家一样思考Java》—— 1.7 练习
在本书中,每个章节的最后都附有术语表,列出这些单词和短语的目的是强调它们在计算机科学中的特殊含义。虽然你可能很熟悉某些单词,但它们的意思却有可能和你先前所知道的完全不一样。
1619 0
|
自然语言处理 Java 安全
《像计算机科学家一样思考Java》—— 1.6 术语表
问题解决(problem-solving):对问题进行建模,寻求解决方案并表达解决方案的过程。
1451 0
|
Java 程序员 编译器
《像计算机科学家一样思考Java》—— 1.5 第一个程序
main函数可以包含任意多条语句,而上例中只含有一条,这是一条打印输出语句(print statement),功能是在屏幕上显示一条信息。让人疑惑的是,“print”就其本身的意思来说,即可表示“在屏幕上显示信息”,也可表示“向打印机传送数据”。
1272 0
|
自然语言处理 Java
《像计算机科学家一样思考Java》—— 1.4 形式语言和自然语言
自然语言(Natural languages)指人类所说的语言,比如英语、西班牙语、法语等。自然语言并不是由人类设计的,它们是自然演化而形成的。
1304 0
|
Java
《像计算机科学家一样思考Java》—— 1.3 什么是调试
对于有些人来说,编程和调试是一回事情,即编程是逐步调试直到满足要求的过程。在一开始,程序应该就能运行,然后不断地进行修改,这样,在整个开发过程中,你的程序都是可以运行的。
1648 0
|
Java
《像计算机科学家一样思考Java》—— 1.2 什么是程序
程序是说明如何执行计算的一个指令序列1。计算可能是数学计算,比如求解方程组或者寻找多项式的根等;但计算也可以是符号型计算,比如查找和替换文档中的文本或者编译一个程序(够奇怪的)。
1494 0
|
Java C++
《像计算机科学家一样思考Java》—— 1.1 什么是编程语言
你即将学习的语言是Java,这是一种相对较新的语言(Sun公司于1995年5月发布了Java的第一个版本)。Java是一种高级语言(high-level language),你可能听过的其他高级语言还有Python、C、C++和Perl。
1549 0
|
Java
《像计算机科学家一样思考Java》—— 第1章 程序之道
本书的目的在于教你怎样像一个计算机科学家那样思考。我喜欢计算机科学家思考问题的方式,因为他们能将数学、工程学和自然科学中的最好的特性组合在一起。计算机科学家像数学家一样使用规范的语言来表达思想(特别是计算);像工程师一样进行设计并将不同的组件装配成系统,然后在不同的实现方案中进行权衡;又像科学家一样观察复杂的系统,形成假设,再测试预言。
1404 0
|
1天前
|
安全 Java
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
|
1天前
|
安全 Java
【JAVA进阶篇教学】第六篇:Java线程中状态
【JAVA进阶篇教学】第六篇:Java线程中状态