图书前言

前言

欢迎选用《计算机导论与JavaScript编程》。你可能出于很多原因阅读这本教材。也许是使用计算机的时间不多,想多了解一下工作原理,想知道如何控制它们。也许是认识到编程和计算机的职场潜力,想多学一项技能来营生。也许只是对万维网感到好奇,产生了“触网”的冲动。无论如何,本书都将指导你开始一次新的旅程,希望这是一次让人激动的、充满挑战的而且最后能让你取得丰硕成果的旅程。

兼顾深度和广度

与绝大多数计算机入门教材不同,本书力求在计算广度和编程深度之间维持一种平衡。传统的入门级教材基本上都是集中介绍其中的一个方面。基于广度的教材着重强调对计算机和计算机科学的广泛理解。通过广泛介绍诸如计算机结构、图形学、网络以及当前社会的一些技术,让学生对该领域有一个广泛的认识,并且拓展学生的视野以利于将来正确理解和评价现实生活中技术所起的作用。基于深度的书籍更着重强调计算机编程的作用。编程的学科不仅可以培养解决问题的能力,同时也是计算机科学众多领域的重点,因此能够意识到它们的重要性是非常重要的。

虽然每一种方法都有其自身的优点和价值,然而走向任何一个极端都具有潜在的不足。基于广度的介绍可能太肤浅,向学生陈述一种泛泛的观点,使得缺乏背景知识和实际经历的他们不能够充分地理解。虽然编程深度可以提供许多计算概念上的认识,但培养熟练的程序员和问题解决者还需要大量的实践经验(尤其是在学习复杂的编程语言,比如C++或者Java),而这并不是同所有的学生都直接有关。

本书所采用的方法兼顾了深度和广度。书中包含与计算机概念和主题相关的章节,直接与初学者紧密相关,包括计算机术语、因特网和万维网、计算机的发展历史、计算机技术的组织结构和制造工艺、计算机技术对社会的影响。在穿插于广度主题之间的名章中,以实用的指南形式穿插介绍了基本的编程概念和技巧。学习编程语言JavaScript,可以培养学生设计和实现交互式网页的技能。由于JavaScript简单、有自然的界面以及同网页的无缝集成,使初学者能够迅速开发出有趣而迷人的程序。此外,拥有Web浏览器的用户都能够免费获得JavaScript,从而轻易将本书所学到的编程技巧运用到日常问题中。

为了突出深度和广度的平衡,本书并不旨在完整而详尽地介绍计算机,也不仅仅是作为JavaScript的一本参考书。在广度方面的章中,介绍了与初学者相关的关键思想和概念,借助这些思想和概念,他们可以更好地理解计算机技术和计算机科学领域。类似地,编程方面的章集中介绍JavaScript的特性。这些特性说明了基本的编程概念,同时也介绍了有趣而迷人的应用实例。对于感兴趣的读者,章末还提供了补充材料和练习。它提供了对计算机的广泛认识,同时也提供了足够的问题求解和编程深度,使学生充分认识到计算机科学的重要性。

本书的目的

本书及其附带的资源有三个主要的目的。首先,向学生揭示计算机科学领域的广度。计算机科学只不过是对计算机的研究——它侧重于与计算机有关的所有方面,从算法(实现任务所需的一步一步的指令序列)的设计和分析,到计算机零部件的工程和制造,再到软件系统的开发。通过查阅和使用网上的资源,学生们将学习以下主题:计算机技术的历史、现代计算机的内部结构、翻译和执行程序指令以及计算机的作用和限制。使用软件模拟器,他们可以构建计算机的虚拟部件,查看程序在低级机器上翻译和执行的流程信息。结合阅读和试验,这些概念栩栩如生地展现在学生面前,并让他们清楚地认识到计算机科学的“真面目”。

本书的第二个主要目的是教授编程原理。编程是在计算机上解决问题的过程,也就是设计指定任务的答案,然后以计算机可以理解和执行的语言形成这些答案。编程是计算机科学的中心任务,为该领域许多有趣的方面和挑战提供突破口。在学习编程的过程中,他们将学会分析问题,逻辑思考,形成自己的思想,从而解决问题。这是一门学科,因为必须学习系统的方法;但它同时又是一个创造性的过程,因为必须寻求新奇的方法来解决新的问题。因为在编程过程中形成的许多技巧都可以用于一般问题的求解,从本书所获的经验也可以用于继续学习其他学科。最后,采用交互式网页为背景写程序,这是为了强调编程与学生每天使用的应用程序之间的联系。

本书的第三个主要目的是解释说明计算机科学及其跨学科特性。在各个学术领域中(数学和自然科学最明显),分析研究越来越离不开计算机。通过研究和调查这些领域的应用程序,比如生物、物理、心理学甚至经济等领域,学生们将学会把自己的编程技巧应用到广泛的问题中。此外,他们还将获得所有学科通用的经验技巧。

本 书 特 点

本书对计算机科学和程序设计采用的均衡介绍,体现在本书的章节布局中。本书有两种类型的章,一类是介绍计算机关键概念(即计算机科学的广度部分:第1,3,6,8,10,12,14,16和18章),另一类是用教程风格来培养求解问题和编程技巧(即编程的深度部分:第2,4,5,7,9,11,13,15和17章)。这些章相互交叉既是特意安排的也是重要的。它丰富了学生可以解决的问题的类型,因而能满足具有不同学习风格的学生。阅读和课堂讨论是程序设计教程的缓冲,开始下一个教程之前,他们有更多的时间来消化吸收编程的概念和技巧。最后,也许最重要的一点是,各章之间的交叉有助于他们理解和学习上下文。例如,在第2章开发主页后,就为在第3章理解什么是Web及其工作原理做好了充分的准备。

计算机科学广度各章的特点

* 它们侧重于与初学者最相关的主题。其目的并不是使用细节介绍来淹没学生,而是强调该主题的中心思想。

* 尽可能采用图表来阐明重点内容。

* 提供基于Web的可视化工具(请访问本书配套网站:http://balance3e.com)以补足许多章节的内容,强调主动学习。例如,第14章集成了一组模拟器,方便学生研究计算机的内部工作原理。

* 每一章结束都有小结和复习题,鼓励思考和综合该章的内容。

计算机编程深度各章的特点

* 这些章采用的是传统的编程教程的风格,动手实践是学习编程(和解决问题)的唯一途径。

* 练习采用循序渐进的方式,首先让学生通过学习现有程序掌握编程概念(请访问本书配套网站:http://balance3e.com),然后使用新工具和新的语言构造进行修改。最后,为感兴趣的和希望解决的问题创建新程序。

* 除了循序渐进的练习,在每个编程深度章中,至少包含一个能激发学生兴趣的应用程序——这是一个学生熟悉的较大的编程例子,比如旋转(轮转)横幅广告、嵌入的倒计时时钟以及文本加密。

* 把常见错误和易混淆的地方识别出来,并在特色段落“需避免的常见错误”中专门讨论。

* 在特色段落“设计者秘诀”中专门提供了与问题求解有关的程序设计的建议。

* 每一章都包括一个“本章小结”,以简洁的项目列表提出了关键概念和编程工具。

* 为了帮助读者深入学习,每一章结束时提供了补充材料和练习。

在本书的末尾还提供了附录以供参考。附录A和B介绍了常用的Web浏览器和常用文本编辑器,这对于还不熟悉计算机和Web的学生来说或许很有用。附录C是HTML参考,以表格的形式收录了本书使用的所有HTML元素。附录D是JavaScript参考,收录了所有的JavaScript编程结构。附录E到附录G提供了在本书练习中用到的库文件的完整源代码。

联 机 资 源

本书网站(http://balance3e.com)提供了许多资源来帮助学生使用本书。这些资源具体如下所示。

* 书中列出的所有例子的源代码。这些网页可直接在网站上观看,也可下载到本地,方便编辑和试验网页。

* 给出了示例网页中引用的所有文件(比如图片文件)的链接,方便学生开发自己的网页。

* 提供了一组附加的自学练习,它们对现有的练习进行了补充。提供了参考答案,方便学生检查自己的答案,并获取一些答题思路。

给学生的建议

本书不要求你在计算机应用和编程方面具有任何经验。当然,熟悉计算机(比如字处理软件或电子邮件)是很好的,但并不是必需的。本书包含了所需的基本的计算机术语,提供的附录是为了帮助只具有简单计算机技巧的新手,比如使用文本编辑器,保存文件到磁盘,浏览网页。本书的目的并不是要教会你想知道的计算机和编程方面的所有知识,而是为你提供一套实用的技巧和知识。

通过阅读、练习和试验,本书希望能为你提供计算机科学的广泛认识,同时从深度上将你培养成问题解决者和程序员。专门选择JavaScript作为培养编程技巧的媒介,是为了使问题更简单,与学生的联系也更紧密。JavaScript是一种简单的脚本语言,用于控制万维网中的页面。使用JavaScript,你可以通过单击鼠标来控制行为,或在页面上生成动态图像。同样地,学会了JavaScript 就为你打开了Web之门,在这上面有许多激动人心的应用。JavaScript与Java和C++有类似的地方,这表明JavaScript编程经历是使用高级语言进行大规模编程的跳板。

不管你是选择继续学习计算机科学,还是只希望在日常生活中使用一点计算机技巧,本书关于计算机主题的均衡介绍对你是有价值的,这一点将得到证明。一如既往地享受学习的乐趣吧!

给教师的建议

本书设计的章节布局给教师提供了最大限度的灵活性。根据教师偏好和课程目标,教材的平衡和顺序可根据需要自行决定。如果教的是传统的非专业课,那么深度和广度之间的均衡可能更为重要。如果学生对计算机掌握不错,把这门课程作为计算机科学系列的一部分,可以跳过或者缩减一些广度方面的主题,考虑加大编程教学的深度。本书在许多大学的非专业课(CS0)和初级专业课(CS1)中被用作教科书。

本书的优势之一是它提供给教师的灵活性。教师可以突出广度章,只讲授几个编程章;也可以突出编程章,只讲授几个广度章;或者在两者之间找到自己的平衡。深度和广度章交叉贯穿于本书,这是专门设计的,它有助于学生学习和教学的灵活多变。虽然讲解编程知识的深度章要按一定顺序讲解,但通常可以省略或除去一些计算机科学的广度章节。例如,一些教师可能喜欢在课堂上先讲授计算机的历史(第6章)或者计算机的工作原理(第14章)和内部结构(第16章)。

一如既往地享受教和学的乐趣吧!

致  谢

本书的创作经历了一个思考、试验、实现、课堂测试、再思考、再试验这样一个反复的长期过程。在撰写本书的过程中,很多人做出了贡献,既有行动上的,也有精神上的。Prentice Hall的编辑Petra Recter,Kate Hargett和Tracy Dunkelberger工作得非常出色。还要感谢以下外部审稿人员,他们的意见为我提供了很大的帮助。

Debra Burhans, Canisius College

Martin Chetlen, Moorpark College

Donald Costello, University of Nebraska

Lionel Craddock, Bluefield State College

Scott Dexter, Brooklyn College

Linda DuHadway, Utah State University

Buster Dunsmore, Purdue University

Erica Eddy, University of Wisconsin - Parkside

Karen Ehrlich, SUNY College at Fredonia

Chaya Gurwitz, Brooklyn College

Dmitri Gusev, Edinboro University of Pennsylvania

Paul Helmer, Hampden-Sydney College

Michael Hennessy, University of Oregon

Mark Holliday,Western Carolina University

Ralph Hooper, University of Alabama - Tuscaloosa

Nancy Kinnersley, University of Kansas - Main

Hank Korth, Lehigh University

Rowan Lindley,Westchester Community College

Ronald Marsh, University of North Dakota

David Middleton, Arkansas Tech University

Arnie Miles, Georgetown University

Jenna Miley, Bainbridge College

Vince Offenback, North Seattle Community College

Jeff Parker, Merrimack College

Roger Priebe, University of Texas - Austin

Mary Ann May-Pumphrey, DeAnza College

Charles Riedesel, University of Nebraska - Lincoln

Anton Riedl, Christopher Newport University

Jerry Ross, Lane Community College

Jim Schmolze, Tufts University

Patrick Sebrechts, California State University - San Marcos

Gene Sheppard, Georgia Perimeter College

David Valentine, Slippery Rock University

Mark Williams, Lane Community College

本书的雏形形成于狄金森学院,后来又受到Nancy Baxter-Hastings开展的实验课的鼓舞。狄金森学院的许多同事使用本书的雏形来授课,并贡献了新的思路,尤其是Grant Braught和Craig Miller。除了那些早期的同事以外,我还要感谢克雷顿大学的同事,他们也对本书的课程和材料给予了支持,尤其是Brian Kokensparger。我要衷心感谢我的好朋友Owen Astrachan,他是我早期执教的榜样,而且他经常捉弄我。

还要感谢养育我的父母,他们让我体会到知识和学习的价值,并支持我的学业。在我撰写本书的过程中,我的妻子Laura也做出了巨大的牺牲,她经常和我工作到深夜,并听取我无尽的唠叨——征求她的意见:在课堂上哪些地方需要,哪些地方不需要。她不仅乐于听取,而且提供了敏锐的见解,让我在家振作精神而不至于松懈。她的牺牲精神使本书的面世成为可能。最后,特别感谢我的孩子Charlie和Jack,他们和本书一样都成长起来了。虽然我为本书而骄傲,但其实他们才是我最好的作品。

  

Dave Reed 

于克雷顿大学