尼古拉斯·沃思(Niklaus Wirth,1934年2月15日—),生于瑞士温特图尔,是瑞士计算机科学家。
从1963年到1967年,他成为斯坦福大学的计算机科学部助理教授,之后又在苏黎世大学担当相同的职位。1968年,他成为苏黎世联邦理工学院的信息学教授,又往施乐帕洛阿尔托研究中心进修了两年。
尼古拉斯·沃思资料编辑本段回目录
Niklaus在瑞士(苏黎士)联合理工学院(Swiss Federal Institute of Technology Zurich ) 的主页和介绍:http://www.cs.inf.ethz.ch/~wirth/
Niklaus出生于1934年2月15日于Winterthur,瑞士。
Niklaus于1959年从瑞士联合理工学院获得 电子工程学士学位。1960年于Laval 大学(Laval University)获得其硕士学位。1963年,从UC Berkeley获得其博士学位。
1963年到1967年,Niklaus作为助理教授任职于斯坦福大学和瑞士苏黎士大学。
1968年,Niklaus于瑞士联合理工学院出任教授一职,并于1999年退休。
Niklaus也曾在著名的Xerox PARC研究中心(www.parc.xerox.com )工作过两年。
他是好几种编程语言的主设计师:
Algol W
Modula
Pascal
Modula-2
Oberon
他亦是Euler语言的发明者之一。1984年他因发展了这些语言而获图灵奖。他亦是Lilith电脑和Oberon系统的设计和执行队伍的重要成员。
他的文章Program Development by Stepwise Refinement视为软件工程中的经典之作。他写的一本书的书名Algorithms + Data Structures = Programs(算法+数据结构=程式)是计算机科学的名句。
欧洲人通常都将他的名字读得正确,读作“Nih-klaus Virt”;但美国人通常读成“Nickles Worth”近似的音。于是有人便说,欧洲人传址呼叫他,美国人传值呼叫他。
个人经历和介绍编辑本段回目录
尼克莱斯·沃思(Niklaus Wirth)1934年生于瑞士北部的Winterthur,从小就喜欢动手动脑,他的最大爱好是组装飞机模型。1958年从苏黎世工学院取得学士学位后,他到加拿大的莱维大学深造,之后进入美国加州大学伯克利分校获得博士学位。
上世纪50年代末到60年代初,沃思设计了第一个语言Euler。Euler语言在实用性上考虑并不周全,在学术上却非常优秀,为编译器的系统设计创造了很好的基础。接下来,沃思在斯坦福大学定义了另一种语言来描写Algol W的编译器,由此催生了新的语言PL360。PL360是作为辅助工具开发的,却出人意料地在许多地方获得应用。Algol W及PL360的成功奠定了沃思作为程序设计语言专家的地位。
成名后的他拒绝了斯坦福大学的挽留,于1967年回到祖国,先在苏黎世大学任职,第二年转到母校苏黎世工学院。在这里,他在CDC6000上成功设计了PASCAL语言。说来有趣,沃思开发PASCAL的初衷只是为了有一个适合于教学的语言,没有考虑商业用途。PASCAL一经推出,由于它的简洁明了,更由于它特别适合于由微处理器组成的计算机系统,竟然广泛流传开来。在C语言问世以前,PASCAL成了最受欢迎的语言之一。沃思的学生菲力浦·凯恩(Phillipe Kahn)在美国加州就先后卖出了100多万个PASCAL拷贝,其影响可见一斑。
1971年,基于自己的开发程序设计语言和编程的实践经验,沃思首次提出了“结构化程序设计”(Structured Programming)的概念。威茨提出的这种结构化程序设计方法又称为“自顶向下”或“逐步求精”法,在程序设计领域引发了一场革命,成为其中的一种标准,尤其在后来发展起来的软件工程中获得广泛应用。 PASCAL的成功和结构化程序设计思想带来的巨大影响,都没有停止沃思继续创造性的研究与开发工作。
1970年代中期,为适应并发程序设计的需要,沃思又成功开发了获得广泛应用的Modula语言。后来,参考Alto的经验,他还设计开发了Lilith个人计算机系统。沃思的学术著作很多,著名的包括《系统程序设计导论》、《算法+数据结构=程序》。除了程序设计语言之外,沃思在其他方面也有许多创造,如扩充了著名的巴科斯范式,发明了语法图等。1984年第十九位 图灵奖(1984年)获得者。 获奖词:
( 授予Niklaus Wirth图灵奖以表彰其)开发了一系列的计算机程序语言,EULER, ALGOL-W, MODULEA和PASCAL。PASCAL语言。被用在计算机程序语言教学上具有重要的意义,并为将来的计算机语言,系统和结构设计提供了一个基础。
执着的数字思想者——Pascal之父编辑本段回目录
引言:程序=算法+数据结构
尼克劳斯·沃斯(Niklaus Wirth)教授,Pascal系列语言之父,世界闻名的计算机科学家。
他是苏黎世联邦理工学院(Swiss Federal Institute of Technology 简称ETH)教授,因发明了Pascal计算机编程语言(1970年)及其它几种计算机语言而著名。其中的Oberon语言被苏黎世一家名为Oberon microsystems的IT公司投入商业生产。Pascal的基本概念对最近开发的各种计算机语言影响巨大,特别是一系列面向对象语言,如Java等。
Wirth教授的Pascal语言影响了几代软件开发人员,并提出计算机界非常有名的“数据结构十算法= 程序”著名公式,除了发明了多种影响深远的程序设计语言,他还提出“结构化程序设计”这一革命性概念,为新软件技术“结构化编程”的开发做出了贡献。
上个世纪七十年代,Wirth教授利用假期时间在施乐公司(Xerox PARC)的帕洛阿尔托研究中心(Palo Alto Research Center)进行研究;之后开发了世界最早的个人计算机之一,名为“Lilith”(1978-80)。直到今天,其中一台仍在Wirth教授在苏黎世理工学院的办公室里使用。
Wirth教授曾在苏黎世联邦理工学院授课多年,并出版了许多书籍,其中不少著作被视为计算机领域的经典。
他曾多次因其开拓性成就获奖:
1983年,获 电气和电子工程师协会(IEEE)Emanuel Piore 奖;
1984年,获图灵奖(A. M. Turing prize );
1987年,获美国计算机学会(ACM)计算机科学教育杰出贡献奖;
1989年,获IBM欧洲杰出科学技术奖。
Wirth教授还在很多大学担任名誉教授,从俄罗斯到南非遍布世界各地。
执着技术梦
引言:“Everything is software, but software is not everything.”
一切都可以是软件,但软件并不是一切。
图:退休后的Wirth先生
Wirth的一生,是执着地追求技术的一生,每一个阶段,都有他的执着和独特的思考。生于瑞士,求学美洲,立业瑞士。
瑞士是Wirth的故乡,也是他天真烂漫童年渡过的地方。1934年2月,Wirth生于瑞士北部离苏黎世不远的温特图尔(Winterthur),Wirth小时就喜欢动手动脑,组装飞机模型是他的最大爱好。他父亲是高中地理学教师,有一个小书房,作为家中唯一的孩子,父亲的书房成了他发现灵感的地方,这里有许多技术书籍,从这些书中,他发现了涡轮、蒸汽机、火车头和电报的构造说明,这些问题令他着迷。但是这些理论并没有使他满足,他想知晓生活中这一切东西是怎样运作的,怎么办呢?自己动手做。
作为飞机模型迷,他和朋友们建造了自己的飞机,数量还相当可观,足有几十只,最大的一个机翼跨度足有三米半。在高中时,他还是一个化学迷,在家中地下室里建立了一个实验室,以用来实验在学校里学到的东西。象其他的孩子一样,他童年时也有一些有意思的小故事。有一次,他和朋友做了一个火箭模型,在实验时,由于没有将硝石、硫磺和木炭等混合物压缩好,结果使火箭没有到达预定轨道,更为不幸的是,火箭落到了校长的脚下,当时校长正好溜达到学校的角落里,好处是校长比较和蔼,他们并没有得到纪律处分。
也许正是从那时起,燃起了他的技术梦,在他的职业生涯中他走出了一条自己的路。中学毕业以后,Wirth进入在欧洲甚至全世界都很有名气的苏黎世工学院(ETH),获得电子工程学士学位后,他于1959年离开了瑞士,远渡重洋来到加拿大,在加拿大的莱维大学(Laval University)深造,于1960年取得硕士学位。之后他再次迁移,来到美国加利福尼亚,进入世界闻名的加州大学伯克利分校,于1963年获得博士学位。并且后来成了斯坦福大学的助理教授。
在加拿大两年,美国八年后,1968年,Wirth 一家重回到了瑞士,等着他的是承建ETH计算机科学部门的重任。计算机科学及计算机科学教育成了他一生不解的缘,不过他的子女并没有完全继承父业,虽然大女儿和儿子也在学校中工作,但一个搞行政,另一个教音乐。
在ETH工作32年后,1999年3 月他正式退休,而ETH的计算机科学大厦业已建立。
YZ: 您能谈一下自己的家庭吗?在退休的前后,生活有什么样的不同?
NW:我和我妻子Diana生活在距离苏黎世大约13公里的郊区,我有三个孩子,他们都长大了,有自己的家庭。最大的女儿是一所学校校长的秘书;我的儿子给未来要成为教师的学生们教授音乐;我的儿媳妇是一位学校心理学工作者。
我是六年前退休的。我喜欢这种闲适的生活,没有压力,也没有时间表,议程,会议和测验。原则上,退休后一个人更能够集中精力干自己喜欢的事情。但实际上我仍然有不少杂务。我继续应邀作演讲,继续写论文;作为业余爱好,仍然用我那台18岁大的老电脑Ceres,编一些程序或搞一些电子制作。我还将时间用在看文学著作上,也经常出去散步、远足。
YZ: 您的生活是怎样和计算机联系在一起的呢?
NW: 当时我对于一些计算机问题着迷,可能是因为它新奇而神秘,而且没有人教授。1959年,当我完成了在ETH的课程后,我首先移居到加拿大,一年后到了美国加利福尼亚州。在加拿大,我取得了硕士学位并设计了一台模拟计算机。在伯克利,我参加了一个小组——多少有些偶然的成分在其中——为一种程序设计语言的编译器而工作,那是Algol58的一种派生语言。这个编译器非常复杂,如何让它有条理又易于理解使我着迷。就这样我开始了在设计程序语言方面工作,有关于编译器方面的,也有句法构造分析方面的。这些工作在那时都是全新的、从没有人了解过的课题。我于1963年获得博士学位,论文正是对此问题的讨论:名称是《一般性Algol语言》,授予单位是加州大学伯克利分校电机工程系。
YZ: 您觉得怎样才是一种好的学编程的方式呢?一种编程工具是不是必要的?
NW: 我们因为要编程而学习语言,而不要本末倒置。本质是编程,编程的工具是语言,是一种形式符号。一种好的方法是从简单的(但不是一眼看穿的)例子开始。当设计一个程序时,必须时刻谨记设计的正确性取决于它的作用。为了构建更复杂的程序,我们需要能够提供组织结构的符号或指令,以便能够对各部分充分发展,并将他们顺利组合成一个整体,而且组合时不需要再对各部分进行验证。显然,抽象在其中扮演了重要的角色,符号的作用也不容小视。我们必须鼓励洁净的、结构良好的语言设计,使程序设计者不必拘泥于具体计算机的烦琐,或者说为产生“好的”输出而烦心。
但不幸的是,现在应用最广范的语言并不具备上述特点。即使是最简单的程序也充满了含糊不清的符咒,使得初学者,哪怕是专家,也不知所云。它们往往十分复杂,并诱使程序员用形式奇怪的结构和夸张的风格。从前,我们接受的教育是计算机和计算机语言应该定义严谨,好使一个人可以通过学习这些定义规则而掌握所有的东西。不幸的是,现在已经不再如此了。手册变得如此厚重以致没有人使用,这是一个不容置疑错误的征兆。以C++作为最典型的示例:它对于一切我们曾经学过的关于语言设计的几十年来的东西都置之不理。新语言定义模糊,又如Java,在正式语法出炉之前,已有四个版本的Java被发布!程序员们被诱使,指使去尝试,如果一个方式行不通,就试试别的。这种通过反复试验从错误中学习程序的方式可以称做hacking。不幸的是,高速的,密集的交互试验,和耐心的电脑使得这一切成为了可能。但这种方式不能被接受,尤其在学校教育上更难接受,因为它是拙劣工程学的基础,并且造成今天错误百出的软件工程。现在已经到了我们的大学扮演主角的时候了,我们要成为领导者而不是跟随者。
YZ: 一种好的大学教育是什么样子的呢,尤其对计算机科学来说?
NW: 我觉得数学中的逻辑学的部分应该加入到程序设计中来。这不是程序执行的正确证明,而是正确的程序结构。不用说计算机系的学生在大学阶段将全部的数学基础课程都掌握,尤其是对事物精确把握,抽象思考的能力。
如果一个学生获得某一个应用领域的知识会更好,包括商业,科学计算和自动控制等方面。如果是对于一般教育,我认为还应该包括历史,语言,和自然科学等基础课程。
YZ: 学习编程最大的挑战是什么?
NW:让我引用E.W.Dijkstra的话。他说:“编程的挑战不是去将它搞成一团糟”。每一天,程序员必须同全新的复杂性问题交战,既然所面对的问题已是复杂的,所以让我们避免在编程中加入更多的人为的复杂的事情。
YZ: ACM图灵奖被称做计算机界的诺贝尔奖,图灵奖对您的生活和研究工作有何影响?
NW: 同样地,在1984年获得图灵奖之后,我老被人们称为Pascal语言之父。但是公正地说,后来的Modula-2和Oberon是更好的设计,更强大,更优雅,更简单。图灵奖使我的工作得到了最大程度上认可。如果人们是因为通过使用我的作品而认识了我,比因为我获得过某个奖而认识我,我更愿意接受前者。
Pascal一家
图:Wirth名言实录
引言:Program testing can show the presence of mistakes,but never prove their absence.
程序测试能说明存在着错误,但不能说明没有错误。
Pascal语言是Wirth走向世界和成名的开始,从1968年诞生至今,演化成一个庞大的家族。Pascal是成功的,成功的原因有很多,除了语言本身的精确和严谨,最有趣的莫过于和这个名字相联系的一个思想家、数学家、物理学家Blaise Pascal,而后的Modula及Oberon秉承Pascal的特性,但没有发展到Pascal般的流行,其中的一个原因也许在于它的名字:难怪Wirth不无遗憾地说,当时为什么没有将Modula 称作Pascal-2呢?!
承接他在美国时的研究工作成就Alogol-W语言,Wirth完善了他的语言系统结构,也有了从Pascal到Modula再到Oberon 的发展。
20世纪70年代中期,为适应并发程序设计的需要,Wirth成功开发Modula,除了提供并发程序设计功能,另一个重要特征是引进了模块概念。Modula语言还特别适合于书写系统程序,比Modula具有更加重大意义的是Modula-2。 1976年,Wirth再次赴美国,到 Xerox公司的 Palo Alto研究中心参与Alto计算机的设计与开发工作。Alto是世界上第一个具有图形用户界面的个人计算机系统。
Wirth回到瑞士以后,参考Alto的经验,设计、开发Lilith个人计算机系统。为了和Lilith的体系结构相配合,沃思决定在Modula基础上开发新版本,作为整个系统的开发语言。Modula-2与Modula相比,语法更加简洁,更加强调界面设计,模块的可重用性更好。M0dula-2在优雅性(elegance)和简洁性(simplicity)两方面都比Modula更进一步。
Lilith的操作系统、图形软件包、数据库系统、网络协议套件、文件服务器等基本系统和大量应用模块全都是用M0dula-2开发的。目前世界上已经开发了近百个Modula-2的编译系统,北美和欧洲的许多大学已经用Modula-2代替PASCAL作为计算机系本科生的第一门程序设计课程。
在Lilith项目中,沃思坚持将计算机体系结构、语言、操作环境这三者统一起来考虑,实行集成化、一体化设计的成功经验是具有革命性的创举。
继Modula之后的一个新的计划是Oberon。Oberon是将程序设计语言和操作系统结合在一起的、面向单用户的个人工作站系统。Wirth认为,在因特网日益普及的情况下,今后联网的计算机主要将是个人工作站,因此如何使个人工作站功能更加强大、更加方便使用是一个十分重大的课题。Wirth把这个计划取名为Oberon是寓意深长的,因为Oberon是希腊神话中的仙境之王和女神Titania的丈夫。Wirth的目标是要使Oberon语言超越PASCAL和Modula,设计出的操作系统和编译器功能更加强劲。
完美的进程中,值得一提的是他对硬件设计非常感兴趣,他的观点也非常明确:只有当硬件和软件紧密结合,建立一个对用户友好的解决方案成为可能。正是在这些想法的驱使下,他设计出了电脑Lilith,Ceres和Chamaeleon,同样,这些电脑和操作系统也成了他软硬件结合的经典案例。他说:“我一直设计语言是因为我在实践中的需要,而以前的语言不能满足这种需要。”而Modula和Oberon是设计Lilith和Ceres工作站时的产品。
另外一个看点是他对于学术和教学的执着态度。他刚回到瑞士时,在瑞士教授计算机科学尚处在幼年时期,1965年美国就开始有计算机科学课程,而在ETH的时间是开始的时间是1972年,正式时间是1980年,也就是Wirth回到瑞士后的第12个年头。我们不难想象他的所做所面对的巨大阻力和挑战。
而他的图形用户界面电脑Lilith诞生时苹果II电脑还仅仅拖着一个笨重的键盘,虽然Lilith并没有带给Wirth 商业上的成功。他的观点依然非常明确,应该将工业领域和研究教育工作分开,他强调说:“如果大学研究只重视短期的效益,显然这是一个非常具有破坏性的观点”。
YZ: 您为什么发明Pascal语言呢?发明的过程是什么?Pascal对您的生活和研究有什么影响?
NW:我在斯坦福大学继续从事程序语言的课题,致使Euler,Algol W ,PL360等语言产生,也包括在1968年回到瑞士以后的诞生的Pascal语言。作为苏黎世工学院的新的教授,我的任务是教授计算机科学。在当时,主要的任务是教授语言、算法和数据结构。可以利用的语言有Algol、Fortran和汇编码。而我认为Algol的设计很差劲,Fortran和汇编语言对学生们又有不好的影响。因此,唯一的方法是设计一种我自己的语言,并实现它。它可以适合教学,也可以用来构造系统类程序如编译器。这就意味着这种语言必需简单且结构良好,容易解释和理解;简单来说就是:一个洁净的设计。这种做法的结果就是Pascal语言。3个助手用了2年时间来为一个大型机设计了Pascal的编译器。
在抗拒了不少同事的反对声浪后,1972年,我们将Pascal做为正式的程序设计课程。其他的几所大学对此也非常感兴趣并寻求帮助。结果,我们设计了一个“便携式系统”——Pascal-P。它的编译器能够生成P代码。但是真正的突破却发生在五年后,当微型机出现时,它让Pet 机,Tandy机,Apple机等走进了千家万户和学校等机构,那些曾不知Fortran和汇编程序为何物的计算机用户,开始发现Pascal是一种理想的学习编程的工具。有一些公司改动了我们的P-编译器并以很低的价格出售。那是真正的计算机时代的开始。
这种发展极大地影响了我的职业生涯,并使我更相信我从事的工作的重要,和继续发展更好的计算机语言,并纠正Pascal的错误,弥补它的缺点。到1979年,我设计出了Modula-2,它是改进过的Pascal语言,适合于构建大型的程序系统。它的主要创新是模块化的设计理念和全部静态数据类型检查的分布式编辑。有一些公司设计和出售Modula编译器,但不太成功。我曾经认为每一个Pascal程序员都会非常高兴地转向Modula,但这一现象却并未发生。早知如此,我应该给它取名Pascal-2!但Modula仍然得到广范的应用,例如巴黎地铁一号线,新的俄罗斯卫星系统正是通过它来编程的。在这之后,我还继续改进如Algol传统计算机语言:1988年Oberon从Modula蜕变而出。它和面向对象程序设计这种新的程序风格成为一体,并且并没有将以前存在的功能抛弃。我的原则是循序渐进地演化而不是全盘革命。
YZ: 据说Pascal语言的名字来源于Blaise Pascal。我还记得他《思想录》中的名言:“思想形成人的伟大”。请谈一下Blaise Pascal对您的影响?
NW:我选择他的名字,是因为他发明了第一台数位式装置。在他16岁时,帮助他的父亲收税时,他发现这项工作单调乏味,有了一种怎样实现自动相加的想法。1642年他通过一些齿轮做出了这台装置,这是第一台能实现十进制进位的机器。Pascal是一位天才的数学家和物理学家,他被称作概率论之父,气压的单位就是以他的名字来命名的。但是在他23岁时,他却忽然间信了教,抛弃了原来的生活而做了修士。令人遗憾的是,Pascal在哲学上和神学上比在数学和物理方面更为出名,但这并没有影响过我。
YZ:我们知道Pascal和C++,Java,但对Oberon和Modula了解不多。有没有什么方法可以得到他们?
NW:Modula(1979)和Oberon(1988)其实应用很广范,本质上是免费的。请参看网站:www.Oberon.ethz.ch。Oneron也有一个商业化的版本,即Black Box Pascal(黑盒Psacal),可能是因为Oberon技术模块化和信息隐藏的原因吧。www.Oberon.ch, www.Oberonmicrosystems.ch
YZ: 您觉得计算机语言和人类的语言有什么区别?
NW: 人类的语言是用来说话的,程序设计语言却不是。事实上,我认为“Programming lannguage(程序设计语言)”这一术语是不正确不适当的。“formal notations(形式符号)”则更为确切。选择术语language的原因是因为这些程序语言可以被定义,也就是后来所用的BNF和ENF,而许多人天真地以为口语也可以如此定义,程序设计语言必须简洁和准确,这有别于口语的多义性和含糊性,因为口语中我们需要这些特点来开玩笑或用于暗示避免失礼。
YZ: 您对OO有什么看法吗?它是一种好的和可能的思考方法吗?从结构化程序设计到面向对象编程的最大挑战是什么?
NW: 面向对象最初起源于模拟离散事件的系统(Simula,1966),它已经被操作系统的设计者所采用,因为在操作系统中,独立执行管理的思想方式恰当地得到直观化(Smalltalk ,1978)。一般认为它比较吸引人,例如窗口,菜单,按钮等。做为一个独立的具有他们自己的行为和方法的对象。
但这并不意味着所有的一切都看做对象,更不是说这种方式对于所有的问题是适用的。我觉得它更适合于复杂的多界面多任务的系统,但不适合下面的情况:参数和结果有联系,可以用数学函数来解决的问题。
事实上,OO平台是建立在传统的平台之上的。在Oberon语言中我们已经实现了这一功能。它看起来象一个标准的传统意义上的语言,但包含了OO类程序设计所需的所有功能。
“一切都是对象”的说法是荒谬的,这在Smalltalk中关于数字的观点中可以清楚地看出,这里,求x+y 的和不能由简单的加法得到,而是通过请求对象x有add方法而得到,它不对称地表示如下:x.add(y)。这是胡说八道。过分地教条化不可避免地导致一种没必要的奇怪和复杂的结果。
另一项不幸的副作用是OO平台同时宣传的新的术语,都非常令人难忘也容易将人搞糊涂。下面列出几组同义词:
variable object
procedure method
parameter message
calling a procedure sending a message
data type object class
YZ: 您觉得数学和计算机科学的联系是什么?
NW:在很多大学里,Computer Science计算机科学(欧洲称做Informatics)系是从数学系中独立出来的。这是因为早期的计算机用来进行计算J,数学家当仁不让地就是最权威的人士。在其他的地方,CS系是从电机工程系独立出来的,因为是工程师们造出的这些机器。在现在,每一个人都成了电脑用户,除了在数字分析领域,数学家们已不再具有特权地位了。
关于未来的建议
图:Wirth在苏州大学(原东吴大学)
Wirth的独特见解,对于正热心于计算机语言和编程的朋友们来说可能会有一定益处。他除了重复他的一贯认真严谨,还继续他的一针见血。还有他推荐的几本书籍,对正在歧路彷徨的学子,有一定意义的指导作用。
他一直坚持自己对学术和教育的执着态度,持续他对工业领域的批判。不随大流,应有自己的判断能力,让我们进一步见识了Wirth先生的风采。
YZ:您到过中国几次?对中国的第一印象是什么?
NW: 中国不仅和欧洲相隔遥远,而且迟至上世纪,它对于我们来说还是一个封闭的世界。因此我第一次访问中国是在1982年,那时作为苏黎世工学院(ETH)教授代表团的一员来的。我曾在ETH教书31年,ETH全称是瑞士联邦苏黎世技术学院。那次,我们访问了北京、上海、南京和广州,忙碌于宴会与宴会之间,给我们做向导的是我们的德文翻译。第二次访问是在2003年,应邀参加南京理工大学50周年校庆,而后我参观了无锡、苏州和上海。
当一个人必须小心判断他的第一印象,对于中国这样的大国尤其如此,我们仅仅能看到其中很小的一个片断。2003年,我参观了中国最发达的几个地区之一的上海、南京和杭州。和20年前时的印象相比较,我被现在巨大的变化震惊了。对于我,从瑞士,或象瑞士一样非常小的国家来的人,上海的超级城市规模令人害怕。要知道,瑞士整个国家的人口还不到上海的一半。它的宏伟建筑、巨大机场、现代单轨铁路和遍地都是的Burger Kings,麦当劳,肯德基让我想起了美国,但我更喜欢中国菜!另一方面,交通拥堵是也提醒我西方化生活方式不好的一面。我不知道这种巨大的商业化浪潮是否影响了中国乡下农村中生活的人们,毕竟那才是大部分中国人的生活空间。我不禁问自己:我看到的就是真实的中国吗?
人们和二十年前的不同也是显而易见的。人们观念更开放,更焦虑不安,好象急着追求一个目标。有更多学生懂英语,并且十分热心地去学习它。
YZ: 2003年您曾经到中国访问,并在几所大学里做了演讲。大学生们在听完您的演讲后最关心的话题是什么?您的回答又是什么呢?
NW:男生倾向于问技术性的问题,女生则倾向于问我是怎样变得对计算机感兴趣的,以及我的生活,我有什么建议给他们。我对后题的回答是:对于一门学科,认真地学习基础性重要的课题,略过不重要的和短期的问题,要学会辨别重要的和不重要的本质。
YZ: 您对中国的程序员们有何认识?您最想对他们说点什么?
NW: 我恐怕只能说我不了解中国的程序员了,因此,我不能对他们做出评论。但是我可以表达自己的希望:他应该为了高品质和卓越而奋斗,他具有专业的自尊心,不仅做出正确高效的程序,而且有优雅漂亮的设计,他还应该具有择善固执的态度,不随大路。只有满足了这些,最终成就一位杰出的设计师。我期望他会根据自己的判断自由地选择他的工具,他会分辨便利性而不只局限于惯例。并且,他还能识别对于持续发展来说什么是重要的本质的东西和什么只会带来短期的商业利益。
YZ: 您能对IT的将来做一下预测吗?
NW: 首先声明一点我不是先知或预言家。如果25年前你问任何一个人关于今天计算机扮演的角色,他一定答的不对,当然也包括我。但有一件事是很明显的:计算已经成为经济体制中的一个非常重要的因素。这从你用缩写的IT代替CS就可以映射出。说计算机将会应用在更多的领域是不过分的。事实上,大学计算机系正在加速和各种不同应用领域结合,而不在于计算机自身的设计,设计计算机的工作几乎都离开学术界而留给工业界。遗憾的是,当今工业领域对洁净的、清楚的和实用的设计几乎不感兴趣,更谈不上优美和高雅了!
YZ: 以后我们将用什么语言?
NW: 那些由大软件公司提供的。
YZ:能不能向我们推荐几本书,包括您自己写的?
NW:从众多的出版物中仅挑几本是很因难的,不过我还是尝试选一下:
O.J. Dahl, E.W. Dijkstra, C.A.R. Hoare. Structured Programming《结构化编程》. Acad. Press, 1972. ISBN 0-12-200550-3
F.P. Brooks, Jr. The mythical man-month《人月神话》. Addison-Wesley, 1975. ISBN 0-201-00650-2.
M. Ben-Ari. Principles of concurrent programming《协同编程的几个原则》. Prentice-Hall, 1982. ISBN 0-13-701078-8.
R. Sedgewick. Algorithms《算法》. Addison-Wesley, 1983. ISBN 0-201-06672-6
R.H. Katz. Contemporary Logic Design 《当代逻辑设计》. Benjamin-Cummings Publ. 1994. ISBN 0-8053-2703-7
还有我写的三本:
N. Wirth and J. Gutknecht. Project Oberon《Oberon项目》. Addison-Wesley and ACM Press, 1992. ISBN 0-201-54428-8
N. Wirth. Digital Circuit Design《数字电路设计》. Springer, 1995. ISBN 3-540-58577-X
-- Compiler Construction《编译器构造》. Addison-Wesley, 1996. ISBN 0-201-40353-6
相关链接:
Wirth先生个人主页:http://www.cs.inf.ethz.ch/~wirth/
人物印象:
对于Wirth先生,让我们看到的最深的东西是“执着”。他是瑞士IT界的拓荒者,是建立瑞士包括ETH的IT教育的先驱。是使瑞士IT扬名世界的最著名人物。
关于Niklaus Wirth先生,要写的远不止这些。要想深入地了解他,确实不是一件容易的事情。关于IT,他有许多影响深远的名言,我们引用的,仅仅是其中为数不多的几条,而这正是他执着思想的一种体现。
Wirth先生是一个执着地坚持自己思想的人。
关于学术,关于计算机、关于计算机语言,他有自己独到的见解和声音。C++之父Bjarne 笑着说:他的态度没有因为年龄的增大而有丝毫减弱。
而这正是他的价值的侧面体现。难怪在程序员中有一句经典笑话:欧洲人通常都将他的名字读得正确,读作“Nih-klaus Virt”;但美国人通常读成“Nickles Worth”近似的音。于是有人便说,欧洲人传址呼叫他,美国人传值呼叫他(或者说美国人按价值称呼他,而欧洲人称呼他的名字)。
上面我们用到的名言,和下面的,正是我们此次采访的内涵所在:
The abundance of powerful hardware seems to have made good software superfluous.
Programming languages must be defined without reference to any interpreting mechanism, such as a computer.
Programming languages are no languages, as they are not spoken; they are formal systems.
本文中文翻译得到美国惠普实验室Meng Lee女士无私帮助和修正,在此一并致谢。
2005年6月29日
1984图灵奖获得者Niklaus Wirth——Pascal 之父 编辑本段回目录
Niklaus Wirth是著名的语言设计者 之一。凡是学过一点计算机知识的人大概都知道“数据结构十算法= 程序”这一著名公式。提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯·沃思(Niklaus Wirth)由于发明了多种影响深远的程序设计语言,并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞士学者。
Niklaus Wirth的母校苏黎世工学院(ETH),在欧洲甚至全世界都很有名气。1967年Niklaus Wirth回到母校,1968年升为教授,执教,直到1999年退休。在ETH,Niklaus Wirth发明了多种语言,特别是Pascal.
1984年图灵奖获得者: 尼克劳斯·沃思
——PASCAL之父及结构化程序设计的首创者
凡是学过一点计算机知识的人大概都知道“数据结构十算法= 程序”这一著名公式。提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯·沃思(Niklaus Wirth)由于发明了多种影响深远的程序设计语言,并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞士学者。
沃思1934年2月15日生于瑞士北部离苏黎世不远的温特图尔(Winterthur),其父瓦尔特是一位地理学教授。沃思小时就喜欢动手动脑,组装飞机模型是他的最大爱好。中学毕业以后,沃思进入在欧洲甚至全世界都很有名气的苏黎世工学院(ETH),1958年取得学士学位。之后他远渡大西洋到加拿大的莱维大学深造(Laval是和加拿大名城魁北克隔圣劳伦斯河相望的一座城市),于1960年取得硕士学位。之后他又一次迁移,到美国加利福尼亚,进入加州大学伯克利分校,于1963年获得博士学位。学成以后,沃思受聘到斯坦福大学刚刚成立的计算机科学系工作。著名的斯坦福大学门槛极高,怎么会看中了这个来自欧洲小国的毛头小伙子呢?原来在20世纪50年代末、60年代初的情况下,沃思的计算机经验和成就相当引人注目:在苏黎世工学院时,他曾听过瑞士的计算机先驱斯帕塞(A.P.Speiser,他曾出任IFIP的主席)的课,用过由斯帕塞开发的计算机ERMETH(虽然作为学生,机会并不多);在莱维大学时,沃思学了数值分析,用过 Alvac III E计算机(虽然这台计算机经常出故障而不能开机);在伯克利时,沃思先是有一台Bendix G-15计算机可用,后来又参加了为IBM 704开发 NELIAC语言编译程序器的科研小组。 NELIAC的全称是 Navy Electronics Laboratory International Algol Compiler,即美国海军电子学实验室国际 Algol编译程序语言,该语言用于数值计算和一些逻辑处理,其特点是用自己的语言写自己的编译程序,然后进行自编译,是一个类似于 Aled 58但具有开创性意义的语言。沃思在撰写博士论文时,Algol 60报告已经发表。 这是第一个清晰定义的语言,其语法是用严格公式化的方法说明的。当时已有一些学者认识到,清晰的规格说明对于可靠而有效的实现是必需的,但是并不充分:Aled 60报告中还存在一些缺陷和不足。沃思在和 Algol的设计者之一、荷兰人范·维京格尔藤(Andrian van Wijingaarden,他曾任阿姆斯特丹数学中心计算部主任,在开发Algol 68中提出了二级文法,又叫w文法以解决上下文有关这一难题。他曾启发1972年图灵奖获得者狄克斯特拉走上计算机科学之路)多次接触和讨论以后,决定对 Algol 60作进一步改进,并以此作为自己的博士论文课题。这就诞生了由沃思所设计的第一个语言——Euler。Euler虽然在实用性上考虑并不十分周到,但在学术上却非常优美,为编译器的系统设计创造了一个很好的基础。此外,它还对 Algo 60进行了若干扩充,主要是增加了表处理能力。正是由于以上原因,斯坦福大学看中了沃思。与此同时,IFIP也注意到了Euler语言,决定吸收沃思参加对Algol语言进行完善与扩充的工作小组。当时,这个小组中有两派,一派主张设计一个新语言,以便树立一个新的里程碑;另一派则觉得时间太紧,主张对 Algo 60进行适当扩充。沃思参加进去以后,自称同时属于这两派,并提交了一份建议书。这份建议书经过霍尔(Tony Hoars)等人的修改、完善以后获得通过,这就是Aigol W(W是沃思名字的首字母)。第二年,也就是1966年,Algol W在斯坦福大学的第一台 IBM 360上成功实现并正式应用。这中间还有一个小插曲:IBM 360当时只提供汇编语言和 FORTRAN语言,但沃思和他的学生都觉得这两者并不适宜于作为设计编译器的工具。于是,沃思用了两个星期时间写出了一个用来描写Algol编译器的新的语言的定义,然后用了4个月时间在宝来公司的B-5000计算机上完成了交叉编译程序,而沃思的一个学生则把这个交叉编译程序移植到 IBM 360上去。这些额外的工作极大地加快了 Algol W编译器的开发,同时催生了一个新的语言 PL 360。 PL 360虽然是作为辅助工具而设计、开发的,但后来却在许多地方获得应用,取得了意想不到的成功。
Algol W及 PL 360奠定了沃思作为世界级程序设计语言大师的地位,一举成名。但沃思是一个具有强烈爱国心的人,成名后的他谢绝了斯坦福大学的挽留,于1967年回到祖国,先在苏黎世大学任职,但第二年就回到他的母校苏黎世工学院。在这里,他首先设计与实现了 PASCAL语言(Philips Automatic Sequence CAlculator Language的缩写),这是在 CDC 6600上开发成功的。 PASCAL在数据结构和过程控制结构方面都有很多创造。对于前者,除一般的整型、实型、布尔型数据外,PASCAL还增加了字符型、子域类型、记录结构类型、文件类型、集合类型和指针类型;对于后者,除保留了无条件转移的GOTO语句外,又增加了if-then-else、case、while、repeat和for等多种控制结构,还允许复合语句和处理记录变量的分量使用with语句这种编写形式。可以说,现代程序设计语言中常用的数据结构和控制结构绝大多数都是由PASCAL语言奠定基础的,因此它在程序设计语言的发展史上具有承上启下的重要里程碑意义。
说来有趣,沃思开发PASCAL的初衷是为了有一个适合于教学的语言,并没有想到商业应用。但一经推出,由于它的简洁明了,它所提供的丰富的数据结构和控制结构为程序员提供了极大的方便与灵活性,也由于它特别适合于由微处理器所组成的计算机系统,竟然大受欢迎,广泛地流传开来。在C语言问世以前,PASCAL是风靡全球、最受欢迎的语言之一,创下了发行拷贝数最多的世界记录。单是沃思的一个学生菲力浦·凯恩(Phillipe Kahn),从 ETH毕业以后,在美国加利福尼亚州办了一个软件公司,就卖出了100多万个PASCAL拷贝,成为百万富翁。
1971年,沃思基于其开发程序设计语言和编程的实践经验,在4月份的 Communications of ACM上发表了论文“通过逐步求精方式开发程序’(Program Development by Stepwise Refinement),首次提出了“结构化程序设计”(structure programming)的概念。这个概念的要点是:不要求一步就编制成可执行的程序,而是分若干步进行,逐步求精。第一步编出的程序抽象度最高,第二步编出的程序抽象度有所降低…… 最后一步编出的程序即为可执行的程序。用这种方法编程,似乎复杂,实际上优点很多,可使程序易读、易写、易调试、易维护、易保证其正确性及验证其正确性。结构化程序设计方法又称为“自顶向下”或“逐步求精”法,在程序设计领域引发了一场革命,成为程序开发的一个标准方法,尤其是在后来发展起来的软件工程中获得广泛应用。有人评价说沃思的结构化程序设计概念“完全改变了人们对程序设计的思维方式”,这是一点也不夸张的。1983年1月,ACM在纪念 Communications of ACM创刊 25周年时,从其 1/4个世纪发表的大量论文中评选出有“里程碑意义的研究论文” 25篇,每年1篇,沃思的这篇论文就是其中之一。 [ 相约加拿大:枫下论坛 rolia.net/forum ]
PASCAL的成功也罢,结构化程序设计思想的巨大影响也罢,都没有停止沃思继续创造性的研究与开发工作。20世纪70年代中期,为适应并发程序设计的需要,沃思又成功开发了一个获得广泛应用的语言Modula。M0dula除了提供并发程序设计功能之外,另外一个重要特征是引进了模块概念(这也是这个语言叫做Modula的原因)。此外,它还引进了“进程”(process)这一和并发程序相联系而产生的重要概念。Modula语言还特别适合于书写系统程序。但是,比Modula具有更加重大得多意义的却是它的第二个版本Modula.2。这是 1976年,沃思再次赴美国,到 Xerox公司的 Palo Alto研究中心参与Alto计算机的设计与开发工作。Alto是世界上第一个具有图形用户界面的个人计算机系统(可惜Xerox公司没有把它商品化,而由Apple公司学去了它的技术而推出 Macintosh)。沃思回到瑞士以后,参考Alto的经验,设计、开发Lilith个人计算机系统。为了和Lilith的体系结构相配合,沃思决定在Modula的基础上开发新版本,作为整个系统的开发语言。Modula-2与Modula相比,语法更加简洁,更加强调界面设计,模块的可重用性更好。它共有3个编译单元,即程序模块、定义模块和实规模块。在定义模块(definition module)中,只给出那些和模块外部交往所必需的信息。例如,对模块内部的子程序说明而言,在定义模块中只给出子程序名、参数名及其类型等,而不给出子程序体本身,也就是说,在定义模块中只给出模块外部可见的信息。在实规模块(implementation module)中,则给出那些在模块外部不可见的信息,例如,在模块内部定义的子程序说明的子程序体。这样的安排既提高了可读性,又有助于分别编译。M0dula-2在优美性(elegance)和简洁性(simplicity)两方面都比Modula更进一步。Lilith的操作系统、图形软件包、数据库系统、网络协议套件、文件服务器等基本系统和大量应用模块全都是用M0dula-2开发的。目前世界上已经开发了近百个Modula-2的编译系统,北美和欧洲的许多大学已经用Modula-2代替PASCAL作为计算机系本科生的第一门程序设计课程。Modula-2的标准化工作则早在1984年就已由英国开始进行,ISO则于1987年对它进行标准化,并采用由IBM的维也纳实验室提出的VDM-SL和经过沃思本人加以扩充的BNF(即EBNF,见下)表达语言的语法与语义,在形式化方面达到了一个新的水平。在Lilith项目中,沃思坚持将计算机体系结构、语言、操作环境这三者统一起来考虑,实行集成化、一体化设计的成功经验是具有革命性的创举,从而使这个项目在计算机科学史上占有重要地位。
近年来沃思致力于一个新的计划,即Oberon计划。Oberon是将程序设计语言和操作系统结合在一起的、面向单用户的个人工作站的一个系统。因为沃思认为,在因特网日益普及的情况下,今后联网的计算机主要将是个人工作站,因此如何使个人工作站功能更加强大、更加方便使用是一个十分重大的课题。沃思把这个计划取名为Oberon是寓意深长的,因为Oberon是希腊神话中的仙境之王和女神Titania的丈夫。沃思的目标是要使Oberon语言超越PASCAL和Modula,设计出的操作系统和编译器功能更加强劲。1992年他写了两本书向读者推荐Oberon(见后),可见其对这个计划的重视。
除了程序设计语言之外,沃思在其他方面也有许多创造。为了定义和描述语言,沃思对著名的“巴科斯-诺尔范式”BNF进行了扩充,成为EBNF(Extended BNF)。我们目前所看到的许多语言的 BNF实际上是EBNF,不过人们往往忽略掉这个E字。和BNF一起出现的,还常常有一些看上去像铁路图那样的图形,称作“语法图”(syntax chart或 syntax diagram)或“铁路图”(railroad diagram),这也是由沃思所设计与发明的,这种图形标记法的描述能力等价于BNF,但当然更易于阅读与理解,更加直观。在语法图中,用圆圈表示终结符,用方框表示非终结符,用有向弧表示走向,图上一条通路就表示该语法结构的一种正确定义方法。语法图的4种基本构造方法如下。
(1)若产生式为W→W1W2W3,则语法图如图1。
(2) 若产生式为W→W1W2|W3a|bcW4 ,则语法图如图2。
〔3〕若产生式为W→abW,则语法图如图3。
(4)若产生式为W→ab|abW,则语法图如图4。
对于较复杂的产生式,其语法图一般可通过上述4种语法图进行组合而得。
在对上下文无关文法的研究中,一个很重要的问题是如何确定两个符号之间的优先关系。现在一般采用的办法也是由沃思和他的同事韦伯提出来的,就叫沃思-韦伯优先关系(Wirth- Weber precedence relation),或叫简单优先关系。它规定上下文无关文法 G中任意两个符号的优先关系如下。
< r o l i a. n e t >
(1)X<Y,当且仅当有产生式 A→αXBβ,且有推导B+→Yr。
(2)X=Y,当且仅当有产生式A→αXYβ。
(3)X> Y,当且仅当有产生式 A→αBYβ,且有推导B+→rX及Y →*aδ。
其中A、B为非终结符,X、Y为待定优先关系的两个任意符号,α、β、Υ和δ为由终结符和非终结符组成的任意符号串,可以是空串。a是终结符。
沃思的学术著作很多,主要有如下几种,其中一些原版是用德文写的,翻译成了英文。
《系统程序设计导论》( Systematic Programming: An Introduction,Prentice- Hall,1973。其德文版已出至第 5版)
《算法十数据结构=程序》(Algorithms+ Data Structures= Programs,Prentice-Hall,1976)
《算法和数据结构》(Algorithms and Data Structures, Prentice - Hall ,1986)
《Modula-2程序设计》(Programming in M0dula-2,Spring6r,1988,第4版)
《PASCAL用户手册和报告: ISO PASCAL标准》 (PASCAL User
Manual and Report: ISO PASCAL Standard, Sprillger, 1991)
{ 枫下论坛 rolia.net/forum }
《Oberon计划:操作系统和编译器的设计》( Project Oberon:the Design of an Operating System and Compiler,ACM Pr.,1992)
《Oberon程序设计:超越Pascal和Modula》(Programming in Oberon: Steps beyond Pascal and Modula, ACM Pr,1992)
《数字电路设计教材》(Digital Circuit Design for Computer Science Students:An Introductory Textbook, Spnnger, 1995)
《编译器构造的原理和技术》(Theory and Techniques of Compiler Construction,Addison- Wesley,1996)
ACM除了1984年授予沃思图灵奖外,1987年又授予他“计算机科学教育杰出贡献奖”。另一重要的国际学术组织IEEE也授予过沃思两个奖项: 1983年的 Emanual Piore奖和 1988年的计算机先驱奖(Computer Pioneer Award)。1992年,加州大学伯利分校命名沃思为“杰出校友”。
沃思是在1984年10月于旧金山举行的ACM年会上接受图灵奖的。沃思发表了题为“从程序设计语言设计到计算机建造”(From Programming Language Design to Computer Construction)的图灵奖演说,回顾了自己在计算机领域所做的工作。演说全文刊载于Communications of ACM,1985年 2月,159- 164页,也可见《前 20年的 ACM图灵奖演说集》(ACM Turing Award Lectures——The First 20 Years:1966-1985,ACM Pr.),179-196页。沃思在演说中强调了程序设计语言简 性的重要意义,也讨论了它所需的硬件和软件环境(因为沃思一直很重视语言的实现问题)。他介绍了在设计Modula-2和Lilith中的经验,指出第一手经验和选择良好开发工具的无比价值。
沃思现仍在苏黎世工学院任教,他的电子箱为:wirth @ inf.ethz.ch
布莱兹·帕斯卡尔(Blaise Pascal,1623-1662)是法国十七世纪著名的思想家,一生体弱多病,只活了三十九岁,但在身后却为自己留下了高耸的纪念碑。他的主要著作是《外省通信》和《思想录》,前者常被看作是法国古典主义散文的奠基之作,后者则为哲学和宗教方面的探讨提供了丰富的源泉,成为人因思想而伟大的一个明证。
《思想录》名言: 思想形成人的伟大。
人不过是一根苇草,是自然界最脆弱的东西;但他是一根能思想的苇草。用不着整个宇宙都拿起武器来才能毁灭他;一口气、一滴水就足以致他死命了。然而,纵使宇宙毁灭了他,人却依然要比致他死命的东西更高贵的多;因为他知道自己要死亡,以及宇宙对他所具有的优势,而宇宙对此却是一无所知。 < 相约加拿大 ROLIA.NET >
能思想的苇草—我应该追求自己的尊严,绝不是求之于空间,而是求之于自己的思想的规定。我占有多少土地都不会有用;由于空间,宇宙便囊括了我并吞没了我,有如一个质点;由于思想,我却囊括了宇宙。
单是沃思的一个学生菲力浦·凯恩(Phillipe Kahn),从 ETH毕业以后,在美国加利福尼亚州办了一个软件公司,就卖出了100多万个PASCAL拷贝,成为百万富翁。这个公司就是Borland, 他卖的应包括Delphi.
Pascal之父-Niklaus Wirth编辑本段回目录
简介:尼克劳斯·沃斯(Niklaus Wirth)教授,Pascal系列语言之父,世界闻名的计算机科学家。他是苏黎世联邦理工学院(Swiss Federal Institute of Technology 简称ETH)教授,因发明了Pascal计算机编程语言(1970年)及其它几种计算机语言而著名。
算法+数据结构=程式:是计算机科学的名句。
Niklaus Wirth是好几种编程语言的主设计师:
Algol W
Modula
Pascal
Modula-2
Oberon
Euler语言的发明者之一。1984年他因发展了这些语言而获图灵奖。
Lilith电脑和Oberon系统的设计和执行队伍的重要成员。
他的文章Program Development by Stepwise Refinement视为软件工程中的经典之作。
他写的一本书的书名Algorithms + Data Structures = Programs(算法+数据结构=程式)是计算机科学的名句。
尼克劳斯·沃斯(Niklaus Wirth)教授,Pascal系列语言之父,世界闻名的计算机科学家。
他是苏黎世联邦理工学院(Swiss Federal Institute of Technology 简称ETH)教授,
因发明了Pascal计算机编程语言(1970年)及其它几种计算机语言而著名。
其中的Oberon语言被苏黎世一家名为Oberon microsystems的IT公司投入商业生产。
Pascal的基本概念对最近开发的各种计算机语言影响巨大,特别是一系列面向对象语言,如Java等。
Wirth教授的Pascal语言影响了几代软件开发人员,并提出计算机界非常有名的“数据结构十算法= 程序”著名公式,
除了发明了多种影响深远的程序设计语言,他还提出“结构化程序设计”这一革命性概念,为新软件技术“结构化编程”的开发做出了贡献。
上个世纪七十年代,Wirth教授利用假期时间在施乐公司(Xerox PARC)的帕洛阿尔托研究中心(Palo Alto Research Center)进行研究;
之后开发了世界最早的个人计算机之一,名为“Lilith”(1978-80)。直到今天,其中一台仍在Wirth教授在苏黎世理工学院的办公室里使用。
Wirth教授曾在苏黎世联邦理工学院授课多年,并出版了许多书籍,其中不少著作被视为计算机领域的经典。
他曾多次因其开拓性成就获奖:
1983年,获 电气和电子工程师协会(IEEE)Emanuel Piore 奖;
1984年,获图灵奖(A. M. Turing prize );
1987年,获美国计算机学会(ACM)计算机科学教育杰出贡献奖;
1989年,获IBM欧洲杰出科学技术奖。
Wirth教授还在很多大学担任名誉教授,从俄罗斯到南非遍布世界各地。
相关链接:
Wirth先生个人主页:http://www.cs.inf.ethz.ch/~wirth/
人物印象:对于Wirth先生,让我们看到的最深的东西是“执着”。
他是瑞士IT界的拓荒者,是建立瑞士包括ETH的IT教育的先驱。是使瑞士IT扬名世界的最著名人物。
关于Niklaus Wirth先生,要写的远不止这些。要想深入地了解他,确实不是一件容易的事情。
关于IT,他有许多影响深远的名言,我们引用的,仅仅是其中为数不多的几条,而这正是他执着思想的一种体现。
Wirth先生是一个执着地坚持自己思想的人。
关于学术,关于计算机、关于计算机语言,他有自己独到的见解和声音。
C++之父Bjarne 笑着说:他的态度没有因为年龄的增大而有丝毫减弱。而这正是他的价值的侧面体现。
难怪在程序员中有一句经典笑话:欧洲人通常都将他的名字读得正确,读作“Nih-klaus Virt”;
但美国人通常读成“Nickles Worth”近似的音。
于是有人便说,欧洲人传址呼叫他,美国人传值呼叫他(或者说美国人按价值称呼他,而欧洲人称呼他的名字)。
引言:“Everything is software, but software is not everything.”
一切都可以是软件,但软件并不是一切。
Wirth的一生,是执着地追求技术的一生,每一个阶段,都有他的执着和独特的思考。生于瑞士,求学美洲,立业瑞士。
瑞士是Wirth的故乡,也是他天真烂漫童年渡过的地方。
1934年2月,Wirth生于瑞士北部离苏黎世不远的温特图尔(Winterthur),Wirth小时就喜欢动手动脑,组装飞机模型是他的最大爱好。
他父亲是高中地理学教师,有一个小书房,作为家中唯一的孩子,父亲的书房成了他发现灵感的地方,这里有许多技术书籍,
从这些书中,他发现了涡轮、蒸汽机、火车头和电报的构造说明,这些问题令他着迷。
但是这些理论并没有使他满足,他想知晓生活中这一切东西是怎样运作的,怎么办呢?自己动手做。
作为飞机模型迷,他和朋友们建造了自己的飞机,数量还相当可观,足有几十只,最大的一个机翼跨度足有三米半。
在高中时,他还是一个化学迷,在家中地下室里建立了一个实验室,以用来实验在学校里学到的东西。
象其他的孩子一样,他童年时也有一些有意思的小故事。
有一次,他和朋友做了一个火箭模型,在实验时,由于没有将硝石、硫磺和木炭等混合物压缩好,结果使火箭没有到达预定轨道,
更为不幸的是,火箭落到了校长的脚下,当时校长正好溜达到学校的角落里,好处是校长比较和蔼,他们并没有得到纪律处分。
也许正是从那时起,燃起了他的技术梦,在他的职业生涯中他走出了一条自己的路。
中学毕业以后,Wirth进入在欧洲甚至全世界都很有名气的苏黎世工学院(ETH),获得电子工程学士学位后,
他于1959年离开了瑞士,远渡重洋来到加拿大,在加拿大的莱维大学(Laval University)深造,于1960年取得硕士学位。
之后他再次迁移,来到美国加利福尼亚,进入世界闻名的加州大学伯克利分校,于1963年获得博士学位。
并且后来成了斯坦福大学的助理教授。
在加拿大两年,美国八年后,1968年,Wirth 一家重回到了瑞士,等着他的是承建ETH计算机科学部门的重任。
计算机科学及计算机科学教育成了他一生不解的缘
在ETH工作32年后,1999年3 月他正式退休,而ETH的计算机科学大厦业已建立。
问答FAQ?
问: 您的生活是怎样和计算机联系在一起的呢?
答: 当时我对于一些计算机问题着迷,可能是因为它新奇而神秘,而且没有人教授。
1959年,当我完成了在ETH的课程后,我首先移居到加拿大,一年后到了美国加利福尼亚州。
在加拿大,我取得了硕士学位并设计了一台模拟计算机。
在伯克利,我参加了一个小组——多少有些偶然的成分在其中——为一种程序设计语言的编译器而工作,那是Algol58的一种派生语言。
这个编译器非常复杂,如何让它有条理又易于理解使我着迷。
就这样我开始了在设计程序语言方面工作,有关于编译器方面的,也有句法构造分析方面的。
这些工作在那时都是全新的、从没有人了解过的课题。
我于1963年获得博士学位,论文正是对此问题的讨论:名称是《一般性Algol语言》,授予单位是加州大学伯克利分校电机工程系。
问: 您觉得怎样才是一种好的学编程的方式呢?一种编程工具是不是必要的?
答: 我们因为要编程而学习语言,而不要本末倒置。本质是编程,编程的工具是语言,是一种形式符号。
一种好的方法是从简单的(但不是一眼看穿的)例子开始。当设计一个程序时,必须时刻谨记设计的正确性取决于它的作用。
为了构建更复杂的程序,我们需要能够提供组织结构的符号或指令,以便能够对各部分充分发展,
并将他们顺利组合成一个整体,而且组合时不需要再对各部分进行验证。
显然,抽象在其中扮演了重要的角色,符号的作用也不容小视。
我们必须鼓励洁净的、结构良好的语言设计,使程序设计者不必拘泥于具体计算机的烦琐,或者说为产生“好的”输出而烦心。
但不幸的是,现在应用最广范的语言并不具备上述特点。
即使是最简单的程序也充满了含糊不清的符咒,使得初学者,哪怕是专家,也不知所云。
它们往往十分复杂,并诱使程序员用形式奇怪的结构和夸张的风格。
从前,我们接受的教育是计算机和计算机语言应该定义严谨,好使一个人可以通过学习这些定义规则而掌握所有的东西。
不幸的是,现在已经不再如此了。手册变得如此厚重以致没有人使用,这是一个不容置疑错误的征兆。
以C++作为最典型的示例:它对于一切我们曾经学过的关于语言设计的几十年来的东西都置之不理。
新语言定义模糊,又如Java,在正式语法出炉之前,已有四个版本的Java被发布!
程序员们被诱使,指使去尝试,如果一个方式行不通,就试试别的。
这种通过反复试验从错误中学习程序的方式可以称做hacking。
不幸的是,高速的,密集的交互试验,和耐心的电脑使得这一切成为了可能。
但这种方式不能被接受,尤其在学校教育上更难接受,因为它是拙劣工程学的基础,并且造成今天错误百出的软件工程。
现在已经到了我们的大学扮演主角的时候了,我们要成为领导者而不是跟随者。
问: 一种好的大学教育是什么样子的呢,尤其对计算机科学来说?
答: 我觉得数学中的逻辑学的部分应该加入到程序设计中来。
这不是程序执行的正确证明,而是正确的程序结构。
不用说计算机系的学生在大学阶段将全部的数学基础课程都掌握,尤其是对事物精确把握,抽象思考的能力。
如果一个学生获得某一个应用领域的知识会更好,包括商业,科学计算和自动控制等方面。
如果是对于一般教育,我认为还应该包括历史,语言,和自然科学等基础课程。
问: 学习编程最大的挑战是什么?
答:让我引用E.W.Dijkstra的话。他说:“编程的挑战不是去将它搞成一团糟”。
每一天,程序员必须同全新的复杂性问题交战,既然所面对的问题已是复杂的,所以让我们避免在编程中加入更多的人为的复杂的事情。
问: ACM图灵奖被称做计算机界的诺贝尔奖,图灵奖对您的生活和研究工作有何影响?
答: 在1984年获得图灵奖之后,我老被人们称为Pascal语言之父。
但是公正地说,后来的Modula-2和Oberon是更好的设计,更强大,更优雅,更简单。
图灵奖使我的工作得到了最大程度上认可。如果人们是因为通过使用我的作品而认识了我,
比因为我获得过某个奖而认识我,我更愿意接受前者。
问:能不能向我们推荐几本书,包括您自己写的?
答:从众多的出版物中仅挑几本是很因难的,不过我还是尝试选一下:
Structured Programming《结构化编程》. Acad. Press, 1972. ISBN 0-12-200550-3
The mythical man-month《人月神话》. Addison-Wesley, 1975. ISBN 0-201-00650-2.
Principles of concurrent programming《协同编程的几个原则》. Prentice-Hall, 1982. ISBN 0-13-701078-8.
Algorithms《算法》. Addison-Wesley, 1983. ISBN 0-201-06672-6
Contemporary Logic Design 《当代逻辑设计》. Benjamin-Cummings Publ. 1994. ISBN 0-8053-2703-7
还有我写的三本:
Project Oberon《Oberon项目》. Addison-Wesley and ACM Press, 1992. ISBN 0-201-54428-8
Digital Circuit Design《数字电路设计》. Springer, 1995. ISBN 3-540-58577-X
Compiler Construction《编译器构造》. Addison-Wesley, 1996. ISBN 0-201-40353-6