设万维读者为首页 万维读者网 -- 全球华人的精神家园 广告服务 联系我们 关于万维
 
首  页 新  闻 论  坛 博  客 文  墨 黄  页 分类广告 购  物
搜索>> 发表日志 控制面板 个人相册 给我留言
帮助 退出
kshdjj的博客  
不信邪不盲从。享受的是自己的努力与成果,不要其他一切。  
        http://blog.creaders.net/u/8284/ > 复制 > 收藏本页
我的网络日志
华人十二年实现“软件工程”革命 2014-02-28 05:59:52

                           逻辑学家十二年实现“软件工程方法”上的革命

                        回答美国伊利华报报社记者提问 Dec. 31, 2013)

 你能否通俗地介绍一下,你的 “软件设计编程自动化”的SDDA技术是什么?

真正制作电脑软件的语言仅有三代:(1) 第一代是 “机器代码语言”,依据记录了客户要求的设计文件,再人工编制“机器代码程序”;(2)第二代是“编程语言”,依据记录了客户要求的设计文件,再人工编制“语言代码程序”;(3)第三代是 “软件设计语言”,它不需要人工编制程序,只要用它写下客户要求,这种记录了客户要求的“设计文件”,就能自动转换成电脑上直接运行的“机器代码程序”。这种强有力软件设计语言都使用了SDDA (S软件,D设计,D编程,A自动化)技术。

 我十二年的工作是创建了一种“模式逻辑”工具,用它首次突破了SDDA技术。这种SDDA技术,可以为任何系统任何种类的软件,制作它的第三代的“软件设计语言”。为了证明它“既强有力又有普遍意义”,我从二零零一年开始,为两个最复杂的软件系统:(1)为企业经营管理的Window视窗软件,制作了软件设计语言 SDDA_window ;  (2) 互联网平台软件CGI,  制作了软件设计语言 SDDA_web.。 这两种“软件设计语言”工具都将在“可视化D++语言” 一书中介绍。

 当今时代的状况是,一座工厂要成为 汽车制造厂,不必要去学习怎么提炼橡胶,怎么加工轮胎和加工汽车发动机。历史悠久的专业厂已提供各种零部件,让你选购。同样,人们在进入第三代的 “软件设计语言”时代之后,一般软件人员也根本不需要学习怎样制作数据库和编制数据库程序。你只要把你要的,是什么样的数据库写出来,就可以了。例如,你要建立一个图书馆目录的数据库,并还要有数据库记录的输入输出的软件。现在, 用第三代的 “软件设计语言”,你只要写下你要的“数据库表”的名称是“图书馆目录”一词,不妨,再写下它的每条记录由“书目“与“作者”二个项目。总共,你只不过打了三个词语,一个数据库就产生,并且提供各种需要的输入输出操作软件块。所以,人们在进入第三代的 “软件设计语言”时代之后,这种新技术已提供这样的一种可能:一位普通人都可以为他熟悉的业务,制作他自己的电脑视窗应用软件。在以前,这是不可想像的吧。

 这里要指出的是,可视化D++语言是属于一种 “通常的,用于软件设计的各种基本工具”的大集成,它的操作使用方式,都属于人们使用电脑的常识。它内部的高智能的协调管理,保证它使用非常非常简单方便,又通用可靠。附带地也指出一下:正象第二代语言能具有第一代语言的所有功能,第三代语言也能具有第二代语言的所有功能。因而,若有人问“能产生大软件?能显示美丽的画面吗? ”一类问题.,就可知这些问题都是次要的,都是不言而语的,

 你原来是复旦大学数学教师,怎么会去搞计算机软硬件的

 因为日本,美国解决了用计算机去“光顺”船体数据,有了正确的船体模型数据,从而能用计算机去控制船体制造。一九六七年,上海的造船研究所和计算机技术研究所,邀请了复旦大学数学系三位老师和二位学生加入他们“船体计算机数学光顺” 研究小组。二年下来,仍有一个特大难题解决不了。江南造船厂顾师傅组织领导了一次“攻克难题”大会战。二个半月后,我在原有同事工作的基础上,“模仿人工智能‘机器学习’的方法,使用加‘权’与精选‘权’的非传统方法,使人的意愿和数学公式相结合,攻克了电脑船型光顺的会战难关”(引自“可视化 D++ 语言 第1册”一书的后言)。这使我看到了计算机的威力。我先打了一份报告,没成功,后又补充打了一份报告,要求在复旦大学内建立“计算机制造厂”。感谢数学系领导的工宣队张连长的支持,一九六九年,“复旦计算机制造厂”成立了。次年一九七零年,复旦大学“计算机结构”专业正式成立并招工农兵学生。当时,我是计算机制造厂厂长兼任计算机教研组组长,前后做了约十年。就这样,我走上计算机的道路。嗨,中国的计算机制造厂成立比台湾宏碁和美国的 DELL早,但是做的都比他们差。我不同意做得差的原因是“工人吃大锅饭”。简单地说,中国大部分人,无论在国营企业,私营企业,以及在美国打工者,毋庸置疑大都是智慧与勤奋的。

 你十年搞计算机硬体之后,怎么会转去搞计算机理论科学?

 文化革命刚结束不久,新干部与恢复工作的老干部一大堆,每一位都得安排一个职位。一大批职位,又引出一大批职权。于是,大事小事都要经过层层不同职权的又不了解生产的人员批准。我也无可奈何,最后说“计算机工厂我上缴,你们去管理吧。” 。一九八零年,我加入了 朱洪老师为领导的新建立的“计算机理论”教研组。大家都知道,中国的计算机软件,以及基于电子元件工业基础的计算机硬件,与世界先进水准相差一大截。但是,不涉及工业基础设施的计算机理论科学,要赶上世界先进水平,还是有可能的。一九八一年,我暗暗下决心,在计算机理论科学上,三年达国内先进水平,五年达国际先进水平。我把我的职责干好之外,不丢掉我的决心。即使领导安排我去做‘班主任’行政工作,但我 晚上也可为计算机系,数学系的学生开专题“讨论班“。几年后,我的愿望达到了。复旦校刊登载了:唐同诰五年左右为学生开了五门新课,以及参加了某个讨论班的“ 六人中有三位直升博士生,二位考取硕士研究生“(要说明一下的是,这些学生自己原先都很杰出)。另外,在我的时态逻辑文章在“中国科学”外文版上发表,又受到美国“数学评论” 评论员 (有关语言理论与逻辑)邀请。这样的经历,把我推入了计算机理论科学的阵地。

(我回忆了这些,不是我有什么特殊智慧。事实上,中国聪明的人很多,只要选准方向,沉下心来干上一二十,都能作出不错的成绩。)

 怎么会来美国搞计算机理论研究?

 在我的时态逻辑文章在“中国科学“上发表之后,我已有足够的理论基础可以去国外进修。一九八六年,我曾经想去牛津大学学习和工作。有一次, 应中科院软件所的的两位资深研究员(文革后最早的院士)唐稚松和周巢尘的邀请,给他们的研究生介绍我在软件时态逻辑方面的研究成果。会后,因为周巢尘老师常被邀请去牛津大学工作,我就请他引荐我去牛津大学计算机系工作,而他建议我去卡内基·梅隆大学计算机系,不去牛津大学计算机系。他对我说:“那儿的人是’大X’级水平,而你已是‘元X’级水平.。你应该去CMU”。此话仅是鼓励,但他的建议我必须接受。回上海后,我带着我的论文,请上海交大的孙永强老教授写一封信,介绍我去CMU卡内基·梅隆大学的埃德蒙·克拉克教授(后为图灵奖获得者)那里学习。孙老师先看了我的论文,然后在一张纸上写了一句话,中文意思是“此人对你必有用”,签了名后交给我。一九八六年底,我飞到匹兹堡机场,见到了克拉克 教授。他驾车把我带到他的办公室。我把孙永强教授的信转交他。他问我“你能干什么?”,到了美国,我就不必要过分谦虚,我回答说“我能做你叫我干的任何事情”。过后想想,我的回答不精确,应该补充说,任何事情是指他的科研上的任何事情。如有一次,他建议我去XXX大学做教师,我就没干。因为,当时我的英语水平,只能看懂别人写得,基本上听不懂学生说什么。

 在美国你得到的最大的收获是什么

 我到美国是一九八六年十二月底,克拉克教授交给我美国顶级计算机杂志为他刊登一本专辑 (共有八章),说这本专辑是我到这里进修的主要学习材料, 并说过了圣诞节后一月十日再谈。到了一月十日,我去了克拉克 教授办公室,他问我“你看过这本专辑的文章吗?” 我说“看了,而且看完了”。他说“你有什么问题要问我吗?”。我说:“没不清楚的问题。整篇文章的结论正确。不过,第八章的证明改写一下更好”,他问我“哪儿?”。接着,我们就讨论起来。以后,他不断地送其他人的稿件给我,要我帮他初审一下,提个意见。这是我的工作,这些论文大都与我的研究领域无直接关系,有些是徧向代数领域,不太熟悉。为了正确审阅这些论文,有的结论查不到资料,我需自己动手证明,我需要花大量时间。事实上,我在 CMU  参加了三个有兴趣的研究课题:软件验证,硬件验证,以及人工智能的知识表达。这些需要的逻辑知识,但都没有超出我以前已经掌握的知识。 对我而言,研究比审稿简单,化的时间不多。要说我真正从CMU几位美国教授那儿学到的,是学术上的“思想方法”,也就是“在计算机科学领域里,对每一个概念,主意,想法,思想,方法,都要考虑用一个‘可计算的算法和程序’去描述和实现”。这方面,当时感觉CMU比斯坦福大学大学更强调一些  。因此,当我以后拿到论文,我就思考把它的内容要用可计算的程序写一下。这种做法的结果,有时会令人感到意外。这儿仅仅举一个例子。研究人工智能“机器学习”的人,很少人 没读过 某位极为著名的人工智能专家的有关“表达式学习”的论文 。此论文不长又有软件,仅仅看论文,很难发现有错误。偶然机会,我参加的一个研究小组要用此论文的软件。我拿来论文,依照论文提出的方法,用自编的程序去实现一下,发觉论文中有关“极限”概念错误,导致论文提出的算法错误。如果不用自编的程序去实现一下论文的内容,论文的错误很难识别(错误已在某会议 “ The 7th Australian Joint Conference on Artificial Intelligence AI-94 “上报道。但必须指出, 虽然论文给出的算法有错误,但论文的主体思想有创见,还是很了不起的)。又有一次,我为校外的一位教授的论文审稿。他在论文中提出一种复杂的理论,并在文末尾说:他已经根据他的理论,制作了 一个(软件)系统。我在审稿时,用可计算的原理和程序,模仿他的理论。发现他的理论根本“不可计算”,随后回复克拉克 教授说:此论文作者根本不可能制作了 一个(软件)系统。一月以后,克拉克教授告诉我,他向论文作者要一个他制作了 的系统,作者回复说,他的(软件)系统才开始编。此时,教授才要我写出,为什麽作者的理论不可能已制作出一个(软件)系统。

在计算机软件理论的研究中,你是否建立了与别人完全不同的新方法?

 计算机软件理论科学中,早期提出了两大难题:一是算法复杂性的NP问题,另一个是.程序正确性的验证问题。在程序正确性的验证的领域里,为验证软件程序中的大大小小循环语句,人们想起完全类似的“数学归纳法”。研究人员都自然而然地使用数学工具,去研究程序正确性的验证问题。此问题太困难了。因此,为验证程序正确性而提出每一种能让人理解而接受的,逻辑或公理化理论的创始人,一般都能获得图灵奖。但是,实际软件程序太复杂,而在执行过程中产生的状态也多的无法估量,用严谨的数学逻辑方法仅能验证简单的小段的程序语句。而且,用数学表达式去验证简单的程序语句,这些复杂的数学表达式更让程序人员难于理解。

 我在不同的研究组干了多年的程序正确性研究之后,我认为数学方法的潜力到此为止,就这么一点能力,不能彻底解决问题。因而,人们需要化较长的时间,去探索,试试寻找其它的工程的方法,当然不会立竿见影,前几年不会有结果。但一般的研究组的课题,往往以年填写研究计划,年年要求出一些成绩,按年总结汇报。我要探索新的特殊有效方法,一,二年不会成功,只有成功了才能让人相信。我只能化晚上以及假日,用了六年才完成。首先在匹兹堡大学张系国教授建议的一个学术会议上介绍,意在宣告成功。在给CMU 计算机系 Nana Scott 教授和他的一位助手演示我的工程化的程序验证系统之前,Nana Scott 教授对我说:“用数学方法是不能解决程序验证问题”。表明我们有同样的看法。我的工程化验证程序的路是走对了。

 那么,什么是我创建的能被程序人员使用的 “工程化方法”呢?在我辞职离开澳大利亚“软件验证研究中心”的最后一天,我在研究中心作了唯一的一次演讲,并演示了我的软件验证工程化系统。我的方法就是让普通的编译器(输入变量值为数字),增强为拥有“程序归纳法”机能的符号化编译器(输入变量值为代数表达式),再在程序设计语言里加进六条左右,简易的“前置条件”与“后置条件” 等程序语句。整个系统以“计算树”的搜索方式运行: 遇到逻辑公式就套用“定理证明器”;遇到循环语句就套用我独创的“

浏览(3087) (0) 评论(15)
发表评论
 
关于本站 | 广告服务 | 联系我们 | 招聘信息 | 网站导航 | 隐私保护
Copyright (C) 1998-2016. CyberMedia Network /Creaders.NET. All Rights Reserved.