找回密码
 欢迎注册
查看: 8424|回复: 0

[转载] 一些程序设计语言的看法

[复制链接]
发表于 2008-5-2 18:17:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
http://yuqiang.blogdriver.com/yuqiang/1186191.html

在大师Peter Norvig的《Teach Yourself Programming in Ten Years》一文中有这样一段论述:你应当学会至少6种编程语言。包括一门支持类抽象(class abstraction)的语言(如Java或C++),一门支持函数抽象(functional abstraction)的语言(如Lisp或ML),一门支持句法抽象(syntactic abstraction)的语言(如Lisp),一门支持说明性规约(declarative specification)的语言(如Prolog或C++模版),一门支持协同程序(coroutine)的语言(如Icon或Scheme),以及一门支持并行处理(parallelism)的语言(如Sisal)。
——引自http://www.zengyihome.net

下面就一些程序设计语言谈谈我的看法。

Pascal:计算机专业的和参加过信息学竞赛的朋友们一定很熟悉它吧。我参加过信息学竞赛,和它的感情最深了。Pascal语言格式很规范,对于养成良好的编程风格很有益处。Pascal语言很简单,感觉就像英语一样自然,用不了多久,就可以把语法部分掌握,然后就可以找些信息学竞赛的题目做做。Pascal语言让你能专注于问题本身,而不必过多地考虑一些细枝末节的东西。由于它本身的一些特性,Pascal语言很适合学习算法。我的程序大部分就是用Pascal写的,你要想看懂的话,那就学吧,反正也花不了多少时间。

C:语言的名称只有一个字母,够简单吧!可它学起来可不是那样简单,当然这也要看您满足哪个层次了,如果你只是满足于计算机等级考试(三级)的水平,C语言并不很复杂,要是再有其他语言的基础,可能也就需要一个月的时间;可是如果要做计算机的系统研究、开发,那它足够你学上一两年。C语言的一个很强大的语言,甚至能直接对硬件进行一部分操作,也正是由于这个原因,学起它来不免要了解一些计算机工作原理方面的知识。如果你追求实用,C语言是很好的入门选择。

C++:虽然名字上比上面的多了两个“+”,可是几乎和C语言没有任何关系!如果说Pascal语言和C语言的编程思想上是一致的,那么C++可就差了十万八千里了。它采用一种完全不同的思想处理问题,叫做“面向对象”,而前二者的思想则叫做“面向过程”。C++的体系极其庞大复杂,连C++的创造者Bjarne Stroustrup都说C++是最难学习的语言之一。一般人恐怕没有个三五年的时间是不能领悟C++的真谛的。不过C++的用途极其广泛,现在很多的大型软件主要是用C++编写的。学习C++付出的代价最多,但收获也最大。

Lisp:这是一门古老的语言,上个世纪60年代就有了,现在仍是人工智能研究领域的主要语言。Lisp这个词来源于List Processing,意为“表处理”。Lisp处理问题的思想又不同于前面几种,它既不是“面向过程”也不是“面向对象”,而是一种函数型语言,不要问了,Lisp语言我也不懂!Emacs编辑器的配置文件就是用Lisp语言写的——这也就是说,如果你不从事人工智能的研究,学了Lisp后起码也能享受世界上最强大的编辑器了^_^。

Scheme:这并不是一种新的语言,而只是Lisp的一个“方言”,Lisp后来分化成了好几种,其中的Scheme便是最流行的。想深入地了解Scheme,可以访问王垠的Scheme网页。

Function Language:不要误会了,这并不是一个语言,而是一类语言,按字面上翻译就是“函数语言”。这类语言现在还很不流行,但我感觉它的功能更为强大,很有可能成为未来10年或20年的主流语言。要是现在学会了,就可谓有先见之明了。
下面是我在网上找到的有关Function Language的一些资源:



--------------------------------------------------------------------------------

FUNCTION LANGUAGE

这是一类语言,叫做函数型程序设计语言。是一种非常高级的语言。一种基于λ演算和在70年代后期才发展起来的新语言类型。大多数程序设计语言明显地规定要执行操作的次序。次序的详细规定是很需要的,因为语言的语句对程序的变量有“作用”,如果改变这些作用的次序,就可以改变产生的最后值。但是函数型语言却没有这种性质。在这个意义上,函数型语言能建立可计算性的数学公式模型。让我们来看一个简单的例子:

qsort :: [a] -> [a] | Ord a
qsort [] = []
qsort [a:xs] = qsort [x \\ x<-xs | x<a] ++ [a] ++ qsort [x \\ x<-xs | x>=a]


这段程序就是快速排序的代码,你看有多么简洁,并且它的这个qsort可以对任何类型的数据进行排序(只要这种数据可以比较大小)。想读懂上面的程序么?那么下载下面的clean, 或者haskell,好好研究吧,祝你有新的发现。

Clean
http://www.cs.kun.nl/~clean/ 并行的函数型语言,可以把源程序编译成exe文件,带有丰富的库,从tcp/ip, 到界面设计,到游戏开发,无一不全。

Haskell
http://www.haskell.org/hugs/ hugs是haskell的免费编译器,语法和clean相似,不过是解释执行,因此易于学习。

O'Caml
http://www.ocaml.org/ 又一个函数型语言,速度很快,编译出来的程序速度和用C做出来的差不多快。

Mozart OZ
http://www.mozart-oz.org/ mozart oz 是具有魔力的语言。它融合了目前几种流行的程序设计思想,我们叫它多范式语言。它是面向对象的语言,它是函数型的语言,它是约束逻辑(constraint)的语言,它是并发式的语言,它还是分布式的语言,几句话很难概括它的功能。最好去它的网站看看吧,下载一个慢慢研究? 他使用emacs作为开发界面,因此如果你想在windows下使用本语言,首先需要安装emacs for windows(也可以在mozart的网上找到,也可以去www.gnus.org去找,也可以安装xemacs), 如果你安装了emacs 那么你也就同时获得了emacs lisp, 呵呵,收获不小。 为了提起您的兴趣,请思考如下的问题如何编程解决,然后你可以在mozart中找到惊人简单的解决方案。 15个人每天出去玩,每天分为5组,每组3人,玩一个星期,使得任何两个人都曾经在一组中玩过,你如何安排?

J software
http://www.jsoftware.com/ 不要和java搞混淆了。J是一种面向阵列的语言,也就是说矢量,矩阵,以及高次数组都是它的最基本的数据类型,J中引入了大批量的运算符,以及独特的算式分析方法,大幅度的扩展了数学算式的表达能力。 例如如果你要算从1加到100, 用c怎么做? J的程序是:+/i.100 对,就这么短,一个表达式解决了问题,事实上,使用表达式编写出来的程序异常简洁,虽然初看上去很难读懂,一旦掌握了J语言,你就会发现,原来你可以用只有c语言1/20的字符表达同样的功能。

LOGO
被称为最佳的启蒙语言,事实上它的功能远远不止启蒙这么简单。一切别的语言能够完成的它也能够完成,只是更加简洁一些,通常logo是使用lisp编写的,我们就可以想象它的高度灵活性了。

MSW Logo
http://www.softronix.com/ 这个网站还有个逻辑数字电路模拟的软件,很有意思,再也不用为什么触发器 门电路之类的发愁了。

Star Logo
http://www.media.mit.edu/starlogo starlogo的网站如是说: StarLogo是一个可以编程的建模环境,用来研究分散系统的运行机制。所谓分散系统是指:没有组织者而组织,没有协调者而协调的系统。使用StarLogo你可以对许多现实世界中的现象进行建模并且观察研究,例如鸟群、交通、蚂蚁以及市场经济。 StarLogo是一种特殊的Logo语言,和传统的Logo语言一样,你可以通过向海龟发命令来作图。除此之外,Starlogo容许你并行的控制上千个海龟,并且为这些海龟设定不同的行为模式。StarLogo非常适合于研究人工生命。


--------------------------------------------------------------------------------

好了,对于程序语言的选择,我也就说这么多了,其实选择哪个是次要的,关键是要认识它、掌握它。与其说学过好几种语言,不如把一门语言学精。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-19 22:30 , Processed in 0.075885 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表