计算机科学漫谈(转)
计算机科学的发展和其他学科一样,是由问题驱动的。你问自己一个问题,如果天下没人能给你答案,发现这个问题的答案或部分答案就是很好的科学研究。不过问题有大有小,因而成果的重要性就不一样。要做好的研究,心里一定要有好的问题。
先让我们来看看编程序方面的问题。学计算机的人都会编程,可如何保证程序编得又快又好,问题就大了,这是一个在过去几十年里制造了数千个博士的问题。提高软件的生产率和正确率是非常困难的,一般一个好的程序员一年大概能写5万行左右的新代码。有没有什么办法提高到一年能写相当于现在50万行新代码的水平。各种研究都有,例如设计各种各样的工具,改进程序设计语言等等。大学里开发的工具很多是研究性质的,商业化的工具很多是工程性质的,是大学研究结果的综合。改进程序设计语言一直是一个非常重要的问题,POPL是这方面的核心会议之一。其中类型理论始终是重要的研究课题之一。中国人在这方面做过不少贡献,提到类型理论,很多人都知道Luo Zhaohui。
如何保证程序的正确性是另外一个很重要的与编程有关的问题。用计算机自动验证程序的正确性曾几何时是一个很热门的问题,好几个图灵奖的获得者都与这个问题有关。现在已经很少有人研究了。不过这些研究大大加深了人们对程序设计和语义的理解。比如说,我们现在知道了现在的编程实质上是一种HOARE逻辑上的形式推理,程序的正确性就是定理证明。程序验证的失败很大程度上是定理证明的失败。定理证明曾经是人工智能的一个热门话题,Otter是最具代表的全自动一阶逻辑证明器之一。可惜的是,所有的全自动证明器都遇到了一个无法逾越的障碍,就是没办法做自动归纳证明。我们知道实际应用离不开整数,整数上的命题很多是用归纳法证明的,但归纳模式千变万化,迄今为止归纳模式无法自动生成。半自动的证明器有不少,可只有专家才能用。
说到这里,不能不谈谈眼下热门的Ontology有关的研究。搞人工智能的人在上个世纪搞坏了名声,只要和人工智能这个词沾上边,一般就有骗子的嫌疑。现在申请项目没人会用”人工智能“这个术语了,不过没关系,现在可以叫”知识工程“或Ontology或其他什么的。搞知识工程的人发现用一阶逻辑表达知识不行,因为其中的定理无法自动证明。简化到HORN逻辑还是不行。再简化找一种能保证自动证明定理的逻辑,终于有了,就是现在流行的 Description Logic。你可以想象这逻辑有多弱。Ontology研究不管怎么吹,超出Description Logic就是不可判定的。你也千万别用到算术和方程什么的,一用就超出Description Logic了。Google已经暗示不会开发与RDF和OWL有关的产品,实际上是看坏这项技术。
顺带说一下,从事这种与理论和逻辑有关的研究没有数年在逻辑和代数方面的学习功底,门都没有。比如说如果你要研究不同计算系统之间的关系,你得理解Grothendieck Institution。这就是为什么在欧洲很多计算机科学系和数学系是在一起的。
现在做分布式应用最流行的办法是用WEB SERVICE,简单而且容易开发。有没有什么好办法,可以快速简单的把一大堆WEB SERVICE搞在一起,MICROSOFT, IBM,还有其他工业巨头两年前难得地放弃了自己的标准达成了一致,搞了一个统一的标准, 就是BPML (Business Process Management Language), 。 用BPML写的程序调用不同的部署在网上的WEB SERVICE,完成用户想要的功能。
BPML是怎么设计出来的? 秘密是PI演算(Pi-Calculus)。BPML的设计者Assaf Arkin和他的同事都是PI演算的行家里手,他们从PI演算清楚知道这个语言需要什么。那末PI演算又是什么东西呢?
我们知道所有串行计算机程序都可以化归为LAMBDA演算。LAMBDA演算是和图灵机等价的。大多与计算机语言相关的研究都可以化为对LAMBDA演算的研究。上个世纪七十年代前,LAMBDA演算是没有语义的。DANA SCOTT发现了LAMBDA演算的语义成为了现代计算机科学的开端。DANA SCOTT发现了一个高阶函数的集合(叫论域),每个程序都可以化为一个方程,而这个方程在这个集合上有唯一的最小解,这个解就是这个程序的语义。这项工作带来了象潮水般的后续结果,影响直到今天还到处可见。只要你谈递归的语义,就会是某种形式的论域。
PI演算和论域很好的处理了串行计算机程序。可对分布式计算却很难处理。PI演算就是分布式计算的理论模型。PI演算的发明人ROBIN MILLER从没拿过PHD。他得图灵奖的时候通知他因为他的四项成就而得奖,他写信说其中一项不是他的,如果不把那一项拿走,他拒绝得奖。由PI演算延伸出来的东西多得不得了,因为它涉及到了分布式计算的本质。这些理论是数理逻辑中模型论的一部分。PI演算就是一个单纯的公理逻辑体系,包括几个算子和十几条数学公理。就象群概括了很多东西,PI演算概括了所有分布计算和通信系统。如果你读有关的论文,和数学论文样式没有任何区别。正因为PI演算是数学理论,它的定理支配着不仅计算机系统,而且支配着象交通系统和生物这样领域的现象。中国的林惠民当选科学院院士的主要成就之一就是在PI演算里作的。
上次谈到提高软件的生产率和正确率是计算机软件研究和开发的大问题。商业的集成开发环境(IDE),各种软件工程的方法(如UML),工具(如 Debugger)无不是为了这个目的,就是又快又好的开发程序。Knuth 把程序设计叫艺术,由此命名他的得意著作。其实计算机科学的一个大目标就是要让这种艺术变为工程,要让程序变得和其他工业产品如汽车那样可以大规模高效地生产。
现在的很多工具虽然已经大大提高了程序开发的效率,没人会怀疑 Visual Studio 对开发 Windows 程序的作用。但是还有许多实际问题没有解决。举个简单的例子,比如说,你怎么知道程序肯定没有Bug。数年前阿丽亚娜火箭发射失败就是因为控制程序里的一个小Bug而损失了五亿美元。我们已经谈到过,因为定理自动证明的局限使得程序自动验证无法实用化。现在广泛采用的办法就是测试,即用尽可能多的输入看程序的运行结果。我曾经在一个大公司看到对一个大程序产品的测试,四十多人的全职队伍,测试了两年,可想而知其中的甘苦。象Windows这样的产品测试简直是天文数字, 投入的金钱真的也是天文数字,还不能保证样样都测试到。那么能不能有什么办法自动检查?当你问了这个问题,你已经有了一个绝好的研究问题。答案之一就是 Model Checking。Model Checking理论上把所有可能的情况都执行了一遍,确保程序满足要求。注意这里是指理论上,实际上并不需要。为什么不要,就要用到很多理论知识,一个是指称语义和抽象指派来压缩检查的空间,一个是与公理语义和代数语义有关的形式规范, 再加上 Model Checking本身的技巧。指称语义学是Dana Scott 奠基发展起来的。公理语义学的奠基人Tony Hoare。代数语义学中 Guttag和Goguen等人贡献极大。中国有两位学者年轻的时候曾经作为访问学者和Hoare合作过几年,一位是周巢尘,一位是何积丰,两位现在都是中科院院士。Model Checking在芯片验证上已经实用化,但在软件上还在努力,但前途光明。NASA的软件研究所搞的JAVA PathFinder就是其中的代表之一。NASA有个牛皮的编程高手,自称凡他编的程序就不会有错。用JAVA PathFinder一查,居然有几十个Bug,当时就傻了眼。
计算机科学东西太多,比如数据库,安全,网络和通讯等等,有关的会议总是特别热闹。太化时间,我以后再慢慢写吧。
先让我们来看看编程序方面的问题。学计算机的人都会编程,可如何保证程序编得又快又好,问题就大了,这是一个在过去几十年里制造了数千个博士的问题。提高软件的生产率和正确率是非常困难的,一般一个好的程序员一年大概能写5万行左右的新代码。有没有什么办法提高到一年能写相当于现在50万行新代码的水平。各种研究都有,例如设计各种各样的工具,改进程序设计语言等等。大学里开发的工具很多是研究性质的,商业化的工具很多是工程性质的,是大学研究结果的综合。改进程序设计语言一直是一个非常重要的问题,POPL是这方面的核心会议之一。其中类型理论始终是重要的研究课题之一。中国人在这方面做过不少贡献,提到类型理论,很多人都知道Luo Zhaohui。
如何保证程序的正确性是另外一个很重要的与编程有关的问题。用计算机自动验证程序的正确性曾几何时是一个很热门的问题,好几个图灵奖的获得者都与这个问题有关。现在已经很少有人研究了。不过这些研究大大加深了人们对程序设计和语义的理解。比如说,我们现在知道了现在的编程实质上是一种HOARE逻辑上的形式推理,程序的正确性就是定理证明。程序验证的失败很大程度上是定理证明的失败。定理证明曾经是人工智能的一个热门话题,Otter是最具代表的全自动一阶逻辑证明器之一。可惜的是,所有的全自动证明器都遇到了一个无法逾越的障碍,就是没办法做自动归纳证明。我们知道实际应用离不开整数,整数上的命题很多是用归纳法证明的,但归纳模式千变万化,迄今为止归纳模式无法自动生成。半自动的证明器有不少,可只有专家才能用。
说到这里,不能不谈谈眼下热门的Ontology有关的研究。搞人工智能的人在上个世纪搞坏了名声,只要和人工智能这个词沾上边,一般就有骗子的嫌疑。现在申请项目没人会用”人工智能“这个术语了,不过没关系,现在可以叫”知识工程“或Ontology或其他什么的。搞知识工程的人发现用一阶逻辑表达知识不行,因为其中的定理无法自动证明。简化到HORN逻辑还是不行。再简化找一种能保证自动证明定理的逻辑,终于有了,就是现在流行的 Description Logic。你可以想象这逻辑有多弱。Ontology研究不管怎么吹,超出Description Logic就是不可判定的。你也千万别用到算术和方程什么的,一用就超出Description Logic了。Google已经暗示不会开发与RDF和OWL有关的产品,实际上是看坏这项技术。
顺带说一下,从事这种与理论和逻辑有关的研究没有数年在逻辑和代数方面的学习功底,门都没有。比如说如果你要研究不同计算系统之间的关系,你得理解Grothendieck Institution。这就是为什么在欧洲很多计算机科学系和数学系是在一起的。
现在做分布式应用最流行的办法是用WEB SERVICE,简单而且容易开发。有没有什么好办法,可以快速简单的把一大堆WEB SERVICE搞在一起,MICROSOFT, IBM,还有其他工业巨头两年前难得地放弃了自己的标准达成了一致,搞了一个统一的标准, 就是BPML (Business Process Management Language), 。 用BPML写的程序调用不同的部署在网上的WEB SERVICE,完成用户想要的功能。
BPML是怎么设计出来的? 秘密是PI演算(Pi-Calculus)。BPML的设计者Assaf Arkin和他的同事都是PI演算的行家里手,他们从PI演算清楚知道这个语言需要什么。那末PI演算又是什么东西呢?
我们知道所有串行计算机程序都可以化归为LAMBDA演算。LAMBDA演算是和图灵机等价的。大多与计算机语言相关的研究都可以化为对LAMBDA演算的研究。上个世纪七十年代前,LAMBDA演算是没有语义的。DANA SCOTT发现了LAMBDA演算的语义成为了现代计算机科学的开端。DANA SCOTT发现了一个高阶函数的集合(叫论域),每个程序都可以化为一个方程,而这个方程在这个集合上有唯一的最小解,这个解就是这个程序的语义。这项工作带来了象潮水般的后续结果,影响直到今天还到处可见。只要你谈递归的语义,就会是某种形式的论域。
PI演算和论域很好的处理了串行计算机程序。可对分布式计算却很难处理。PI演算就是分布式计算的理论模型。PI演算的发明人ROBIN MILLER从没拿过PHD。他得图灵奖的时候通知他因为他的四项成就而得奖,他写信说其中一项不是他的,如果不把那一项拿走,他拒绝得奖。由PI演算延伸出来的东西多得不得了,因为它涉及到了分布式计算的本质。这些理论是数理逻辑中模型论的一部分。PI演算就是一个单纯的公理逻辑体系,包括几个算子和十几条数学公理。就象群概括了很多东西,PI演算概括了所有分布计算和通信系统。如果你读有关的论文,和数学论文样式没有任何区别。正因为PI演算是数学理论,它的定理支配着不仅计算机系统,而且支配着象交通系统和生物这样领域的现象。中国的林惠民当选科学院院士的主要成就之一就是在PI演算里作的。
上次谈到提高软件的生产率和正确率是计算机软件研究和开发的大问题。商业的集成开发环境(IDE),各种软件工程的方法(如UML),工具(如 Debugger)无不是为了这个目的,就是又快又好的开发程序。Knuth 把程序设计叫艺术,由此命名他的得意著作。其实计算机科学的一个大目标就是要让这种艺术变为工程,要让程序变得和其他工业产品如汽车那样可以大规模高效地生产。
现在的很多工具虽然已经大大提高了程序开发的效率,没人会怀疑 Visual Studio 对开发 Windows 程序的作用。但是还有许多实际问题没有解决。举个简单的例子,比如说,你怎么知道程序肯定没有Bug。数年前阿丽亚娜火箭发射失败就是因为控制程序里的一个小Bug而损失了五亿美元。我们已经谈到过,因为定理自动证明的局限使得程序自动验证无法实用化。现在广泛采用的办法就是测试,即用尽可能多的输入看程序的运行结果。我曾经在一个大公司看到对一个大程序产品的测试,四十多人的全职队伍,测试了两年,可想而知其中的甘苦。象Windows这样的产品测试简直是天文数字, 投入的金钱真的也是天文数字,还不能保证样样都测试到。那么能不能有什么办法自动检查?当你问了这个问题,你已经有了一个绝好的研究问题。答案之一就是 Model Checking。Model Checking理论上把所有可能的情况都执行了一遍,确保程序满足要求。注意这里是指理论上,实际上并不需要。为什么不要,就要用到很多理论知识,一个是指称语义和抽象指派来压缩检查的空间,一个是与公理语义和代数语义有关的形式规范, 再加上 Model Checking本身的技巧。指称语义学是Dana Scott 奠基发展起来的。公理语义学的奠基人Tony Hoare。代数语义学中 Guttag和Goguen等人贡献极大。中国有两位学者年轻的时候曾经作为访问学者和Hoare合作过几年,一位是周巢尘,一位是何积丰,两位现在都是中科院院士。Model Checking在芯片验证上已经实用化,但在软件上还在努力,但前途光明。NASA的软件研究所搞的JAVA PathFinder就是其中的代表之一。NASA有个牛皮的编程高手,自称凡他编的程序就不会有错。用JAVA PathFinder一查,居然有几十个Bug,当时就傻了眼。
计算机科学东西太多,比如数据库,安全,网络和通讯等等,有关的会议总是特别热闹。太化时间,我以后再慢慢写吧。