自我简介

欢迎您访问我的个人主页!这里您可以阅读有关我的一些情况,包括我的研究领域、研究方向和研究兴趣、为学生开设和讲授的课程、从事的创业项目等等。如果您阅读本网页之后,对我的研究有合作兴趣、或者想参与我的创业项目、或者参加我开设的培训课程、或者您想从我这里得到创业的援助,请下载我开发的软件 grusadgrego 并安装在您的计算机上,利用这个软件和我联系。除了和我保持通信之外,这个软件包也是所有“荣世网络”和“鹤群网”成员使用的平台类软件。

我一贯支持开发人员社团的建设,包括支持 2000 年成立的自由软件领域的“荣世网”(Ronsnet)、2010年成立的基于高端学者和研究人员的“鹤群网”(Grusadgrego)等,荣世网群体的成员是想掌握“狭义黑客道”软件开发技术去创业的数学家和数学工作者,而鹤群网则是愿意以“广义黑客道”为指导着手创业的创业者组成的社团。我认为构建良好的人文环境是构建创新型社会的必要条件。

我的小档案

博客档案

时事评论: 《南海方略》(请使用 grusadgrego 软件阅读)。

查阅我以前写的博客,请使用 grusadgrego 软件中的搜索功能。

联系方式

如果您想加入“荣世网”(自由软件的开发人员社团)或者“鹤群网”(高端学者的社团),我推荐您下载和安装我开发的 grusadgrego 软件(包括 Emacs Lisp 程序和 Racket 程序),利用该软件的通信功能和我联系,这是最好的联系方式。

我的其他联系方式有:

通信地址: 430040 湖北省 武汉市 东西湖区 吴家山 园丁村 57 号 3-3
电话:027-8322.2108
传真:027-8396.5732
手机短信:153.0865.9010
网上留言(本网站上的 CGI 留言板程序已经停用,请使用 grusadgrego 软件给我留言,字数以不超过 500 字符为宜。)
Skype: hong_epon


研究领域

《黑客道三字经》的“易经篇”曰:“洪义鹏,出潇湘,十严冬,半神仙。纫历史、斗万咎、运千筹、西学研。师百家,吴学谋、斯托曼,尤著显。修尺度,理五科,届不惑,始立言”。这里提到的“理五科”,系指我涉及的研究领域有五个:哲学、数学、经济学、计算机、语言学。以下是具体情况介绍:

哲学专题

哲学是关于人生存的大智慧。任何人如果想把自己的人生价值最大化,那么他必须研究哲学。对于一个民族或者国家,如果想使利益最大化,那么这个民族或者国家也是需要学习哲学的,这是这个民族或者国家成功的前提,也是获得其他民族或者国家尊重的一项很重要的条件。中华文明复兴,首先应该是中国哲学思想的复兴,而在这一层次上,道家思想的研究具有重要地位,诞生于东汉时期的道教继承了道家思想,并又有了进一步的发展,它是中华文化的内核所在。中国历史上的三大帝国(汉、唐、明)都是道教兴盛的时代。正如鲁迅先生所说的,中国文化的根底在道教。自清朝后,道教才衰败势微了。中国文化复兴,我认为首先应该是复兴道家思想和道教文化。道教是中华文明的宝贵精神遗产,在明朝中期之前,中国一直有自己完整的哲学体系、科学体系和技术体系,长期领跑于世界。只是到了明末和清朝后,因长期闭关锁国,我们对西方世界突飞猛进的科技进步浑然不觉,没有跟上世界发展的大潮流,中国才大大地落后了。中国与世界先进的 300 年差距(我有两种算法,一种是按照历史学的观点, 从 1644 年明朝灭亡到 1949 年中国的成立共 305 年;另一种是按照数学观点,从莱布尼茨于 1684 发表第一篇微积分的论文,到中国数学家于 1984 年发表一部有重要意义的数学专著,正好有 300 年的时间跨度,我倾向于采用后一种算法,它更加理性一些),正是这个历史断层造成的。我一直试图以哲理、数理、技理三兼顾的方式做重建中国科学传统的哲学专题的研究,而这些哲学专题总是与我的数学研究和技术研发活动结合在一起的。

要赶上西方的先进,我想有许多基础性的工作要做。首先我们需要对西方这三百年发展的工作作具体而深入的清理,甚至包括欧洲工业革命之前的文艺复兴时期的历史和学术做具体和深入的清理工作。开展这一工作,学习西方的语言是不能缺少的。 除了英语、法语、德语等现代欧洲语言之外,还必须迈过拉丁语这个门槛。如果没有掌握拉丁语,那么是很难深入研究欧洲文明的内核的。 当然,对更早的古希腊文如果有研究,那会更好一些,因为古希腊是欧洲文明的源头。我们需要大量收集西方这段时间积累的多种文献资料。没有这些资料的积累和完善,研究是无法入手的和展开。这和十九世纪清廷官员曾国藩、左宗棠、李鸿章、张之洞等人发动的洋务运动不同,它不再是引进、模仿和学习西方的器物和某种技术,而是系统地学习和研究西方文明的精神和精髓,我不妨称之为“新洋务运动”(neo-westernization movement)。

为了配合新洋务运动,我一直想在大陆某地建立一个欧洲文献的电子图书馆,收集欧洲的文献的 PDF 版本,供学者、大众研究和分享。请有此兴趣的宗教团体、科学院、研究所、大学、私人投资者和我联系。

研究哲学专题,还需要有正确的方法论指导,我认为在研究哲学专题时,如果没有数学作为帮手,那是走不了多远的。因此我对哲学历史上具有哲学家和数学家双重身份的哲学家是高度重视的,这些哲学家中具有代表性的人物包括:笛卡尔(二元论和解析几何的创立者)、莱布尼茨(单子论和微积分的创立者)、庞加莱、罗素、怀特海、维纳、冯诺伊曼等。他们均是我的哲学研究专题,研究重点是他们的哲学思想体系,数学研究成果,以及两者的相互联系等。

数学思想

国际数学界的大多数学者认为法国数学家庞加莱大概是数学领域的最后一位百科全书式的人物。当今数学枝繁叶茂,体系庞大,即使研究某个细小的分支,也可能耗掉一个人一辈子的时间和精力。不过,我对出现新的百科全书式的数学家还是持有乐观态度的,关键是要有新的思想框架去整合数学的基础,并因此创造新的数学。在数学的重构和创造方面,历史上有多个成功的范例,上个世纪的布尔巴基学派利用三大结构的观点去重新统一数学就是一次的成功尝试。

从数学历史的发展看,把当今时代视为数学发展的黄金时代是毫不过分的,美国数学学会前主席格利菲斯曾经讲了四个观点,很有道理:一是许多历史上的数学难题已经得到解决,大大推动了数学的发展;二是数学的应用层面越来越大,也就是数学越来越有用,这导致了一个直接的结果,即数学从业人员急剧增多,这是历史上没有过的局面;三是数学分支之间的融合、渗透、交叉等非常明显,新的数学分支不断涌现,方兴未艾;四是计算工具的革命为数学的发展带来了新的活力和全新的发展方向。在这个数学的黄金时代,我们可以做的工作是很多的。

我的数学知识基本是通过自学得到的,2004年以前吴学谋研究员给了我很多的指导和很大的支持。我学习、体验、创造数学的过程可以大致划分为三个阶段:

第一阶段(1991年-2003年),“比从期”。这一时期我花了十几年的时间思考了数学史上的三大数学危机,即毕达哥拉斯的不可通约的整数比悖论(导致了无理数的发现,数系第一次被人类理性所扩充)、贝克莱主教发现的数学分析中无穷小悖论(导致实数系的建立,最终出现了连续统的基数大于自然数/有理数集合基础的惊人发现)、集合论中的罗素悖论(导致关于数学的哲学基础的争论,最终以哥德尔的公理系统不可判定性定理告终)。2003年终于想通了毕达哥拉斯学派对数系的扩充、康托尔的连续统基数的发现、哥德尔公理系统不完备性定理这三次重大数学发现中采用的共同思维规律。这一时期的思索对我的数学思想影响巨大,许多结果体现在后来写作的《武汉纲领》一书了。

第二阶段(2003年-2006年),“从北期”。我集中精力研究了几个数学专题,提出了刻度论的理论。第二阶段研究的数学专题包括:

一、公理集合论与非标准集合论。公理集合论是相对朴素集合论而言的,它是建立在 ZFC 或者与之等价的 GB 系统上的集合论。集合论的思想是所有现代数学思想的基础,采用公理化方法研究集合论有巨大的好处,是任何一位职业数学家必须具有的基本功。我在这一专题上投入了许多时间。在后期,我对公理集合论中的选择公理进行了思考,以及对不采用选择公理的其他集合论(非标准集合论)做了较长时间的探索。非标准集合论是后来在“北化期”我创造隐连续思想的来源之一。

二、度量空间和拓扑空间的等价条件。度量空间的定义最早来自法国数学家傅雷歇(Frechet)于1906年写作的博士论文,度量空间里定义了距离,这是一类非常重要的拓扑空间。一个重要的问题是,一般的拓扑空间是如何一步步演变为度量空间的? 在上个世纪五十年代初期,先后有原苏联、美国和日本的三位数学家各自独立地发现了两者的等价条件,这是拓扑学中一个非常重要的定理,现在把这个定理命名为“斯米尔诺夫定理”,以纪念原苏联的数学家 Juri Smirnov。这个定理可以很好地解释中国哲学体系中“形化生气、气聚成形”的思想。布尔巴基学派的成员后来也写过一本专著,很详细地讨论过这个主题。我思考这个专题时,我委托俄罗斯的一位数学家朋友找到了斯米尔诺夫发表的论文的俄文原文,并仔细阅读了其内容。

三、非标准分析。非标准分析是上个世纪六十年代初期由 Abraham Robinson(1918-1974)创立的,在此之前,谁也没有想到可以对实数系进行这种形式的新扩充! 而且微积分的创始人莱布尼茨的单子论居然在大约300年后得到了正式的理论支持而复活了!! 尽管非标准分析和传统的分析在数学计算的逻辑性上等价,但是正如哥德尔(K. Goedel)指出的,我们不宜过早地宣告非标准分析没有实际价值。在我看来,非标准分析已经很好地呈现了它的价值,这种价值就蕴含在它对数系的扩展工作中,一旦对数系扩展的方法和原则(非标准分析采用了模型论为工具)被搞清楚了,那么就可以利用相同的方法去构造新的数学。这就是它的最大价值所在!!!

四、概周期函数论。概周期函数是纯周期函数的一种推广,现实世界中的所谓周期函数大多是概周期的,真正纯周期的函数在现实世界里并不存在。也正因为如此,概周期函数理论是非常有用的! 尽管概周期函数的定义很简单,但是它从 Harold Bohr 提出概周期函数的基本概念和初步研究结果之后,却得到了许多大数学家的关注和研究,包括贝斯科维奇(A. Besicovitch)、列维坦、维纳、外尔等。概周期函数理论的研究是许多新思想的实验田,也是许多新式数学武器和技巧的检验场所。我在这一时期阅读了几乎所有关于概周期函数理论的材料,也在一些具体的定理上做了一些高级练习。

第三阶段(2006年至今,仍在进行中),“北化期”。利用刻度论的观点整合当今数学的全部分支。这个阶段是我开始进行数学创作的时期,这一时期的主要工作有:

一、产生了隐连续的思想。 隐连续是我的数学创造,源自我对非标准集合论的探索。在长期思考了选择公理、决定公理、马丁公理和其他公理之后,我认为引入“隐连续(Implicit Continuity)”的思想后可以对数学的基础产生全新的理解。隐连续的思想把系统科学和数学很好地结合起来了。

二、第二代非标准分析。在第一代非标准分析中,所有的无穷小量都是等质的。在我探索的第二代非标准分析中,引入了隐连续的思想,允许无穷小量在不同的阶上异质。通过引入新的异同关系,构造新类型的无穷小量,把传统的泛函分析技术、特别是线性算子等工具引入进来,我看到了全新的数学前景。

我的第二代非标准分析的起点是从概周期函数开始的。学习过微积分的人都知道,函数和级数两者存在密切的关系,微积分理论中的著名的泰勒定理、傅立叶级数都是把一个函数展开为级数来研究函数特点的技术,体现了《武汉纲领》中的“善憾巧次悖转奇”的研究方法。在深入研究泰勒展开和傅立叶级数的基础上,我把相同的思想方法引入到了概周期函数的研究中来,并加入了新的思路。概周期函数的概周期量是可以和级数表达发生关联的,而在级数敛散性研究时引入非标准分析中的单子思想,采用偏序结构对待不同阶单子的层次进行处理,从这个观点来看待和研究概周期函数,就出现许多有新意的工作了。

总的说来,学习数学的起步阶段最好是在一个良好的数学群体中学习,并且有一位造诣深厚的长者领导和指导。但遗憾的是,这个理想化的学术生态在中国(的数学界)似乎从来没有存在过。对于已经入门了的学生,如果真正掌握了基本的数学思想和方法,那么就应该形成自己的观点,并利用自己的观点去创造新的数学,这是迈向数学研究高级境界的乐趣,任何数学家和数学工作者都应该追求进入这一境界,而不是简单重复前人的工作内容。

经济学探索

在西方学界,经济学被视为数学的一种应用,因此诺贝尔经济学奖总是颁发给一些数学家也就不奇怪了,这与中国大陆的政治经济学的差异是巨大的。 社会资本(Social Capitals)是近年来开始被引入经济学的新概念,主流的经济学流派对社会资本的存在性基本是不持怀疑态度的,但是如何测度这一资本的价值却难倒了所有的经济学家。对当我产生了隐连续的思想并且对第二代非标准分析的做法有了自己的理解之后,社会资本的测度问题就有可能利用自己的刻度论工具去解决了。

计算机工程实践

设计一个操作系统是许多黑客的理想。我在这方面有了一些探索和工程实践,起点就是直接在 Intel x86 的硬件基础上实现一个 Lisp 的求值器(evaluator),这个求值器是操作系统的核心,核心中没有设备驱动和文件系统等不必要的部分,这些部分可以作为附加部分添加到内核的上面。传统 Unix 系统中所有的基本概念,均可以在 Lisp 语言的模型上构造出来。Racket 项目组的工程实践表明,利用 Lisp 设计新的操作系统的思想是可行的,尽管他们目前还没有设计出自己的操作系统。

进入 2000 年以后,ARM 处理器在嵌入式系统领域获得了巨大成功,成为 32 位嵌入式系统上的首选处理器。全球 ARM 的生产厂家不止一家,因此供货渠道是多样化的,软件开发人员不易被某个特定的供货商控制。新的 ARM 内核功能越来越强大,像ARM Cortex,实际上完全可以作为个人计算机上的 CPU 使用了。我已经注意到这一趋势,想在 ARM 体系上开发一套完整的工具链,支持这个体系上的开发工作,包括汇编器、C 编译器、调试器等。这项工作已经开始了。可能有读者问,难道市面上已有的工具链不好吗? 何必重新发明车轮呢? 我是这么看待这个问题的:黑客通常喜好使用自己开发的工具,即使自己开发的工具不如已有的工具完善,但是只要它可以干活,它就是黑客自己最喜爱的工具,也是黑客手中最好的工具。

Ada 2012 规范发布之后,我还想开发针对它的编译器和工具链,Ada 语言是非常优秀的大型编程语言,对于开发大型的、嵌入式、实时的、并发的、具有工业力度、高度可靠性的、需要长时间运行和软件寿命的系统,Ada 语言是首选方案。如上所述,ARM 在嵌入式系统领域已经获得了主导地位, 因此针对 ARM 支持 Ada 2012 的工具链对市场是极有吸引力的。

Ada 2012 在面对对象编程方面的支持更加完善,在有了自己的编译器和工具链之后,可以研发的系统是非常多的,这里略举三例以说明 Ada 2012 的具体应用:

一、我想在自己设计的飞行器“承天一号”上采用自己研发 Ada 开发工具链开发的航电系统。在这架飞机上,使用基于 ARM 和 Ada 开发的电传控制系统,航空工程实践已经积累了具有大量的事实,表明采用电传控制系统来控制飞机的飞行,可以大大降低飞行员的工作强度,并大大提高飞机飞行的安全性。

二、发动机是飞机的心脏,飞机的五大基本子系统之一。目前有一种趋势,就是在飞机发动机上采用 FADEC技术,FADEC 系指 Full Authority Digital Engine Control,即“全权限数字化发动机控制”,其本质就是利用计算机系统控制发动机的运行,以提高发动机的经济性能,改进发动机的动力特性,并延长发动机的寿命。由于发动机是飞机的核心部件,对软件控制程序的可靠性要求极高,因此这种系统是适合采用 Ada 语言开发的。

三、电机(与拖动)是工业自动化的基础。电机(特别是交流电机)的调速是当今电机应用的重点。目前广泛采用的技术是先将交流电整流(AC-DC,整流器),然后将直流电逆变为交流电(DC-AC,逆变器)供给电机的方式。当 IGBT 等全控型电力电子器件获得广泛运用之后,我们可以把电机调速的问题视为一个软件编程问题看待,即利用计算机程序发出指令,让控制系统控制电机所需要的电流和电压的波形,从而达到电机调速的目的。 近年来出现的基于矩阵变换技术研发的新型转换器(matrix transformation based converter, MC)更近一步,它省去了中间环节,是全新的直接从交流到交流(AC-AC)的能量变换,这种技术很先进,它对电网几乎没有噪音污染,系统转换效率高,结构紧凑、有利于降低电机控制系统的成本,和上述已有的“交-直-交”电机调速方式相比具有很大优势,这类转换器上的控制程序也是很适合采用 Ada 开发的。

语言学研究

我的语言学研究分为三个大块:自然语言(特别是古代语言)的研究、辅助语言的设计和计算机编程语言的编程和设计。

古代语言研究

除了学习英语等现代欧洲语言的兴趣之外,我一直对世界上的古代语言有浓厚的兴趣,通过研读古代语言,我可以跨越时空的限制,领略古人的伟大智慧。古代语言有许多种,有些已经死亡,和它曾经兴旺过的文明一样消失在了历史的长河中。有些历经沧桑而仍然存活着,被现代人所使用。有些古代语言虽然已经不再使用,但是由于它们记载了古代的文献,至今仍有巨大的研究价值。我关注的古代语言有五种:古汉语、希伯来文、梵语、古希腊语、拉丁语等,它们只是已知的古代语言中的极少数几种,但谁也不能否认这五种语言对当今世界文明的影响是最大的。


古代汉语

汉语是我的母语,古汉语是现代汉语的来源。古汉语为典型的孤立语代表,而现代汉语则是词素语言的典型代表。汉语研究作为一项研究内容,既然古老又年轻。在众多年轻的研究方向中,有两项内容意义很重要,一是甲骨文,对汉字的研究;二是古汉语音韵的研究。

甲骨文于 1898 年被古董商、金石学家、学者王懿荣所识别,之后在殷墟(河南安阳小屯村)大规模挖掘,有大量的龟甲兽骨出土,加上别地的零星采集,至今已收集十几万片,其中单篇文章最长者达百余字,可以看出应用文雏形。殷商的甲骨文是迄今发现最早的古汉语文字。

据史书记载和考古材料的佐证,商朝是夏朝之后的一个朝代,它的成立时间在西元前 1600 年,距今已有约3600多年的历史。安阳出土的甲骨文就是商朝的文字,经统计,共有4000多个符号,但考虑到相当数量的甲骨片已经在王懿荣发现之前就被当作中药吃掉而永久消失了,而且被今人解读出来的文字数量仍不完整,只有2500个左右,数量如此巨大的文字肯定不是一个晚上创造出来的,也不太可能像“仓颉造字”的传说中所言出自一人之手。我们完全有信心肯定,这些汉字被创造出来的时间应该更早,而且应该是早许多。即使以殷商甲骨文的写作年代计算,汉字距今也有长达三千多年的历史,有如此悠久历史的语言文字在全世界范围内都是极为少见的,我们作为华人,应该为自己先民创造的辉煌灿烂文明感到无比自豪!

最早被创造出来的一批汉字,肯定和古埃及的文字一样都属于象形文字,但是后来被创造的汉字就不再是单纯的象形文字了。现代汉语是词素语言,而研究词素的来源和演变,就是极有价值的事业。古汉字构造方法直观,让人容易产生联想,兼具高度的艺术性和实用性。彻底研究清楚汉字的起源和演化过程,对于保证现代汉语的纯正是具有重要意义的。甲骨文的出现年代虽然极为久远,但是甲骨文研究学则历史很短,从 1898 年算起,至今才一百多年的时间。

汉语音韵的演化则显示出了和汉字演化不同规律。根据瑞典汉学家高本汉教授的研究,原始汉语(即汉字出现之前的汉语)也是具有屈折特点的(参阅其论文《原始汉语为屈折语考》,Le Proto-chinois, langue flexionnelle, Journal Asiatique, 1920),后来才进步到完全抛弃屈折变化,这是让所有现代中国人都吃惊的结论! 高本汉之所以取得了以往和当时所有中国的语言学家没有取得的成果,关键在于他的研究方式是采用中西语言比较法,运用西方语言学研究中常用的擅长从语音入手研究语言的规律的方法,并从古汉语文献的蛛丝马迹以及大量保留在汉语方言的口语中的语言材料,进行科学分类、归纳、整理之后发现的规律。他自觉地采用了类比、归纳、演绎等逻辑推理方法,并利用大量的语音材料加以验证,其研究成果之原创性和巨大的学术价值,令所有的语言学家钦佩不已。此项学术研究成果,也为高本汉教授带来了世界性的声誉。

古汉语的屈折性使得我们今天在研究古代中国人种的起源(最初来自西域而不是黄河流域的猜想),古汉语和古藏语的兄弟关系等学术专题上都有了科学的理论指导。

当今语言学界关于古汉语有上古汉语(西元前500年,以《诗经》为代表)和中古汉语(以西元601年的《切韵》为代表)的划分,相关研究的论文已经有相当的数量,进一步了解原始汉语的屈折性质将是一项有趣的课题。正如高本汉在其著作《汉语的本质和历史》中指出的那样,彻底去掉了屈折变化的汉语是非常先进的语言。实际上以汉语为代表的词素语言的确比各种屈折语言都先进,各种现存的屈折语言,都在过去发生了各自不同的缓慢进化,以去掉或者简化屈折特点,其中以英语的进步最为明显。认识汉语和汉字的不同的演化过程,对于研究汉语是不可缺少的。古代汉语是孤立语,然而,自“五四”运动兴起的白话文,乃至今天使用的现代汉语却是词素语言,也是目前世界上表达力最强大的语言。这个观点对我设计“国际语三号”( Interlingua-3 )人工语言方案时产生了巨大的影响。

在人类四大古代文明中,中华文明的出现时间比古埃及文明、古巴比伦文明和古印度文明稍晚,然而,仅有中华文明不断地延续了五千年至今不衰,其他三大古文明均不幸中断了。(在世界范围内,在文明的连续性方面唯一可以和中华文明的悠久历史相比的是犹太文明,犹太文明利用宗教的力量维系了文明传承的纽带,然而犹太文明在历史上长期没有国家的载体。) 中华文明在发展过程中,出现了由中原民族建立的(秦)汉、(隋)唐、明三大帝国,虽中间两次被北部夷族武力摧毁(一次被蒙古族摧毁,另一次被满族摧毁),愈挫其生命力愈加强大,仅凭这一点,就足以说明中华文明在世界历史研究中的重要地位是不可动摇的。中国既是一个非常古老的国家,又是一个非常年青的国家,这在汉语的研究中是可以明显感受到的。我可以肯定,在中华文明的伟大复兴过程中,汉语肯定会对世界上的其他语言产生重大的影响,尽管这种影响的最终结果如何目前尚不得而知。(实际上,世界各地近年来出现的汉语热与中国文化热,已经在这一方向上初露端倪了。)


希伯来语

这是犹太民族的语言,最早的《旧约圣经》就是用希伯来文写就的。由于《旧约圣经》和犹太文明对西方世界的巨大影响,因此研究希伯来语有巨大的学术意义。

在世界语言分类中,希伯来文属于闪含语系,或者称为闪米特语(Semitic languages, Shemites)。在古埃及的象形文字之后,我们知道有腓尼基人的文明存在,腓尼基人的文字和希伯来文有亲缘关系。这一源自西亚的语族,包括希伯来语,有两个基本特征:一、作为词根的辅音单词形式,无论怎么发音,无论有什么辅音后缀,它的基本语义是不变的,而时态和语态等语法和高级的语义变化则是通过元音和词根的辅音之间的关系来表达的。二、词根通常只有三个辅音,极少例外。(注意,希伯来文是从右向左书写的。)

西元前70年(相当于中国的西汉后期),强大的古罗马人摧毁了犹太人的都城耶路撒冷,犹太人亡国了,他们被驱逐而逐渐流落到世界各地,希伯来语在欧洲衍生出了伊地语这一希伯来文的变种。在第二次世界大战后,以色列成功建立了自己的国家,其政府又把已经死亡了的希伯来文定为国家的官方语言,今天说希伯来语的人口超过了500万人,这样在消失了约 2000 年之后,希伯来语又成功地复活了,这是世界语言历史上的奇迹,可能是绝无仅有的一例。

对于研究人员而言,研究希伯来文的意义有多种,最主要是研究希伯来文承载的古代文明,以及当今以色列社会的方方面面。在我看来,以色列是当今世界上科技高度发达的国家,也是当今世界上最具有创造力的国家(如果您不相信的话,请参阅《创业的国度》一书(Start-Up Nation --- The Story of Israel's Economic Miracle),读了此书之后,您可能会同意我的看法的)。如果了解一些希伯来文的知识,对于开展和以色列的科学家、工程师同行的合作是大有裨益的。

从语言研究的角度看,研究希伯来语有助于学习和研究阿拉伯语,尽管在当今世界的政治生活中,中东地区以色列人和阿拉伯人冲突不断,但在语言学中这两种语言却是近亲,同属闪含语族。

另外有趣的是,东部非洲地区的斯瓦西里语(Kiswahili)是非洲最大的语种,这一语言属班图语系东班图语族,它流行于坦桑尼亚、肯尼亚、乌干达、马拉维、布隆迪、刚果民主共和国、赞比亚、津巴布韦、莫桑比克、索马里等国,操这一语言的人口多达五千五百万,自西元七世纪阿拉伯人和波斯人迁入这一地区之后,它受到阿拉伯语的很大影响,现有词汇中有大量词汇来自阿拉伯语,连“斯瓦西里”(Swahili)这个名词也来自阿拉伯语,原意是“濒海地区(的人)”,意指东非沿海一带。据一些人类学家考证,这一地区的坦桑尼亚(Tanzania)和肯尼亚(Kenya)是人类的发源地之一。尼罗河水系涵盖这一地区,似乎有理由猜测古犹太人在其部落首领摩西的带领下走出埃及之前,也可能在这一地区散居过,那么研究斯瓦西里语言是否对了解这段史前史(特别是希伯莱语的形成)具有某种特殊的意义呢?


梵文

这是古印度的语言,在印欧语言体系中占有重要的地位。

似乎可以不严谨地认定,梵文是中国历史上第一种被传入的外语。我可以肯定,它是最早对中国文明产生大的影响的外语,梵语是随着佛教的传入而被中国人知晓的语言,佛教对中国文化发展的影响是巨大的,现有历史学和考古学的研究结果表明,早在汉朝时佛教就传入了中国了。唐朝则是佛教在中国推广和发展的全盛时期,义净和尚于西元 685 年从西域带回了大量的佛经(400部,他主持翻译了其中的 56 部,230 卷),这些佛经就是用梵语写成的,《西游记》中唐僧取经的故事就是以这段真实历史为源泉创作的。

研究梵语的难度很大,因为其语法系统实在非常复杂。梵文属于屈折(flexion)语系中的典型语言, 而且被当作当今西方语言学研究的圭臬。印欧语言体现中各种屈折语法概念都可以在梵语中找到完整的原型和表达,名词的性(阳性、中性、阴性等三性)、数(单数、双数、复数等三数)、格(体格、业格、具格、为格、从格、属格、依格、呼格共八种格),动词的屈折变化则更为复杂,把梵语视为世界上形态最丰富的语言是不为过的,古印度语言学家的帕尼尼(Panini)的语言学著作《语言结构规则》已对其语法系统作了完整的分析。研究计算机编程语言时,人们发现,定义计算机语言采用的 BNF 方法,在帕尼尼的著作中就已经出现了。还有人提出,不懂梵语研究语言学,就如同不懂数学去研究天文学一样。

梵语是许多宝贵文化遗产的载体,包括史诗、宗教文本,哲学、医学、数学、天文著作等,所有这些文献无一不是具有重大研究价值的。

研究梵文还有一个有趣的地方,它和我国的藏文有密切关系。语言学家的研究表明,古藏语和古汉语是兄弟关系(一般而言,语言的出现要比文字的出现早很多),但是当汉字被创造出来之后,汉语就发生了巨大的变化。而直到西元七世纪,藏语一直没有文字,只有语言,而藏文的创始人桑布札(Thu Mi Sambhotta, A.D. 617-700)在创立藏文时,就模仿了梵文,当今的藏文字母采用的“有头字”和梵文的天城体(Devanagari)字母是极为相似的。 自七世纪之后,共有近 5000 部佛教经典、律、论从梵文翻译成了藏文,一些梵文经典原始文本已经散佚失传,需要从藏语(或汉语)的翻译件中还原回去,这是中印文化交流历史中极为有趣的事情。

据我所知,梵语在当今印度仍在使用,只是使用它的人口并不多。中国和印度是邻居。梵语的研究,无论对于研读中印两国的历史文化交流,还是推动和促进当今两国社会交往和各方面的合作,都有相当特殊的意义和作用。


古希腊语

古希腊是欧洲文明的摇篮,最早的《新约圣经》是用古希腊文编写的。

古希腊文兴盛的时代是西元前9世纪到西元前3世纪,和我国周朝的春秋、战国时期大致相当。希腊文明是开放的,它学习了腓尼基人的文化,也从古印度学习了其精髓(欧几里德的几何学体系就是借鉴了古印度梵学的《总章规则》),这些学习和吸收也体现在了古希腊语言中了,古希腊文的字母表就模仿了腓尼基文的字母,并加上了新的创造。与梵语一样,古希腊文也属于屈折语系,它是高度屈折的。研究古希腊文的难度很大,一个特殊的困难是,古希腊文从来就没有一个标准的语言系统,它有三个群组,每个群组中又有几种方言。

学界公认,古希腊文明首先以存在众多的哲学流派为显著特征,英国哲学家、数学家、逻辑学家罗素(B. Russell)著有《西方哲学史》(A History of Western Philosophy),共三大卷,其中第一卷“古代哲学”三篇的内容,几乎全部是关于古希腊哲学的,从米利都学派、到毕达哥拉斯、赫拉克利特、巴门尼德、恩培多克勒、阿那克萨哥拉、留基波、德莫克里特、普罗泰戈拉、苏格拉底、柏拉图、亚里斯多德等等,无一不是著名的哲学流派和哲学家。(国内有人质疑古希腊哲学的真实性,历史上真实的古希腊或许可能并没有这么多的哲学家,但是无论如何,这些哲学思想在西方已经出现了,即使有张冠李戴的问题,对于中国而言都是值得学习和借鉴的。)

因为有大量的哲学流派和哲学家的理性思维,因此,古希腊的数学高度发达也就很自然的。古希腊的数学家很多,上面提到的哲学家中,毕达哥拉斯就是数学家,他创立的流派对数学贡献巨大,我国的勾股定理,在西方数学界称为“毕达哥拉斯定理”,这个学派为这个定理给出了完整证明。这个学派对数学和音乐的关系研究很深。数学史上的第一个悖论就是这个学派的人发现和解决的,导致了数系的第一次扩张。 柏拉图是科学数学化的提出者,这是西方当代科学的主要特征,也是最根本的特征(恩格斯关于数学对科研重要性的论述只不过是重新表述了柏拉图的观点而已)。欧几里德的《几何原本》是人类历史上第一次把几何学内容系统化的成功尝试、其几何学采用的公理化系统对整个数学体现有深远的影响。《几何原本》公理化体系中的第五公设在数学史上导致了后来非欧几何学(罗巴切夫斯基几何和黎曼几何)的诞生,书中提出的倍立方体、三等分角、化圆为方等三大尺规作图问题则是引出了群论起源(法国数学家伽罗瓦的群论)。欧几里德在这本著作中还给出了素数无穷性的证明,因此也可以把此书视为数论的起源。阿基米德作为力学家(浮力定理、杠杆原理等)是广为人知的,他在数学界的工作具有惊人的原创性,他擅长将计算技巧和逻辑分析结合起来,在数学分析领域,他是开拓者之一,希尔伯特创立的实数系公理体系中的“阿基米德公理”就是以他的工作和名字命名的,鲁宾逊(A. Robinson)利用模型论研究这一公理和实数系公理系统其他公理的逻辑兼容性时导致了非标准分析的诞生,并构造了超实数系,从而在数学史上再次成功地扩充了数系,这是后话。阿波罗尼奥斯(Apollonius)在研究圆锥曲线(圆、抛物线、双曲线等)方面取得了登峰造极的成就,百科全书式的学者亚里斯多德则是逻辑学的奠基者,我们知道,数学和逻辑是一切精确学科的两只眼睛。

除了在哲学和数学、逻辑领域等理性思维领域,古希腊在其他方面的成就也是巨大的。在文学方面,《荷马史诗》的两部长篇史诗《伊利亚特》和《奥德赛》各24卷再现了古希腊社会的图景。历史学方面,希罗多德著《历史》共九卷,是西方历史学的鼻祖,修昔底德著《伯罗奔尼撒战争史》八卷为编年体(chronicle)著作。古希腊的戏剧成就辉煌,剧作家众多,直接影响了欧洲后世的戏剧发展。古希腊组织了古代的奥林匹克运动会,这是现代奥林匹克运动的起源。

我不可能在这里全面描述古希腊文明成就的方方面面,但有一点是肯定的,古希腊文明是欧洲文明的摇篮,而研究古希腊语言则是研究古希腊文明的必备工具。有趣的是,古希腊文明一度以阿拉伯文为主要载体,因为阿拉伯人把大多数希腊文献翻译成了阿拉伯文,而中世纪的欧洲,几乎没有人知晓古希腊语。文艺复兴时期,欧洲人主要是通过阿拉伯文献了解古希腊文明的,他们先是把阿拉伯文献翻译成拉丁语,只是到了文艺复兴运动完成之后,欧洲人对希腊文的知识丰富了,才转向直接研究古希腊语。从这个过程可以看出,没有阿拉伯文献的独特作用,欧洲文艺复兴运动不会有那么顺利。


拉丁语

拉丁语源自意大利,它没有前面提到的四种古代语言那么古老,它是古罗马帝国(相当于我国西汉时期)和欧洲中世纪的通用语言。与梵语一样,拉丁语也具有屈折语的典型特征,名词有性、数、格的变化,代词、数词、形容词等要和名词保持性、数、格的一致,动词则有变位、时态、体、式等多种语法范畴,变化多端,特例很多,学习的难度很大。拉丁语在欧洲中世纪是教会的正式语言,教会则利用了拉丁语的难度成功地阻碍了教会之外的人掌握文化,从而达到了有效地控制了人的思想的目的。由于只有教会内部的人才能从事科学和文化的研究,因此早期的科学家的活动和宗教组织之间的关系是非常复杂和微妙的。

我因为想系统地研究数学分析的历史而兴起研究拉丁文的兴趣。在18世纪之前,欧洲科学界的通用语言是拉丁语,德国人莱布尼茨于1684年发表的第一篇关于微积分的论文也是采用拉丁文撰写的,英国人牛顿的《自然哲学的数学原理》(Philosophiae Naturalis Principia Mathematica)一书初版于 1687 年,它是关于微积分的另一部重要文献,也是采用拉丁文创作的。所以,我要研究这些数学文献,就必须先学习和掌握拉丁语才行。(另外,从中西比较可以清楚看出,微积分创立的时代,正是欧洲工业化革命兴起的时代,中国则进入了满清统治下所谓的“康乾盛世”,对西方的革命和进步一无所知,与世界的差距从此越来越大,至今在许多领域仍是如此。)

拉丁语是欧洲的古文,是东方人了解西洋文明的钥匙。研究拉丁文还有助于理解当代的欧洲语言。例如,据语言学家统计,当今最常用的20,000个英语单词中,有10,400是拉丁词汇,超过了一半。仅从这个比例,就完全可以看出拉丁语对现代英语的影响有多大。近代科学发展史许多重要的科学著作是采用拉丁文写的,例如,哥白尼的《天体运行论》(De revolutionibus orbium coelestium)、开普勒的《宇宙和谐论》(Mysterium cosmographicum, Harmonices mundi)、哈维的《动物心血运动论》(De mou cordis et sanguinis in animalibus)、林奈的《自然系统》(Systema naturae)、欧拉在俄罗斯发表的大量数学著作,等等。科学研究是有传统的,这也是当今科技界,大量的词汇采用拉丁词表达的原因。

在学习和研究西洋文明发展过程时,我们可以从大的时间尺度看出它和西洋语言兴衰的关系,这和现在大中型软件项目的开发过程有点类似,即古代西洋文明迄今似乎也有过三个大的版本:最初的文明源头由希伯来语言作为载体算是最初的阿尔法版本(虽然把中东的希伯来语视为西洋语言并不合理,但这么看对我们中国人而言并不大碍);而欧洲文明的摇篮则以古希腊语言为载体,算是贝塔版;古罗马帝国和欧洲中世纪的文明则以通行的拉丁语为载体,它则如同一个正式发布版。文艺复兴运动后,特别是工业化大革命以来发展起来的现代西洋文明,则逐步演变为以各种欧洲现代语言为载体,类似于软件发布之后的各种升级版。

欧洲现在正处在一体化进程中,那么拉丁文能否像希伯来文一样复活而重新成为未来统一的欧洲的通用语言呢? 这是一个很有想象力的问题。最终结果如何,我们不妨拭目以待。

关于国际辅助语 Interlingua-3

国际辅助语不是去代替某种自然语言,它是为讲不同语言的人群之间提供一种中间的媒介语言,让讲不同母语的人可以使用这种中间媒介语言来高效率地交流思想。利用统一的符号系统在人际间交流思想的创意来自德国数学家和哲学家莱布尼茨,后来意大利数学家 G. Peano 于 1903 年发明了 Interlingua,即“没有屈折语法的拉丁语”(Latino sine Flexione)。二次世界大战后在美国语言学家们又推出了 Interlingua-2,当然现在还有许多其他的国际辅助语方案。

我把皮亚诺的 Interlingua 方案称为 Interlingua-1,我认为皮亚诺已经做得非常出色了,但是人造语言的创造活动是没有止境的。我研究了莱布尼兹的思想和皮亚诺的方案,在学习古汉语、希伯来语、梵语、古希腊语、拉丁语等古代语言的特点之后,产生了设计 Interlingua-3 的思想。 把我研究的几种古代语言的突出特点提炼出来,并按照新的思路去结合,创造一种新的国际辅助语有可能会出现一种很有趣的结果,即 Interlingua-3 在中西方文化交流中发挥重要作用,也便于计算机的信息处理。而这正是我发明它的初衷。

Interlingua-3 作为国际辅助语的新方案,其基本特征有:一、它是基于词素的语言(morpheme-based language)。这和汉语是一致的,单词的词形是没有任何变化的。现代汉语的文字沿用文言文,语法则以口语为基础,成熟于1919年“五四运动”之后。现代汉语保留了古代汉语的词汇,如虎添翼地引入了非常简单的语法系统,使现代汉语在保留了精炼特点的同时,成为了名副其实的词素语言,具有超强的表达能力。这一特点在国际语三号中得到了反映。 二、它的语法规则是正则的(orthogonal),它采用了源自梵语的语法系统,并利用词素来表达,语法系统中没有任何特例,容易学习和使用。梵语的语法体系是非常完备的,因此可以利用词素语言中的词素把这一语法体系完整地表达出来。三、所有的语法规则和变化都是通过词素表达的。利用结构性词素表达语法规则可以是语言大大简化,容易学习,同时不失表现力。结构性词素的构词法受到了希伯来语的启发,在语法体系规则和结构词素构造之间建立联系,使语言呈现更好的规律性。四、大量采用了希腊语和拉丁语的词汇,特别是拉丁语的丰富词汇。Interlingua-3 选择拉丁语词汇是很意义的,因为在西元 800-1700 年的九百年间,拉丁语是欧洲的统一语言,它对几乎所有现代的欧洲语言都有重大的影响(古希腊有大量的文献通过转译为拉丁语得以传承至今;意大利语、西班牙语、葡萄牙语、法语、罗马尼亚语等都是拉丁语的直系后代; 上面已经提到英语中最常用的 20,000 个词汇则有一半来自拉丁语!),因此 Interlingua-3 的词汇很容易被当代欧美人理解和采用。利用拉丁词汇,以词素表达语法规则的观点创造国际语三号,会使得它容易学习、容易使用。 更重要的是,拉丁字母(无论是 ASCII 编码,还是 UTF-8 编码)可以很容易被计算机处理,这是它的特点。

推广国际语三号,首先需要有一本权威性的语法手册,加上一本词典,以及一批读物。我还没有完成这些创作的任务,今后需要继续努力。

计算机编程语言的研究

作为一名黑客,我可以熟练使用 Lisp、C 和汇编语言编写各类计算机程序。另外,我还学习过一些其他编程语言。以下是关于多种编程语言的回顾:


Lisp 语言由“人工智能”概念的提出者 John McCarthy(1927-2011)教授发明,他的学生 Steve Russell 在阅读了 McCarthy 教授的论文后做出了这一语言的第一个实现。Lisp 语言是研究任何计算机编程语言的起点,不会 Lisp 去研究编程语言,就如同不懂数学去研究天文学、不懂梵语去研究自然语言一样鲁莽。Lisp 是动态类型的语言,即它的类型检查是在运行时系统中进行的。

Lisp 的历史悠久,这一语言家族衍生的分支和版本很多,我对 Lisp 的一个变种 Scheme 的研究兴趣很大,从编程语言演化的角度看,这种语言有 Lisp 和 Algol 两者的遗传基因。Scheme 支持多种编程范式,包括过程编程、命令式编程、面向对象编程、函数式编程等。我日常软件开发使用的 Scheme 实现为 Racket,它有强大的面向对象编程的子系统,是我在软件开发项目中的首选编程语言。

GNU Emacs 编辑器中内嵌了 Emacs Lisp(简称 elisp),这个变种源自 MacLisp。为了编辑工作的需要, elisp 中实现了许多编辑类型,例如 Emacs 的 buffer 就是一种原生的数据类型,这种编辑类型的对象和编程类型的对象地位是一样的,这种设计为 GNU Emacs 的扩展提供了无穷的可能性,实际上 GNU Emacs 可以在许多方面使程序员不再需要底层操作系统的服务即可完成工作。从编程角度看, elisp 的最大特点是变量支持动态辖域,非常灵活。函数在 elisp 中是第一等对象,早期的 elisp 不支持闭包。不过,在广大 Emacs 用户和 elisp 程序员的长期呼吁下,从 GNU Emacs 24.1 开始, elisp 也开始支持词法辖域了,现在 elisp 也支持闭包(由此可见 Richard Stallman 的技术观点是多么固执)。 有了内嵌的 elisp 编程语言之后,扩展 emacs 就显得非常自然了。 不过,只有理解了 Lisp 语言的基本思想和掌握了 elisp 编程方法的程序员才能获得这种自由。 对 emacs 的定制,很大程度上就是要编写 elisp 函数和宏,并且把一种新的 major mode 开发出来。在 major mode 中含有键映射(keymaps)和句法表(syntax table),我在编写 grusadgrego 程序的客户端时,先使用了 emacs 程序,我开发了基于 elisp 的一种 webdav (基于 HTTP 的一种扩展)的实现,后来又使用 Racket 改写了程序。

历史上其他的 Lisp 变种,基本上都合并或者归入了现在的工业标准 Common Lisp。这个标准非常庞大,而且有 CLOS 子系统支持面向对象的编程,支持它的实现有 Franz Common Lisp (Allegro)(商业实现版,且和 Web 3.0 概念相关)、SBCL(性能优异,而且许可证较为宽松)、LispWorks(商业实现版本),完全自由的实现版本有 CLISPCMU LispGNU Common Lisp 等。

以上提到的 Scheme、elisp、Common Lisp 等变种之间差异相当大,但是关于符号计算的基本编程思想是完全一致的。Lisp 语言是设计其他语言的工具,已经有许多语言最初是用 Lisp 设计的,后来才转移到用其他语言实现。“紫皮书”(《计算机程序的结构与解释》)第四章第 4.4 节中介绍了如果利用 Scheme 支持逻辑编程,在理解了这一节内容的基础上,你就可以设计 Prolog 语言了, Prolog 广泛地运用于专家系统的设计和开发中。 著名的 Lisp 黑客 Paul Graham 曾经尝试利用 MzScheme (Racket 语言老版本所用的名字)设计了他的语言 Arc。你还可以用 Lisp 来设计 Lisp 自身,这可够神奇的了!

Clojure 是由 Rich Hickley 开发的 Lisp 变种,基本特点和 Common Lisp 一致,但它是综合利用 Java 技术和 Lisp 技术的成功尝试。它的历史较短,首次发布的时间是在 2007 年, 但是在 Lisp 社团里却赢得了众多 Lisp 程序员的心, 许多程序员对它的未来发展寄予了厚望。 在这门语言被设计出来之前, Java 语言和 Java 平台已经在市场获得了巨大的成功,特别是 Java 的库非常庞大,各种功能的库应有尽有, Java 程序员群体的数量非常巨大,而且显全球性的广泛分布。 Clojure 的设计师显然十分看重这些因素, Clojure 既利用了 Java 语言也利用了 Java 平台。 Clojure 是编译型的语言, Clojure 编写的 Lisp 代码先被编译为 Java 的字节码格式,然后在 Java 虚拟机(例如,Kaffe)上解释执行。规模庞大的 Java 库资源可以在编写 Clojure 程序时当作“原生代码”(native code)被调用, 这非常像从 Lisp 程序中调用 C 代码块,对于提高程序员的生产力和软件的效率很有帮助。这实际上是我提倡的混合编程技术的又一个成功案例。目前 Clojure 社团和 Java 社团两者之间产生了良性互动,显然,这种互生势态是有利于推广 Lisp 技术的。

在现代语言的设计中,类似的做法还发生在 Scala 语言上,和 Pascal 语言一样,这门语言也源自瑞士,发明人 Martin Odersky 试图将 OOP(面向对象的编程)和 FP(函数式编程)这两种编程范型结合起来,应该说他获得了成功。Scala 运行在 Java 虚拟机上,像 Clojure 一样, Scala 也可以使用 Java 的类库,而且和 Java 的语法很相似(这一点和 Clojure 不同),因此有助于黑客在开发软件时利用其他程序员的劳动成果,以提高开发效率。


除了 Lisp,我还关注 SML(Standard ML), SML 是强类型语言的代表之一,它的模块系统已被证明是成功的,而且类型可以在编译过程中自动推导,特色很鲜明。有一些学者倡导开发“经过验证的系统软件”(certified system software)。尽管 ML 语言提供了数组和引用可以保持状态,但当程序不采用这些特性时,可以用 SML 进行函数式编程(Functional Programming)。SML 还提供了递归定义数据类型的能力,即通过 datatype,利用类型构造符(type constructor)和数据构造符(data constructor)来构造复杂数据类型,故在开发编译器的实践中,SML 得到了很广泛的运用。在设计“明”操作系统时,我想利用 SML 编写元内核是可能的。

把来自 Lisp 和 SML 两者的优点结合起来,这里可以研究的主题是非常多的。Racket 系统的设计者已经引入了“模块”和“合同”等概念,非常适合高效率地开发大型的应用程序,这也是为什么我喜欢利用 Racket 编写程序的原因之一。


Haskell 语言是纯函数式编程语言,一些 Lisp 程序员认为它是披着 Haskell 句法“羊皮”的“狼”(Lisp)!在用 Haskell 设计程序时,程序员不能对一个变量赋值,因此,程序员可以把精力集中在软件的功能实现上,而不是计算机的状态上。我认为,当计算机硬件得到高度发展之后,函数式编程语言将成为软件工业界编程的主流技术。Haskell 对于设计复杂的软件系统具有很高的生产力,现在有一种趋势,即在 Unix 系统上,利用 C 或者其他语言获得外部的数据(对系统的输入),然后将数据提交给 Unix 系统上的 Haskell 程序处理,最后将计算结果交还给其他程序完成系统输出。在这种编程技术中,Haskell 可以使得程序员的生产力大大提升。注意,国外一些大学的计算机系已经开始把 Haskell 作为第一门编程语言传授给学生。

Haskell 语言中的 monad (单子)是个极为有用的设计特性,可以利用它在纯函数式编程中模拟出对象变化的状态。理解了单子的概念之后,就可以用 Haskell 开发出优异功能的软件。


Ada 是一种非常成功的大型语言,由 Jean Ichbiah 领导的团队开发,其基本特性源自 Pascal,但加入了大量新的特点。最初的成功应用是在军事领域(由美国国防部直接推动),后来成功地扩展到了众多的民用领域。对于编写大型、嵌入式、实时、并发、高可靠、长寿命的软件,Ada 仍是首选的系统编程语言。Ada 语言至今仍然很活跃,该语言规范的版本已经出现了三个,即 Ada83、Ada95 和 Ada2012。对面向对象编程的技术支持已经在 Ada2012 中得到了很好的体现。自由软件基金会有 GNAT 编译器,支持 Ada 程序的开发。

尽管在处理大规模并行处理方面,Erlang 语言设计得非常出色,但是如果要满足上面提到的所有要求,那么 Ada 语言是无与伦比的。


Pascal 语言在上个世纪七十年代是主流的编程语言。并一度在计算机教育领域占有垄断地位,也曾是设计系统程序和大型应用软件的首选,可惜在 C 语言随 Unix 系统的崛起而流行之后, Pascal 的应用面大幅萎缩了,在操作系统和嵌入式系统领域, Pascal 已经完全被 C 语言取代。不过,Pascal 语言中出现了许多概念,对许多现代计算机语言设计有很大的影响。Pascal 语言中支持指针类型的变量,但是它和 C 语言的指针变量不同,你不能拿这种指针变量去直接操作计算机的内存, 因为 Pascal 语言是独立于计算机硬件而设计的,这意味着 Pascal 程序员在描述算法时得到的代码适用面较宽,在所有支持 Pascal 运行时系统的计算机上都可以派上用场。 作为教学语言,教学实践表明 Pascal 语言比 C 语言要好许多,使用 Pascal 编写程序有助于程序员从一开始就养成良好的编程习惯并形成良好的编程风格,现在软件工程的许多概念在 Pascal 设计时就有了原型思想或者萌芽,而且得到了成功的运用,这都是 Pascal 语言留下的宝贵财富。学好了 Pascal 语言后再去学习 Ada 语言时,会有似曾相识的感觉。

Pascal 语言由瑞士苏黎世联邦工学院(ETH)的 Niklaus Wirth 教授发明,关于 Pascal 语言,他写过三本著作:《Pascal - User Manual and Report》、《Systematic Programming》、《Algorithms + Data Structures = Programs》,都有中译本,而且第三本著作的影响很大。(对于 C 程序员而言,仔细研读这本《算法 + 数据结构 = 程序》一书是极为有益的。)其他作者写的关于 Pascal 编程的著作也很多,这里不一一列举。

我学习 Pascal 的兴趣来自研读 Donald Knuth 教授开发的 TeX 排版系统,这一系统的算法是采用他发明的 WEB 系统(一种基于 Pascal 语言的作文式编程工具)开发的。采用 WEB 描述的算法,既可以转化为 Pascal 程序,从而被编译成计算机上可执行的程序,也可以被转化为 TeX 文档,从而被编译为供人阅读的文档。

当今 Pascal 语言仍在使用中,而且有高质量的 Free Pascal 编译器可以使用。


C 语言是 Unix 系统的母语,它是 Dennis Ritchie (1941-2011) 配合 Unix 系统的开发而设计的编程语言。 Unix 系统上的所有语言几乎都和 C 有编程接口,由于 Unix 系统在 IT 工业界的巨大影响和突出地位,职业程序员学习和掌握 C 是必须的。如果在其他语言系统中需要操作系统上的功能,也应该使用 C 语言编程。除了扎根于 Unix 系统之外,C 语言在大量的嵌入式应用开发领域也获得了工业界的强力支持,因为在新的硬件体系上支持 C 的运行时系统比较简单,很容易对不同的硬件体系完成软件抽象。我擅长编写 C 程序,也擅长教授 C 语言,在长期的 C 语言教学实践中,开发和完善了著名的“鱼骨法”和“渔网法”,参阅我所著《Programming with C Pointers》一书的介绍,此书完整而详细地介绍了鱼骨法和渔网法。

可以肯定, C 语言今后在相当长的时期内在业界仍然会稳居系统程序设计的首选语言的地位,特别是形形色色的嵌入式系统编程领域(例如,手机及其应用,工业自动化控制系统,汽车的电子控制系统,飞机和宇航飞行器上的航电系统,等等),采用 C 语言是非常适合的, 而且其霸主地位是不可撼动的。

使用 C 语言编程是非常有趣味的,可惜在我看来,能真正能理解 C 语言奥妙的程序员实在太少了。我可以在这里相当肯定地讲,人才市场上的所谓“精通 C 的程序员”几乎全部都是水货。高水平的 C 程序员罕见的原因不难理解,我认为只有在充分理解了编译器的工作原理(以及相关的硬件细节,例如 Intel x86 处理器的工作原理)之后,程序员才能真正把 C 程序写好,并且真正发挥 C 语言的威力。遗憾的是,目前绝大多数程序员并没有学通编译原理,也没有动手设计过编译器,动手写汇编程序的机会非常少见,因此这些人写不好 C 程序、写不出高效率的 C 程序是毫不奇怪的。


C++ 语言主要是由丹麦人 Bjarne Stroustrup 博士发明的,来自俄罗斯的黑客 Alex Stepanov 贡献了 C++ 语言的标准模板库的设计,这已经是 C++ 语言标准的一个组成部分了。和 C 语言以及 Unix 系统一样,C++ 也是一项来自贝尔实验室的发明,它是对 C 作出了面向对象的支持后的成功扩展。C++ 最初出现于上个实际八十年代,最初的 C++ 语言规模不大,很好理解,在 C++ 的演进的过程中,很多功能被添加进入了这门语言。采用 C++ 开发的软件五花八门,从操作系统、硬件设备驱动程序,到电信领域的应用软件,都有 C++ 活跃的身影。 我以为 C++ 在市场上流行的真正原因在于 MS-Windows API 是采用它编写的,这样在 Windows 上开发程序的人就被迫使用 C++ 编写程序,这是平台决定一种语言流行度的一个案例。

C++ 语言至今仍备受争议,一方面,源自 Simula 语言的基因使它可以很好地支持面向对象的编程技术,另一方面,这个语言现在又似乎显得过于复杂,导致学习的成本太高。许多程序员坚持认为,C++ 所能完成的工作,C 程序都可以完成,因此这些人拒绝使用 C++。我认为 C++ 的强势领域在于开发大型的系统程序方面,以及涉及图形用户界面编程、设计应用程序框架等领域。在小型的应用程序开发中, C++ 的特点和强势似乎很难得到充分体现。除了在 MS-Windows 上的成功之外,Unix 上的图形用户界面 KDE 采用了 Qt 库编写,这是一个 C++ 的图形界面工具开发包,当然,除了开发图形用户界面之外,它还支持许多其他的功能。

我似乎可以完全肯定,经过了 C++ 编程训练的人,可以较快接受软件工程的许多概念,从而在学习 UML 建模、设计模式(design patterns)、反模式(antipatterns)、软件重构(refactoring)等技术时收益很大,这是学习 C++ 语言的一个较好的附带效果。特别明显地,程序员在掌握了 C++ 语言之后,再去学习 Java 程序开发是不会有什么大问题的。C++ 语言仍在发展中,最新的 C++ 语言规范发布于 2011 年,不过全面支持这个新规范的 C++ 编译器在我写作本网页时还不存在。

学习 C++ 之前,最好先掌握好 C,这是我和许多黑客的共同观点。我在“广义黑客道创业者丛书”中列入了《怎样设计程序(C/C++版)》,供创业者系统性地研读和掌握这一语言。


Java 语言的句法结构也是属于 C 语言系列的,它是强类型的编程语言,完全支持 OOP 技术,Lisp 社团的老牌黑客 James Gosling 是它的主要发明人。 它的设计抛弃了 C++ 的某些过于复杂的特性,但是也带来了一些新的问题,最明显的问题就是库过于庞大,而且仍在急剧膨胀,这门语言似乎过分鼓励程序员去采用库去设计程序,而不是像 Lisp 语言那样鼓励程序员从底层向上实现一个软件系统。因此,对于初学者而言,其学习成本仍然不菲。Java 的一个原始设计目标是追求跨平台计算,但是这个目标没有达到,而且今后似乎也没有机会去实现了。

Java 如同一个在体育全能比赛中的参赛选手,它的每一个单项成绩都不是最突出的,拿不到第一名,然而它的总体成绩并不太令人失望。换句话说,Java 语言是以它的设计均衡性见长的。

由于 Java 最初所追求的可移植性的希望已经完全破灭,因此对于用 Java 开发的桌面应用程序,我强烈地倾向于把 Java 程序编译为机器码,而不是运行在 Java 虚拟机上的字节码,这样可以让程序员利用 Java 程序提高编程生产力,而且程序运行的性能更好。 Java 定义了 JNI 接口,让 Java 程序可以调用 C 编写的模块,这个接口可以让 Java 程序使用系统底层提供的功能。 GCC 编译器家族的一个分支,gcj,可以将 Java 源程序编译成字节码或者机器码,若得到了字节码之后,可以利用 Kaffe 运行 .class 文件,这是一个完全独立与 Oracle JDK/JRE 的 Java 虚拟机,按照 GPL 许可证发布。如果得到了机器码,那么就和用 C 编写的程序一样可以直接运行在 Unix 机器上了。总之,在 Unix 平台上避免使用 Oracle 的 Java JDK/JRE 而代之以自由软件作为开发环境是完全可行的。

目前, Java 技术有了另一个重要的应用方向,那就是以 Android OS 为基础的智能手机市场。我可以用一句话来概括 Android OS 技术,那就是在 ARM 处理器上利用了 Linux 内核,并且在 Linux 内核上利用 Java 技术开发各种手机应用。由于智能手机市场日益庞大,市场需求日益旺盛,因此 Java 技术在这个新的市场上将获得很大的发展空间。

我于 1996年开始接触 Java,当时翻译了 David Flanagan 编著的《Java in a Nutshell》第一版,这可能是中国大陆的第一本关于 Java 语言的译作。


Perl 语言是由语言学家 Larry Wall 发明的,最初发明的用途是做 Unix 系统上的系统管理工作,Perl 曾一度在 Web 编程领域红火过一阵子,后来却迅速地衰落了,不过我认为系统管理仍然是这一语言最擅长做的工作。Perl 语言内置了标量、数组、哈希、网络套接字等基本数据类型,语言内置的控制结构也比较简单,还提供了大量的函数用于操作文件、目录、进程等 Unix 系统上的对象,尤其值得一提的是它对正则表达式的处理功能强大。无论如何,对于 Unix 系统管理员而言, Perl 似乎永远是一个相当不错的工具。我曾经翻译过《Learning Perl》一书的第二版,此书是学习 Perl 语言较好的入门著作。

除了在系统管理方面的应用,Perl 语言还被成功地应用在生物信息学(bioinformatics)的研究中,这是和基因的表达有关的。生物学的大量研究表明,生物细胞的遗传(复制)和变异(演化)信息是体现在细胞核的 DNA 分子结构中的,在 DNA 的双螺旋结构中有四种成分,分别是 G(Guanine,鸟嘌呤)、C(Cytosine,胞嘧啶)、A(Adenine,腺嘌呤)、T(Thymine,胸腺嘧啶)。在这四种基本成分的排列中承载了生物基因信息。由于 DNA 的双螺旋长度非常长,因此由 GCAT 这四个字符排列组合构成的字符串就非常长,如何解读这个非常长的基因链条中表达的信息(包括字符串的子串、子串的分组、以及子串分组的语义,即模式)就成了生物工程关注的焦点。由于基因信息被符号化之后,和计算机中的字符串等价,因此,对于基因信息的研究,就转化为对字符串的研究了,计算机和编程语言可以在这个研究中发挥很大作用。

根据乔姆斯基(Noam Chomsky)的形式语言理论的分类,正则表达式语言具有第三型语言文法,理论上只要能支持正则表达式计算的编程语言都可以用于生物信息学的研究。但由于 Perl 的正则表达式计算能力特别发达,因此,一旦基因测序的工作完成之后,Perl 语言即可被广泛地用于研究基因信息的分析、模式聚类与模式识别。另外,现代生物学研究中的基因信息量是巨大的,因此,高性能计算机成了这一研究的基本工具,这也是计算机科学技术价值的一种体现。


Ruby 语言是最近几年才开始走红的编程语言,但是实际上 Ruby 的开发时间已经相当长,它由日本人 Yukihiro Matsumoto (此人亦自称“matz”,在英文中似乎和 “maze” 迷宫一词谐音?)设计, 他启动这一语言设计的时间和 Java 差不多早(Ruby 的设计是 1993 年开始的),1995 年推出之初只在日本国内流传,直到 RoR (Ruby on Rail)这种支持 MVC 模型的网络应用开发框架获得成功之后,Ruby 才得到全球互联网社团的广泛接受。它的设计在许多方面它和 Lisp 语言相似,Ruby 语言的主要用途就是在系统上编写面向对象的脚本程序,特别是较为大型的脚本程序,它在设计“面向特定领域的语言”(DSL,Domain Specific Language)方面显示了一定的强势,例如在 RoR 框架中的表现。这门语言推出之后,开始侵入了 Python 语言的一些领地,它也能完成 Perl 能干的许多工作。我在 2011 年底自由软件基金会的年度人物选举时再度担任评委,我投票给了 Yukihiro Matsumoto,是对他十年磨一剑努力的肯定。最终因其他评委也持同样的看法,故 Yukihiro Matsumoto 获得了自由软件基金会颁发的奖状。

我是 Lisp 程序员,不大可能采用 Ruby 语言设计程序,因为 Ruby 能干的活,我都可以使用 Lisp 程序轻松完成,而且可以更加优美地完成,反过来,可以使用 Lisp 设计的程序,利用 Ruby 可能实现起来很困难。但了解这一语言的特点有助于理解其他同行用 Ruby 完成的工作,考虑到 Ruby 语言已经具有相当大的程序员群体,因此学习使用 Ruby 语言可能会带来一些收获的。


Python 由荷兰黑客 Guido van Rossum 于 1989 年动手设计,发明这门语言的初衷是采用面向对象的技术编写 Unix 系统上的脚本程序,这门编程语言在某些方面也很像 Lisp。 在这门语言的发展早期有个成功的开发案例,即支持邮件列表的 GNU Mailman,后来又在 “Web 内容管理框架”(Web Content Management Framework) Zope 上得到了成功的运用。 Python 语言的功能和性能都很完善,内置的库和第三方工具也很丰富,而且因为推出的时间较早,全球 Python 程序员群体数量已经非常巨大。就句法设计而言,这一语言最大的特点就是强迫程序员使用 tab 键以显示程序代码的行缩进,以提高程序的可读性。

如今 Python 的应用面很广泛,许多应用已经覆盖了 Perl 的传统领域。在互联网编程领域,对于许多编程问题这一语言均有极好的解决方案。


PostScript 语言是美国的 Adobe 公司的两位创始人 Charles Geschke 和 John Warnock 发明的,这是一种页面描述语言,广泛地应用于出版领域,也是电子文件格式 PDF 技术开发的基础,特别是其颜色模式是基于 PostScript 的,注意 PDF 技术本身不支持编程。 Adobe 公司是在全球软件市场上少数几个利用自有的先进技术优势击败微软公司进攻的成功者。


Forth 语言。 上面提到的 PostScript 语言和 Forth 语言非常相似,Forth 是为了控制天文望远镜而开发的。它是基于堆栈(Stacks)的语言,和 PostScript 页面描述语言不同的是, Forth 系统一般在硬件电路中实现两条堆栈,一条堆栈存放返回地址,另一条堆栈存放表达式,注意这两条堆栈都必须具有一定的深度。相比之下, PostScript 可以采用硬件实现两条堆栈,也可以使用软件实现多条堆栈。 而流行的 Intel x86 体系中只有一条硬件实现的堆栈。 采用硬件实现的支持两条堆栈的 CPU 在相同电路集成度的条件下,利用 Forth 开发的语言比 C 语言形式上更加紧凑,而且代码的运行速度可能更快。这样就不难理解,为什么许多设计师在开发 BIOS 系统时,仍采用 Forth 系统来编写代码。在实时和嵌入式系统领域,Forth 语言垄断了一些微型应用的开发。


TeX 语言是美国斯坦福大学计算机系的 Prof. Donald Knuth (中文名字为“高德纳教授”)发明的排版语言。他在 TeX 系统中提供了约 300 个采用 Pascal 编写的原子函数(Control sequences),另外使用 TeX 的宏开发了约 600 个命令,这 900 个函数和宏构成了 Plain TeX 系统以及 TeX 系统的排版语言。TeX 系统是可以扩展的,TeX 中的宏有三种写法,包括变量的绑定、带参数的扩展,以及混合扩展,这些宏的写法各有各的用途,基于它们的宏扩展系统有许多种,著名的有 LaTeX 和 ConTeXt 等。使用 TeX 系统编译的文档输出是高质量的,足以满足印刷工业级的要求。

TeX 最初设计时针对的问题是数学论文和书籍的排版,而数学是科学界的共同语言,因此 TeX 是国际学术界发表论文的事实标准文档格式,这已经成为一项学术传统,国际上稍微上点档次的学术出版社和杂志社均要求作者以 .tex 文件格式提供稿件(各位读者可以自行按照这个标准来衡量一下国内有多少家学术机构和学术出版社符合国际通行的学术规范)。

我是 TUG 的会员,而且我于 2005 年 8 月在武汉东湖宾馆成功地承办了“TUG 2005 国际排版技术大会”,这是 TUG 大会第一次在中国召开,会议的详情参阅由 TUG 出版发行的 TUGBoat (The Communications of the TeX User Group), Volume 26, Number 2, 2005, TUG 2005 Conference Proceedings。


Processing 是我最近学习的一门非常有趣的编程语言,这种语言的 1.0 版在 2008 年才正式发布,它非常适合画草图和和原型设计。我在接触和学习 Processing 语言之前,我掌握了 Tony Buzan 创立“思维导图”(mindmap)的大脑思维训练方法,当时我想如果有一种软件可以帮助人们在电脑上创作思维导图,那就太好了。当我接触到 Processing 语言之后,我发现我原来的这个设想完全可以实现了,而且在原来的基础上,可以做更多的创新。

从外表上看,Processing 语言是 Java 语言的一个分支,掌握了 Java 语言的程序员学习 Processing 语言时不会有任何问题。但是,你不要被这种表象迷惑了,实际上 Processing 处在许多研究领域的中枢位置上,包括计算机图形、艺术、建筑、统计等等,它可以干的事情是非常多的,以至于我现在非常喜欢在和其他朋友交流时使用它画草图,来促进思想的交流。喜欢使用 Arduino 做电子项目 DIY 的发烧友可以使用 Processing 来设计电子项目的原型,这两个工具的协同配合就像白天之后是黑夜一样自然。

学习 Processing 也可以像 logo 语言一样帮助中小学学生学习编程。Processing 中所有的关于编程的基本概念在高贵的 Lisp/Scheme 语言中都有,不过,Processing 却将那些伟大的思想平民化了。

我可以把 Fortran 和 Lisp 视为 50 后语言, 把 Algol 和 Pascal 视为 60 后语言的代表,而 C 是 70 后语言,C++ 是 80 后语言,Java 则是 90 后语言。作为一种 00 后的现代语言,Processing 出现了许多新的思想,例如将许多领域交叉、融合为新的整体,依靠社团的力量设计语言的新特性,等等,这都是现在 10 后语言设计时应该借鉴或考虑的。


JavaScript 语言是内嵌在所有现代 Web 浏览器中的语言,尽管多种浏览器之间的不兼容曾在一定程度上减缓了这一语言被市场接受的速度。在 JavaScript 的兴起中,我们再次看到了平台软件的流行程序对于语言流行的推动作用,这种效应已经出现了许多次,例如 C 语言随着 Unix 系统的流行而流行;C++ 随着 Microsoft Windows API 的兴起而被广泛使用; Java 语言的推广者则更加直接,他们干脆直接采用 Java 语言开发了 Java 平台,利用 Java 语言和 Java 平台双管齐下获得了流行度。而 JavaScript 是 Web 浏览器平台的推动下,强制所有的 Web 浏览器客户端的软件开发人员接受的语言。

在我看来, JavaScript 语言真是丑陋无比,它不支持变量的词法辖域,除此之外,还有许多鸡肋性的设计。但是这个语言却支持闭包(closures),这是 JavaScript 语言中的一大亮点,因此 JavaScript 在披着 C 语言句法外衣下,内藏了一些 Scheme 语言的特性,许多人把它视为函数式编程语言,似乎可以粗略地讲, JavaScript 是世界上第一种获得广泛部署和运用的函数式编程语言。凭借后来发明出来的 JSON 数据格式, JavaScript 在开发动态网页和应用,特别是在 Ajax 编程概念出现之后,在 Web 编程领域逐渐获得了统治地位,在即将普及的 HTML5 中,JavaScript 的部署和运用将得到进一步加强和发展。

现在 JavaScript 可以针对 Java 程序编写脚本程序了(尽管名称里含有 Java 的字眼,但在 JavaScript 推出的初期,它曾和 Java 毫无关系),似乎这门语言有助于提高 Java 程序员的生产力。另外值得注意的是,JavaScript 在服务器端的实现也已经存在并且可以运行,显然服务器端的 JavaScript 实现支持对文件系统和套接字的访问,这样对于已经在客户机端有开发经验的 JavaScript 程序员去开发服务器端的程序会有很大的吸引力,这些都是此语言发展的新动向。可以预料,如果 Google 的 Chrome web 浏览器将来可以统一浏览器的市场,那么 JavaScirpt 的流行度可能还会进一步上升。

根据有些程序员的体会,如果学习 JavaScript 之前,先学习 Io语言,则有助于提高学习和使用 JavaScript 的效率。我没有这样尝试过,因为我在了解 Io 之前,已经学会了 JavaScript,但我鼓励各位读者不妨试一试。Io 语言比较新,由 Steve Dekorte 于 2002 年发明,这门语言设计得非常小巧,小巧得连语言的关键字都省掉了,它对基于原型的开发模式提供了强力支持,很容易学习和使用,我可以想象,Io 将来在许多微型语言应用领域会获得巨大成功。


Apt 是数控机床上编程的语言,显然这是针对特定领域的编程语言。Apt 语言已经推出多年,有了 Apt 语言之后,机械设计师可以大大提高生产力。机床是机械加工中的必备工具,在这个行业中,围绕模具的设计、加工的生意至今仍是暴利性的一个环节,数控系统则被德国、日本、西班牙等国的企业占据了大部分市场份额。 我相信当计算机控制的 3D 打印技术(3-dimensional printing technology,即一种特殊的数控机床)大规模普及之后,这个行业将会出现一种局面,即把分散在世界各地的数控机床像个人电脑被联网成为 Internet 一样连接成为一个 3D 打印机(数控机床)的网络,为用户提供各种不同功能的制造加工服务,这个新网络形成之后,各种柔性制造的成本将大幅度下降(因为它完全避免了开模具的费用),这将出现加工业新的黄金时代。

目前典型的数控机床具有一台计算机,还有一套 PLC(可编程逻辑控制器)。两者都与机床执行硬件相连接,构成控制回路。我以为开发的重点将是在这种 CNC 系统的计算机之间形成互联、互通、互操作的工业标准,并和互联网相连接,使得数据的语义和加工的指令在各种 CNC 机床之间通用。机械设计师则不用再费神地关注零件的加工是在什么物理位置上的 CNC 机床完成的,他只需要提供 3D 打印的数据即可。如果有来自机械制造工业界的支持,那么 Apt 语言似乎可以在这一变革中找到自己的新位置。


Fortran 语言是世界上第一门高级编程语言,最初的用途就是在科学计算和数值计算中把数学公式翻译为计算机代码(语言的名称来自 Formula Translation),尽管其他语言的兴起大大地压缩了 Fortran 的应用面,但是在科学数值计算领域,它仍有旺盛的生命力,最新的语言规范版本是 Fortran 2008。 在不同时期制定的几个 Fortran 规范中,我认为 Fortran 77 是性能最好的版本,而且迄今采用 Fortran 77 开发的软件包数量仍然是最多的,因为它支持结构化编程。与后来推出的 Fortran 规范不同, Fortran77 和之前的运行时系统都是静态的,所谓“静态的运行时系统”,是指运行程序所需要的系统资源(主要是指内存资源)在程序编译时就决定了,因此,对于这个特点对于发挥计算机的计算能力的上限是有利的,任何一本全面介绍编译原理的著作上都会把 Fortran 列为静态运行时系统编程语言的代表。另外,支持并行计算的 Fortran 实现对于许多高性能计算任务是有极大吸引力的,计算技术发达国家的计算中心都有对并行计算 Fortran 的支持。

对于 C 程序员,学习 Fortran 时最需要关注的东西就是 Fortran 对于多维数组的存储是基于列的,而不是基于行的。当数组的维数较大,以及元素较多时,两种存储方式对于计算性能有很大的影响。(下面马上介绍的 MatLab 的解释器也和 Fortran 相似,采用了基于列的方法存储多维数组。)


MATLAB 是数学界流行的软件包,矩阵计算是这个程序员的最初应用,由于矩阵是表达众多数学思想的工具,所以这个软件包的应用面已经大为拓宽,超出了纯矩阵计算的范围。 它内嵌了一种编程语言,以解释器的方式运行,数组(或者说向量)是其基本数据类型。这个软件底层的代码是用 C 开发的,因此掌握了 C 的程序员可以利用这个特点对 Matlab 进行扩展,已经有许多的扩展包以这种方式开发出来了。

理解 MATLAB 语言是有助于提高数学建模和仿真的效率的,甚至学习微积分的课程时,也可以在这个软件包的帮助下进行,这是微积分课程的新的讲授方法,具有直观、方便的特点,是替代或者补充传统的微积分教学的极好教学手段,它充分体现了计算在数学研究中的重要地位。国外也有利用另一个软件包 Mathematica 来讲授微积分课程的尝试,尽管具体做法不同,但是两者的本质是一致的。

关于基于计算机的数学建模和仿真,请参阅下面我的一个创业项目的介绍。


以上列举了许多我学习和试过的编程语言,其实,对于一名黑客而言,只要真正掌握了 Lisp 和 C 语言,那么在此基础上学习任何其他语言都是容易的。具体有多容易呢? 依我的经验,学习一种新的语言大约花一周的时间上机练习即可掌握其词法和句法基本特点。当然,采用某种语言编写程序时,特别是开发严肃认真的具有工业力度的项目时,需要学习和掌握其他一些内容,例如这种语言的库,完成这些工作的时间长短则因语言的规模不同而不同,且因人而异,没有一定的定论。

创业和授业

我的创业项目

我有许多美妙的想法,因此也有大量的创业项目,这些项目都是可以通过编写计算机程序实现的。遗憾的是,我的时间资源是有限的,因此我只能完成大量想法中的极少数的几个。如果您愿意和我合作,请使用 grusadgrego 软件和我联系。以下是我的几个创业项目的介绍,从这几个项目的介绍中,您可以感受到我对什么类型的创业项目有兴趣。

心电图的自动诊断

心电图是目前诊断心脏病的三大技术手段之一。现在,一份标准的心电图应该至少含有五个方面的内容:心率、心律、电轴偏转、心肌肥大、心肌梗塞等诊断信息。尽管有了其他技术的推出,心电图(EKG 或者 ECG,electro-cardio-gram,这个词是用古希腊语的词根构造的)至今仍然是诊断心律不齐(dysrhythmias 或者 arrhythmias)、心肌梗塞等心脏病的“黄金标准”,它是成熟和可靠的诊断技术,它是一种无损检测技术,若操作得当,它对病人没有任何副作用。心电图的数据采集并不复杂,利用电极可以直接从人体测量到微弱的电流信号,通过记录电流变化的图谱,医生就可以对病人的病情作出诊断,这一方法在荷兰生理学家 Willem Einthoven 于 1903 年发明心电图技术时就基本成型了(Einthoven 后来因此获得了诺贝尔医学奖)。

传统的心电图技术是有许多改进空间的,这里我谈谈几点看法:

一、传统的心电图是用仪器记录在一种特定的坐标纸上的,它需要被有经验的医生解读后才能得到正确的诊断信息。解读心电图是一种专业技能,它需要经过专门训练和经验的积累才能获得,各医学院心血管专业的学生必须在大学里经过严格而系统训练才能正确解读心电图。这方面的内容很多,它已经发展成为一门专门的、博大精深的学问了。未经专业训练的普通人是读不懂心电图的。传统的心电图是体表心电图,12 导联的心电图需要大量的时间判读。近些年来,它又和其他新生的诊断手段(电生理心电图、起搏心电图)三图并举、乃至多图合参,从医学进步的方面看,这显然具有全新的意义,但从临床诊断的角度看,它又进一步加大了心电图的判读难度。人总是会犯错误的,如果医生因为某种原因解读病人的心电图时发生误判的话,那对诊断病人的病情就很不利了(不幸的是,这种情况在今天的许多医院里并不罕见)。

二、病人必须前往医院才能做心电图检查(只有医院里才有专业的心电图仪器设备,普通人没有),而许多人心脏发病时因为种种原因无法前往医院就医检查;当人去了医院做检查时,往往心脏的工作状态又很正常,而检查不出什么问题来。这个问题我本人就遇到过。目前不少医院已可提供 Holter 记录仪,这种心电动态记录装置解决了医院外病人心电图数据的记录问题,而且此类仪器的体积和重量与发明之初相比都显著降低了,但是病人仍必须将数据提交给医院等待一段时间后才能得到最终诊断结果。若人的病情严重或者不稳定,则必须住院,在费用不菲的心脏监护病房(CCU)、重症监护病房(ICU)里观察治疗。在提高诊断效率和降低诊断费用等方面,心电图技术仍需要大幅度地改善。

三、对于每一个人而言(即便是身体健康的人),其心电图最好能得到连续地记录和保存,当心电图可以被连续性地观察时,它们可以更加全面地反映心脏的病理发展过程和发展趋势,这种情况下,多份连续的心电图比单份心电图的价值大许多。这对心电图的诊断技术提出了新的要求,显然,需要有数据库管理系统的参与才能较好地满足这个要求,从而完善病人的病历档案。 目前大多数医院还不能提供这种服务,少数能提供这种服务的医院,其心电图的记录和诊断技术还不算成熟,在心电图数据的数码化、数据格式的通用性、互换性等方面均没有形成行业标准。

我认为这些问题是可以利用计算机技术来解决的。 现在人类已经进入数字时代,我们可以把采集的电流信号可以通过电路处理后离散化而成为数字信号,一旦有了数字信号之后,数据就可以通过计算机网络传输了,我的这个创业项目就是在服务器上对收到的心电图数据进行判读,完成数据的聚类分析和模式识别,并结合心电图的专家系统为病人提供诊断报告。 利用我开发的系统,病人可以从家中或者在医院等地把自己的心电图数据通过互联网传送到我的服务器上,或者直接利用手机上传心电图数据,并直接从我的服务器得到诊断报告,或者让我设立的监护中心实时地远程监控心脏病病人的病情变化。

让我的程序“读懂您的心”,是这个创业项目的一大亮点。

基于超级计算机服务器的提供网络化的数值计算服务

作为一名具有强烈理想主义情怀的程序员,我一贯非常喜好创建一些具有永恒价值的东西,这些东西的价值不会因为市场供需矛盾急缓、用户的喜好偏废、公司生存寿命长短等因素的变化而改变。例如,数学知识是不会过时的,古希腊人的几何知识在古代适用,今天仍同样适用,将来也不会过时,它形成之后就是人类智慧库的一部分。如果一位程序员创作的软件可以永远被人使用。那么他的工作是价值最大化的,因为他的工作是人类财富的一部分。我上面介绍的心电图数据分析软件就具有这个特质。

在数学软件领域,有四大商业软件非常有名,它们是上面提到的 MatLab,以及 Mathematica、Maple 和 LabView。这几个软件包各有特点,不能用一个完全替代另一个。它们都是上个世纪八十年代问世的,在我今天看来,尽管它们各有特点,但是它们最初都是桌面应用(Desktop Computer Applications),即在对网络化服务方面不是它们的先天设计基因。这和当时互联网还没有普及的历史条件限制有关。我因此感悟而生出了设计一款服务器数值计算软件的想法。许多人问我:“计算机最初的发明就是基于主机的数值计算,你的创业项目和已有的软件包相比究竟有什么本质不同?”

我的答案是:这个软件包的最大特点就是通过网络来发挥超级计算机的计算潜力。尽管个人计算机的性能已经非常高,但是在科学计算和数值计算领域,当计算量巨大时,个人计算机的计算能力仍是个大问题,例如计算一亿的阶乘在我的个人计算机上就是会遇到内存溢出的问题而无法求解,这还只是个整数的计算问题,如果涉及大量的浮点计算时,可以想见计算量会非常庞大,显然对超级计算机的市场需求是存在的,这也部分解释了为什么美国、俄罗斯、中国、日本等国在超级计算机研发项目上竞争日趋激烈。 然而如果超级计算机只是一个没有和互联网连接的“岛”,那它的市场价值就大打折扣了。我以为,在超级计算机上设计一种性能高超而且功能丰富的数学包,可以综合上面的商业软件包的主要特点,并能对互联网上的网络用户提供计算服务,那就是一个具有永恒价值的创新。

在我的这个创新项目中,个人计算机并非完全无所作为,它也可以完成大量的计算,例如用户的界面管理就可以完全依靠客户端的软件完成,这与大型机时代的“主机-哑终端”模式是不同的。然而,主要的计算量是发生在服务器端的超级计算机上的。

另外应该注意到,设计超级计算机有多种方案,以前超级计算机是极少数用户的特权,普通人是根本没有财力玩超级计算机的。但是现在情况发生了巨大变化,特别是集群计算机(Clustered Computers)可以把大量的质优价廉的个人计算机整合为一个超级计算机系统,现在普通人也可以构造出性能相当不错的超级计算机了。遗憾的是,这一领域的软件开发难度并没有因为硬件水平的大幅度提高而发生大的变化,创业的机会是存在的。

关于 Grusadgrego 软件包

在 Web 上发布信息的技术已经经历了几个发展阶段。最初的方法相当原始,作者写好文章之后,采用 FTP 协议把文章上传到服务器上,再让 Webmaster 把文件拷贝到 Web 服务器的目录下。这种网络出版需要几个步骤,对于作者发布信息是不方便的。第二阶段使用 HTML 的表单来上传数据,服务器上则编写了专门的程序来处理作者提交的数据,并将数据转化为 Web 服务器上的网页,这个方法的问题在于现代浏览器默认情况下对于表单只支持 get 和 post 方法,因此上传的数据必须采用专门的程序进行加工和整理,而且浏览器中的表单默认情况下不支持文本编辑所需要的许多功能,需要另外编写 JavaScript 程序来辅助完成文本编辑的功能。第三个阶段则是开发了专门的写作程序,在这个阶段出现的 WebDAV 协议是非常具有吸引力的方案,它大大方便了多位作者协作地创作和发布信息。

前面提到的 grusadgrego 软件包就是基于 WebDAV 协议的,这个软件包采用 Lisp 开发,我在设计时不是从头开始开发一切,我采用了著名的 GNU Emacs 编辑器作为客户端,这个软件包的编辑能力是无与伦比的,它内嵌了 Emacs Lisp 语言,程序员可以使用 elisp 定制 GNU Emacs,这样 webdav 协议中定义的各种方法都可以定制为 GNU Emacs 的用户命令。根据有关资料的统计结果,互联网上 99% 的可解析数据都是文本数据,因此作为文本编辑器的 GNU Emacs 程序作为 WebDAV 的前端程序是非常合适的,它可以搞定几乎一切 web 创作的任务。对于其他不可解析的网络数据,则可以使用其他软件加工处理,然后交给 GNU Emacs 对文件系统中的文件进行操作。

尽管 elisp 支持 TCP/IP 协议进行网络通信,但是我在设计 grusadgrego 时,采用了另外的思路,即在用户的计算机上另外启动一个进程,这个进程的程序采用 Racket 语言编写,GNU Emacs 只和这个进程(在本机上进行)通信,而这个 Racket 进程和服务器上的 Racket 进程之间的通信协议就是 WebDAV。在服务器端,我实现了一个全功能版本的 WebDAV 服务器,这个服务器是完全采用 Racket 语言编写的。由于在客户机和服务器之间都采用了 Lisp 语言,因此我直接使用了 Lisp 的符号表达式(Symbolic expressions)在两个 Racket 编写的精灵(Daemon)进程之间传输数据和程序。

当 WebDAV 协议得到支持之后,在服务器端就可以挂载多种服务了,例如 email 的服务就可以挂载在 WebDAV 服务器上,用户的邮件可以从 GNU Emacs 发出,提交给 WebDAV 服务器发送,反之, sendmail 等 MTA 接受的 email 也可以提交给 WebDAV 服务器进行解析,提交给 GNU Emacs。还可以将即时短信(Instant Messaging)服务挂载在这个平台上。当我在服务器上按照了 TeX 系统之后,用户在 GNU Emacs 内编写好文件之后,可以让服务器将上传的文件利用 TeX 系统编译为高质量的 pdf 文件输出。其他的功能还有开发许多种,实际上服务的种类只受限于开发人员的想象力,这些服务均可以采用 Lisp 来开发,我可以将 Lisp 作为一种“电子胶水”来用,把服务器上所有相关的服务全部整合起来。

关于 grusadgrego 软件包的内在架构和实现模块的介绍,参阅我所著《怎样设计程序》(Racket版),这是“广义黑客道创业者丛书”中的一部专著。

指导创新项目

我策划的风险创新项目涉及信息技术清洁可再生能源无人机有人驾驶的飞机等领域,其中我指导的 IT 项目的特征可以界定为:针对困扰着许多人的、有相当难度的问题,开发和提供基于互联网服务器的解决方案。这类 IT 创新项目具有统一的创业模式,包括以下步骤:

一、确定待解决的具体现实问题(困扰许多人、具有相当的难度,至少起初貌似如此);
二、为解决现实问题建立数学模型(就也是“数学建模”);
三、根据已经建立的数学模型而设计相应的计算模型(消除无穷大量,并且满足各种现实的约束条件);
四、根据计算模型,编写计算代码,形成在计算机上可以正常工作的可执行程序;
五、将可执行程序转化为基于互联网服务器的网络服务,为公众或者特定的用户群体使用。

关于广义黑客道的创业法的详情,请参阅拙著《创业九章》

教授课程

我创立了黑客道。黑客道有两个层次,即“狭义黑客道”和“广义黑客道”。 狭义黑客道是系统程序员的培养流水线,包括“一个中心思想(泛系变分运筹原理)、两类基本能力(算法描述能力和硬件抽象能力)、三种编程语言(Lisp、C、汇编)、九大修炼进阶、144个教学单元”。我为此开发了九种课程,分别对应于黑客道的九个段位。这九门课程是:

  1. 计算的本质
  2. 系统程序设计语言
  3. 计算机体系与组成
  4. 数据结构和算法
  5. 计算机程序的结构与解释
  6. 编译原理和编译器构造
  7. 数字电路和模拟电路
  8. 信号的分析与综合
  9. 符号计算与硬件描述语言的实现

吾可亲执教鞭,讲授以下几门课程:

计算的本质(课程代码: HTP-G1)

这是黑客道初段的课程,通过精心安排的一连串的 Scheme (Lisp 的一个变种,编程语言王国的女王)编程练习,指导学员掌握计算的本质。 在黑客道的教学体系中, 计算的本质可以用神奇的十八个汉字表达出来:“识局整、判形影、辨异同、排泛序、显运转、度生克”, 即六大关系(异同、局整、形影、泛序、泛导、泛极)或者更加具体地以“八则运算”(基于集合的加法、减法、乘法、除法、异同、泛序、泛导、泛极)。理解了这个十八字蕴含的真谛,那么你就可以掌握计算的本质了。

系统程序设计语言(课程代码:HTP-G2)

本课程讲解 C 语言,因为它是工业界首选的系统程序设计语言,也是黑客道二段的内容。 C 指针是 C 语言灵魂! 不了解 C 指针的本质和用法, C 程序员就无法写好 C 程序。 本课程采用黑客道教学实践中发展和完善起来的独特“鱼骨”教学法,把 C 指针变量的本质和用法淋漓尽致地讲解清楚,包括指针和数组(特别是字符串和二维数组)、结构、函数(返回指针的函数、指向函数的指针)和宏之间的各种复杂关系,链表的数据结构和常用算法等。 C 是各种 Un*x 系统的母语,一旦掌握了 C 语言之后,程序员就可以在 Un*x (主要是 FreeBSD 和 GNU/Linux)上干活了。

编译原理(课程代码:HTP-G6)

计算的本质和编译原理是黑客道的两个核心课程。在理解了黑客道初段“计算的本质”后,作为它的一个应用,我们把对计算的本质的理解应用到具体的编程实践中来,我选择了编译原理为实践的内容: 在本课程中,我们利用 Scheme 语言循序渐进地设计出一个可以在 x86 体系上运行的小型 C 语言编译器。 这是黑客道六段的内容, 本课程要求学员必须事先掌握了 Scheme 语言、 C 语言和汇编技术。

小波分析、小波变换与图形图像处理(课程代码: HTP-G8)

小波分析技术是数学家创造的一种具有无穷高分辨率的“显微镜”,对于含有突变信息的函数,小波分析技术具有传统傅立叶变换无法媲美的诸多优点,因此广泛地应用于许多领域,图形图像处理就是其中重要一个。 在本课程中,我按照自己创造的“刻度论”(参阅我的相关著作《刻度论》)提供的思想方法,把数学分析、线性代数、三角级数、函数构造论、点集拓扑学、实变函数论、泛函分析、现代概率论等众多的数学分支与计算机编程结合起来,使之成为一个有机的整体,用于处理图形图像加工中的各种问题。

本课程是黑客道八段“信号的分析与综合”的一个组成部分。


我的著作

我的著作清单如下:

《武汉纲领》(Wuhan Programme)

《武汉纲领》的写作受到了法国布尔巴基学派的《数学基础》(the Elements of Mathematics)(这套丛书译为《数学元素》似乎更加合适一些)的启发,但是目的则不完全相同。总的来看,布尔巴基学派的这套丛书是以三大结构为纲,去统领现代数学体系的尝试。与此不同的是,《武汉纲领》的目的则是以泛系变分原理和刻度论的思想为纲,侧重以系统的观点去复兴中国古代的哲学思想、数学思想和计算技术,在泛系变分原理和刻度论的基础上,补充以现代数学以及科学技术的内容,又把现代数学内容从泛系变分原理和刻度论的角度加以统一,兼顾哲理、数理和技理三方面相对普适性的尝试。以武汉纲领为基础,我们可以试图复兴中国古代的哲、数、技三合一的传统,创造新的数学理论,并试图形成一种新的中国数学流派。这一点和法国布尔巴基学派试图在第一次世界大战之后想复兴法国数学传统的初衷是颇为相似的。

武汉纲领之思想原胚可以从中国的《易经》、《道德经》、《内经》等中国古代经典中找到,武汉纲领可以表述为“阴阳泛导运泛极,泛导泛极极导极。大善遗憾巧显生,善憾巧次悖转奇”(吴学谋研究员提出)。从真善二谛出发,利用现代数学的工具加以刻画一些最为基本的概念,包括局整、形影、异同、泛序、泛导、泛极这六大基本概念,然后利用这六大概念在集合论的基础上,形成“泛系变分运筹原理”(同为吴学谋研究员提出),即基于集合运算的“识局整、判形影、辨异同、排泛序、显运转、度生克”的运算,也就是基于集合的加法、减法、乘法、除法、异同、泛序、泛导、泛极等八大运算规律。

武汉纲领下的第一个工作结果就是刻度论(Calibratics)的建立,现在看来,从古代哲学家的尺度概念,发展到现代数学的测度理论,再从武汉纲领出发创立刻度论,是一个自然而连续的过程。刻度论发挥了吴学谋研究员关于主、客、媒、境等“泛系四栏”可以互联(相互联系)、互导(相互推导)、互转(相互转化)、互生(相互促进)、互克(相互制约)的“五互”思想,以现代数学理论为基本研究材料和统一对象,形成了新的、统一的数学观点。《武汉纲领》一书具体分析了数学领域的四大分支,包括数学分析、代数、拓扑和概率论,并提出了在新的思想框架下,它们之间的相互联系,以及新数学的发展方向。

在武汉纲领的思想框架下,我们认为中国数学的传统是以系统的观点研究不确定性的世界中的变化规律为基本特点的。

《易经》是中国古代经典的众经之首,它的写作目的和用途都是围绕“趋利避害、逢凶化吉”(价值论)展开的,它提出了在不规则的世界中人如何得到生存和发展的大智慧,因此它是一套完整的哲学思想;在这一哲学思想的指导下,混沌初开为起点(太初、太极,异同关系的运筹),以阴阳二仪(泛导)为工具,引申出正、常、奇、浑等四象(各种类型极限,即泛极,泛导和泛极是现代数学中研究和运用的基本概念,因此易经也在某种程度上可以视为一本数学著作,而是是数学思想相当完整的数学著作),八卦(辖域、度量空间、能量、信息等现代物理学研究的基本要素,系统的建立,引入了哲学观点、数学理论与现实世界的联系,体现了中国学术经世致用的特色),再以八卦之间的(六十四卦所体现的规律)泛导、五互来推演世界的变化规律,达到“以类万物之情、以通神明之德”的高级计算境界(显运转、度生克是人类的一切科学技术的最终目的)。神奇的是,易经中的计算模型在现代计算机上是完全可以操作的,具体工作可以参见 Lisp 语言的设计,以及我在《黑客道诠释》中成体系的发展。

《道德经》开篇的第一句就是“道,可道,非常道;名,可名,非常名”,以现代数学的语言来讲,完全可以看出中国数学的众多源流中概率论方面的工作占据了极为重要的地位,这和西方数学中概率论远远落后于几何学和其他数学分支、以及它的不那么光彩的起源是大相径庭的。 这个观点也和吴文俊院士把计算作为中国数学传统归纳为计算的观点是不同的。当然应该指出,重视计算、注重可构造性无疑是中国数学传统所体现的一个重要特征(吴文俊院士在这个方向上的开拓性工作是极有价值的,也是我欣赏和羡慕的),但是如果把中国古代数学所有传统都统统地划归到计算这一个方面,那显然就是以偏概全了。从时间尺度上看,《易经》中的思想成熟过程、其成书过程要比春秋战国之后到当今的时间长久许多。以中国古代的哲理、数理和技理一体化思维看,西方数学界发展起来的古典概率论和现代概率论显然具有许多不完美的地方,对西方数学界诸多工作的扬弃,是我们可以在武汉纲领的统驭之下可以大力展开的工作。现代数学界中,从研究概率理论过程中发展起来的思想方法已经渗透到几乎所有的数学分支,或者和几乎所有的数学分支均可以结合起来,这也多少体现出中西思想方法内在的某种一致性或者规律性。

《内经》是中国古代的一本医学经典(秦始皇是否下令还烧掉了其他的医学典籍,我们已经不得而知了),它在医学领域,引入了天人合一、阴阳、五行等学说,建立了具有中国特色的中医理论的框架。以现代数学和武汉纲领看来,人们对《内经》中博大精深的思想方法的研究显然还远远不够深入和细致。可悲的是,当今社会竟然还有一小撮人极为愚昧地将中医理论视为伪科学想打倒它,足见当代社会里关于科学思想、研究方法的普及和科学研究还有多少工作要做。作为一本医学实践的医学经典(技理),《内经》中除了以古代的思想方法(哲理)出发构建医学理论之外,在优美的文辞中也散见许多卓越的数学见解(数理),这些都是需要我们从现代数学、现代科学技术和武汉纲领的新高度认真地、持久地、重新思考、研究和发展的内容。

《武汉纲领》仍在写作中。研究数学的专家,可以在 grusadgrego 档案中找到当前写作版本的快照,并跟踪我的写作进展。长远地看,在武汉纲领的统驭下,完全可以写出一系列的数学专著来(媲美法国布尔巴基学派的工作),涵盖现代数学的各个分支,开拓全新的数学研究领域。欢迎各位数学家批评武汉纲领、接受武汉纲领、发展武汉纲领,尽快加入到这套丛书的写作队伍中来。

《黑客道诠释》(Annotated Hackerdom Training Program)

与应用程序员的培养不同, 系统程序员的培养难度大、周期长,成本高。 我根据自己在多年的系统程序员培训课程中积累的教学经验,提炼出了这套专门针对系统程序员培养的教学体系。简言之,狭义“黑客道”是我原创和发展起来的关于计算机科学技术的先进教学法,它是培养系统程序员的流水线。本书全面而系统地诠释了狭义黑客道的教学思想、教学方法和教学内容,提供了对狭义黑客道教学流水线的权威定义。 本书荟萃了我原创的思想理法、细陈了自己的黑客成就心路,引来众多业内专家佳评如潮。书中含有对狭义黑客道的“一套中心思想、两种基本能力、三种编程语言、九大修炼进阶、一百四十四个教学单元”的完整说明。写法风格别具一格,自成一家之言。本书于 2008 年完成并已经出版,在此再次感谢中国工程院的倪光南院士和武汉数字工程研究所的吴学谋研究员分别为此书作序。此书虽在瑞士刊印无几、流布甚稀,然它的出版却标志着黑客道的正式诞生,意义是非同一般的。

正如我在书中指出的,系统程序员培养的内容是相对固定(变化较少)、一旦培训方法科学得当而获得突破,大量的系统程序员可以培养出来,那么系统程序员群体为产业带来全局性的收益是非常巨大的。本书既是我开设的系统程序员培训课程所指定的黑客道培训教材、也可以用于各大学计算机专业教师的进行教学改革的参考资料, 以及一切想成为系统程序员的自学者的指南。

《刻度论》(Calibratics)

中国古代思想家和古希腊哲学家都有关于尺度的深刻思考,而近代和现代的数学家对于测度理论也有非常深入研究和重大进展,参见 John Kelly 所著《General Topology》(《一般拓扑学》)和 Paul Halmos 所著《Measure Theory》(《测度论》),我在本书中从反思《易经》中的哲学思想、数学模型和计算模型出发,结合现代数学和计算机技术的进展,采用了新的语言表述中国古代哲理思想中关于环境、主体、客体、媒介四栏相互联系、相互转化的思想和方法,以一种新的相对论的面目而自成一家之言。

本书原为一篇自学笔记,写就于2004年,是我 36 岁时哲学思想和数学功底趋向成熟的标志,在此之前那几年我苦攻了许多数学分支,包括公理集合论、模型论、递归论、证明论、点集拓扑、维数论、测度论、线性代数、三角级数、正交级数、函数构造论、实变函数论、复变函数论、Banach 空间、泛函分析、线性算子、现代概率论、鞅论等。我一边学习数学,一边写下了一些自学笔记,并形成了自己的思想,因篇幅较大,故定名为《论尺度》。我后来加入了大量的数学材料之后,在 2010 年改名为《刻度论》。 我为自己的“刻度论”新创了一个英文名词, Calibratics,它是由英文单词 calibration(标尺的刻度) 演变而来。 Calibratics 既是一种哲学意义上的思想方法理论,又是一种数学思想和工具,而且可以用于指导具体的计算机工程实践。

我的刻度论的创立,起初很大程度上受惠于吴学谋研究员的泛系理论以及和他的学术交往,但是在刻度论的发展和后期的具体开拓上,我融入了自己全新的哲学思想、数学理法和工程实践背景。自以为有了刻度论后,我可以一以贯之地看待这个世界了。

《计算的本质》(The Nature of Programming)

在黑客道九大修炼进阶中,初段“计算的本质”和六段“编译原理与编译器的构造”是主干课程。 初段课程从哲理、数理、技理三兼顾的角度讲授计算的本质,而本书就是黑客道初段教学的主教材。

本书是根据我多年黑客道授课时采用的讲义编著而成, 书中全面、系统、详细地介绍了由“武汉纲领”刻画的计算的本质,表述为“辨异同、排泛序、识局整、判形影、显运转、度生克”这十八字。本书的第一部分从刻度论入手,描述哲学、数学、逻辑学、系统论、本体论和价值观六统一的观点,从这一观点出发重新发现祖国文化遗产中古老的阴阳太极图中蕴涵的博大精深的哲理、数学思想和计算模型。第二部分描述太极图和现代数学思想的结合,也就是当代数学家如何看待古老的太极图, 从数理层面展开武汉纲领。 第三部分转入与计算密切相关的内容,利用基于 x86 体系的个人电脑为物质基础,在计算机上通过编写计算机程序来推演计算的本质,并逐步展开武汉纲领的内容。

《C 指针的奥秘》(Programming with C Pointers)

本书是黑客道二段教学的主教材,某种程度上也可视为我对“黑客道编程三字经”中关于“系统程序编程语言”分则的详细和权威的解说。

黑客道教学在二段利用 C 语言教学来培养黑客道学员对硬件的抽象能力。对硬件的抽象能力是黑客道在教学中对学员培养的两种基本能力之一(另外一种基本能力是算法的表达能力,见黑客道初段的培训内容)。 C 语言是为了设计 Unix 系统而发明的,它的特点是追求高效率、贴近硬件、对字符数据处理功能强大(故在软件界,它有 ChaP 的绰号,Character Processor,以和 Lisp - List Processor 相对应)。 学习 C 语言是职业程序必备的基本功,因为 Unix 系统上的系统调用、库函数都是以 C 函数的形式提供的。另外,其他软件包的底层大多是采用 C 语言设计的,所以理解了 C 语言对于理解其他软件的底层工作内幕也有巨大的帮助。

我在黑客道二段教学时,采用自创的“鱼骨法”“渔网法”实施整个过程。这里所谓的鱼骨法,就如同把指针变量作为鱼的脊椎骨一样,把 C 语言的五个基本内容有机地联系起来:数组(包括字符串)、结构、指针、函数、宏。而这里所谓的渔网法,则是介绍上面五个部分之间的相互关系,这些关系形成一个网络状的结构。本书最大的特点在于,我始终从编译器的工作原理的角度来解读 C 程序的写法,特别是指针变量的用法和特点。另外,我在使用本书教学时,还向学员灌输 Unix 系统的特点和基本用法,以及这个系统上 C 语言开发工具链(bash, emacs, gdb, rcs, gmake, GNU Building System 等)的使用方法。本书共有 20 章、三个部分:

第一部分(第一章到第七章)介绍 C 语言的类型、 C 指针变量的本质,以及 C 指针变量的三大基本用途:对变量赋值、检索数据、数据交换。这个部分是对《黑客道编程三字经》关于 C 语言的“三纲五常”的详细解说。

第二部分(第八章到第十七章)是全书的重点内容,先利用鱼骨法将指针、数组、结构、函数和宏联系起来,纲举目张,成为一个整体。当讲解完鱼骨法的内容之后,再在书中介绍渔网法如何把五个方面联系起来称为一个有机整体。这个部分的后部要求学员完成一个小型项目,即利用指针变量构造单向链表,以此帮助学员复习 C 指针变量的用法。阅读并掌握了本部分内容的学员,就是合格的中级 C 程序员了。本部分最后一章全面剖析了 printf(3) 函数实现各方面的细节,深入细致地描述了 C 语言的硬件抽象的实质,涉及 C 运行时系统的内幕,以及如何从黑客道初段介绍的 Lisp 编程观点看待 printf(3) 中的计算细节。了解这个函数的细节是从中级程序员通向高级程序员的门槛,一旦搞清楚了 printf(3) 的细节,那么逆向的 scanf(3) 函数也是不难理解的。

第三部分(第十八章到第二十章)包括几个高级专题: 一、C 语言中的例外处理机制; 二、C 程序和汇编程序的混合编程,如何建立 C 语言的运行时系统; 三、如何利用 C 编写面向对象的程序,从而利用 C 语言开发大中型的系统程序,我在这一部分介绍了作文式编程法,我认为,只要对开发工具作出适当的改进,并遵循良好的编程风格,就可以大大提高 C 语言开发大型软件的生产力。 (老版本的读者注意:这一部分涉及到如何从 C 转入 C++的内容已经移到 HtDP-C++ 的第二分册中去了,我在 HtDP-C++ 第二分册中大量介绍了指针变量的优点之后,我特别分析了 C 的指针变量的缺陷, C++ 语言如何引入引用类型 reference type 解决动态内存的访问中的问题,这些内容让学员确信:一旦搞定了 C 指针的本质和用法, 那么掌握 C++ 语言是应该不在话下的; 另外在介绍了从 C 转向 C++ 之后,我也附带介绍了 C 和 Java 的混合编程的内容。)

本书作为讲义一直用于我的 C 语言教学培训实践,书的内容成形于、完善于自己多年的教学实践,在培养了大批学员之后,相关的 C 语言培训课程坡度已经安排得相当合理,每一次讲课主题突出,只要牢牢地紧扣指针变量的主题来学习 C 语言,那么学员的进展就可以很高效乃至神速。不过,本讲义至今没有作为著作公开出版。原稿用英文写就。倘若将来有机会出版其中文版,拟把书名定为《C 指针的奥秘》、或者《庖丁解 C》。

在我创作“广义黑客道创业者丛书”时,我把 C++ 语言纳入了此丛书中,而掌握 C 语言是学习 C++ 的基础,因此本书也是《如何设计程序》(C++版)的第一分册的内容。

《创业九章》

《创业九章》是关于广义黑客道创业法的介绍性著作。如同书名提示的,这本书共有九章:第一章“生意经”,介绍自动机的原理,如何应用这一原理为技术性创业公司建立商业模式。第二章“山水鸟鱼”介绍如何选定一个特定领域的问题去创业,第三章“现代巫师”则介绍现代数学的主要内容,第四章“面粉与石膏”介绍数学建模的方法,第五章“球拍和字符”介绍创业中应该熟练掌握的两种编程语言,第六章“剧场的舞台”介绍开发平台和程序的运行平台,第七章“精灵”介绍在服务器上长期运行的一种进程,第八章“知行合一”则介绍如何把实践和理论和实践在创业项目中有机结合起来,最后的第九章“定力”则介绍创业过程中可能遇到的心理学方面的问题和相应的解决方案。

在治学和研究中三兼顾哲理、数理、技理的特点,是我沿承和倡导的方法论,这一方法论同样适用于创业,我在多个公众场合积极鼓吹过这一创业的方法论。参阅我在首届中俄留学生座谈会“发明与创新”论坛上的发言

《怎样设计程序》

《怎样设计程序》(Racket 版)是关于“广义黑客道创业法”的一本技术专著。本书是写给掌握了 Lisp 并且想创业的程序员阅读的,在阅读本书之前,读者应该掌握了统一建模语言 UML 的内容和 Lisp 的设计技巧(即黑客道初段的内容),如果创业者还能掌握黑客道六段(编译原理)的内容,那么创业成功的成功率将大为提高。

本书传递的一个基本思想是,设计大中型软件和设计建筑物是很类似的。在设计的初期,设计师应该集中精力针对软件的需求来设计软件的架构,而不是立即动手来实现代码。只有当软件系统的架构比较完整之后,才逐步转入具体的代码的实现阶段。这就如同建筑师设计建筑时,首先考虑是建筑的功能,为了满足功能应该具有哪些建筑模块,而不是一开始就关注如何用水泥、砖头、钢筋和沙子来施工。软件工程中的设计模式,就是在软件设计实践中,通过大量实践提炼出来的功能模块,这些功能模块是相对普适的,可以应用到范围广泛的软件设计项目中。相比基于结构化的设计范式,基于面向对象的设计模式更加适合打造大中型的软件系统,显然,模块化的设计思想是应对大中型软件系统的复杂性的有效方法。

本书向践行广义黑客道的创业者介绍如何高产、高效地开发软件项目。Lisp 语言非常适合建模,在此书中,我介绍了如何把来自面向对象编程世界的成熟技术,即“设计模式”(design patterns)引入 Lisp 编程,两者有机结合起来之后可以大大地强化 Lisp 语言的建模能力,让创业者利用两者达到高效率的创业境界。

本书的第四部分,专门介绍了 grusadgrego 软件包的设计思想和模块的功能。希望研究 grusadgrego 软件包以及做二次开发的程序员,可以利用本部分的材料作为参考。