主讲:XXXE-Mail:XXXXXXXX计算机科学导论—思想与方法第一章绪论本章首先简单介绍计算学科命名的背景、计算学科的定义,以及计算学科的根本问题,并阐述了计算学科专业名称的演变、分支学科及其培养侧重点。然后,介绍计算机科学、计算机工程、软件工程和信息技术等4个主要分支学科的知识体和核心课程。最后,提出“计算机导论”课程的构建问题,介绍课程的结构设计,以及结构设计的基础,即计算学科认知模型——计算学科二维定义矩阵的概念。1.1引言本节的目的在于,让学生了解计算学科的定义,学科的根本问题,为后继章节的学习做个简单铺垫。1.1.1计算学科命名的背景如何认知计算学科,有着不少争论。1984年7月,美国计算机科学与工程博士单位评审部的领导们,在犹他州召开的会议上对计算认知问题进行了讨论。这一讨论以及其他类似讨论促使(美国)计算机协会(ACM)与(美国)电气和电子工程师学会计算机分会(IEEE/CS)于1985年春联手组成任务组,经过近4年的工作,任务组提交了在计算教育史上具有里程碑意义的“计算作为一门学科”(ComputingasaDiscipline)报告,报告论证了计算作为一门学科的事实,回答了计算学科中长期以来一直争论的一些问题,并将当时的计算机科学、计算机工程、计算机科学和工程、计算机信息学以及其他类似名称的专业及其研究范畴统称为计算学科。1.1.2计算学科的定义计算学科是对描述和变换信息的算法过程进行的系统研究,包括理论、分析、设计、效率、实现和应用等。计算学科包括对计算过程的分析以及计算机的设计和使用。该学科的广泛性在下面一段来自美国计算科学鉴定委员会发布的报告摘录中得到强调:计算学科的研究包括从算法与可计算性的研究到根据可计算硬件和软件的实际实现问题的研究。这样,计算学科不但包括从总体上对算法和信息处理过程进行研究的内容,也包括满足给定规格要求的有效而可靠的软硬件设计—它包括所有科目的理论研究、实验方法和工程设计。1.1.3计算学科的根本问题学科的根本问题是:什么能被(有效地)自动进行。计算学科来源于对算法理论、数理逻辑、计算模型、自动计算机器的研究,并与存储式电子计算机的发明一起形成于20世纪40年代初期。1.2专业名称的演变,学科描述及培养侧重点计算学科现已成为一个庞大的学科,无论是教师,学校,还是学生和家长都希望有一份权威性的报告来了解学科的相关情况。为此,IEEE/CS和ACM任务组作了大量的工作,并于2001至2005年,分别提交了计算机科学(ComputerScience,简称CS),信息系统(InformationSystem,简称IS),软件工程(SoftwareEngineering,简称SE),计算机工程(ComputerEngineering,简称CE),信息技术(InformationTechnology,简称IT)等5个分支学科(专业)的教程以及相应的总报告(图1-1),给出了5个分支学科的知识体以及相应的核心课程,为各专业教学计划的设计奠定了基础,同时也为公众认知和选择这些专业提供帮助。CC2005OverviewCC2001(CS2001)计算机科学IS2002信息系统SE2004软件工程CE2005计算机工程IT2005信息技术其它教程新增专业根据我国高校的情况,我国教育部高等学校计算机科学与技术教学指导委员会(简称“计算机教指委”)制订的《高等学校计算机科学与技术发展战略研究报告暨专业规范(试行)》(高等教育出版社出版2006年9月出版,简称“计算机专业规范”)采纳了CC2005报告中的四个分支学科,并以专业方向的形式进行规范,它们是:计算机科学,计算机工程,软件工程,信息技术。本节,仅介绍学科专业名称的演变,学科的描述以及培养的侧重点等内容。下一节,再介绍学科的知识体和核心课程。1.2.1演变中的学科专业名称1962年,美国普渡大学开设了最早的计算机科学学位课程。当时,在美国的一些高校还开设有与计算相关的两给学位课程:电子工程和信息系统。而在我国,早在1956年,就开设了“计算装置与仪器”专业。20世纪60年代,随着问题复杂性的增加,制造可靠软件的困难越来越大,出现了“软件危机”。为了摆脱“软件危机”,1968年秋,北大西洋公约组织(NATO)在当时的联邦德国召开了一次会议,提出了软件工程的概念。20世纪70年代,在美国,计算机工程(也被称为“计算机系统工程”)从电子工程学科中脱离出来,成为一个独立的二级学科,并被人们所接受。20世纪70年代未、80年代初,在一些计算机科学专业的学位课程中,引入了“软件工程”的内容,然而,这些内容,只能让学生了解“软件工程”,却不能使学生明白“如何成为一名软件工程师”。于是,人们开始构建单独的软件工程学位课程。20世纪80年代,英国和澳大利亚,最早开设了软件工程这样的学位课程。20世纪90年代,计算机已成为公司各级人员使用的基本工具,而计算机网络则成为公司信息的中枢,人们相信它有助于提高生产力,而原有的学术学位课程并不能满足社会的需求,于是,在美国等西方国家,不少大学,相继开设了信息系统和信息技术等学位课程。在这里,需要指出的是,即使在美国,5个分支学科(专业)同时在一所大学开设的情况也是不多的,更多的高校仍然是以传统的“计算机科学”为主;在我国,则是以“计算机科学与技术”为主。1.2.2分支学科(专业)描述及培养侧重点计算为个人的职业生涯提供了广泛的选择,进入计算职业的人员应重视他们的职业化训练,并通过计算学科相应学位课程的严格要求。下面,分别介绍各分支学科(专业)及其培养侧重点。(1)计算机科学,涉及很宽的范围,包括了计算的理论、算法和实现,以及机器人技术、计算机视觉、智能系统、生物信息学和其他新兴的有前途的领域。计算机科学是计算各学科的基础,计算机科学专业培养的学生,更关注计算的理论基础和算法,并能从事软件开发及其相关的理论研究。(2)计算机工程,是对现代计算系统和由计算机控制的有关设备上的软件与硬件的设计、构造、实施和维护进行研究的学科。计算机工程专业培养的学生,更关注设计并实施集软件和硬件设备为一体的系统,如嵌入式系统。(3)软件工程,是指以系统、学科、定量的方法,把工程应用于软件的开发、运行和维护;同时,展开对上述过程中各种方法和途径进行研究的学科。软件工程专业培养的学生,更关注以工程规范进行的大规模软件系统开发与维护的原则,并尽可能避免软件系统潜在的风险。(4)信息系统,是指如何将信息技术的方法与企业生产和商业流通结合起来,以满足这些行业需求的学科。信息系统培养的学生,更关注信息资源的获取、部署、管理及使用,并能分析信息的需求和相关的商业过程,能详细描述并设计那些与目标相一致的系统。(5)信息技术,从广义上来说,它包括了所有计算技术的各个方面,在此专指作为一门学科的信息技术。它侧重在一定组织及社会环境下,通过选择、创造、应用、集成和管理的计算技术来满足用户的需求。与信息系统相比,信息技术更关注于“信息技术”的技术层面,而信息系统则重于“信息技术”的“信息”层面。信息技术专业培养的学生,更关注基于计算机的新产品及其正常的运行和维护,并能使用相关的信息技术来计划、实施和配置计算机系统。1.3学科知识体和核心课程CC2001报告给出了计算机科学知识体的概念,为其他分支学科知识体的建立提供了模式。学科知识体由以下3个层次构成,下面以计算机科学为例进行介绍:(1)最高层是分支领域(area),它代表一个特定的学科子领域。每个分支领域由两个字母的缩写词表示,比如OS代表操作系统,PL代表程序设计语言。(2)分支领域之下又分为更小的知识单元(unit),它代表该领域中的主题模块。每个知识单元都用一个领域名加一个数字后缀表示,比如OS3是操作系统领域中关于并发的单元。为便于教学,报告还给出了所有知识单元的最小核心学时和学习目标,供教师参考。(3)知识单元又被细分为众多的知识点(topic),这些知识点构成了知识体结构的最底层。比如,在DS领域(离散结构)的第1个知识单元DS1(函数、关系、集合)中,相应的知识点有:函数(满射,到内的映射,逆函数,复合函数),关系(自反,对称,传递,等价关系),集合(文氏图,补集,笛卡尔积,幂集),鸽笼原理,基数性和可数性等。结合我国的实际情况,计算机教指委根据IEEE/CS和ACM任务组给出的计算机科学、计算机工程、软件工程和信息技术等4个分支学科知识体和核心课程描述,组织编制了计算机专业规范。下面,简要介绍构成计算机专业规范的4个分支学科的知识体和核心课程。1.3.1计算机科学知识体和核心课程1.计算机科学知识体为便于学习,下面列出计算机科学知识体中的14个领域,以及132个知识单元(表1-1,表中单元后的数字表示学习所需的最小核心学时,该学时为一个相对值,一般要求有3倍以上的课外学时与之配套)。DS离散结构(43)DS1函数、关系、集合(6)DS2基本逻辑(10)DS3证明方法(12)DS4计算基础(5)DS5图和树(4)DS6离散概率(6)PF程序设计基础(38)PF1基本程序设计结构(9)PF2算法和问题求解(6)PF3基本的数据结构(14)PF4递归(5)PF5事件驱动的程序设计(4)AL算法和复杂性(31)AL1算法分析基础(4)AL2算法策略(6)AL3基本的计算算法(12)AL4分布式算法(3)AL5可计算性基础(6)AL6P和NP复杂类AL7自动机理论AL8高级算法分析AL9加密算法AL10几何算法AL11并行算法AR体系结构和组织(36)AR1数字逻辑和数字系统(6)AR2数据的机器级表示(3)AR3汇编级机器组织(9)AR4存储系统组织和体系结构(5)AR5接口和通信(3)AR6功能组织(7)AR7多处理和其他体系结构(3)AR8性能提高技术AR9网络与分布式系统的体系结构OS操作系统(18)OS1操作系统概述(2)OS2操作系统原理(2)OS3并发(6)OS4调度和分派(3)OS5存储管理(5)OS6设备管理OS7安全和保护OS8文件系统OS9实时和嵌入式系统OS10容错OS11系统性能评价OS12脚本NC网络计算(15个核心小时)NC1网络计算引导(2)NC2通信与组网(7)NC3网络安全(3)NC4顾客-服务器计算的实例:Web(3)NC5建立Web应用NC6网络管理NC7压缩和解压缩NC8多媒体数据技术NC9无线和移动计算PL程序设计语言(21)PL1程序设计语言概述(2)PL2虚拟机(1)PL3语言翻译导引(2)PL4声明和类型(3)PL5抽象机制(3)PL6面向对象程序设计(10)PL7函数式程序设计PL8语言翻译系统PL9类型系统PL10程序设计语言的语义PL11程序设计语言的设计HC人机交互(8)HC1人机交互基础(6)HC2创建简单的图形用户界面(2)HC3以人为中心的软件评估HC4以人为中心的软件开发HC5图形用户界面设计HC6图形用户界面的程序设计HC7多媒体系统的人机交互HC8协作和通信的人机交互GV图形学和可视化计算(5)GV1图形学的基本技术(2)GV2图形系统(1)GV3图形通信(2)GV4几何模型GV5基本绘制GV6高级绘制GV7高级技术GV8计算机动画GV9可视化GV10虚拟现实GV11计算机视觉IS智能系统(10)IS1智能系统的基本问题(1)IS2搜索和约束满足(5)IS3知识表示与推理(4)IS4高级搜索IS5高级知识表示与推理IS6代理IS7自然语言处理IS8机器学习与神经网络IS9人工智能规划系统IS10机器人学IM信息系统(10)IM1信息模型与信息系统(3)IM2数据库系统(3)IM3数据建模(4)IM4关系型数据库IM5数据库查询语言IM6关系数据库设计