斯坦福编译原理笔记
❶ 编译原理里什么是三地址码
指令是由操作码和地址码两部分组成.
有些指令要有3个操作数,也就是3个地址码--三地址码。
3地址指令:
OP A1 A2 A3
❷ 我读《斯坦福大学人生设计课》
最近在看《斯坦福大学人生设计课》这本书,书名听着挺鸡汤的哈哈。先说说我自己为什么会买这本书来读吧。其实从去年年底开始,我就对自己的职业选择感到了困惑。一是团队的调整,让我感到些许的不适应;二是自己一直在反思自己究竟想做的是什么。我的工作逐渐变得琐碎,修理各种bug,没有了当时接到需求,理解需求,开发需求这一套流程中收获的成就感,每天的工作变成了煎熬,感觉每天都在浪费宝贵的时间。所以,我深刻的觉得,现在的工作不是我想要的,我需要尝试些别的了。
秉着“迷茫的时候多看书”的信念,我在京东上下了订单。我觉得这本书没让我失望,我确实找到了一些答案。
我不想象大多数的读书笔记那样,概括整本书的框架,告诉你们这本书从第一章到最后一章都写了啥,然后告诉你们一定要去读呀之类的。我只想分享一些我觉得值得分享的、有趣的内容给大家,谈一谈我读完之后的感悟。
作者给书起名为“人生设计课”,意思是想让人们以设计思维来设计人生,看待人生。什么是设计思维呢?设计思维和工程思维不同,“ 专注初心,找到最适合自己的选择,做出决定并且把事情做成 ”就是以工程思维看待问题,而设计思维看待问题的方式则是“ 重新定义问题,找到尽可能多的选择,选择一个进行快速尝试,直到成功 ”。
书中举了两个例子来解释什么是工程问题,什么是设计问题。工程问题的例子是“为早期的苹果笔记本设计铰链(即屏幕和键盘连接的转轴)”,这里的目标是明确,就是要创造出一种连续使用5年的铰链,通过多种不同的实验,最终可以实现目标。而设计问题的例子是“早期的苹果笔记本必须要连接鼠标才能使用,非常麻烦”,这很显然没有先例可以借鉴,也没有一个明确的目标。但是有一位工程师创造性的提出,将笔记本的键盘缩小,留出足够的空间安装一个轨迹球的装置,以此作为“内置鼠标”。于是连接鼠标的问题得到了突破性的解决,这个设计也成为苹果笔记本标志性外观设计的一部分。
这段内容是我感受最深的,其实人生的职业选择用什么思维看待,这背后的终极问题是:你希望自己的人生是一个工业品,还是一个艺术品?是一个项目还是一次创造?
我在这里找到了第一个答案。
书中还有一个令我感触很深的案例,讲的是一名社会学教授,在社会创新和社会创业方面开设了一门课程,反响很好,于是想进一步做些工作,为学校带来持久的影响力,于是她梦想建立一个全新的社会创新学院。
创建学院的首要任务肯定是筹集资金,她需要1500万美元,于是她尝试了各种方法,但是1500万没有的数目实在是太大了。她陷入了困境。
之后,在设计思维的指导下,教授意识到创建学院并非将社会创新这门课程影响力扩大的唯一途径,仍然存在很多其他的手段和方法,她做了很多的问卷调查,收集了很多的点子,这些点子后来被证实也都很不错。诚然,创建一个新的学院跟令人振奋,影响可能也更深远,但是其他的点子更加现实,也会有更多的支持。
我为什么很喜欢这个例子呢?因为我觉得我自己选择前端工程师,也是一个 “锚” 问题。为什么这么说?我在读研期间负责了一个项目的全栈开发,接触到了前端。并且在有一次为女朋友准备生日礼物时,我为她制作了一个网站,让她很开心。这让我觉得,做网站开发也许是个不错的职业,我能创造出让别人喜爱的网站,于是我就选择了前端开发这条路。
但其实回过头来看看这个问题,其实为女朋友准备生日礼物并不一定是制作一个令她感动的网站,也可以是别的,只要是用心准备的,相信她都会很开心。而完成一个这样的网站,更像是一个产品经理的干的活,我有一个很好的创意,然后我实现了它(当时的实现还是用 jQuery,过程真折磨人),交到了用户(女朋友)手上,她对这个产品也很满意,我收获了不错了评价。That's all。
我也没有在选择职业之前仔细的去调研过前端工程师每天具体的工作是怎样的?自己是否会喜欢?没有认真思考过一些问题,就草率的上了车。仅仅因为我学的是计算机专业,所以我得去做一个程序员,确实没什么道理。
我承认,这与我之前的想法也有很大的关系,我之前总觉得,工作就是工作嘛,没有乐趣也很正常,只要给家里带来 money 就行,所以它才被称为 “工作” 。但直到最近和女朋友的一次谈话,我才意识到,我需要有自己事业上目标才行,也才促使我开始认真反思,自己究竟喜欢做什么、适合做什么、擅长做什么。
在书中,作者还要求你写出未来5年的三个版本的人生计划,并将其称之为 “奥德赛计划” 。
你可能实在想不出三个版本的人生计划,作者也很善良的提供了帮助:
第一种选择——你已经在做的事。
第二种选择——如果你突然无法从事正在做的工作(第一种选择),那么第二种选择就是你想要做的事。
第三种选择——在不考虑金钱和形象的前提下,你想做的事情或你想过的生活。
真巧,作者说的第三种选择给出的问题,正是我经常思考的问题。我自己给出的三种选择是这样的:
不用评判这些人生计划,不用比较每种计划的得失,这只是一份作者要求我们写的计划,仅此而已。
最后,希望自己不要成为聪明的现代人俱乐部中的一员——聪明的现代人总是视图做正确的事情,并且期望 “立刻” 得到正确答案。
❸ 《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奖。
❹ 斯坦福大学人生设计课(读书笔记)
设计思维和传统的规划思维有什么不同?
“不要坚持初心,而是重新定义问题。”
(书中作者一直以为自己的初是当物理学家,但是其实分析后,他发现他实是喜欢与人分享有趣的理念,而物理只是一个渠道,其实还有非常多的渠道。)
**正如福特说的,如果你问没有发明汽车前的大众,你想要什么,他会说我想要一匹会飞得快的马!(名词)
如果你在问那你想要做些什么呢?他们的回答是更快的抵达。(动词)
**在人生设计课堂里,他会问你小时候有什么样的目标,这个问题被重新定义为你在什么时候最快乐最有能量。
【当初心从名词转换成动词的时候,我们就能找到自己真正关切的东西。】
-人生设计课的导师们认为,在一个快速变化的世界今天受欢迎的10种工作,有六种在10年前甚至都不存在。如果你用一个基于过去想象的出行,必须要用人生设计的思维,重新定义才不至于在人生中做出刻舟求剑的行为。
*什么时候最投入、最有能量、最快乐呢?
—他不是找到最适合自己的方向,而是你拥有很多个选择。但要认清每个选择都有缺陷。
所以所谓的最适合他本身就是一个坑。最是极端词,而是合适动词。适合会,随着我们不断地成长做了一件又一件的事情,我们的能力还有资源会不断地储备升级,所以这个答案会一天一天的不断变化,永远也定不下来。
-人生设计的思路是:
每个人都有许多适合自己的生活方式。方法要逼自己进行头脑,风暴,想出至少四个选择,不管这靠不靠普。因为一个好的点子来自于很多点子!真正好的人生状态是发现了很多适合自己的选择,而且决定从某个选择开始“试试看。在还没找到,最终目标时,”边走边看低成本试错“
在头脑盘算的人生,不是真实的人生。因为没有真的推进去,根本不知道自己会遇到什么困难。
探索本身就是一件快乐有趣的事,而且在尝试中学到的东西也会迭代到未来的选项中。
“人生设计:重新定义问题,找到尽可能多的选择,并且选择去做,直到成功。”
终极问题是你希望你自己的人生是工业品还是艺术品?是一个项目规划还是一个创造。
-古典-
(02-读书笔记)斯坦福大学人生设计课
有时不管我们再怎么努力可能都无法获得你想要的。要么就转换个视角思考这些经历为你带来另一个层面的价值。要不然就“接受了现实”,拥抱美好的生活。
平衡好工作和生活,也可以找到更有兴趣的事情去做,放弃对权力的追逐,在另外一个方向创造新的价值。
也许你不会获得你原来想要的。但是你可能会获得新的可能。
**人生设计评估:
You are here! 意味着设计思维中的接受阶段,也就是设计人生的起点。就是当下所处的真实位置。
*当接受了现实之后,我们要把生活分成健康,工作娱乐和爱。在这四个领域,每个人都需要进行调整或重塑,然后找出需要设计的领域进行方法的探索,用“觉知和好奇心”这两种设计思维。
“你最近怎么样?用这句话来去评估这四个面向。”
-健康:良好的思维,身体和精神状态。
-工作:参予人类在地球上不间断的伟大探险活动。无论有没有得到报酬。家庭主妇,包括养儿,育女。
-娱乐:就是为了快乐。是一种活动单纯的追求快乐。不是追求价值。
-爱:关注爱的不同定义。爱的多种形式在生命中,爱流向何方,爱与被爱同样重要是双向的。
@思维误区:我应该已经知道自己的目的地了。
@重新定义:只有你了解了,自己现在的位置,你才能知道如何到达目的地。
**在仪表盘上平衡虽然重要,也要问问这个问题是否可操作。这个平衡不要想象会出现完美的均衡。也不可能出现绝对的平均分配。
了解这四个方面是否存在要解决的问题。
“重力问题。”-无法付诸行动,无法解决的问题会让你无能为力。
(03)史丹福大学人生设计课。
第二章创建人生指南针
我们总是在为生活焦虑分析生活或对未来进行推测,但是这些并不是最好的发现工具,他会让我们莫名的产生失落及困惑,浪费时间。你会感到生活像是一个巨大的DIY项目。只有少数人能获得指南手册。
第二部 创建你的指南针。(写下)
-问问自己是在过着自己的人生,还是在复制别人模板的人生。
1.工作观:工作的目的和原因。
2.人生观:是什么赋予了,人生的意义,是什么让你的生活充满了价值。哪些方面展现的这些,他们有多重要?
-花30分钟的时间去写下约250个字
-工作应该解决什么问题,我可以从工作中得到什么? 好工作定义…P60.
-人生需要解决的问题,-人生最重要的事.P62
*—拥有更多心流体验(全身心投入的状态。)
-完全投入会有极度兴奋或狂喜的感觉,内心清明,知道做什么以及如何做!表现出奇镇定冷静,感觉时间似乎静止或者时间突然过去了。
—关注你的能量水平:
我们靠脑力吃饭,大脑肩负重任是一个非常渴望能量的器官,每天每个人会消耗2000卡路里的热量,其中500卡路里是给了大脑,但是大脑只占据,我们身体总重量的2%消耗却占了我们的25%。这也是精力充沛会严重影响专注力的原因。
可以在美好时光日志中去记录那些能量流把握那些能量流去的方向,重新设计你的活动让你充满活力,人生设计是尽量从你当前的生活中汲取更多而不单单是重新设计一种全新的生活!为了改进完善你现在的生活。
无聊是一个巨大的能量消耗源!
—享受工作的乐趣,只有当你在工作中发挥了自己的优势全身心的投入,其中才能从工作中找到乐趣。
—记录美好时光日志。
-活动记录能让你全身心投入,并感到能量充沛的活动。
-反思哪些活动让你有收获?收获到什么?
-回顾你的高峰体验。
-摆脱困境。
用设计师的思维设计人生。从“思维误区”里面去找到“重新的定义”!
-制作制作你的思维导图。当你进行词汇联想的时候,不要进行自我审查,这一点非常重要。这也是我 们建议你快速完成思维导图的原因。你应该快速记录下大脑中最初闪现的词汇。
(在在暂停的环节放音乐,让大家写思维导图。)
-锚问题 会困住我们,因为我们只能看到一种解决方案——一种根本不起作用的方法。锚问 题涉及的不仅是我们现有的、已经失败的方法。锚问题揭露的其实是我们的恐惧: 我们担心自己尝试了其他方法,如果依然没用,那么我们就不得不承认自己永久地 陷入了困境。有时,放弃原有的方法,冒险做出巨大改变,可能会面临更大的失 败;相对而言,坚持一个我们熟悉的、无效的解决方法却会让自己更舒适。这是一 种很常见的,自相矛盾的人类行为。
“锚问题”是一个现实问题,它只是难以解决,它具有可操作性——但是因 为我们被困在上面的时间太长,所以感觉它变得难以逾越了。(这就是必须对锚问 题重新定义的原因。这类问题需要我们开拓思路、寻找新的解决方法,如原型测 试。)但是,“重力问题”并不是一个真实的问题,它属于你无法改变的情 况。“重力问题”没有解决方法。你只能重新定向。
【根据美好时光日志绘制思维导图】
绘制三张不同的思维导图,每张都要延伸到 至少三到四层,最外层至少要有12个元素。
#思维导图1——投入
从“美好时光日志”中挑选一个你最感兴趣的领域,或者能真正投入的活动(例
如,平衡预算或推销一个新想法),把它放在思维导图的中心位置,然后根据思维
导图绘制技巧,围绕这个中心词汇联想相关的词汇或概念。
#思维导图2——能量
从“美好时光日志”中挑选出你认为能够真正让你充满活力的事(如上艺术课或帮
助他人),据此绘制思维导图。
#思维导图3——心流体验
从“美好时光日志”中挑选出一段让你产生心流体验的经历,把这段经历放在导图的中心位置,完成你的心流思维导图(如在公众面前发表演讲或提出创新想法)。
完成了这三张思维导图后,让我们探索一下如何设计出有趣但不一定实用的“第二种生活”。
1.认真观察这三张思维导图的最外层,选出三个引起你注意且完全不相干的词汇。 跟着感觉,你会知道是哪几个词——它们会一下子就自动“跳入”你的眼帘。
2.现在,在一份工作介绍中,你可以想办法用到这三个词。你会发现这个过程非常 搞笑有趣,这对其他人也会有帮助(需要再次强调的是,这份工作介绍可能没什么 实用性,也不一定要吸引很多人)。
3.给你的角色命名,然后在纸巾上画一幅草图(迅速完稿的草图
4.根据这三个方面的思维导图,做三次这个练习,确保每张导图都和其他两张不一 样。
-这个练习的重点不是得出一个具体的结果,而是尽量打开你的思路,开拓你的思维,让你在不经评判的情况下进行构思。
行动起来,开启下面的任务——设计三种真实的人生计划。
开启你的奥德赛计划吧。
小练习
-思维导图
1.回顾你的“美好时光日志”,关注那些能让你全身心投入、赋予你活力且让你产 生心流体验的活动。
2.选能够让你全身心投入、赋予你活力以及让你产生心流体验的三项活动,然后制作三张思维导图,围绕每项活动绘制一张导图。
3.研读每张导图的外围因素,挑选三个能立刻引起你注意的因素,然后针对每个因 素写出一段工作描述。
4.为每段工作描述创造一个角色,并画一幅草图。
-每一个奥德赛计划都是planA,因为他是你真正的渴望有可能会实现。
【三个五年计划-未来生活版本】
1. 第一个计划要放在你已经有的想法上,他可能是你现在生活的延展,也可能是你头脑已经想过的好主意。
2. 第二种选择-如果如果你突然无法从事你正在做的(如:另一种选择。)那那第二种选择就是你想要做的事。想想象一下你的第一个生活选择突然消失了,或不再适合你怎么办呢?这这样就会想出其他选择。
3. 在在不考虑金钱和形象,你想做的事或者你想过的生活。
【奥奥德赛计划详解】
1. 一个直观的或者是图解形式的时间明细单。也包括私人的跟工作无关的事。
2. 为每个计划拟定一个六字标题描述计划的核心内容。
3. 针对每个计划提出二到三个问题,透过问题进行测试,发展新想法。
4. 填写仪表盘评估内容如下。
*你拥有的客观资源:物力。
*你你喜欢的程度。
*自信心的实现。
*计划的意义跟你的人生工作观是否一致?
*还还包括潜在考量:你你住哪里会获得什么经验,如何选择的,其中一样对你带来的影响其结果去想象生活会变成什么样的人成为什么样的人在哪里工作?
*其他内容:除了事业与金钱的其他你你,会放在心上事情。
【主动选择幸福】
选择的四个步骤。
1.收集和创建选项。深刻认识自己探索自己与世界的互动进行圆形体验设计。
2.缩小列表范围。选项选三到五个。
3.选择是相信你的EQ直觉
4.心存疑虑事情,放手继续前行。
【对失败免疫】
坚毅的研究表明,评估一个人的成功潜力是坚毅的品格,比智商情商更为关键,而对于失败免疫可以提高你的建议指数。(-心理学家安吉拉达克沃斯)
-在原型设计和体验中,可能无法实现自己的目标,但你还是可以从过程中受益。
-不要以结果评判人生成败。即使失败了,你也可以从中获得经验教训,帮助自己在重大事情取得成功。
也能够因此完成多次的原型迭代循环,享受这个学习的过程,也许对于别人而言,这意味着失败,但这就是一次一次的邂逅体验。
-重新定义人生是一个过程,而不是一个结果。(哲学家詹姆斯.卡斯写了一本非常有趣的书叫做“有限与无限的游戏”)生活中充满了这两种游戏。游戏会让你越来越接近真实的自己
-生活是一个永远无法被解决的问题你只有全力以赴的走下去让自己生活得得更好!
-做人-做事-转变:三者是螺旋上升的成长。
❺ 美国那些大学的IT专业是强项
Stanford(斯坦福)的CS是个很大的 CS,拥有40人以上的资深教员,其中不乏响当当硬梆梆的图灵奖得主(Edward A .Feigenbaum , John McCarthy)和各个学科领域的大腕人物,比如理论方面的权威DonaldE.K nuth;数据库方面的大牛Je ffre yD.Ullm an(他还写过那本着名的编译原理,此人出自Princeton);以及R ISC技术挑头人之一的John Henn e ssy。相信 CS的同学对此并不陌生。该系每年毕业30多名Ph.D.以及更多的Master。学生的出路自然是如鱼得水,无论学术界还是工业界,Stanford的学生倍受青睐。几乎所有前十的 CS中都有Stanford的毕业生在充当教授。当然同样享有如此地位的还包括其他三头巨牛:UC .Berkeley, MIT和CMU。
毕业于U. of Utah的Jim Clark曾经在Stanford CS当教授。后来就是这个人创办了高性能计算机和科学计算可视化方面巨牛的SGI公司。SUN公司名字的来历是:Stanford University Network .。顺便提一下,创办YAHOO的华人杨致远曾在斯坦福的 EE攻读博士,后来中途辍学办了YAHOO。
CS科研方面,斯坦福无论在理论、数据库、软件、硬件和AI等各个领域都是实力强劲的顶级高手。斯坦福的RISC技术后来成为SGI / MIPS的Rx000系列微处理器的核心技术;DASH,FLASH项目更是多处理器并行计算机研究的前沿;SU IF并行化编译器成为国家资助的重点项目,在国际学术论文中SU IF编译器的提及似乎也为某些平庸的论文平添几分姿色。
Stanford有学生14000多,其中研究生7000多。 CS有175人攻读博士,350人攻读硕士,每年招的学生数不详,估计少不了,但不要忘了,每年申请 CS的申请学生接近千人。申请费高达90$。
斯坦福大学位于信息世界的心脏地带———硅谷。加州宜人的气候,美丽的风景使得Stanford堪称CS的天堂。33.1平方公里的校园面积怕是够学子们翻江蹈海、叱咤风云的了。
申请斯坦福是很难成功的,但也并非不可为之。去斯坦福这样的牛校,运气很重要,牛人的推荐也很重要。
附:总的来说,前20的 CS可以分成三波:
一、4个最为优秀的 CS Program � Stanford,UC. Berkeley, MIT, CMU
二、6个其他前十的:UIUC,Cornell,U.of Washington ,Prin ce ton,U. of Tex as-Austin和U. of Wisconsin -Madison,其中UIUC, C ornell,U. of Washington和UW -Madison几乎从未出过前十名。
三、其他非常非常优秀的 CS:CalTech,U. of MarylandatCP, UCLA, Brown, Harvard,Yale, GIT, Pure, Rice,和U. of Michigan.
(注:CS=计算机科学系)
自20世纪40年代世界第一台现代计算机在美国诞生以来,美国一直执全球计算机学界之牛耳,这同时也是美国计算机产业界占据绝对优势的重要原因之一。我们引进的教材中绝大多数也都来自美国。计算机学科仍然在高速发展,与此对应的计算机人才培养模式也在不断变化,密切关注和跟踪国外尤其是美国名校的教学新动态,应该是非常有意义的。
本文即选择了美国计算机学科最负盛名的五所高校,对目前各校计算机科学(Computer Science)专业的本科教学体系进行了一些分析。
斯坦福大学
斯坦福大学拥有独立的计算机科学系。浏览该校的教学手册,最具特色的恐怕要算多门科普性计算机知识讲座了,一般有两到三个单元,涉及面非常之广,从量子计算到数字演员,从计算科学的伟大思想到网络安全,从网上拍卖到使用元编译发现大型开放源代码软件中的大量错误,其中还不乏对技术乌托邦、斯诺“两种文化”、计算机面临的困境以及迅速发展所带来的诸多问题的思考。开课的老师阵容强大,基本上都是响当当的名教授,甚至包括图灵奖得主John McCarthy。用这种讲座代替计算机科学导论性质的专门课程,可以充分展示计算机科学的丰富内涵,使学生较早地了解学科的轮廓和脉络,对于开阔学生视野,启发学生的学习兴趣也大有好处。由于美国大学中专业的选择非常灵活,而近年来计算机学科招生受行业影响流失严重(这种情况甚至惊动了比尔·盖茨,今年微软到各大高校招兵买马时,他每站必到,利用自己的明星效应,大讲计算机学科的美妙前景),可以想象,这种讲座同样也肩负着吸引学生选择计算机专业的重大使命。
斯坦福大学典型的低年级课程设置如表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 程序设计实验(Programming Studio),教学大纲基本上以Kernighan的《程序设计实践》为蓝本(以上教材机械工业出版社均出版了中译本和影印版)。
* 必修要求中增加了一年的高级项目,强调团队合作和软件工程实践,包括文档写作、口头表达、项目规划与管理等,实际上是在实践中学习软件工程。这门课也可以用两学期的软件工程或者一年的高级论文代替。仍然充分保留了灵活性,有利于因材施教。
* 增加了CS173 离散结构的学时,部分原CS273的内容移到这里,同时CS273又新增了原CS375的内容。这实际上是提高了对计算机理论的要求。
CMU(卡内基梅隆大学)
与MIT、伯克利等学校计算机科学仍然和电子与电气工程同处一系不同,CMU的计算机科学系成立于1965年,是全美最早的,如今它已经升格为计算机科学学院。其研究生项目中除了机器人方向与硬件关系较多之外,其他基本上都是纯软的。从这个意义上来说,CMU的教学体系对于偏软的计算机科学系应该有较大的借鉴意义。
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 “计算结构”(Computation Structures),与伯克利的61C“计算机结构”对等(教材是自编课件)。此外有两门专业基础数学课:“概率系统分析”(教授自编教材)和“计算机科学数学”,后者的教材是国外院校普遍采用的Rosen所着《离散数学及其应用》(中文版由机械工业出版社出版)。
对MIT的学生而言,实验课程有多种选择:电气工程和计算机科学实验,模拟电子实验,数字系统实验,微机项目实验,半导体设备项目实验。此外,无论何种专业,都有软件工程实验课。值得注意的是,本科生各专业的必修课程中并没有软件工程课程。也就是说,软件工程的内容都在实践中完成了。带软件工程实验课的是因为提出Liskov替换原则而知名的女教授Barbara Liskov,她刚刚获得了2004年度的冯·诺依曼奖。作为美国工程院和艺术科学院的双院士,她几十年在软件开发研究方面的经验,将有力地保证这门实验课程的质量
❻ 介绍些计算机方面的书籍有哪些
1. 《信号与系统》
在《编码》一书中,向我们展示了使用语言的一些直观方法并创造新的方法来进行相互之间的交流,此书使我们明白了这种创造性以及我们人类对交流的迫切需求。
❼ 哪本"编译原理"的书比较好
我们学校用的是《编译原理》与《编译原理与实践》这两本书,这两本书都是国外的教材。我觉得《编译原理与实践》这本书不错,自学应该能看懂,而且代码比较多,书最后还有整个小型编译器的源代码。
编译不好学,你就慢慢学吧。
下面的资料请作参考:
当代编译技术三大圣经级别的教材
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年在贝尔实验室做研究工作。主要研究方向是计算机安全、编译器设计、程序设计语言等。
❽ 编译原理这门课哪个老师的好过
如果您觉得有用的话,请及时的答案,。
我认为这门课不难,好好学吧,把同学的笔记接来看看,如果只求过的话,我相信努力几天还是没问题的。编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 编译原理是计算机专业设置的一门重要的专业课程。
这门课的基本概念:编译器是将一种语言翻译为另一种语言的计算机程序。编译器将源程序(source language) 编写的程序作为输入,而产生用目标语言(target language )编写的等价程序。通常地,源程序为高级语言(high-level language ),如C或C + + ,而目标语言则是目标机器的目标代码 (object code,有时也称作机器代码(machine code )),也就是写在计算机机器指令中的用于运行的代码。这一过程可以表示为:源程序→编译器 →目标程序
❾ 美国计算机专业
前20名
CS——Computer Science的简称,即计算机科学。
总的来说,计算机专业前20名的学校可分成三类:
A.4个最为优秀的CS Program:Stanford,MIT,U.C.Berkeley,CMU。
B.6个其他前10名的:UIUC,Cornell,U.Washington,Princeton,U.Wisconsin- Madison和 U.Texas-Austin。其中UIUC,Cornell,U.Washington和 U.Wisconsin-Madison几乎从未出过前10名。
C.其他非常非常优秀的CS:CalTech,U.Maryland-College Park,UCLA,U.Michigan, GIT,Brown,Harvard,Yale,Pure和 Rice。
1. 斯坦福大学(Stanford University)
Stanford的CS是个很大个的CS,拥有40人以上的Faculty成员,其中不乏响当当、硬梆梆的图灵奖得主(Edward A.Feigenbaum, John McCarthy)和各个学科领域的大腕人物,比如理论方面的权威Donald E. Knuth;数据库方面的Jeffrey D. Ullman(他还写过那本着名的编译原理,此人出自Princeton);以及RISC技术挑头人之一的John Hennessy。相信CS的同学对此并不陌生。该系每年毕业30多名Ph.D.以及更多的Master。学生的出路自然是如鱼得水,无论学术界还是工业界,Stanford的学生都倍受青睐。几乎所有前10 名的CS学校中都有Stanford的毕业生充当教授。
毕业于U. of Utah的Jim Clark曾经在Stanford CS当教授。后来就是这个人创办了高性能计算机和科学计算可视化方面巨牛的SGI公司。SUN公司名字的来历是Stanford University Network。顺便提一下,创办 YAHOO的华人杨致远曾在斯坦福的EE攻读博士,后来中途辍学办了YAHOO。
CS科研方面,斯坦福在理论、数据库、软件、硬件、AI等领域都是实力强劲的顶级
高手。斯坦福的RISC技术后来成为SGI/MIPS的Rx000系列微处理器的核心技术;DASH,FLASH项目更是多处理器并行计算机研究的前沿;SUIF并行化编译器成为国家资助的重点
项目,在国际学术论文中SUIF编译器的提及似乎能为某些平庸的论文平添几分姿色。
Stanford有学生14000多,其中研究生7000多;CS有175人攻读博士,350人攻读硕士。每年招收的学生数不详,估计少不了。但不要忘了,每年申请Stanford CS的学生接近千人。申请费高达$80。
斯坦福大学位于信息世界的心脏地带——硅谷。加州宜人的气候,美丽的风景使得
Stanford堪称CS的天堂。33.1平方公里的校园面积怕是够学子们翻江倒海,叱咤风云的
了。
2. 麻省理工学院(Massachusetts Inst. of Technology)
MIT招生好像不看GRE成绩。MIT的CS是巨牛的,99年最新排名上它和斯坦福同被打了
5.0的满分,两者并列第一。MIT的CS曾为CS的发展作出不可磨灭的贡献,数据流计算的
思想和数据流计算机、人工智能方面的许多重大成就,影响了整个UNIX界的X-Window…
… MIT 和 Stanford一样,几乎都是在CS界样样巨牛的学校。据某位大侠提供的资料:
MIT的 Media Arts and Sciences知名度不在Computer Department之下。主要是多媒体技术,信息处理,人工智能等。有一大批着名的教授,如Marvin Minsky(图灵奖获得者)。
3. 加州大学伯克利分校(University of California-Berkeley)
同样地处旧金山湾畔,硅谷地带,离Stanford大约只有50公里的UC. Berkeley是美国最激进的学校之一。60年代的嬉皮文化,反越战,东方神秘主义,回归自然文化都起
源于此。诗人爱伦金斯堡是当年UC. Berkeley的代言人。
在当今高科技领域UC. Berkeley在缔造新的神话,在文学、数学、化学、新闻等20
多个大的学科领域位居前3名。16个诺贝尔奖得主,总数近200的科学院院士、工程院院
士,连同众多在硅谷商战中成为亿万富翁的伯克利人撑起了一面汇集天下英才的大旗。
INTEL总裁Andrew Grove,就是毕业于UC. Berkeley。
BSD版的UNIX影响了整个CS界,伯克利的RISC技术后来成为了SUN公司SPARC微处理器的核心技术,David Patterson接下了一个6亿美元的项目用于新型计算机体系结构,特别是IRAM的研究开发。
UC. Berkeley有学生30000多,研究生超过8500人。申请费和加州大学的其他分校一样,$40。据一项最近的调查,伯克利已经成为美国大学生最向往的研究生院,高居榜首,其申请的难度可想而知。
UC. Berkeley的CS是个大系,Faculty中有图灵奖得主以及像Patterson这样的巨牛。CS科研方面,UC. Berkeley也是样样强。
旧金山湛蓝起伏的海湾,苍翠绵延的山峦,舒心宜人的气候,以及近在咫尺的硅谷
……
这一切的一切不也使得UC. Berkeley俨然一个CS学子的世外桃源吗?
4. 卡耐基梅隆大学(Carnegie Mellon University)
CMU是个位于匹兹堡的不大的学校,学生7000多,校园好像也不大。但这个学校在工
程及其他一些领域却是顶尖的学堂。CMU的CS不是一个系,而是一个学院,其规模之大,
可能只有Stanford,UIUC可与之相比。Mach操作系统,PVM,C.mmp等都有CMU的巨大贡献。
申请CMU的难度很大,因为尽管CMU的CS Faculty很多,但每年只招收不足30人的研
究生队伍。
5. 伊利诺斯大学(Univ. of Illinois-Urbana-Champaign)
UIUC的工程学院在全美是至尊级的,其CS,ECE,EE在历史上都屡建战功。在CS方面
,从早期的超级计算机ILLIAC I,II,III,IV到后来的CEDAR,都是CS发展史上,特别是并行计算机发展史上的重要事件,影响和引导了CS很长时期的发展。David Kuck曾是
并行计算机处理界的一代先驱。
超级计算机研究开发中心(CSRD),美国国家超级计算及应用中心(NCSA)等众多
的机构,使得UIUC的CS常常成为研发的领头雁。
大家可能还记得,Netscape-Navigator的最初开发人员中有个Marc Anderssen。这位来自Wisconsin 的小伙子在UIUC读本科,大四的时候在NCSA参与编写了MOSAIC;后来他去了硅谷,并在那里遇到了前面提到过的Jim Clark,SGI的前创始人,两人一见如故,联手创办了着名的网景Netscape,并一度在浏览器市场上独霸武林。
还有Lotus Notes, 远程登录程序NCSA Telnet, 邮件程序Eudora等的作者,都是UIUC的毕业生。商务软件巨人Siebel Systems的创始人Tom Siebel,也是毕业于UIUC的。
UIUC是个大学校,学生总数超过35000,研究生院近万人。
UIUC的CS很大,40余个Faculty提供了全面的CS教育和科研项目。每年30多个博士的
毕业数目似乎只有Stanford可以匹敌。
UIUC的Polaris并行化编译器是这个领域能和Stanford的SUIF直接叫板的拳头产品,清华开发并行编程环境时选用了这个系统。
UIUC在计算机硬件、软件、AI、DB等领域都相当强大。特别是硬件,如前面提到的
ILLIAC,CEDAR等。
事实上,UIUC在超级计算机系统的研究开发方面绝不逊于MIT、Stanford等任何一个,甚至有过之而无不及。NCSA建立在UIUC这一事实本身就是佐证。UIUC CS的学生毕业后去学术界的不少,Stanford,UC. Berkeley等CS名校都有UIUC的博士挑大梁。但更多UIUC CS学人还是进入业界,成为业界实干的中坚。
6. 康奈尔大学(Cornell University)
作为IVY LEAGUE的成员和一所私立学校,Cornell有其独到的优势。在美国,私立学
校一般要比公立学校难进,其学生也是经过严格的选拔才录取的。Cornell的CS学生入校
后多能享受FELLOWSHIP的待遇,其个人经济条件非公立学校可比,加上贵族式校友的提
拔,私立学校的出路是很诱人的。康奈尔在理论计算机方面一直是顶级高手,但在其他
CS领域并不总在前10名。
Cornell学生18000多,研究生过5000人。CS每年招攻读Ph.D.的学生25人左右。
7. 华盛顿大学(University of Washington)
位于Seattle的U. of Washington得天独厚——计算机界的巨牛MS就在西雅图,而且更要命的是,Bill Gates就是那里的人。这位Harvard的辍学者给了哈佛许多MONEY,但同给U. of Washington的钱财相比,实在是小巫见大巫。
U. of Washington位于风光秀丽的WASHINGTON湖畔,气候四季如春。33000多学生中研究生有8000名左右。Seattle最令人厌恶的地方可能就是一年有160天会降水。
U. of Washington的CS较大,30多名Faculty成员,每年近20个优质博士毕业,以及大量的Master。估计每年的招生数应该不低。U. of Washington的CS在各个方面比较均衡,最强的软件排名第5,而其他领域一般也都能位居前10,好像没有明显很弱的地方。
图灵奖得主Dick Karp从UC. Berkeley告老还乡后又被返聘到了U. of Washington的CS。U. of Washington的CS要求很高,Ph.D.学生入学的平均GPA高达3.86,GRE2160以上,加上一般较早的DEADLINE,申请U. of Washington是相当有难度的。
8. 普林斯顿大学(Princeton University)
Princeton是个令人神往的地方,这里曾经是世界的科学中心。
Princeton的CS不大,18个Faculty成员,学生人数也不算多。科研上除了排名第5的理论,似乎还没注意到其他闪光点。但是,Princeton无疑培养出了大量计算机界的优秀人物,Jeffrey D. Ullman,John McCarthy等巨牛人物均出自大名鼎鼎的Princeton。在
Princeton领受的教育是最好的教育熏陶。
Princeton学校不大,只有6000多学生,研究生不过1700人。
9. 威斯康星大学(University of Wisconsin-Madison)
U. of Wisconsin-Madison的CS较大,35个Faculty成员,200多个研究生,每年招60—70个新生。目前几乎1/4的Faculty来自UC. Berkeley,博士生毕业后有去Stanford ,UC. Berkeley等牛校挑大梁的,但和UIUC类似,似乎进入业界的更多一些。然而要在这里拿到博士学位可不容易。超过七成的人,会在中途找到比较理想的工作后,拿着硕士文凭拔腿就跑,免得被那些无穷无尽的科研项目给整惨了。
U. of Wisconsin-Madison的数据库一直在前3位,经常是第1位。这里的数据库由于在设计实现DBMS系统上的传统优势,使其在业界的声誉相当崇高,据说Microsoft里有一帮Wisconsin校友从中兴风作浪,Oracle也格外青睐Wisconsin-Madison的学子。
Wisconsin的硬件、计算机体系结构实力巨牛,99排名第6,对业界相当有影响力。
微处理器中的超标量技术(SuperScalar)源于此地;多处理机CACHE一致性的总线侦听
SNOOPING协议,IEEE SCI协议等,都是源于此地。正在研究开发中的MultiScalar技术和 DataScalar技术据说可以把微处理器每个时钟周期的指令发射数提到10以上,大大地提高微处理器的计算能力。Wisconsin的软件99排名第7。主要是在系统软件方面做OS 的设计与实现,WEB上的CACHE策略,支持共享主存和消息传递两种并行编程模式及其混合的并行程序设计语言和编译器,以及由MIDSHIP项目挑起的关于并行与分布式计算,OODB,科学数据库,支持图象查询的新型查询语言以及图象处理等方面的研究。由于美国有大量的卫星图象需要及时处理,加上迫切需要GIS系统的研究开发,这方面的研发使得U. of Wisconsin-Madison捞到了不少经费。
Wisconsin和UIUC的CS理论都是前10名左右。Wisconsin的Carl de Boor是逼近理论 方面的大牛。
U. of Wisconsin-Madison是个大型的综合性学校,40000学生中研究生院的超过10 000,这万人中有博士生5000,硕士生3500,法学院、医学院、护理学院、兽医学院的职业学生2000人。2200多Faculty中有多位诺贝尔奖得主,52个院士,其中18个是工程院院士。
需要注意的是,Wisconsin的CS有点不同于其他许多学校,它隶属于College of Le
tters & Science,而不在College of Engineering下面。因此许多偏硬件的项目,比如嵌入式系统,网络硬件、路由,多媒体,通信,自控以及数字信号处理等项目不在CS D ept.,而是在工程院下的Dept. of Electrical & Computer Engineering,即ECE系。
那个系也挺大,比CS还要大不少。98年在工程类排名的计算机工程一项上排了第9位
。
10. 德克萨斯大学(University of Texas-Austin)
U. of Texas-Austin的CS较大,Faculty中好像有个图灵奖得主。该系发展比较平衡,最好的AI排第5,其他几个专业也多能挤进前十。
U. of Texas-Austin是个巨大的学校,5万学生,研究生院的可能有1.3万。但学校的主校区却好像面积不足,仅140公顷,按美国大学的标准,太不足了。
11. 加州理工学院(California Institute of Technology)
CIT的CS很小,只有大约5位教授,每年招很少的学生。虽然申请CIT是免费的,但建
议不要轻易尝试。由于系太小,CIT好像只是在计算机硬件和科学计算的可视化方面很强
。该系多年以来一直稳坐第11、12位几乎没动过窝;类似的情况还有斯坦福,MIT,稳居
第1、2位,Cornell稳居第5位,U. of Wisconsin-Madison稳居第9、10位。CIT的CS和其他系,比如数学、物理、生物等需要大量科学计算的部门联系很紧密。CIT学校也很小, 2000名学生中研究生占1100人。Faculty人数也不多,但几乎个个是巨牛,按平均水平看,CIT可能是世界上最牛的学校了。
12. 马里兰大学(University of Maryland at College Park)
U. of Maryland at CP是一个实力相当强劲的CS,软件第8,数据库第4,AI第9,三个专业都挤进了前10位,它的TINY系统有相当的知名度。
13. 加州大学洛杉矶分校(University of California-Los Angeles)
历史上UCLA的CS曾经一度辉煌,上到过第6(NRC\' 82),但近年来一直徘徊在第13 —15。而且CS的各个专业细目几乎没有一个能进前10名。尽管如此,UCLA的CS还是十分强大的。
UCLA辉煌的历史可能在于它对Internet的发展所作出的巨大贡献。六十年代美国的
ARPA在搞网络互连的开创性研究,ARPA网的四个节点是:UCLA,Stanford的SRI,UCSB和 U. of Utah。此时一位来自美国新英格兰地区的青年Vinton Cerf不去离家咫尺的Yale大学,远涉千里,来到了加州。他先在Stanford获得数学学士,然后到UCLA拿下了CS的硕士和博士。
毕业后Cerf一直在SRI从事ARPA网的研究,特别是研究如何让它无法正常工作。几年
后,Cerf与MIT一位到业界闯荡的数学教授Kyhn合作研发,搞出了一套软件系统用于网络
互连(1973年)。这就是TCP/IP协议的诞生。
UCLA作为INTERNET的先驱,地处阳光灿烂的南加州,应当成为CS学生的乐土。
UCLA有学生33000人,其中研究生院的占9900人。地处洛杉矶的UCLA周围几乎有玩不尽的地方:如DISNEY,HOLLYWOOD等。由于位于大城市,校园不是很大,但风景异常美丽。
UCLA的CS较大,规模应该和U. of Washington和U. of Wisconsin-Madison类似。
14. 密歇根大学(University of Michigan-Ann Arbor)
U. of Michigan 是个非常了不起的学校。在BIG TEN里,从综合的角度上说它可算
得上是领头羊了,当然UIUC, U. of Wisconsin-Madison也紧随其后。这里的CS偏硬的更厉害些,硬件排在第9,而计算机工程排第7,EE第5,都是前10名中的巨牛。Michigan 的CS和EE合在一起称为EECS系,是个相当大的系,每年招收的学生应当不在少数。
Michigan的CS估计在历史上也相当牛,U. of Wisconsin-Madison CS里两位来自Mi chigan 的教授都是院士,在其他CS系里,比如UIUC的,也大有Michigan 的牛人在。如 前述,UIUC的CS在硬件上极强,而Michigan 的CS中有许多UIUC的哥们在那里当老师。
15. 佐治亚理工学院(Georgia Institute of Technology)
GIT是个较大的学校,GIT的工程学院很厉害,研发经费仅次于MIT,和UIUC,Michi
gan差不多。CS系的数据库第7,GUI第4。
16. 布朗大学(Brown University)
Brown的规模不大。这所IVY LEAGUE中的私立学校可能拥有一些类似于CORNELL的优势。CS的GUI可以列在第6位,好像还有许多关于语音识别等偏人工智能方面的研发项目
。
17. 哈佛大学(Harvard University)
在CS的早期发展史上,Harvard曾经是泰斗级的人物,毕竟CS和数学,物理的渊源太
深太长了。好像王安是这里出来的,Bill Gates也是这里出来的。Harvard毕竟是Harva rd,总是名人辈出,因为Harvard总是可以招到最优秀的人。但千万别以为哈佛人人牛。Harvard不喜欢带工程色彩的东西,CS是挂在Arts & Science学院下面的Division of E ngineering and Applied Science,好像连独立的一个系都不是。除了理论可以排进前 10名以外,其他项目怕也拿不出多少货色了。
哈佛大学共有学生18000人,其中研究生院的11000人。Harvard大学拥有世界上最多的诺贝尔奖得主,150多个美国国家科学院院士。哈佛的CS估计不会是大个子,招的学生可能也不多,申请的难度应当很大。
18. 耶鲁大学(Yale University)
YALE曾经也进过前10名(NRC\' 82),是YALE和UCLA而不是Princeton和U. of Texa s-Austin位于前10名的榜上。YALE的CS不大,十几个老师加上为数不多的学生,每年只招收六个博士研究生。
和Harvard这样很重文理的学校一样,YALE的CS在理论上比较强。但不同于哈佛,Y
ALE有独立的CS系,受到较高的重视。YALE CS在AI和软件方面比较强。着名的LINDA并行编程模式就是在这里提出并实现的。YALE 的毕业生到学术界的比到业界的似乎 要多, 哈佛似乎也是这样。
19. 普渡大学(Pure University)
可能许多人还不知道,Pure的计算机系是美国最早成立的计算机系。建系之初一
直处于TOP 10。在70年代由于本人不甚了解的原因,没落了。Pure的排名也不太稳定
,从13到30的排法似乎都见过。Pure是个大学校,有35000学生。其工程学院很出名 20. 莱斯大学(Rice University)
Rice是个位于休斯顿的小学校,4000名学生,研究生有1600左右吧。CS也不大,优
势在于软件,排在第9位。该系的KENNEDY是个巨牛的人物,是美国HPCC常委的关键人物
之一,好像还是总统在信息科学方面的特别顾问。KENNEDY是并行计算领域的大牛。前几
年,他义无反顾地承担起高性能FORTRAN语言(HPF)的编译器研制工作,项目之大,投
入人力之巨,加上他的权威地位,被人们寄予普遍厚望。可惜后来项目失败了。从此并
行计算界陷入了一阵低潮。这几年KENNEDY好像转向去做针对特定处理器的后端优化技术
了。Rice CS 学生的出路相当好。
参考资料:http://www.bb268.com
❿ 编译原理笔记9:语法分析树、语法树、二义性的消除
语法分析树和语法树不是一种东西 。习惯上,我们把前者叫做“具体语法树”,其能够体现推导的过程;后者叫做“抽象语法树”,其不体现过程,只关心最后的结果。
语法分析树是语言推导过程的图形化表示方法。这种表示方法反映了语言的实质以及语言的推导过程。
定义:对于 CFG G 的句型,分析树被定义为具有下述性质的一棵树:
推导,有最左推导和最右推导,这两种推导方式在推导过程中的分析树可能不同,但因最终得到的句子是相同的,所以最终的分析树是一样的。
分析树能反映句型的推导过程,也能反映句型的结构。然而实际上,我们往往不关心推导的过程,而只关心推导的结果。因此,我们要对 分析树 进行改造,得到 语法树 。语法树中全是终结符,没有非终结符。而且语法树中没有括号
定义:
说白了,语法树这玩意,就一句话: 叶子全是操作数,内部全是操作符 ,树里没有非终结符也不能有括号。
语法树要表达的东西,是操作符(运算)作用于操作数(运算对象)
举俩例子吧:
【例】: -(id+id) 的语法树:
【例】:-id+id 的语法树:
显然,我们从上面这两个语法树中,直接就能观察出来它们的运算顺序。
【例】:句型 if C then s1 else s2
二义性问题:一个句子可能对应多于一棵语法树。
【例】: 设文法 G: E → E+E | E*E | (E) | -E | id
则,句子 id+id*id、id+id+id 可能的分析树有:
在该例中,虽然 id+id+id 的 “+” 的结合性无论左右都不会影响结果。但万一,万一“+”的含义变成了“减法”,那么左结合和右结合就会引起很大的问题了。
我们在这里讲的“二义性”的“义”并非语义——我们现在在学习的内容是“语法分析器”,尚未到需要研究语言背后含义的阶段。
我们现在讲的“二义性”指的是一个句子对应多种分析树。
二义性的体现,是文法对同一句子有不止一棵分析树。这种问题由【句子产生过程中的某些推导有多于一种选择】引起。悬空 else 问题就可以很好地体现这种【超过一种选择】带来的二义性问题,示例如下。
看下面这么个例子。。
(其实,我感觉这个其实比较像是“说话大喘气”带来的理解歧义问题。。。)上面的产生式中并没体现出来该咋算分一块,所以两种完全不同的句子结构都是合法的。
二义性问题是有救的,大概有以下这三种办法:
这些办法的核心,其实都是将优先级和结合性说明白。
核心:把优先级和结合性说明白
既然要说明白,那就不能让一个非终结符可以直接在当次推导中能推出会带来优先级和结合性歧义的东西。(对分析树的一个内部节点,不会有出现在其下面的分支是相同的非终结符的情况。如果有得选,那就有得歧义了。没得选才能确定地一路走到黑)
改写为非二义文法的二义文法大概有下面这几个特点:
改写的关键步骤:
【例】改写下面的二义文法为非二义文法。图右侧是要达成的优先级和结合性
改写的核心其实就两句话:
所以能够得到非终结符与运算的对应关系(因为不同的运算有不同的优先级,我们想要引入多个优先级就要引入多个新的非终结符。这样每个非终结符就可以负责一个优先级的运算符号,也就是说新的非终结符是与运算有关系的了。因此这里搞出来了“对应关系”四个字)如下:
优先级由低到高分别是 +、 、-,而距离开始符号越近,优先级越低。因此在这里的排序也可以+ -顺序。每个符号对应一层的非终结符。根据所需要的结合性,则可确定是左递归还是右递归,以确定新的产生式长什么样子
【例】:规定优先级和结合性,写出改写的非二义文法
我们已经掌握了一种叫做【改写】的工具,能让我们消除二义性。接下来我们就要用这个工具来尝试搞搞悬空 else 问题!
悬空 else 问题出现的原因是 then 数量多于 else,让 else 有多个可以结合的 then。在二义文法中,由于选哪两个 then、else 配对都可以,故会引起出现二义的情况。在这里,我们规定 else 右结合,即与左边最靠近的 then 结合。
为改写此文法,可以将 S 分为完全匹配(MS)和不完全匹配(UMS)两类。在 MS 中体现 then、else 个数相等即匹配且右结合;在UMS 中 then、else 不匹配,体现 else 右结合。
【例】:用改写后的文法写一个条件语句
经过检查,无法再根据文法写出其他分析树,故已经消除了二义性
虽然二义文法会导致二义性,但是其并非一无是处。其有两个显着的优点:
在 Yacc 中,我们可以直接指定优先级、结合性而无需自己重写文法。
left 表示左结合,right 表示右结合。越往下的算符优先级越高。
嗯就这么简单。。。
我们其实可以把语言本身定义成没有优先级和结合性的。。然后所有的优先、结合都交由括号进行控制,哪个先算就加括号。把一个过程的结束用明确的标志标记出来。
比如在 Ada 中:
在 Pascal 中,给表达式加括号: