对于传统的CS1课程来说这本书是跨学科的方法。在本书中,作者重点讲述了从材料科学、基因组、天体物理学到网络系统等各学科中计算的角色。这种方法主要是向学生强调在当今世界中,数学、科学、工程和计算是紧密联系的这一重要思想。同时CS1课程的设计就是面向大学一年级的学生,他们都对数学、科学或者工程学和计算科学感兴趣,这本书把科学与应用放在首位,并说明语言是怎么样的工具。这就是教授程序设计入门课程的最有趣的开始点。

交叉学科的方法是Java程序设计极好的入门,这本书强调了在熟悉场景是的应用,例如物理和生物科学、工程学和商务计算。当阐明更广阔的计算时,这些真实世界的探索形成了计算机科学的概念和程序设计技能的基础。

另外这本书的主要特色:

 熟悉的应用:来自于高中数学和科学的熟悉应用有助于学习基本的计算机科学概念,并且有助于他们意识到程序设计是科学研究的根本。

 对象在其中的方法:对象在其中的方法教给学生基本的控制结构和函数,然后指导他们如何使用、创建和设计类。

 完全的程序设计模型:完全的程序设计模型包括用于输入、画图、声音和图像处理的标准库,学生可以从他们课程最开始时就开始应用和使用这些库。

 完整的参考网站:包括极具特色的扩展Java程序设计示例、额外的练习和相关网站资料的链接,在www.aw.com/SedgewickWayne都可以找到并利用。

本书根据学习编程的四个阶段来组织:基本元素、函数、面向对象程序设计、算法和数据结构。从浅入深,逐步推进,非常系统和实用。另外,在科学和工程学中的应用是正文的一个主要特点。书中介绍每个需要强调的程序设计概念都是通过分析它对具体应用的影响来进行的。示例丰富,并涉及到多个学科。值得一提的是本书的练习和创新练习,真正体现了跨学科的方法,涉及应用数学、物理和生物科学、计算机科学、物理系统、数字方法、数据可视化、声音合成、图像处理,金融模拟和信息技术等。

我们在本书翻译的过程中力求忠于原著,在翻译过程中为作者丰富的跨学科知识所震撼,这是一本任何学科都能使用的Java程序设计的好书。另外除了基础之外,它还涉及到许多新的研究领域:如数据挖掘、渗滤和小世界等等,能激发学生强烈的对科学的求知欲,并为以后的专业课的学习打下坚实的基础。

参加本书翻译的为葛秀慧、田浩、张桂香、王顶、刘秋红、刘朝晖、焦仁普、朱书敏、盖俊飞、田志浩、李超、郭立甫等。由于本书涉及到各个领域的专业知识,如数据挖掘方面,内容全面,覆盖范围广,加之译者水平有限,书中的错误和不妥之处在所难免,敬请广大读者批评指正。

特别要向辛勤工作的清华大学出版社龙啟铭编辑致以深深的谢意,同时也感谢为这本书付出辛勤劳动的许多工作人员。

译 者

Java程序设计--一种跨学科的方法译者序PREFACE前 言

20世纪教育的基础是“读、写和算术”。而现在教育的基础已是“读、写和计算”。学习编程是每个科学与工程专业学生教育的重要部分。先不谈直接应用,我们首先需要的是理解计算科学的本质,它对现代社会产生了无可辩驳的影响。任何在技术环境中需要编程或想编程的人都可以通过这本书学习程序设计。

我们的基本目标是使学生通过使用提供的经验和基本必要的工具来更加有效地进行计算。我们的方法是教会学生编写普通的、令人满意的和充满创造性体验的程序(而不是为专家预留的艰巨任务)。我们循序渐进地介绍基本概念,并使用应用数学和科学中包含的典型应用来阐明这些概念,并给学生提供编写程序的机会来解决这些吸引人的问题。

我们使用Java程序设计语言来编写这本书中的所有程序--我们在程序设计的题目之后再提及Java是为了强调这本书是讲关于程序设计的基本概念,而不仅仅指Java本身。这本书讲授了许多解决计算问题的基本技能,这些技能可以应用于许多现代计算环境中。这本书独立的论述是专门服务于没有任何程序设计经验的人们。

对于传统的CS1课程来说这本书使用的是跨学科的方法。在这本书中我们将重点讲述从材料科学、基因组、天体物理学到网络系统等其他学科中的计算这个角色。这种方法主要是向学生强调,在当今世界中,数学、科学、工程和计算是紧密联系的这一重要思想。同时CS1课本的设计就是面向大学一年级的学生,他们都对数学、科学或者工程学(包括计算科学)感兴趣,这本书也可以用于自学,或者作为与其他领域的程序设计结合课程的补充。

内容范围

本书根据学习编程的四个阶段来组织:基本元素、函数、面向对象程序设计、算法和数据结构。在转向下一阶段前,我们将向读者提供他们所需要的基本信息,使读者有信心在每个阶段编写程序。本书讲授方法的一种本质特征是使用示例程序,它们将有助于解决能引起兴趣的问题,并在练习的范畴内支持从自学练习到具有挑战性的含有创新内涵的解决方案。

基本元素(basic elements)包括变量、赋值语句、数据的内置类型、控制流(条件和循环)、数组和输入输出以及图和声音。

Java程序设计--一种跨学科的方法前言函数和模块(functions and modules)是第一次向学生展示模块化程序设计。我们使用熟悉的数学函数来介绍Java的静态方法,分析使用函数程序设计的含义,函数包括库函数和递归函数。我们强调了基本思想:将程序划分成可以独立调试、维护和复用的程序段。

面向对象程序设计(object-oriented programming)是我们对数据抽象的介绍。我们强调数据类型(数值集和在数值集上的操作集)、对象(具有数据类型值的实体)和使用Java类机制的对象实现。我们教授学生如何使用(use) 、创建(create)和设计(design)数据类型。模块化、封装和其他现代程序设计范例是这个阶段的中心概念。

算法和数据结构(algorithm and data structures)结合现代的程序设计范例,使用典型的组织和处理数据的方法,使它们有效地用于现代应用。我们介绍了经典的排序和搜索算法,同时也介绍了基本的数据结构(包括堆栈、队列和符号表)及其应用,强调了使用科学方法来理解实现的性能特性。

在科学和工程学中的应用是本书的一个主要特点。我们对每个需要强调的程序设计概念的介绍都是通过分析它对具体应用的影响来进行的。我们的示例来自于应用数学、物理和生物科学、计算机科学本身,并包括物理系统、数字方法、数据可视化、声音合成、图像处理、金融模拟和信息技术。具体的示例包括在第1章中用于网页分级的马尔可夫链和案例研究:包括渗滤问题的处理、N体模拟和小世界现象。这些应用都是正文不可分割的组成部分。它们为学生提供了资料,说明了程序设计概念的重要性,并提供了在现代科学和设计中,计算扮演着重要角色的令人信服的证据。

我们的主要目标是教授学生对任何程序设计问题开发有效解决方案所需要的具体机制和技能。我们完全使用Java程序,并鼓励读者也使用它们。我们关注单独的程序设计,而不是库程序设计或大型程序设计(在附录中简要地进行了处理).

在课程中的使用

本书主要用作大学一年级课程教材,教授新生在科学应用的文本中进行编程。根据本书所教的内容,预计主修科学和工程学领域的学生将可在熟悉的文本中学习编程。任何已学完这本课程的学生已作好充分准备,将在以后的科学与工程学课程中应用他们的技能,并会意识到学习这门课程对进一步学习计算机科学是非常有益的。

特别是预计主修计算机科学的学生,将会从科学应用的文本中学习编程而受益。计算机学家在科学方法中需要基本相同的背景和在科学中对计算角色的展示,像生物学家、工程师或者物理学家所做的一样。

确实,我们的跨学科方法使学院和大学能给预计主修计算机科学和主修其他科学与工程的学生都学习相同的课程。我们覆盖了CS1所规定的资料,但是我们关注应用给概念带来生命,并激励学生学会这些概念。我们跨学科的方法为学生展示了许多不同学科中的问题,能帮助他们更明智地选择主修课。

无论何种具体的机制,使用这本书最好是在全部课程的早期。首先,这种安排允许我们使用在高中数学和科学中熟悉的资料。其次,在学生学习全部课程的早期先来学习编程,这样当学生继续学习专业时,就能使他们更加有效地使用计算机。像读书和写作一样,程序设计肯定是任何科学家或工程师的一项基本技能。掌握本书概念的学生将通过一生来不断发展这种技能,开发计算来解决或更好地理解在他们所选择领域中出现的问题和项目,并从中受益。

前提

本书非常适用于大学一年级的科学与工程专业的学生。换句话说,我们不需要其他的知识准备,只需要具备其他初级的科学和数学课程的知识。

数学知识完备是很重要的。当我们不再详述数学资料时,我们的确希望知道学生在高中已经学习了这些数学课程,包括代数、几何和三角学。许多学生(打算主修科学与工程)都自动满足我们目标的这些需求。的确,我们利用他们所熟悉的基本课程来介绍基本的程序设计概念。

科学的求知欲也是很重要的部分。科学和工程学的学生对科学探索的能力非常迷恋,它有助于解释自然的本质。我们使用简单的程序示例来支持这些对自然世界的爱好是非常有意义的。我们所做的任何具体知识的假设都没有超过高中课程中的数学、物理、生物或者化学所学过的知识范围。

程序设计经验(programming experience)不是必需的,但却是有益的。教会程序设计是我们的主要目标,因此我们假设所有参与学习的人没有任何预先的程序设计经验。但是编写程序解决新问题是一项富有挑战性的智力任务,因此在高中已编写了许多程序的学生可以把这本书作为程序设计课程入门,并从中受益(就像在高中已写过许多散文的学生可以在大学的写作课程中受益一样)。这本书可以作为各种背景学生的教材,因为不论是新生还是专家都喜欢书中的应用。

使用计算机的经验也不是必需的,但这根本不是问题。现在每个大学生都经常使用计算机,与亲戚朋友沟通、听音乐、处理照片和许多其他活动。认识到他们可以按有趣而又重要的方式利用自己的计算机能力,对大部分学生而言是一个扣人心弦和持久的经验。

总之,实际上在科学和工程学中的所有学生都可以用这本书作为他们第一学期课程学习的一部分内容。

目标

在科学和工程学的更高阶段的课程学习中,教师希望学生从这本书中应该学到什么样的知识呢?

我们覆盖了CS1课程,但是任何讲授程序设计入门课程的教师都知道在新课程中,讲师的期望通常会更高:每位讲师希望所有学生都熟悉需要使用的计算环境和方法。物理教授可能希望有些学生在周末对设计程序进行模拟;工程学教授可能希望其他学生使用一个特定数据包来解微分方程;计算机科学教授可能希望他们学习特定程序设计环境的详细知识。它真能满足这些不同的期望吗?对于不同的学生群体,是否应该有不同的入门课程呢?由于计算机的广泛使用,自从进入了20世纪后期,学院和大学一直被这样的问题所困扰。对于这些问题,我们的回答是使用通用的程序设计入门方法,与我们能接受的基本课程数学、物理、生物和化学类似。程序设计入门努力在为所有科学和工程的学习提供基本准备,同时也传递清楚的信息来更好的理解计算科学而不是程序设计。讲师希望学过这本书的学生,已具备必要的知识和经验使他们能适应新的计算环境,并在各种不同的应用中有效地利用计算机。

以这本书为教材修完这门课程的学生期望在这门新课程中学到什么呢?

我们的信息是程序设计不难学会,并且利用计算机的力量是有意义的。掌握了本书资料的学生正在为处理以后职业生涯中遇到的计算挑战而作准备。他们学会这种现代程序设计环境,就像Java提供的环境一样,使学生能够解决将来遇到的任何计算问题,同时他们也获得了学习、评价和使用其他计算工具的信心。对计算机科学感兴趣的学生也作好更充分的准备去进一步追寻这些兴趣;科学和工程学的学生准备将计算技能融合到他们的研究中。

图书站点

关于正文的大量补充信息可以在下面的网站上找到:

http://www.cs.princeton.edu/IntroProgramming

为了方便,我们始终把这个站点引用为图书站点。它包含用于教师、学生和本书的其他读者的资料。我们在这里简要地描述一下这些资料,尽管所有的网友都知道,最好的方式是通过浏览器来纵览它们。使用一些异常来支持测试的资料都是公共可用的。

图书站点最重要的一个含义是使教师和学生能通过自己的计算机来利用与教和学相关的资料。任何具有计算机和浏览器的人都能根据网站上的一些指导来开始学习编程。这个过程一点也不比下载媒体播放器或歌曲困难。和任何网站的使用一样,我们的图书站点一直在更新。对每个拥有这本书的人而言,它都是一个很重要的资源。补充材料对我们的目标至关重要。要使计算科学成为所有科学家和工程师教育不可分割的一部分。

对于教师,这个图书站点包含了教学的信息。这些信息主要是围绕我们在过去十几年间开发的教学模式组织的,我们每周为许多学生讲两次课,并且每周对学生进行两次课外辅导,学生分成小组与教师或助教在班会上进行讨论。图书站点有讲课的幻灯片,还有录音。

对于助教,图书站点包含了详细的问题集和程序设计项目,它们都是基于书中的练习,但是包含更多的详细内容。每个程序设计任务旨在引入有趣的应用文本中与学习相关的概念,同时对每个学生进行鼓励,使他们迎接这个挑战。课外作业系列体现了我们所讲授的程序设计的方法。图书站点充分地详细说明了所有的作业,并提供了详细结构化的信息来帮助学生在规定的时间内完成作业,还包括建议方法的描述和在班会上他们讨论过的教学内容的概括。

对于学生,图书站点包含了大量可以快速访问的本书的大量资料,包括源代码和鼓励自学的额外资料。另外还提供了书中练习的许多解决方案,包括完整的程序代码和测验数据。还有许多与程序设计作业相关的有价值的信息,包括建议的方法、清单、常见问题解决方案(FAQ)和测验数据。

对于一般读者(包括教师、助教和学生),图书站点是资源,是访问与书的内容相关的额外信息的一种方式。图书站点的所有内容都提供网页链接,并为分析的主题继续提供更多的信息。图书站点有更多可访问的信息,比任何人能接受的信息都要多,但是我们的目标是提供足够的关于书中内容的更多信息,来满足每位读者的需求。

致谢

这个项目从1992年开始启动,到目前为止,许多人为此做出了很大贡献才最终使项目成功,我们在此要对他们表示感谢。特别感谢Anne Rogers所做的弹球程序;Dave Hanson、Andrew Appel和Chris van Wyk耐心地解释数据的抽象化; 还有Lisa Worthington,是第一个使用这个资料来给大学一年级的学生上课的老师,这真是令人回味的挑战。同时我们也感谢/dev/126 (夏季学期学习这门课的学生,他们提供了大量的内容);在过去15年中,在Princeton的专业人士、研究生和教员都在致力于讲授这些资料,数以万计的大学生都已专门学习了这些资料。

more >

java程序设计 一种跨学科_清华大学出版社-图书详情-《Java程序设计:一种跨学科的方法》...相关推荐

  1. java程序设计 第三版_清华大学出版社-图书详情-《Java语言程序设计(第3版)》...

    第3版前言 Java语言是目前应用最广泛的编程语言之一,学习和使用Java的人越来越多.为了帮助初学者尽快掌握Java编程,感受到Java语言的魅力,领会到Java编程的快乐,笔者根据长期Java授课 ...

  2. python程序设计上机实践答案_清华大学出版社-图书详情-《C++程序设计上机实践与学习辅导(第三版)》...

    前言 C++是一种高效.实用的程序设计语言,它既可以进行过程化程序设计,也可以进行面向对象程序设计,是编程人员使用最广泛的工具之一. 对程序设计语言而言,编写出简洁.高效.实用的程序才是最终的学习目的 ...

  3. java程序设计实用教程_清华大学出版社-图书详情-《Java程序设计实用教程》

    技术具有卓越的通用性.高效性.平台移植性和安全性,经过20多年的发展,目前已广泛应用于PC.数据中心.游戏控制台.超级计算机.移动电话和互联网,同时拥有全球最大的开发者专业社群.在全球云计算和移动互联 ...

  4. java程序设计清华大学出版社_清华大学出版社-图书详情-《Java程序设计基础》...

    出 版 说 明 我国高等学校计算机教育近年来迅猛发展,应用所学计算机知识解决实际问题,已经成为当代大学生的必备能力. 时代的进步与社会的发展对高等学校计算机教育的质量提出了更高.更新的要求.现在,很多 ...

  5. java程序设计实验指导与习题解答_清华大学出版社-图书详情-《Java程序设计基础(第6版)实验指导与习题解答》...

    前言 本书是清华大学出版社出版的<Java程序设计基础(第6版)>一书的配套用书.全书共分为两部分: 第一部分是实验指导: 第二部分是主教材<Java程序设计基础(第6版)>的 ...

  6. java语言程序设计你_清华大学出版社-图书详情-《Java语言程序设计》

    前言 Java语言是一种典型的面向对象的.跨平台的.支持分布式和多线程的优秀编程语言,具有极强的扩展性.自其诞生以来,迅速被业界认可并广泛应用于Web应用程序的开发中.在此形势下,国内高校在计算机及相 ...

  7. java编程最新图书_清华大学出版社-图书详情-《Java程序设计》

    前言 Java是一种完全面向对象的程序设计语言,具有卓越的通用性.高效性.平台移植性和安全性,得到广泛的应用.在全球云计算和移动互联网产业高速发展的环境下,Java具备显著的优势和广阔前景.本书以Ja ...

  8. python程序设计课后答案祁瑞华_清华大学出版社-图书详情-《Python 程序设计》

    前言 Python语言作为一种免费.开源语言,已被许多学校引入教学过程.它是面向对象和过程的程序设计语言,具有丰富的数据结构.可移植性强.语言简洁.程序可读性强等特点.本书根据实际教学经验,对内容进行 ...

  9. java程序设计基础(第3版)实验指导_清华大学出版社-图书详情-《Java程序设计基础(第5版)实验指导与习题解答》...

    本书是清华大学出版社出版的<Java程序设计基础(第5版)>的配套用书.全书共分为两部分,第一部分是上机实验指导,第二部分是主教材<Java程序设计基础(第5版)>中的习题解答 ...

最新文章

  1. Java源码详解零:HashMap介绍
  2. PCB设计过孔选用指导
  3. python同步两张数据表_Python 如何实现数据库表结构同步
  4. java 关注公众号没有调接口_高频面试题:接口和抽象类的区别
  5. 第十一节: EF的三种模式(一) 之 DBFirst模式(SQLServer和MySQL两套方案)
  6. 数据库查询字段为空时,返回0
  7. leetcode - 141. 环形链表(哈希表)
  8. 【在线集成开发环境】Eclipse Che简单上手体验
  9. LeetCode题库11:盛最多水的容器——JavaScript解答
  10. django Error: That port is already in use.
  11. HTML 空格转义符的用法
  12. HTML5前端设计——课表制作
  13. 企业服务总线 ESB 介绍和用例
  14. Android 角标设置
  15. uniapp的navigateTo页面跳转参数传递问题
  16. 智能优化算法:饥饿游戏搜索算法-附代码
  17. VSCode更改主题背景
  18. Exchange 2007 被攻击
  19. 小米嵌入式软件工程师笔试题目解析
  20. bytebuffer获得byte[]的操作

热门文章

  1. 好用的chatgpt网站推荐
  2. 贵州12月计算机考试2020,2020年3月贵州全国计算机等级考试报名时间:12月18日-30日...
  3. 利用 Kubeadm部署 Kubernetes 1.13.1 集群实践录
  4. 中国电信为武汉协和搭建的5G远程会诊平台正式投入使用!
  5. 移动端在线预览pdf,word资源
  6. 古代名句精选 version 2
  7. 雪龙号航迹数据处理过程整理
  8. 微信小程序API之发起请求request
  9. python3 提取网页数据
  10. python web全栈开发_价值2400元的python全栈开发系列Flask Python Web 网站编程视频教程...