第5章计算机科学5.1概述几十年来学科自身发展的实践表明,一方面,围绕着一些重大的背景问题,各分支学科取得了一系列重要的理论和技术成果,推动了计算机科学向深度和广度发展;另一方面,由于发展了一大批成熟的技术并成功地应用于各行各业,更多的人是把这门科学看成是一种技术。事实上,理论和技术是计算机科学两个互为依托的侧面。计算机科学的理论绝大多数属于技术理论。虽然,目前整体上理论研究滞后于技术开发,但随着学科研究和应用的不断深化,理论的重要性地位将愈来愈突出,而技术则渐渐退居为次要的位置。计算机科学并不完全排斥工程的方法。相反,计算机科学在发展中广泛采用了其他学科行之有效的工程方法。5.2计算机科学体系5.2.1计算机科学知识组织结构及演变计算机科学的发展及其知识组织结构的演变在时间上可划成以下几个独立的阶段:30至50年代末为计算机科学发展的早期,计算机科学研究方向主要集中在计算模型、计算机设计、高级语言和科学计算等方面。应用主要是大量的科学计算,与数学关系密切,使大量从事数学研究的人员转行进入计算机科学领域。60、70年代是计算机科学蓬勃发展的时期,面对学科发展中遇到的许多重大问题,如怎样实现高级语言的编译系统,如何设计各种新语言,如何提高计算机运算速度和存贮容量,如何设计操作系统,如何设计和实现数据库管理系统,如何保证软件的质量等问题,发展了一大批理论、方法和技术。从80年代起,针对集成电路芯片可预见的设计极限和一些深入研究中所遇到的困难,如软件工程、计算模型、计算语言学、大规模复杂问题的计算与处理、大规模数据存贮与检索、人工智能、计算可视化等方面出现的问题,人们开始认识到学科正在走向深化。除了寄希望于物理学中光电子计算技术研究取得突破,成倍提高机器运算速度外,基于当前的条件,人们更加重视理论和技术的研究。如同50年代数学研究所需的核心专业基础知识从老三基(高等代数、数学分析(含几何、分析和函数论)与微分方程)向新三基(抽象代数、泛函分析与拓扑学)过渡转移发生变化一样,计算机科学未来发展所需要的核心专业基础也正在发生转移。这是一个不以人的意志转移的客观规律,是学科发展的大趋势,应该引起计算科学教育界和师生严肃认真的对待。总之自20世纪40年代电子计算机问世以来,计算机科学一直处于高速发展的过程中。而且,在可以预见的未来,这种发展速度还将会保持下去。今天的计算机科学与10年前相比,已经有了很大的差别。除了学科知识的变化外,近几年来,计算机学科方法论的内容也逐渐丰富并被人们重视。因此,计算机学科方法论的内容也需要在教学中给予充分的体现。5.2.2计算机科学的教育1.学科知识体系的演变发展一方面,计算机学科的快速发展使得学科的教育已经完全不能通过跟踪流行系统的变化来跟踪学科的发展,更不能以流行的系统来确定教学内容,有限的在校学习时间与不断增长的知识的矛盾十分突出。另一方面,经过几十年的发展,本学科正在逐步走向深入,这给计算机学科的教育既提出了新的要求,也提供了新的思路。2.学科的课程体系完整的计算机科学的课程由三部分组成:奠定基础的基础课程,涵盖知识体系大部分核心单元的主干课程,以及用来完备课程体系的特色课程。1)学习模式不同的入门途径可充分体现课程特点。程序设计优先的入门模式是相对稳定的课程体系,由于程序设计通常是学习后续课程所必需的技能,因此程序设计优先的入门模式具有一定优点。程序设计优先基于函数式程序设计,形成了函数优先的入门模式。它使用更抽象的方式来思考.所有入门者都处于同一起跑线上接受新的思维方式。面向算法的算法优先入门模式描述基本算法概念和结构的是一种伪语言,而不是一种特定的执行语言,可以不必过多关注程序实现的细节,有利于以后的学习和尽早了解计算机学科。面向机器的硬件优先入门模式从模型机的电路、寄存器出发建立硬件基础,再继续进行高级程序设计等其他内容的学习。2)课程组织形式计算机科学课程的组织形式大致可以分为两类,一类是主题的模式,另一类是系统的模式。以主题的模式组织的课程,大致按领域划分相应的课程,即一个领域大致对应一门课,如算法与数据结构、计算机体系结构、操作系统等。当然也有由一、两个领域对应一门课.如操作系统和网络汁算、人工智能和信息管理等。系统模式则是基于某些软件系统而组织的课程,如数据库系统、管理信息系统、编译系统和操作系统等.它们从各领域中抽取相关的知识单元,组成课程。3)核心课程核心课程包含了基础课程和主干课程中最重要的内容。表5.1列出了计算机科学与技术学科核心课程,特色课程是根据核心课程所包含的知识单元的深度,进一步反映发展、反映学科前沿进展的课程。5.3计算机与人类社会计算机技术革命在当今世界发展中发挥着重要的作用。在计算机产业带给人类巨大的效益和便利时,同时也带来了诸如环境保护、对人体的某些危害等问题,其相关问题也是应关注的问题。5.3.1计算机与环境1.计算机与社会环境计算机科学技术的发展,拉近了人类的距离,因特网已把人们连在了一起,人类共同拥有地球。因而保护地球,保护环境,也是计算机产业的从业人员所必须重视的一个方面。计算机产业曾经被认为是一个洁净的工业,它在制造中产生相对较小的污染。但随着计算机数量的急剧增加,也给世界带来了许多问题。其中能源消耗是一个主要问题,由于计算机运行时产生热量但又需要较低的工作温度,因此需要额外的电能进行降温。这对能源的消耗产生了间接影响。使用低能耗设备、屏幕保护程序和长时间离开计算机前关掉显示器就是节能的好办法。尽快考虑处理废旧软盘、大量废弃的计算机和外没也是当务之急,否则将会对环境产生不利影响。当计算机刚开始普及的时候,人们就在议论所谓“无纸办公”的问题,但事实是在计算机普及之后,纸的用量却增加了许多。用户应当注意节省纸张,在文档资料打印前应当尽可能做好编辑工作。使用可回收墨盒的激光打印机不仅对环境有益还可以节省成本。总之,无论是计算机的生产企业还是用户,都应为“绿色信息产业”做贡献。2.计算机与个人环境计算机通常会从两个方面对健康产生负面影响,已被大部分人所认同。首先,计算机的显示器会产生辐射。其次,日复一日地使用计算机会有损健康,引起眼睛的疲劳和压迫损伤。但只要采取必要的预防措施,上述问题还是可以避免的。①辐射的危险②计算机视觉综合症③其他损伤•图6.4腕托5.3.2计算机与道德1.计算机科学技术专业人员的道德准则由计算机在人类的生活中发挥着越来越重要的作用,作为计算机科学技术专业人员在本专业领域的处世行事中都会遇到由于计算机的使用而带来的一些特殊的道德问题。美国计算机学会(ACM)对其成员制定了一个有24条规范的《ACM道德和职业行为规范》,其中最基本的几条准则也是所有专业人员应该遵循的。这些准则是:①为社会进步和人类生活的幸福做贡献。②尊重别人的隐私权,不应该伤害他人。⑧要公平公正地对待别人。④要尊重别人的知识产权。⑤使用别人的知识产权应征得别人同意并注明。⑥尊重国家、公司、企业等特有的机密。2.计算机用户的道德用户或许没有想到坐在一台个人电脑前会产生道德问题,但事实的确如此。比如,几乎每一个计算机用户迟早都会碰到关于软件盗版的道德困惑。其他的道德问题还包括色情内容和对计算机系统的未经授权的访问等。1)反对软件盗版对于计算机用户来说,最迫切要解决的道德问题之一就是计算机程序的复制。有些程序是免费提供给所有人的,这种软件被称为自由软件,用户可以合法地复制或下载。这种软件之所以免费是因为创作这些软件的人乐意所有的人免费得到它们。另一种类型的软件叫做共享软件,共享软件具有版权,它的创作者将它提供给所有的人复制和试用。作为回报,如果用户在试用后仍想继续使用这个软件,软件的版权拥有者有权要求用户登记和付费。此后共享软件提供者会向登记用户提供软件升级和修正。然而,大部分软件都是有版权的软件,软件盗版包括非法复制有版权的软件,有关法律禁止对有版权软件不付费的复制和使用。大多数软件公司允许对他们的软件做一个备份,以备在以后磁盘或文件被破坏时恢复使用。大多数软件都可在硬盘上复制或安装以便于使用。许多软件出版商允许将软件复制到用户台式计算机或笔记本电脑中。但是,用户不应该复制软件送给他人或出售。如果软件是装在某所大学计算机实验室中的计算机上的,则不能不付费就复制到另一所大学的计算机系统上使用。现在,由于计算机和Internet的普及和各种各样信息的多渠道发布(包括杂志上的文章、文字作品、书的摘录和网络作品等)用户应养成负责而有道德地使用这些信息,无论自己的作品是对这些信息的直接引用还是只引用了大意,都应当在引文或参考文献中注明出处,指出作者的姓名、文章标题、出版地点和日期等。拥有多台计算机的机构,如大学或研究所,可以以较低的单台价格为所有计算机购买软件。这种称为场所许可的协议是用户同软件出版商达成的一种合同;这个合同允许在机构内部对软件进行多份复制使用。但是,将复制品带到其他机构使用就违反了合同。编写一个软件需要很长的时间和很多人的努力。通常,从项目的启动到开始取得销售收入需要2~3年或更长的时间,软件盗版增加了软件开发及销售的成本并且抑制了新软件的开发。因此盗版从总体上来说于人于己都是不利的。每个人都会因为软件盗版而受到损失。2)不进行未经授权的计算机访问有些计算机爱好者喜欢将自己的计算机技能发挥得淋漓尽致。有时他们试图进入那些计算机系统进行未经授权的访问。实际上未经授权的计算机访问是一种违法的行为。“黑客”用来指对计算机系统进行未经授权的计算机访问,显然,一个修改或破坏医院记录系统关键数据的“黑客”很可能会对别人的生命安全构成威胁。“闯入者”被用来指计算机犯罪。无论是否造成危害,闯入行为都是错误的,因为它违反了“尊重别人隐私”的道德准则。3)使用公用及专用网络时自律随着在线信息服务、公用网络(如Internet)和BBS服务的增长,在线公布资料已成为现实。最具爆炸性的问题就是通常被称为计算机色情。目前Internet上存在着很多问题,因为它没有统一的管理机构,也没有能力强化某些规则或标准。Internel是一个开放的论坛,即它不可能受到检查。只要还没有限制从网上获取资料的方法,这个问题就不可能获得彻底解决,只能靠成年人去保护未成年人,使他们不受计算机色情危害,不去访问那些有色情内容的网站。目前,专营店出售那些可以对网址进行选择及屏蔽的过滤软件。当然,最重要的还是用户的自律,不要在网上制造和传播这类东西。3.程序员的责任即使最道德的程序员也会编写出有错误的程序。大多数复杂的程序有太多的条件组合,要测试程序的每一种条件组合是不可行的。在有些情况下,这种测试需要花几年的时间;其他情况下,没有人会考虑测试所有可能性。所有有经验的程序员都知道程序无论大小都会有错误。程序员的责任起于确定这些错误是不可避免的还是程序员的疏忽。程序员的责任这个问题经常在出现法庭上。我们可以考虑以下这种情况。在较低的能见度下,飞机用计算机来导航。这种情况很常见。控制飞机的空中交通控制系统也是一个计算机系统,目前在大型机场使用。飞机坠毁了,在每个软件包中都发现了一个小错误。如果飞机是同塔台中的一个人而不是计算机打交道,这个错误就不会出现。如果空中交通控制程序是同飞行员联系,这个错误也不会发生。两个错误都被判定为是不可避免的。造成生命和财产损失的责任到底在哪儿?那些尽责地为生命攸关的控制系统编写程序的程序员经常会做一些犯了致命错误的噩梦。他们通常要求对工作进行好几个层次的同级复查以确保已尽了最大的努力来排除程序的错误。5.3.3计算机与法律1.新的法律问题计算机已经开辟了一些原来不大可能的职业,比如涉及因特网和法律的律师。对于因特网商务交易及在线销售来说,数字签名(个人密码以及出于安全目的的不可破译的代码)、第三方证明人(确认签名者的身份)以及电子水印(嵌入文件的电子代码)现在都是必要的。这三项已成了依法判决的根据,因为常用的扫描签字很容易被复制、剪切和粘贴。2.知识产权为保护计算机软件著作权人的利益,调整计算机软件的开发、传播和使用中发生的利益关系,鼓励计算机软件的开发与流通,促进计算机应用