首页 | 论坛宣言 | 论坛 | 博客 | 个人文集 | 专题文集 | 期刊  
搜索: 购买芦笛文选  
海纳百川2006年7月号

主编: 湘君,邋遢道士

 
阳春白雪、下里巴人以及高阶 (甲、乙)
游客


    随便关于阳春白雪和下里巴人的评论,让俺想起若干年前的一件事。在www还未普及的时代,邮件组(mailing list)相当于现在的论坛。俺订阅了一种叫做Forth的面向堆栈语言的mailing list。 (海纳百川 www.hjclub.info)

    Forth发明于60年代末,是一种高级语言(开发速度快),也是一种低级语言(运行效率几乎和汇编语言一样),还是一种操作系统(在嵌入式系统中可以独立运行,有多任务管理器),最重要的是Forth是一种哲学。发明人Chuck Moore是个天才,本坛网友nunia提到过。 (海纳百川 www.hjclub.info)

    俺在Forth的邮件组问过这样一个问题:象Forth这么美丽的语言为什么竟没有普及。该论坛的moderator(相当于论坛斑竹)是这么回答的:交响乐和偏微分方程非常美丽,也未能普及,只有少数人能享受。这个回答和老随的评论有异曲同工之妙。 (海纳百川 www.hjclub.info)

    随着计算机行业的发展,Forth慢慢衰落了。外部的客观原因是:早期电脑的计算资源贫乏,CPU慢内存少,Forth具有的优势。后来内存和CPU马力的成本大幅度下降,那些优势逐渐变得无关紧要。目前Forth的爱好者仍然为数不少,而在商业上生存的领域主要在集中在嵌入式系统这些内存和cpu马力贫乏的领域里。 (海纳百川 www.hjclub.info)

    Forth是一种威力强大的工具,Forth的高手有时被称为单人兵团,一个人的工作量可以和40人的C语言开发团队相当。不过,其强大的威力和使用者的素质相关极大,也可以说Forth是个放大器。如果开发者的脑筋不够好,最终的产品便会一团糟,比别的语言写的程序更难维护。这也是Forth衰落的另外一个原因,它不适合于大型团队开发。 (海纳百川 www.hjclub.info)

    近十几年来的商业竞争对公司的要求有点象人们对国家政权的理解:最终的成功更多地依赖于组织的规则和制度,而不是个人能力。需要团队合作的现代社会更加需要不依赖于人的素质的工具,以便大规模工业化生产。我们常说软件工程而不是软件艺术反映的就是这样的趋势。Forth是一种个人英雄主义的语言,适合于天才。而天才数量稀少,并不容易找。相对而言,Java就更能满足工程化的需求:几个精通业务的专家完成设计以后,把任务明确化,雇一大帮学校刚出来的没有多少经验的毕业生填写代码,就可以完成相当规模的项目。Java简单易用,适合于团队开发,不需要使用者很聪明。在骨干的领导下,一大帮平庸的程序员能够合作完成大项目。因而Java近年来得到迅速推广。 (海纳百川 www.hjclub.info)

    从现象上看,平庸的Java由于其有利于合作开发而得到普及,天才的Forth由于其个人英雄主义而衰落。实际上情况却并没有这么简单,Forth作为语言衰落了,但是作为哲学,其灵魂在其他语言中得到了再生。比如,Java的之所以普及是因为它可以在任何平台上运行,它的这种可移植性来自于Java的结构:Java是运行于虚拟机上的解释型语言。而Forth本身便是最早的虚拟机!这种设计思想二十多年后被Java所剽窃。Java有严重的侵权犯罪行为,抢劫了Forth的知识产权。 (海纳百川 www.hjclub.info)

    另外还有一种早于Java的优秀语言Perl,由另外一个计算机天才Larry Wall发明,在普及度排行榜上仅次于Java、C++、C而排第4。Perl也是一种高效率的解释型语言,其高效率来自于其解释器 -- 一个虚拟机,并且还是一个面向堆栈的虚拟机。就是说Perl的核心就是复杂化的Forth机,Forth的灵魂存在于Perl的内部,这一点连大部分Perl程序员都不知道。 (海纳百川 www.hjclub.info)

    值得一提的是Perl的显著特点:Perl是一个精彩的创造,又吸收了几种语言的精华。表面上和C有类似之处,不太明显的地方是借用了Lisp的优点。这一点非常重要,后面再详述。Perl的著名口号是:做一件事可以有多种办法。一个输出"Hello World"的Perl程序,可以有近两百种写法,程序员按照自己的思路、理解和爱好去写程序,能够完成同样的任务。这是因为Perl提供完成任务的多种手段。初学者或者缺少资质多年没有长进的程序员会写的跟C或者Shell一样,而天分高的程序员会充分利用Perl的特性把程序写得奇短。Perl程序有一个可读性差的名声。其实Perl完全可以写得很好懂,Perl笨蛋们写出来程序就和C差不多,平铺直叙。Perl程序之被认为难读,是因为Perl提供的手段很丰富,使得高手能够运用得出神入化,令人叹为观止。而许多著名的模块都是高手写的。 (海纳百川 www.hjclub.info)

    Perl的有很多天分极高的著名人物,让人以为他们简直不是地球上的生物,惊天动地D聪明。本质上Perl也是一种适合于高手自由发挥的语言。语法上Perl和Forth没有想同之处,在吸引天才方面Perl象Forth。显著的不同是,和Forth这种排斥草根的高傲作风相比,Perl又可以被普通人所接受。这就使得Perl的队伍和资源远远超过Forth,最后产生了规模效应。Perl对平庸的兼容使得Perl比Forth更健康,成长更迅速,拥有了更多资源,最后吸引了更多的天才加入。 (海纳百川 www.hjclub.info)

    精英主义的Forth因为脱离大众而衰落,Java由于草根性而蓬勃发展,商业上取得巨大成功,但又缺乏艺术性,非常乏味。Perl则兼容并蓄,既给天才提供发展空间,又给笨蛋们提供完成任务的基本手段。世界上的活着的现代人大部分是还没有进化好的笨蛋,普罗大众的人数就是一种资本。 (海纳百川 www.hjclub.info)

    Perl的祖先之一Lisp非常古老,却是一种和Forth一样的“非经典“的语言。俺这里的“非经典“指的是语法和大部分计算机语言相差很大。学过BASIC/Fortran/Pascal/C/Perl/Python/PHP的人用过其中的一种便很容易学另一种。而学Lisp这样的语言需要彻底更换脑筋,懂一种经典语言反而成了一种障碍。Lisp相对于其他语言的显著特点之一是:在这种语言中,数据和程序没有界限。 (海纳百川 www.hjclub.info)

    在绝大部分其他语言中,数据和程序代码生存在不同的层次,数据是被加工者,程序是活的运行的指令对数据进行加工。打个比方:数据相当于马悲鸣屠刀下的死肉,马悲鸣就是程序,抄刀把半片猪按要求切割成大小不同的部分,分门别类送到下一道工序。 (海纳百川 www.hjclub.info)

    在Lisp中,程序的操作对象不一定是数据,也可能是程序。任何东西都是表(List)。可以幻想一下,在未来人类文明的高级阶段,普世价值得到充分的认同,神圣的“民主”被移植到了地球上每一个角落,甚至具有高度智能的机器人也能充分享受人权。假想马悲鸣在一个机器人制造厂工作。这时候他的操作对象不再是一堆死肉,而是将要出厂和马悲鸣完全平等的新机器人。不仅如此,老马今天拧完一颗螺丝的机器人正好是一个牙医(或者护士什么的),明天老马去看牙遇到的正是该伪牙医,老马作为病人,被那个昨天的操作对象伪牙医操作了一把。这就是Lisp,这种特色使得Lisp成为一种高阶的语言。Perl吸收了Lisp的这个特点,也成为高阶的语言(有一本名著就叫《High Order Perl(高阶Perl)》),这是把Perl当C用的笨蛋们不太明白的地方。 (海纳百川 www.hjclub.info)

    究竟什么是高阶?有什么意义?老随偶尔提到高维的思考方法,但是没有比较详细的表述。这个任务俺来完成。
---------------------------------------------------------------------- (海纳百川 www.hjclub.info)

    老随说称的“高维思考方法”含义比较广泛,可能包括了从不同角度不同层次的思考,摒弃两极化思维,完整地观察世界。俺不敢说俺解释的“高阶”能够涵盖老随的全部意思,因此只能部分“完成任务”。 (海纳百川 www.hjclub.info)

    “高阶”本来是一个用来描述函数的数学术语。函数在数学上指的是把一个空间(输入)映射到另外一个空间(输出)的操作。计算机使用的“函数”这个术语和数学上的“函数”本质上一样,是一个操作过程,有很多语言也用别的名字比如子程序。普通函数的输入和输出是数据,而高阶函数的输入和输出都可以是另外一个函数。 (海纳百川 www.hjclub.info)

    仅举一个具体的例子:比如说,Perl里面有一个函数叫做map,它有两个参数,我们用A和B来分别表示第一个和第二个参数。其中A是一个表达式,这里暂时理解为用户送的一个函数,B是一个表(List)。map函数本身不管怎样处理“数据”,它的第一个参数A(即另外一个函数)才是真正的操作者,map的功能只不过是把表中的元素(即B中得的内容)一个接一个地喂给真正的操作者A,由A这个函数来处理“数据”B。就是说map是一个操作函数的函数,被它操作的函数(A)才是底层的操作者。而map函数本身不直接操作“数据”。 (海纳百川 www.hjclub.info)

    为了简单化易于理解,上面把表中的元素不准确地叫做“数据”。这里之所以加了引号是因为,那些元素虽然在现实中绝大部分情况确实是数据,但是理论上表中的元素的类型是任意的,可以是其他函数的引用。这时map的第一个参数A显然能够操作其他函数,那么map就变成了操作“操作函数(指B的元素)的函数”(指A)的函数(指map)。 (海纳百川 www.hjclub.info)

    还有大量的其他变种,这里的例子说明Perl异于其他语言的特点。当然这并不是说其他语言全部没有“高阶”特性,比如C也可以通过一定的方法来实现“高阶”的操作。Perl优于其他语言的是,在语言设计上它比较容易运用高阶操作。 (海纳百川 www.hjclub.info)

    高阶的概念广泛地存在于各个领域,而不仅仅限于计算机和数学。米国的国防部长拉姆斯菲尔德是个说“高阶”话的能手。他有一段关于“known unknown”和“unknown unknown”的著名绕口令,甚至被别人谱曲改编成了一首歌。他的话翻译过来大致上可以这么说:所谓的未知信息有两个范围:一种是我们很清楚地明白地我们还不知道的信息,另外一种是:我们自己也不清楚我们并不知道的那些信息。 (海纳百川 www.hjclub.info)

    以后在《后现代人类的特征》中,俺会提到:能否意识到存在着unknown unknown是一种重要的判别标志。典型的现代人会承认自己某些方面的无知(known unknown),给他同类一个不太傲慢的印象。这是一种假象,只有意识到存在“不知道自己不知道”的人才是真正头脑开放的人。为了避免离题这里不作更多引申。 (海纳百川 www.hjclub.info)

    投资者在股市中的行为也是一个很好的例子。早期资本主义的高速发展阶段,产业规模迅速扩张,造成对资金的巨大需求,形成了证券市场。投资者把多余的资金交给最擅长经营管理的能手,增加自己的资产,他们总是寻找回报最高的行业和公司。怎样寻找业绩最佳的目标?投资者们研究的是企业的赢利能力,主要分析的是财务报告,根据企业内部状况来判断投资目标的优劣。这是原始的“基础分析”。 (海纳百川 www.hjclub.info)

    企业的历史信息并不完整,不反应未来的情况。企业所在行业是增长中的还是已经成熟的,是否由管理高手控制,企业的竞争对手的发展势头,新技术突破是否会企业造成灾难性影响等等,都是影响未来收益的因素。高明的投资者除了研究企业的现有财务数据以外,还对企业的未来发展作一定的估计。这就是改良的基础分析,这时候不仅研究企业的过去和现状,还估计企业未来的情况。 (海纳百川 www.hjclub.info)

    随着证券市场的扩大和成熟,也出现了很多依靠研究市场价格变化曲线的专家,他们能够从历史上各种证券的价格数据寻找出能够赢利的模式,掌握涨落时机得到巨大投机回报。这些投资者(或称投机者)被称为“技术分析”派,他们不关心企业的财务状况,甚至不知道企业经营的业务是什么,只研究证券的价格数据,从曲线当中得到信息。 (海纳百川 www.hjclub.info)

    “技术分析”本身只是一种基于另外一种信仰的流派,其中有少数人之所以持这种信仰是基于这样的理由:由于证券市场中的投资参与者人数众多,价格曲线已经包含了足够信息,企业的财务盈利状况、对未来的大致预测已经反映在其中了,因而他们不需要亲自了解企业的基本情况。我们可以认为,他们实际上是在间接地研究所有的其他参与者对企业的估计。 (海纳百川 www.hjclub.info)

    如果说“信仰基础分析的投资者依靠的是一阶判断,企业的业绩才是支撑市场的根本基础。信仰技术分析的投资者接近二阶投资者,他们研究的是图表曲线,是间接地研究众人对企业和市场的看法”,这种表述过于简单化,并不太反映真实情况,误差较大。为了更逼近真实,我们用另外一种视角来观察投资者的进化。我们把“基础分析”和“技术分析”这两派的差别抛在一边,而把投资者的行为分为3种A研究企业的基本清况B对企业的未来发展进行估计C对别人的估计进行估计。 (海纳百川 www.hjclub.info)

    普通投资者只有A和B两种行为,高阶投资者还有C。如果我们把普通投资者分为愚昧的和精明的两类,而高阶投资者总是精明的,这样我们就有三种投资者:愚昧的普通投资者,精明的普通投资者,高阶投资者。假定他们都参与了高科技泡沫破裂之前的投资。精明的普通投资者由于怀疑或者看穿了那些泡沫企业的荒唐收支平衡表,没有介入或者很早就退出投资狂潮。 (海纳百川 www.hjclub.info)

    在高科技泡沫破裂之后,精明的投资者没有遭受损失,他们想:“早就看出这样的狂热增长没有真实的基础作支撑,幸亏没有卷入其中,那些盲目乐观者非常愚蠢,遭受损失是他们自己的过错”。他们这种看法对于大多数造成推动股市疯狂增长并最后损失惨重的愚昧的普通投资者都是对的。但是,在那些极少数的高阶投资者看来这是错的。 (海纳百川 www.hjclub.info)

    高阶投资者同样非常明白股市的泡沫迟早会破裂,但是在泡沫破裂之前他们仍然大胆操作,利用众人的盲目乐观为自己盈利。看上去这些少数高手做的事情和盲众一样,但是决策的依据完全不同:盲众是愚蠢地相信互联网和通信行业具有无限美好发展前景,而高阶投资者是利用前者的愚蠢,他们知道直到只要众人还相信那些虚幻的前景,还有下一个傻瓜收下接力棒把股市推向新高,那么他们就还有机会继续盈利。“真相”和“众人相信的真相”是两种不同的东西,在高阶投资者看来,后者更加重要。他们估计的并不是真实情况,而是别人对真实情况的估计的估计。 (海纳百川 www.hjclub.info)

    和“愚昧的普通投资者”相比,“精明的普通投资者”虽然没有遭受损失,但是他们也错失了淘金的大好机会,泡沫的破裂则让他们更加坚定了自己的投资方式的正确。混在大部分“愚昧的普通投资者”当中的“高阶投资者”却会利用“愚昧的普通投资者”的盲目为自己盈利。由于这两者行为上相似,“精明的普通投资者”把两者当作一类。 (海纳百川 www.hjclub.info)

    一阶投资者关注和研究企业的根本赢利状况,高阶投资者关注的是别人怎么想,显然高阶上面还有更高阶的专家,他们还研究别人会怎么想“别人怎么想”。最后决定市场的因素不仅是基本经济数据,也包括了对“别人估计”的估计,也许还有微不足道的更高阶成分。这种复杂的结构使得市场非常混沌。高阶投资者过多,便会使得股市非常混沌没有规律,甚至会由于蝴蝶效应容易产生突变而崩溃。 (海纳百川 www.hjclub.info)

    对“别人的估计”的估计在人类社会活动中并不仅限于证券市场上的搏击,它和Perl中的能够操作函数的函数一样,都是高阶运算。但是两者的影响差别很大。程序用不用高阶函数影响的只是开发和运行效率,而对“别人的估计”的估计发生于人和人打交道的过程中,如果错误或者根本没有,那么影响就大得多。绝大部分的对抗事件都是微小的火星在对“别人的估计”的估计错误的情况下,最后升级位全方位对抗。举一些例子,比如:狼协在第一次更改密码之前估计过老胡的反应了吗?如果换一种策略有现在这样的后果吗?以色列采取行动的时候怎么估计伊朗和叙利亚的反应?以及他们的反应所激起的其他列强的反应?金正日和布什怎么估计对方?他们又怎么估计对方怎样估计自己?金正日是一个真的疯子?还是他更加精明,为了获取更大利益需要让布什把自己错误地估计成一个疯子?金正日为什么不考虑中国老大哥的反应?中国采取什么样的策略才能够让金正日相信对抗下去是愚蠢的?.... (海纳百川 www.hjclub.info)

    这些话题分析起来会有无穷多的可能,内容非常丰富。



网站首页 | 论坛规则 | 董事会章程 | 法庭规则 | 接受捐款 | 版主信箱
Copyright © 2004-2010, HJclub, Inc