海纳百川

登录 | 登录并检查站内短信 | 个人设置 网站首页 |  论坛首页 |  博客 |  搜索 |  收藏夹 |  帮助 |  团队  | 注册  | RSS
主题: 阳春白雪、下里巴人以及高阶 (甲)
回复主题   printer-friendly view    海纳百川首页 -> 罕见奇谈
阅读上一个主题 :: 阅读下一个主题  
作者 阳春白雪、下里巴人以及高阶 (甲)   
游客
[个人文集]






加入时间: 2004/11/10
文章: 2864

经验值: 2731


文章标题: 阳春白雪、下里巴人以及高阶 (甲) (874 reads)      时间: 2006-7-13 周四, 下午1:32

作者:游客罕见奇谈 发贴, 来自 http://www.hjclub.org

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

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

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

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

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

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

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

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

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

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

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

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

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

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

究竟什么是高阶?有什么意义?老随偶尔提到高维的思考方法,但是没有比较详细的表述。这个任务俺来完成。


作者:游客罕见奇谈 发贴, 来自 http://www.hjclub.org
返回顶端
阅读会员资料 游客离线  发送站内短信
显示文章:     
回复主题   printer-friendly view    海纳百川首页 -> 罕见奇谈 所有的时间均为 北京时间


 
论坛转跳:   
不能在本论坛发表新主题
不能在本论坛回复主题
不能在本论坛编辑自己的文章
不能在本论坛删除自己的文章
不能在本论坛发表投票
不能在这个论坛添加附件
不能在这个论坛下载文件


based on phpbb, All rights reserved.
[ Page generation time: 1.190458 seconds ] :: [ 25 queries excuted ] :: [ GZIP compression enabled ]