斯坦福大学编译原理
⑴ 《Compilers Principles》txt下载在线阅读全文,求百度网盘云资源
《Compilers Principles编译原理》(Alfred V. Aho)电子书网盘下载免费在线阅读
链接: https://pan..com/s/1uTWbyl7EEuUO1EgQpbxOkg
书名:Compilers Principles编译原理
作者:Alfred V. Aho
豆瓣评分:9.2
出版社:机械工业出版社
出版年份:2011-1
页数:1009
内容简介:
本书是编译领域无可替代的经典着作,被广大计算机专业人士誉为“龙书”。本书上一版自1986年出版以来,被世界各地的着名高等院校和研究机构(包括美国哥伦比亚大学、斯坦福大学、哈佛大学、普林斯顿大学、贝尔实验室)作为本科生和研究生的编译原理课程的教材。该书对我国高等计算机教育领域也产生了重大影响。 第2版对每一章都进行了全面的修订,以反映自上一版出版20多年来软件工程。程序设计语言和计算机体系结构方面的发展对编译技术的影响。本书全面介绍了编译器的设计,并强调编译技术在软件设计和开发中的广泛应用。每章中都包含大量的习题和丰富的参考文献。 本书适合作为高等院校计算机专业本科生和研究生的编译原理与技术课程的教材,也可供广大计算机技术人员参考。
作者简介:
Alfred V.Aho,美国歌伦比亚大学教授,美国国家工程院院士,ACM和IEEE会士,曾获得IEEE的冯·诺伊曼奖。着有多部算法、数据结构、编译器、数据库系统及计算机科学基础方面的着作。
Monica S.Lam,斯坦福大学计算机科学系教授,曾任Tensilica的首席科学家,也是Moka5的首任CEO。曾经主持SUIF项目,该项目产生了最流行的研究用编译器之一。
Ravi Sethi,Avaya实验室总裁,曾任贝尔实验室高级副总裁和Lucent Technologies通信软件的CTO。他曾在宾夕法尼亚州立大学,亚利桑那州立大学和普林斯顿大学任教,是ACM会士。
Jefirey D.Ullman斯坦福大学计算机科学系教授和Gradiance CEO。他的研究兴趣包括数据库理论、数据库集成、数据挖掘和利用信息基础设施教学等。他是美国国家工程学院院士、IEEE会士,获得过ACM的Karlstrom杰出教育奖和Knuth奖。
⑵ CCCF专栏 | 智能计算系统——一门人工智能专业的系统课程
我国人工智能底层研究能力缺失的现象严重,最根本的原因在于这方面人才教育培养的缺失。2018年中,作者陈云霁在中国科学院大学开设了一门“智能计算系统”课程。这门课程受到了学生的欢迎,有很多选不上课的学生跟着旁听了整个学期。
关键词:智能计算系统 人工智能 专业课程
编者按 :5年前,本文作者陈云霁受邀在CCCF专栏上发表了一篇题为《体系结构研究者的人工智能之梦》 1 的文章,第一次公开介绍他从通用处理器转向深度学习处理器方向的心路历程(那篇文章后来也被收录进了《CCCF优秀文章精选》)。经过5年的努力,陈云霁在深度学习处理器方向作出了国际公认的贡献:他的学术论文被顶级会议ISCA’18超过四分之一的论文引用,他的技术成果被应用到华为、曙光、阿里等近亿台智能手机和服务器中。他因此被Science杂志评价为智能芯片的“先驱”和“领导者”。现在,当深度学习处理器已经成为学术界和工业界的热点时,陈云霁再次转身,迈向人工智能系统课程教学的新舞台。这篇文章将和大家分享他走向这个新舞台的心路历程。
智能计算系统课程的开设
我是一名中国科学院计算技术研究所的青年科研人员,主要从事计算机系统结构和人工智能交叉方向的基础研究。看到本文的标题和作者单位,大家可能会觉得有一点奇怪:作者和人工智能专业课程有什么关系?因为传统意义上,上课是高校教师的职责,中国科学院的员工除非是自愿担任了中国科学院大学(国科大)的岗位教授,否则并没有上课的义务。
驱使我主动思考人工智能专业课程设计的最主要的原因,是这样一个众所周知的现象:越是人工智能上层(算法层、应用层,见图1)的研究,我国研究者对世界作出的贡献越多;越是底层(系统层、芯片层),我国研究者的贡献越少。在各种ImageNet比赛中,我国很多机构的算法模型已经呈现“霸榜”的趋势,可以说代表了世界前沿水平。但这些算法模型绝大部分都是在CUDA 2 编程语言、Tensorflow编程框架以及GPU之上开发的。在这些底层“硬 科技 ”中,我国研究者对世界的贡献就相对少了很多。底层研究能力的缺失不仅会给我国人工智能基础研究拖后腿,更重要的是,将使得我国智能产业成为一个空中楼阁,走上信息产业受核心芯片和操作系统制约的老路。
图1 人工智能研究大致层次
我国人工智能底层研究能力缺失的原因很多,我认为最根本的原因在于这方面的人才教育培养的缺失。没有肥沃的土壤,就长不出参天大树。没有具备系统思维的人工智能专业学生,我国就难以出现杰夫·迪恩(Jeff Dean)这样的智能计算系统大师,也不会产生有国际竞争力的智能系统产品。因此,在人工智能专业学生的培养上,我们应当主动作为去改变局面。
2018年我国有35个高校设立了人工智能本科专业,这是重新思考和梳理人工智能培养体系的一次重大机遇。就我目前的了解,大部分高校在考虑人工智能课程体系时,采用的是纯算法、纯应用的教学思路。这样培养出来的学生,仍然是偏向上层应用开发,对智能计算系统缺乏融会贯通的理解。
事实上,各个高校不乏有识之士,在课程设计上绕开系统课程往往受制于三大客观困难:一是国内还没有太多人工智能系统类的课程可供参考,二是国内缺乏人工智能系统类课程的师资,三是国际上缺乏人工智能系统课程的教材。
基于自己的研究背景,我对人工智能的算法和系统都有一些粗浅的涉猎。我是否能为解决人工智能系统课程、师资、教材上的困难作一点微薄的贡献?是否可以身体力行地培养一些具备系统思维和能力的人工智能专业学生呢?
因此,2018年中,我向中国科学院大学申请开设一门人工智能专业的系统课程,名为“智能计算系统”(曾名“智能计算机”),希望能培养学生对智能计算完整软硬件技术栈(包括基础智能算法、智能计算编程框架、智能计算编程语言、智能芯片体系结构等)融会贯通的理解。这门课程受到了学生的欢迎,有很多选不上课的学生跟着旁听了整个学期。让我尤其感动的是,有其他研究所的学生慕名自发地从中关村跑到怀柔来听课,上一次课来回车程就要三个小时,回到中关村都是深夜。这也许能说明这门课对学生来说有一定吸引力,大家在听课中有真正的收获。
人工智能专业学生培养和课程体系
人工智能专业的课程体系设计应该服务于学生培养目标。那么高校人工智能专业应该培养什么样的学生?
这个问题可能还没有统一的答案。对比和人工智能专业非常接近的计算机专业,高校的计算机专业培养的显然不是计算机的使用者,而是计算机整机或者子系统的研究者、设计者和制造者。
我国计算机专业的前辈在六十多年前开始设立计算机专业时,就高瞻远瞩地设计了一个软硬结合的方案来培养计算机整机或者子系统的研究者、设计者和制造者。这套方案经过六十年的演进,依然基本保持了当年的初衷。今天,各个高校的计算机专业,基本都开设了计算机组成原理、操作系统、编译原理、计算机体系结构等系统类的必修课程(见图2)。也就是说,虽然计算机专业的学生毕业后大多从事软件开发工作,但是他们对计算机硬件系统还是有基础的了解的。
图2 网易云课堂上的计算机专业培养方案 3
人工智能专业学生的培养目标应当是人工智能系统或者子系统的研究者、设计者和制造者。只有实现这个目标,高校培养的人才才能源源不断地全面支撑我国人工智能的产业和研究。为了实现这个目标,人工智能专业的课程设计应当包括软硬两条线(就像计算机专业)。如果人工智能专业只开设机器学习算法、视听觉应用等课程,那充其量只能算是“人工智能应用专业”或者“人工智能算法专业”。毕竟算法只是冰山露出水面的一角,冰山底下90%还是硬件和系统。
就拿拥有世界上最大的AI算法研究团队的公司谷歌来说,谷歌董事长约翰·轩尼诗(John Hennessy)是计算机体系结构科学家,图灵奖得主;谷歌AI的总负责人杰夫·迪恩(Jeff Dean)是计算机系统研究者;谷歌AI最令人瞩目的三个进展(Tensorflow, AlphaGo, TPU)都是系统,而不仅仅是某个特定算法,算法只是系统的一个环节。因此,从人工智能国际学术主流来看,系统的重要性是不亚于算法的。
只学过算法的学生或许对于调模型参数很在行,但是对一个算法的耗时、耗电毫无感觉。这样的学生不具备把一个算法在工业系统上应用起来的基本功(因为一个算法真正要用起来必须满足延迟和能耗的限制)。
只有加入了系统线的课程,学生才能真正理解人工智能是怎样工作的,包括一个人工智能算法到底如何调用编程框架,编程框架又是怎么和操作系统打交道,编程框架里的算子又是怎样一步步在芯片上运行起来。这样的学生能亲手构建出复杂的系统或者子系统,在科研上会有更大的潜力,在产业里也会有更强的竞争力。正如业界所云:“会用Tensorflow每年赚30万人民币,会设计Tensorflow每年赚30万美元。”
有很多老师和我说:“人工智能专业确实应当有一些系统类的课程。但国内从来没有开过这样的课,也没有合适的教材,我们学院也缺乏相应的老师来教这样的课程。”这是很实际的三个客观困难,但不应当影响我们对人工智能专业的课程设计。
从学生角度讲,人工智能专业开设什么课程,应该是看国家和企业需要学生会什么,而不完全是看老师现在会什么。六十年前,我国没有几个人见过计算机,更别说开课了。但为了两弹一星等科学和工程计算任务,我国依然成立了中科院计算所,并在计算所办计算机教师培训班,在清华大学、中国科学技术大学等高校(此处恕不能一一列全)开设计算机专业,这才有了今天我国巨大的计算机产业。
从教师角度讲,人工智能的系统研究已经成为国际学术热点,讲授这类课程是一个教学相长的过程,能帮助教师走到国际学术前沿。今年美国计算机方向Top4高校(斯坦福大学、卡耐基梅隆大学、加州大学伯克利分校和麻省理工学院)以及其他多个国际单位的研究者联合发布了一份名为“Machine Learning System(机器学习系统)”的白皮书。在这样的新兴热门方向布局培育一批青年教师,无疑对提升所在高校乃至我国在人工智能学术界的影响力有巨大帮助。
因此,不论是对于人工智能专业的学生还是教师来说,把系统类课程开起来,都是有必要,也是有实际意义的。
什么是智能计算系统
简单来说,智能计算系统就是人工智能的物质载体。现阶段的智能计算系统通常是集成通用CPU和智能芯片(英伟达GPU或寒武纪MLU等)的异构系统,并向开发者提供智能计算编程框架和编程语言等。之所以要在通用CPU之外加上智能芯片,主要是因为通用CPU难以满足人工智能计算不断增长的速度和能耗需求。例如,2012年谷歌大脑用了1.6万个CPU核运行了数天来训练怎么识别猫脸,这对于工业应用来说是很难接受的。显然,要想真正把人工智能技术用起来,必须使用异构的智能计算系统。而为了降低异构智能计算系统的编程难度,就需要有面向智能计算的编程框架和编程语言。
事实上,智能计算系统已经以种种形态广泛渗透到我们的生活中了。IBM的超级计算机Summit用机器学习方法做天气预报,BAT的数据中心上运行着大量的广告推荐任务,华为的手机上集成寒武纪深度学习处理器来处理图像分析和语音识别,特斯拉的自动驾驶系统……都可以看成是智能计算系统。在智能时代,中国乃至全世界都需要大批的智能计算系统的开发者、设计者、应用者。
智能计算系统的发展并不是一蹴而就的事情。20世纪80年代面向符号主义智能处理的专用计算机(Prolog机和LISP机)可以被看成是第一代智能计算系统。但是当时人工智能缺乏实际应用,算法也不成熟,而且当时摩尔定律还处于飞速发展阶段,专用计算机相对每18个月性能就能翻番的通用CPU并没有太大优势。因此,第一代智能计算系统逐渐退出了 历史 舞台。
“智能计算系统”课程重点关注的是第二代智能计算系统,主要是面向深度学习等机器学习任务的计算机。相对于30年前的第一代智能计算系统,当今的第二代深度学习智能计算系统可谓是碰到了天时地利人和。当前图像识别、语音识别、自然语言理解、 游戏 、广告推荐等人工智能应用已开始落地,深度学习算法发展速度令人应接不暇。尤其重要的是,通用CPU性能发展已经趋停,要支撑不断发展的深度学习算法,必须要靠智能计算系统。因此,深度学习智能计算系统会在很长一个阶段里都是学术界和产业界关注的焦点。“智能计算系统”课程将能帮助学生深刻理解深度学习智能计算系统。
第二代智能计算系统主要支持深度学习等机器学习任务。未来如果人类真的要在通用人工智能道路上再往前走一步,那未来的第三代智能计算系统需要支持的算法将远远超出机器学习的范畴,必须包括联想、推理、涌现等高级认知智能算法。我个人猜测,第三代智能计算系统可能会是孵化通用人工智能的虚拟世界环境。“智能计算系统”课程或许能激发学生的好奇心,吸引学生投身于未来的第三代智能计算系统的研究中。
智能计算系统课程概况
“智能计算系统”这门课程主要是面向人工智能、计算机和软件工程专业的高年级本科生或研究生。课程目标是培养学生对智能计算完整软硬件技术栈(包括基础智能算法、智能计算编程框架、智能计算编程语言、智能芯片体系结构等)融会贯通的理解,成为智能计算系统(子系统)的设计者和开发者。
课程的前序课程包括C/C++编程语言、计算机组成原理和算法导论(或机器学习)。课程的课时相对比较灵活,可以是大学期上一个学期(40学时,课程提纲见表1),可以是小学期集中上一周(20学时),也可以嵌入到其他机器学习课程中作为一个补充。对于20学时的短期学习,课程希望学生能对智能计算系统“知其然”,主要是面向实际操作;对于40学时的长期学习,课程希望学生能对智能计算系统“知其所以然”,因此要把机理讲透。
表1 智能计算系统课程提纲(40学时)
在课程讲授上,应该秉承两个原则。一是应用驱动。一门好的工程学科的课程应当是学以致用的,尤其是“智能计算系统”这样的课程,如果上完之后只学会了一些定理和公式,那基本没效果。另外一个原则是全栈贯通。过去计算机专业课程设计有个问题,就是条块分割明显,比如操作系统和计算机体系结构是割裂的,操作系统对计算机体系结构提出了什么要求,计算机体系结构对操作系统有哪些支持,没有一门课把这些串起来。“智能计算系统”作为高年级本科生(或研究生)课程,有义务帮助学生把过去所有的人工智能软硬件知识都串起来,形成整体理解。
对于“智能计算系统”课程,驱动范例是一个抓手。在国科大上课时,我们选择了视频风格迁移作为驱动范例。简单来说,风格迁移可以保留一个视频中每帧图片的基本内容,但是把图片的绘画风格改掉(比如从普通照片迁移成毕加索风格或者中国水墨画风格等,见图3)。对于学生来说,这是很有意思又在能力范围之内的一个驱动范例。
图3 从普通照片到毕加索风格迁移的驱动范例
我们围绕如何实现视频实时风格迁移,一步步带着学生写出算法,移植到编程框架上,为编程框架编写算子,再为算子设计芯片,构建多芯片系统,并测评这个系统的速度、能效和精度上的优势和劣势,然后进行系统的闭环迭代优化。最后再给大家一个智能计算系统的实验环境,包括摄像头和智能芯片开发板,学生就可以实现一个对摄像头拍摄的视频进行画风实时转换的“半产品”应用了。
结语
我的母亲是一位中学教师。我自己成长过程中,对我帮助非常大的几位前辈恩师陈国良、胡伟武和徐志伟,也都是常年浸淫在教学第一线,有着极大教学热情的名师。从小到大,这些长辈的言传身教,让我深刻地感受到,教育是一项伟大的事业,能深刻地改变学生、改变行业、改变 社会 、改变国家、改变人类。今天我们教给学生的那些人工智能知识,可能会影响明天我国在智能时代的竞争力。因此,虽然手头有不少基础研究任务,但我还是情愿把培养人工智能的系统人才当成自己未来最重要的使命,把自己绝大部分时间精力花在“智能计算系统”这门课程在各个高校的讲授和推广上。
非常欣慰的是,“智能计算系统”这样新生的一门课程,虽然还有很多缺陷,但还是得到了很多师生的支持和鼓励。我们已在或将在中国科学院大学、北京大学、北京航空航天大学、天津大学、中国科学技术大学、南开大学、北京理工大学、华中 科技 大学等多个高校联合开设这门课程。今年我们还会开放这门课程的所有PPT、讲义、教材、录像、代码、云平台和开发板,供老师们批评指正。非常欢迎大家给我发邮件,提出宝贵意见。
未来,我们希望和更多培养人工智能专业学生的高校合作,广泛参与人工智能系统课程的交流研讨,共同提高人工智能系统课程的教学水平。相信通过大家的共同努力,一定能解决人工智能系统课程开设中的实际困难,使得我国未来培养出来的人工智能人才没有技术上的短板。
作为一名青年教师,我在教学能力和经验上与很多教育领域的前辈有着巨大的差距,还需要更多地学习。这门“智能计算系统”课程,对于我国的人工智能系统能力培养来说,也顶多是起到抛砖引玉的作用。正如鲁迅先生在《热风·随感录四十一》中写给青年的一段话所言:“有一分热,发一分光,就令萤火一般,也可以在黑暗里发一点光……倘若有了炬火,出了太阳,我们自然……随喜赞美这炬火或太阳;因为他照了人类,连我都在内。”
脚注:
1 此文发表在《中国计算机学会通讯》(CCCF) 2014年第5期,https://dl.ccf.org.cn/institude/institudeDetail?id=3738875863074816&_ack=1。
2 CUDA:Compute Unified Device Architecture,计算统一设备架构。
3 参见https://study.163.com/curricula/cs.htm。
作者介绍:
陈云霁
CCF杰出会员、CCF青年科学家奖获得者、CCCF编委。中科院计算所研究员。曾获首届国家自然科学基金“优秀青年基金”、首届国家万人计划“青年拔尖人才”以及中科院青年人才奖等奖项。主要研究方向为计算机体系结构。[email protected]
点击 “阅读原文” ,加入CCF。
⑶ 计算机着名专家knuth是美国哪所大学的教授
斯坦福大学计
算机系,任正教授
Donald E. Knuth,1938年出生于Wisconsin。1960年,当他毕业于Case Institute of Te
chnology数学系时,因为成绩过于出色,被校方打破历史
惯例,同时授予学士和硕士学位。他随即进入大名鼎鼎的加州理工学院
数学系,仅用三年时间便取得博士学位,此时年仅25岁。
毕业后留校任助理教授,28岁时升为副教授。30岁时,加盟斯坦福大学计
算机系,任正教授。从31岁那年起,他开始出版他的历史性经典巨着:
The Art of Computer Programming。他计划共写7卷,然而仅仅出版三卷
之后,已经震惊世界,使他获得计算机科学界的最高荣誉Turing Award!
此时,他年仅38岁!后来,此书与牛顿的“自然哲学的数学原理”等一起,
被评为“世界历史上最伟大的十种科学着作”之一。相信学过数据结构和编
译原理的同学们都知道KMP算法和LR(K)算法有多么不可思议,然而此书
中这样的算法比比皆是!
在计算机科学上,他主要是一位理论家。然而,他在理论以外也同样做出
惊人的成就。鼎鼎大名的排版软件Tex,就是他的作品。此外,还有Metafont
等,也在世界上得到广泛使用。
Knuth获得图灵奖时为36岁,前面多说了两岁。估计他可能是历史上最年轻的图灵奖
获得者,甚至有可能永远把这个记录保持下去。
相比之下,其他获得图灵奖的人当时一般都是五十几岁或者六十几岁(例如去年的
姚先生,和刚去世的Simon),可见Knuth有多伟大!他真不愧为大师中的大师!
他很早就提前退休,为的是集中精力把巨着The Art of Computer Programming写完。
他一生共带过二十四个(此数字也许不准)博士生,发誓不会再带更多的学生。但是,
他有一个奇妙的承诺:
在他定期进行的讲座中,会不断提出一些新的难题。如果有人能在给定的期限内解出
任何一道难题,他将为那个人的博士论文签名!不知道
世界之大,有没有哪位后起之秀能获得这样的殊誉?
他的其它着作和论文难以数计,其中包括Concrete Mathematics等名着。
从1977年起,他获得Fletcher Jones Professor of Computer Science的
头衔,并且同时兼任Professor of Electrical Engineering。1990年,斯坦
福大学更授予他一个非同寻常的头衔Professor of The Art of Computer
Science,作为对他的特殊贡献的承认!
他的其它荣誉数不胜数,其中主要的有:美国国家科学院院士,美国艺术
与科学院院士,美国工程院院士,法国科学院外籍院士,挪威科学院外籍
院士.......;美国数学会Steele奖,瑞典皇家科学院Adelskold奖,以色列
工学院Harvey奖,IEEE冯诺依曼奖,东京高科技奖...... 共达数十个之多。
同时,他还是牛津大学等二十几所大学的荣誉博士。早在1970年,他就在
国际数学大会上做过特邀报告。建议感兴趣的同学参观他的竹叶:
http://www-cs-faculty.stanford.e/~knuth/
我去了他的主页,其中竟然有中文高德纳。据他介绍是1977年弗朗西斯.姚给他取的中文名字。估计就是上面说的姚先生
姚先生据说是我们南大毕业的一位师兄现在的导师,他主要研究编译领域的东西,2001年得了图灵奖,是第一个得到图灵奖的华人。我对它的了解也就这么多。
yao的英文叫Andrew,而不是Fransis。他好象不是主要研究编译的,而
是研究计算理论的。ACM的网页上说他对计算几何,复杂性理论,数据
结构分析,通讯复杂度,伪随机数理论都有重要贡献。hehe,姚先生
实在是数学高手(先生是Harvard的物理博士),台湾国立大学出身的少见
人才。
这个三卷本的宝典确实不是一般人啃的下来。
不止一两个高人告诉我
这套书出来以后
被摆在书架上机会会更多。
高德纳还有两卷没写完呢!
今年他过了1000000岁生日,第四卷也在写。
因为他写了三卷,对文本编辑器很不满。
就自己编了第一个支持tex格式的编辑器
用来写书
还有一个故事:大抵如下
linux的发明人说:我一觉醒来,上帝告诉我,我编写了世界上最好的操作系统
还有一个牛人(记不得名字了)说:我一觉醒来,上帝告诉我,我编写了世界上最好的文字处理系统
Donald说:“我没有对你们那么说过!"
这个故事就在他的网页上,他现在Stanford。
可以到他的主页看看去http://www-cs-faculty.stanford.e/~knuth/
你知道他是什么人,他是数据结构与算法的奠基人,是这门学科的鼻祖。现在,连他导的那19个博士都着作等身了.其中R. Sedgewick(Princeton算法课的掌门人)还写了着名的教材Algorithms in C/C++/Java等等,每种版本5个part呢。
有人真能把这三本书读完,我相信。
能理解多少呢?只有自己知道
还有,注意你在他的书里每发现一个错误,他就付给你2。56美元吆
⑷ 哪本"编译原理"的书比较好
我们学校用的是《编译原理》与《编译原理与实践》这两本书,这两本书都是国外的教材。我觉得《编译原理与实践》这本书不错,自学应该能看懂,而且代码比较多,书最后还有整个小型编译器的源代码。
编译不好学,你就慢慢学吧。
下面的资料请作参考:
当代编译技术三大圣经级别的教材
1.龙书(Dragon book)
书名是Compilers: Principles,Techniques,and Tools
作者是:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman
内容简介
《编译原理》作者Alfred V.Aho、Ravi Sethi和Jeffrey D.Ullman是世界着名的计算机 科学家,他们在计算机科学理论、数据库等很多领域都做出了杰出贡献。《编译原理》 是编译领域无可替代的经典着作,被广大计算机专业人士誉为“龙书”。《编译原理》一 直被世界各地的着名高等院校和科研机构(如贝尔实验室、哥伦比亚大学、普 林斯顿大学和斯坦福大学等)广泛用作本科生和研究生编译原理与技术课程的 教材,《编译原理》对我国计算机教育界也具有重大影响。 书中深入讨论了编译器设计的重要主题,包括词法分析、语法分析、语法制 导分析、类型检查、运行环境、中间代码生成、代码生成、代码优化等,并在 最后两章中讨论了实现编译器的一些编程问题和几个编译器实例,而且每章都 提供了大量的练习和参考文献。
与上一版相比,《编译原理》第二版进行了全面的修订,涵盖了编译器开发方面的最新进展。每章中都提供了大量的系统及参考文献。《编译原理》是编译原理课程方面的经典教材,内容丰富,适合作为高等院校计算机及相关专业本科生及研究生的编译原理课程的教材,也是广大技术人员的极佳参考读物。
作者简介
Alfred V.Aho,美国歌伦比亚大学教授,美国国家工程院院士,ACM和IEEE会士,曾获得IEEE的冯·诺伊曼奖。着有多部算法、数据结构、编译器、数据库系统及计算机科学基础方面的着作。
Monica S.Lam,斯坦福大学计算机科学系教授,曾任Tensilica的首席科学家,也是Moka5的首任CEO。曾经主持SUIF项目,该项目产生了最流行的研究用编译器之一。
Ravi Sethi,Avaya实验室总裁,曾任贝尔实验室高级副总裁TLucent Technologies通信软件的CTO。他曾在宾夕法尼亚州立大学、亚利桑那州立大学和普林斯顿大学任教,是ACM会士。
Jeffrey D.Ullman斯坦福大学计算机科学系教授和Gradiance CEO,他的研究兴趣包括数据库理论、数据库集成、数据挖掘和利用信息基础设施教学等。他是美国国家工程院院士、IEEE会士,获得过ACM的KarIstrom杰出教育家奖和Knuth奖。
第一版中文版
第二版中文版
2.鲸书(Whale book)
书名是:Advanced Compiler Design and Implementation
作者是:Steven S.Muchnick
内容简介
本书迎接现代语言和体系结构的挑战,帮助读者作好准备,去应对将来要遇到的编译器设计的问题。
本书涵盖现代微处理器编译器的设计和实现方面的所有高级主题。本书从编译设计基础领域中的高级问题开始,广泛而深入地阐述各种重要的代码优化技术,分析各种优化之间的相对重要关系,以及实现这些优化的最有效方法。
本书特点
●为理解高级编译器设计的主要问题奠定了基础
●深入阐述优化问题
●用Sun的SPARC、IBM的POWER和PowerPC、DEC的Alpha以及Intel的Pentium和相关商业编译 器作为案例,说明编译器结构、中间代码设计和各种优化方法
●给出大量定义清晰的关于代码生成、优化和其他问题的算法
●介绍由作者设计的以清晰、简洁的方式描述算法的语言ICAN (非形式编译算法表示)。
本书是经典的编译器着作,与“龙书”齐名,称为鲸书。书中针对现代语言和体系结构全面介绍了编译器设计与实现的高级论题,从编译器的基础领域中的高级问题开始,然后深入讨论了各种重要的代码优化。本书专为编译器专业人士和计算机专业本科生,研究生编写,在设计和实现高度优化的编译器以及确定优化的重要性和实现优化的最有效的方法等方面,为读者提供了非常有价值的指导。
作者简介
Steven S.Muchnick,曾是计算机科学教授,后作为惠普的PA-RISC和SUN的SPARC两种计算机体系结构的核心开发成员,将自己的知识和经验应用于编译器设计,并担任这些系统的高级编译器设计与实现小组的领导人。他在研究和开发方面的双重经验,对于指导读者作出编译器设计决策极具价值。
3.虎书(Tiger book)
书名是:Modern Compiler Implementation in C /Java /ML,Second Edition
作者是:Andrew W.Appel,with Jens Palsberg
内容简介
《现代编译原理——C语言描述(英文版)/图灵原版计算机科学系列》全面讲述了现代编译器的各个组成部分,包括:词法分析、语法分析、抽象语法、语义检查、中间代码表示、指令选择、数据流分析、寄存器分配以及运行时系统等。与大多数编译原理的教材不同,《现代编译原理——C语言描述(英文版)/图灵原版计算机科学系列》采用了函数语言和面向对象语言来描述代码生成和寄存器分配,对于编译器中各个模块之间的接口都给出了实际的 C 语言头文件。 全书分成两部分,第一部分是编译的基础知识,适用于第一门编译原理课程(一个学期);第二部分是高级主题,包括面向对象语言和函数语言、垃圾收集、循环优化、 SSA(静态单赋值)形式、循环调度、存储结构优化等。
本书是一本着名的编译原理课程的教材。国际上众多名校均采用本书作为编译原理课程的教材,包括美国麻省理工学院、加州大学伯克利分校、普林斯顿大学和英国剑桥大学等。本书在国外享有“虎书”的称号,与有“龙书”之称的《编译原理》(Alfred Aho 等编着)齐名。与编译原理方面的其他名着相比,本书出版时间晚,内容新。 书中专门为学生提供了一个用 C 语言编写的实习项目,包括前端和后端设计,学生可以在一学期内创建一个功能完整的编译器。
作者简介
Andrew W.Appel,美国普林斯顿大学计算机科学系教授,第26届ACM SIGPLAN-SIGACT程序设计原理年会大会执行主席,1998-1999年在贝尔实验室做研究工作。主要研究方向是计算机安全、编译器设计、程序设计语言等。
⑸ 学习编译原理哪本书好
我们学校用的是《编译原理》与《编译原理与实践》这两本书,这两本书都是国外的教材。我觉得《编译原理与实践》这本书不错,自学应该能看懂,而且代码比较多,书最后还有整个小型编译器的源代码。
编译不好学,你就慢慢学吧。
下面的资料请作参考:
当代编译技术三大圣经级别的教材
1.龙书(Dragon book)
书名是Compilers: Principles,Techniques,and Tools
作者是:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman
内容简介
《编译原理》作者Alfred V.Aho、Ravi Sethi和Jeffrey D.Ullman是世界着名的计算机 科学家,他们在计算机科学理论、数据库等很多领域都做出了杰出贡献。《编译原理》 是编译领域无可替代的经典着作,被广大计算机专业人士誉为“龙书”。《编译原理》一 直被世界各地的着名高等院校和科研机构(如贝尔实验室、哥伦比亚大学、普 林斯顿大学和斯坦福大学等)广泛用作本科生和研究生编译原理与技术课程的 教材,《编译原理》对我国计算机教育界也具有重大影响。 书中深入讨论了编译器设计的重要主题,包括词法分析、语法分析、语法制 导分析、类型检查、运行环境、中间代码生成、代码生成、代码优化等,并在 最后两章中讨论了实现编译器的一些编程问题和几个编译器实例,而且每章都 提供了大量的练习和参考文献。
与上一版相比,《编译原理》第二版进行了全面的修订,涵盖了编译器开发方面的最新进展。每章中都提供了大量的系统及参考文献。《编译原理》是编译原理课程方面的经典教材,内容丰富,适合作为高等院校计算机及相关专业本科生及研究生的编译原理课程的教材,也是广大技术人员的极佳参考读物。
作者简介
Alfred V.Aho,美国歌伦比亚大学教授,美国国家工程院院士,ACM和IEEE会士,曾获得IEEE的冯·诺伊曼奖。着有多部算法、数据结构、编译器、数据库系统及计算机科学基础方面的着作。
Monica S.Lam,斯坦福大学计算机科学系教授,曾任Tensilica的首席科学家,也是Moka5的首任CEO。曾经主持SUIF项目,该项目产生了最流行的研究用编译器之一。
Ravi Sethi,Avaya实验室总裁,曾任贝尔实验室高级副总裁TLucent Technologies通信软件的CTO。他曾在宾夕法尼亚州立大学、亚利桑那州立大学和普林斯顿大学任教,是ACM会士。
Jeffrey D.Ullman斯坦福大学计算机科学系教授和Gradiance CEO,他的研究兴趣包括数据库理论、数据库集成、数据挖掘和利用信息基础设施教学等。他是美国国家工程院院士、IEEE会士,获得过ACM的KarIstrom杰出教育家奖和Knuth奖。
第一版中文版
第二版中文版
2.鲸书(Whale book)
书名是:Advanced Compiler Design and Implementation
作者是:Steven S.Muchnick
内容简介
本书迎接现代语言和体系结构的挑战,帮助读者作好准备,去应对将来要遇到的编译器设计的问题。
本书涵盖现代微处理器编译器的设计和实现方面的所有高级主题。本书从编译设计基础领域中的高级问题开始,广泛而深入地阐述各种重要的代码优化技术,分析各种优化之间的相对重要关系,以及实现这些优化的最有效方法。
本书特点
●为理解高级编译器设计的主要问题奠定了基础
●深入阐述优化问题
●用Sun的SPARC、IBM的POWER和PowerPC、DEC的Alpha以及Intel的Pentium和相关商业编译 器作为案例,说明编译器结构、中间代码设计和各种优化方法
●给出大量定义清晰的关于代码生成、优化和其他问题的算法
●介绍由作者设计的以清晰、简洁的方式描述算法的语言ICAN (非形式编译算法表示)。
本书是经典的编译器着作,与“龙书”齐名,称为鲸书。书中针对现代语言和体系结构全面介绍了编译器设计与实现的高级论题,从编译器的基础领域中的高级问题开始,然后深入讨论了各种重要的代码优化。本书专为编译器专业人士和计算机专业本科生,研究生编写,在设计和实现高度优化的编译器以及确定优化的重要性和实现优化的最有效的方法等方面,为读者提供了非常有价值的指导。
作者简介
Steven S.Muchnick,曾是计算机科学教授,后作为惠普的PA-RISC和SUN的SPARC两种计算机体系结构的核心开发成员,将自己的知识和经验应用于编译器设计,并担任这些系统的高级编译器设计与实现小组的领导人。他在研究和开发方面的双重经验,对于指导读者作出编译器设计决策极具价值。
3.虎书(Tiger book)
书名是:Modern Compiler Implementation in C /Java /ML,Second Edition
作者是:Andrew W.Appel,with Jens Palsberg
内容简介
《现代编译原理——C语言描述(英文版)/图灵原版计算机科学系列》全面讲述了现代编译器的各个组成部分,包括:词法分析、语法分析、抽象语法、语义检查、中间代码表示、指令选择、数据流分析、寄存器分配以及运行时系统等。与大多数编译原理的教材不同,《现代编译原理——C语言描述(英文版)/图灵原版计算机科学系列》采用了函数语言和面向对象语言来描述代码生成和寄存器分配,对于编译器中各个模块之间的接口都给出了实际的 C 语言头文件。 全书分成两部分,第一部分是编译的基础知识,适用于第一门编译原理课程(一个学期);第二部分是高级主题,包括面向对象语言和函数语言、垃圾收集、循环优化、 SSA(静态单赋值)形式、循环调度、存储结构优化等。
本书是一本着名的编译原理课程的教材。国际上众多名校均采用本书作为编译原理课程的教材,包括美国麻省理工学院、加州大学伯克利分校、普林斯顿大学和英国剑桥大学等。本书在国外享有“虎书”的称号,与有“龙书”之称的《编译原理》(Alfred Aho 等编着)齐名。与编译原理方面的其他名着相比,本书出版时间晚,内容新。 书中专门为学生提供了一个用 C 语言编写的实习项目,包括前端和后端设计,学生可以在一学期内创建一个功能完整的编译器。
作者简介
Andrew W.Appel,美国普林斯顿大学计算机科学系教授,第26届ACM SIGPLAN-SIGACT程序设计原理年会大会执行主席,1998-1999年在贝尔实验室做研究工作。主要研究方向是计算机安全、编译器设计、程序设计语言等。
⑹ 大三计算机系学生对IT没有兴趣,喜欢设计怎么办
20 世纪40年代世界第一台现代计算机在美国诞生以来,美国一直执全球计算机学界之
牛耳,这同时也是美国计算机产业界占据绝对优势的重要原因之一。我们成批量地引进
的国外众多优秀教材绝大多数也都来自美国。计算机学科仍然在高速发展,与此对应的
计算机人才培养模式也在不断变化,密切关注和跟踪国外尤其是美国名校的教学新动态
乃至培养思路和教育思想,应该是非常有意义的。
本文即选择了美国计算机学科最负盛名的五所高校,对目前各校计算机科学(Computer
Science)专业的本科教学体系进行了一些分析。
斯坦福大学
斯坦福大学拥有独立的计算机科学系。浏览该校的教学手册,最具特色的恐怕要算多门
科普性计算机知识讲座了,一般有两到三个单元,涉及面非常之广,从量子计算到数字
演员,从计算科学的伟大思想到网络安全,从网上拍卖到使用元编译发现大型开放源代
码软件中的大量错误,其中还不乏对技术乌托邦、斯诺“两种文化”、计算机面临的困
境以及迅速发展所带来的诸多问题的思考。开课的老师阵容强大,基本上都是响当当的
名教授,甚至包括图灵奖得主John McCarthy。用这种讲座代替计算机科学导论性质的专
门课程,可以充分展示计算机科学的丰富内涵,使学生较早地了解学科的轮廓和脉络,
对于开阔学生视野,启发学生的学习兴趣也大有好处。由于美国大学中专业的选择非常
灵活,而近年来计算机学科招生受行业影响流失严重(这种情况甚至惊动了比尔·盖茨,
2004年微软到各大高校招兵买马时,他每站必到,利用自己的明星效应,大讲计算机学
科的美妙前景),可以想象,这种讲座同样也肩负着吸引学生选择计算机专业的重大使命
。
斯坦福大学典型的低年级课程设置如表1所示。
表1 斯坦福大学低年级主要课程设置
数学(至少23个单元)
数学 41(课程号,下同) 微积分 I 5
数学 42 微积分 II 5
统计 116 概率论 3~5
计算机 103 离散结构 4或6
以下任选两门:
数学 51 微积分 5
数学 103/113 线性代数 3
数学 109 应用群论 3
计算机 157 逻辑和自动推理 4
计算机 205 机器人、视觉和图形学数学方法 3
科学(至少11个单元)
物理 53 力学 4
物理 55 电磁学 4
其他
工程基础(至少13个单元)
计算机 106 程序设计抽象/方法学 5
工程 40 电子学基础 5
选修课
技术与社会(3~5个单元)
进一步的课程设置如表2所示。
表2 斯坦福大学高年级主要课程设置
程序设计(2门课)
计算机 107(课程号,下同) 程序设计范型 5
计算机 108 面向对象系统设计 4
理论(2门课)
计算机 154 自动机与复杂性理论 4
计算机 161 算法的设计与分析 4
系统(3门课)
电子电气 108B或282 数字系统或计算机体系结构 4
计算机 编译原理 3
计算机 计算机网络 3
计算机 操作系统 3
应用(选2门课)
计算机 人工智能 3~4
计算机 数据库 3
计算机 图形学 3
项目(1门课)
计算机 至少3个单元
限选课(多门)
加州大学伯克利分校
伯克利的课程设置也有很多独树一帜的地方,尤其是在专业基础课方面,除了有专业导
引课程“计算机科学专题”之外,对于没有编程经验的学生,第一门编程课是符号编程
入门,采用LISP语言。有一定编程经验或者有自学能力的学生,可以选择多种语言和环
境的自主学习(Self-paced)课程,包括C、 Fortran、C++、Java,以及UNIX的使用等,
这种多元化与伯克利计算机科学与电子电气工程同系有关。但是所有学生在第二学期都
要学习一组独特的基础课:61A“计算机程序的结构与解释”,采用MIT Abelson等编着
的同名教材(中译本机械工业出版社出版,清华大学出版社出版了影印版);61B“数据结
构”(教材采用自编讲义);61C“计算机结构”(Machine Structures),采用Hennessy的
《计算机组织与设计》(中译本清华大学出版社出版,机械工业出版社出版了影印版)。
这项规定就是转校生也不例外,可见其中蕴涵了伯克利多年的教学经验结晶。
伯克利其他比较有特点的课程还有:将离散数学和概率论结合讲授的CS70,主讲是名教
授 Christos Papadimitriou;CS98-1 编程练习课,以主要大学生编程竞赛中的赛题为
授课素材;CS 169 软件工程直接用Kent Beck的《极限编程》(人民邮电出版社出版了中
译本)作为教材,非常超前,但是既然连Pressman的《软件工程:实践者方法》新版中敏
捷方法都已经成为重头戏,既然IEEE都已经开始制定敏捷方法相关标准,这种课程选材
也就不显得那么骇世惊俗了。除了软件工程课程常见内容外,教学侧重实际,贯穿了极
限编程的思想,涵盖UML、JUnit单元测试、软件架构、设计模式和反模式、重构、CVS版
本控制、系统和集成测试,最后要求完成一个实际产品,并进行演示。
UIUC(伊利诺依大学厄班纳-香槟分校)
UIUC的计算机科学专业创建于1972年,到1986年基本定型,十多年来几乎没有什么变化
。其教学体系如图1所示。
图1 UIUC改革前的计算机科学课程体系
其中,数值分析方向课程中,Math225为矩阵论,CS257为数值方法,CS35x代表数值分析
导论、常微分数值方法、偏微分与数值逼近和数值线性代数;
理论方向课程中,CS173为离散结构,CS273为计算理论,CS37x包括算法、形式方法、程
序验证;
人工智能方向课程中,CS348为人工智能导论,CS34x包括机器人、机器学习与模式识别
;
软件方向,CS125为计算机科学导论,CS225为数据结构与软件工程原理,CS31x包括数据
库、图形学、多媒体,CS32x包括软件工程、操作系统设计、分布式系统、编程语言与编
译器、并行计算、实时系统、编译器构造、编程语言设计;
硬件方向课程中,CS231为计算机体系结构I,CS232为计算机体系结构II,CS33x包括计
算机组成、VLSI系统与逻辑设计、VLSI系统设计、通信网络、嵌入式体系架构与软件。
可以看到,处在图1中最下面的课程基本上都是在多门中选择一至三门,整个体系脉络清
晰,具有很高的灵活性。与斯坦福不同的是,UIUC的计算机科学导论课程比较简单,只
有一门为新生开的计算机科学导向课(CS100),而且并非必修。名为“计算机科学导论”
的CS125实际上是以Java语言为主的编程入门课,涵盖了一些算法的内容。此外还有与之
配套的实验课。当然,系里所开的许多面向高年级和研究生层次的讲座是对低年级开放
的。
2003年,在工程院院长David Daniel的倡导下,计算机系对教学计划进行了改革,以反
映目前社会、行业和技术的发展趋势。主要的变化有:
* 在必修要求中增加了两门编程课:CS241 系统编程,采用Gary Nutt的《操作系统》作
为主教材,Stevens的《Unix环境高级编程》作为编程教材;CS242 程序设计实验(Progr
amming Studio),教学大纲基本上以Kernighan的《程序设计实践》为蓝本(以上教材机
械工业出版社均出版了中译本和影印版)。
* 必修要求中增加了一年的高级项目,强调团队合作和软件工程实践,包括文档写作、
口头表达、项目规划与管理等,实际上是在实践中学习软件工程。这门课也可以用两学
期的软件工程或者一年的高级论文代替。仍然充分保留了灵活性,有利于因材施教。
* 增加了CS173 离散结构的学时,部分原CS273的内容移到这里,同时CS273又新增了原C
S375的内容。这实际上是提高了对计算机理论的要求。
* 在专业课程中增加了数据挖掘、信息检索和高级图形学。
CMU(卡内基梅隆大学)
与MIT、伯克利等学校计算机科学仍然和电子与电气工程同处一系不同,CMU的计算机科
学系成立于1965年,是全美最早的,如今它已经升格为计算机科学学院。其研究生项目
中除了机器人方向与硬件关系较多之外,其他基本上都是纯软的。从这个意义上来说,C
MU的教学体系对于偏软的计算机科学系应该有较大的借鉴意义。
CMU 的教学手册上没有从传统意义上针对计算机科学专业学生的导论课,虽然有名为“
计算机科学伟大思想”的两学期课程,但是从内容上看应该是离散数学的替代,因为此
外CMU并没有其他离散数学方面的课程。此课程没有教材,内容比传统离散数学要灵活得
多,涉及概率、代数、算法、加密理论、复杂性理论、博弈论等,非常注重学习的趣味
性和实用性。
与其他名校相同,CMU对程序设计的重视也给人留下很深印象:本土新生的第一堂课就是
“初中级程序设计”,直接讲授Java。然后是中高级程序设计(Java)、C语言编程技巧、
高级编程实践(Java)、程序设计原理(用SML语言讲授)。
目前计算机科学专业教学计划中的一个难点,是硬件课程的设置问题。硬件知识体系本
身非常丰富,但是硬件课程多了,又削弱了计算机科学专业的特色。CMU在这一问题上是
怎样处理的呢?计算机科学学院的现任院长Randal E. Bryant 亲自给出了回答,他用15
~213“计算机系统导论”一门课(12个单元)完成了硬件知识的教学。这项教学改革的成
果就是一本厚达900多页的书:《Computer Systems: A Programmer's Perspective》(
中译本《深入理解计算机系统》已经由中国电力出版社出版)一书。他在该书的序言中说
:
“本课程的宗旨是用一种不同的方式向学生介绍计算机。因为,我们的学生中几乎没有
人有机会构造计算机系统。而大多数学生,甚至是计算机工程师,也要求能日常使用计
算机和编写计算机程序。所以我们决定从程序员的角度来讲解系统,并采用这样的过滤
方法:我们只讨论那些影响用户级C程序的性能、正确性或实用性的主题。
比如,我们排除了诸如硬件加法器和总线设计这样的主题。虽然我们谈及了机器语言,
但是不关注如何编写汇编语言,而是关心编译器怎样翻译C的各种构造,比如指针、循环
、过程调用和返回,以及switch语句。更进一步,我们将更广泛和现实地看待系统,包
括硬件和系统软件,讨论链接、加载、进程、信号、性能优化、评估、I/O以及网络与并
发编程。
这种做法使得我们讲授本课程的方式对学生来讲既实用、具体,又能实践,同时也非常
利于调动学生的积极性。”
网站上的一些随书配套实验,也独具匠心。因此此书的成功是水到渠成的。根据配套网
站上的列表,它已经被全球80多所院校采用作为教材。
MIT(麻省理工学院)
MIT的课程设置,只能用其学生起点高来解释。该校没有典型意义上的计算机科学专业,
偏软的只有理论计算机科学和人工智能及其应用两个专业。因此没有类似于其他学校的
导论课程。
在MIT 的电子电气工程与计算机科学系中,所有学生都要参加如下四门课程:6.001“计
算机程序的结构与解释”,当然与伯克利相同,采用的是Abelson等编着的同名教材;6.
002“电路与电子学”;6.003“信号与系统”(自编讲义);6.004 “计算结构”(Comput
ation Structures),与伯克利的61C“计算机结构”对等(教材是自编课件)。此外有两
门专业基础数学课:“概率系统分析”(教授自编教材)和“计算机科学数学”,后者的
教材是国外院校普遍采用的Rosen所着《离散数学及其应用》(中文版由机械工业出版社
出版)。
对MIT的学生而言,实验课程有多种选择:电气工程和计算机科学实验,模拟电子实验,
数字系统实验,微机项目实验,半导体设备项目实验。此外,无论何种专业,都有软件
工程实验课。值得注意的是,本科生各专业的必修课程中并没有软件工程课程。也就是
说,软件工程的内容都在实践中完成了。带软件工程实验课的是因为提出Liskov 替换原
则而知名的女教授Barbara Liskov,她刚刚获得了2004年度的冯·诺依曼奖。作为美国
工程院和艺术科学院的双院士,她几十年在软件开发研究方面的经验,将有力地保证这
门实验课程的质量。
分析与总结
由上面的材料可以看出,各个学校的教学体系之间还是有不小差异的。这首先得归因于
历史沿革形成的专业侧重、机构设置上的不同。其中MIT算是一极,由于和电子电气专业
深深地融合,计算机专业带有很强的“硬派”色彩。而CMU可以算作另一极,计算机科学
有自己的独立学院,非常罕见,因此它的课程设置“软化严重”——与硬件相关的只用
一门课就解决了。UIUC和斯坦福由于都拥有独立的科系,所以可以归入后一阵营。伯克
利可以认为处于两极中间,但是仔细分析起来,它的计算机科学专业目前虽然仍属于电
子电气和计算机科学系,但是有相当大的独立性,1973年创立以来,一直有自己的主席
和教学安排,所以离后者更近一些。
此外,各校在专业导入课程的设置上差别也非常明显。基本上可以分为三类。按
IEEE-ACM《Computer Curricula 2001》(以下简称CC2001)的分法,斯坦福属于广度优先
(有明确的注重广度的导引课程),MIT的属于函数为先(采用函数式语言),CMU和 UIUC属
于对象为先(直接采用Java)。伯克利有些特殊,它有导引课,但是广度稍差,紧接着又
采用函数语言,同时开设学生自学为主可以任选的多种语言课程,属于混合多元型。应
该说各个学校在刚入门时如何调动学生积极性,培养对专业的感情上都有自己的思考。
无论哪种类型,将课堂变得有趣,能够容纳更多计算机科学的方面,都已经成为一种趋
势。
无论如何,各校存在的差异并不妨碍各自培养出同样优秀的人才,这也给我们提供了一
种有益的启示,办学思路和方法应该是因地制宜的。
当然,总的来说,各学校之间的共性还是主要的。归纳起来,有这么几个特点,值得我
们思考:
1. 硬件课程整体在减少
偏软类的三所院校中,CMU最为彻底,硬件课程只有一门课,而UIUC也只有两门必修(两
门体系结构),斯坦福也是两门(电子学、体系结构或数字系统)。其中的原因,前面引述
的Randal E. Bryant所言作出了解释,毕竟计算机科学需要关注的在计算机系统层次中
已经越来越高,底层越来越变得透明了。事实上,CC2001中制定的硬件课程也只有一门
。而国内目前一般还开设数字逻辑、微机原理、计算机组成与结构、微机实验等硬件类
课程。
2. 程序设计日益重视
在CMU, UIUC和斯坦福,必修的程序设计类课程往往在四五门左右。伯克利加起来也有
四门。MIT虽然没有大量前导性的编程课程,但是由于在后面计算机系统工程、计算机语
言工程、软件工程实验、Web软件工程诸课程都有实际的项目要完成,所以实际学时也很
多,UIUC的改革更说明了这一点。同时,还出现了强调提高程序设计技巧,与软件工程
环境和工具相结合,提倡团队合作,高级程序设计课程与数据结构、算法课融合的趋势
。这方面的代表有斯坦福。该校副系主任Eric Roberts曾执教入门类课程多年,总结了
一套在语言教学中融入软件工程和现代程序设计观念,结合算法和数据结构教学的经验
。其成果就是《C语言的科学和艺术》和《C程序设计的抽象思维》两本书(影印版已由机
械工业出版社出版)。作为CC2001工作组两位主席之一,他在C语言教学中强调库与接口
设计、编程风格的重要性,并进而介绍抽象、封装的概念,产生了很大影响。反观国内
目前很多学校的语言教学和程序设计教学,不仅学时偏少,与其他课程孤立,而且脱离
实际,造成语言学习和相关专业课学习都变得非常枯燥,不利于调动学生的积极性。
应该说,这些名校的教学体系、教材和经验都是丰富的宝藏,值得好好挖掘,比如每门
核心课程的教学法,实验课程的安排,各门课程的衔接,大型项目的选材等。
美国大学本科的基本入学条件是
1. 要有SAT成绩:至少1600分
2.平均分/GPA 成绩至少80分/GPA 3.0以上
3.IBT成绩85分 参考资料:http://www.douban.com/group/topic/2781655/
要想了解更多,请照参考资料.