PHP的魅力所在
提起老牌经典脚本语言PHP,我们不禁会联想到它的一个令人印象深刻的特点,即上手快,你无需对这个语言进行深入广泛的了解就可以使用它开始编程。在我们知道的语言中,没有几个语言能把这种特点体现的淋漓尽致。与之相对应的另一个极端是Java语言,即使你写一个简单的hello world程序也需要掌握不少Java知识,运行一个Web应用同样不那么简单。而这一切在PHP中是一件举手之劳的简单事情。
在编程能力方面,PHP只是比Perl表现好一点。Perl是一种古老的脚本语言。最初的Web应用大多是用Perl编写的,Perl很像C语言,使用非常灵活,对于文件操作和处理具有和C语言一样的方便快捷。
但是,由于Perl的灵活性和“过度”的冗余语法,也因此导致许多Perl程序的代码令人难以阅读和维护,记得在Web刚刚兴起的时候,当听到有人说将使用Perl编写大型应用的时候,我就知道他们面临的将是失败。
Perl的哲学思想是同一件事,总有不止一种方法来解决,结果造成了大量难读难懂的程序。对于规模较大的系统来说,Perl编写的维护成本相对更高,另外Perl对于CPU的消耗似乎较高,效率似乎有一些不足。
相比来说,PHP却已经创建了一些更大型的应用,例如大名鼎鼎的开源CMS系统Drupal。我的一个朋友Nancy Nicolaisen表示她希望搭建一个旅游网站,我建议她看一下Drupal。她听取了我的建议并最终选择了它,只进行了轻微的改动就使她的网站上线了,用她的话来说,这个用户社区吸引她的地方是它的强大和易用。
而且PHP允许初学者可以直接针对他们感兴趣的功能进行编程,而无需花费大量的时间来学习编程理论和实践。你只需要编写代码并通过网页来查看效果就可以了。
PHP的不足之处
但是这同时也是这个语言的问题所在。你经常会发现很多使用PHP编写出的代码错误百出,但这些代码往往却被人们互相拷贝,却没有人去认真分析研究它们。这些代码通常是由那些习惯互相借鉴拷贝代码的程序员所编写,这些代码质量低劣的原因是这些程序员通常不习惯问为什么,不喜欢弄清楚原理,只管拿来就用。
在我第一次想深入了解这个语言的时候,我希望看到一些关于文件锁定的示例,结果尽管看到了非常多,但却没有一个是正确的。正如事实已经证明的那样,PHP主要是与数据库搭配使用,数据库来处理所有一致性问题,因此多数人只关心从数据库中存取数据,而不用再去必须考虑底层的问题。但是这个语言不仅仅可以处理与数据库交互的上层问题,同样也可以实现与文件系统之间交互的底层问题。我的感觉是,在PHP社区中多数人只关心如何得到一个好的结果,而没有多少人关心它的真正实现原理,因此才出现了这种错误的倾向。
后来推出了PHP 5,与以前版本相比有了不小改进,但是它主要是增加了一些从C++和Java中提取出来的功能,但是人们只是到处找来一些新功能,但却没有仔细的分析每一个增加的功能,及其对这个语言的影响。
相比之下,根据我对Python语言多年的观察,在过去10多年中它增加的每一个新功能都经过反复的分析和推敲。时间将会证明谁对谁错,或者PHP社区将会知道如何来处理这些功能,但是我对此深表怀疑。
在最近一段时间里,我一直使用PHP来实现我新建立的站点。之所以选择它的关键是,我只用它来进行一些简单的开发。举个例子来说,PHP让你可以解决非常弱智的HTML问题,例如你不能在HTML中包含文件的问题。PHP可以轻松做到这一点,而且可以让我轻松的在整个站点之间实现我的设计,而且有时候我们只需要实现一些小东西并将其嵌入在页面中,PHP实现起这些东西来非常简单。
但是,我发现随着要完成的任务复杂度的提高,更好的选择是选择使用Python,因此PHP更适于处理简单的任务。
Python的内核非常精简,功能非常丰富,它提供了一个良好的程序构建基础。综合了C和C++二者的优点,只要采用合适的结构和方式,便可对Python程序进行无限的扩充。当然,它也有自己的不足之处,例如有的朋友抱怨Python对规则表达式的支持不如PHP中强大。
Python
首先就以语法而论,python没有perl的灵活紧凑。只能说是中庸,感觉和basic,pascal,java差不多。他可以编写运行在操作系统的应用程序,可以编写web代码,他不是脚本语言但是有脚本语言的功能,他和java,C++,C地位差不多。它代码的运行效率高,有的代码几乎能和C++相比。他还能嵌入到C++中,很方便,这一点在游戏开发中引用最广,大家知道C++是做网络游戏的首选,是当前做游戏最广泛的。而Python在处理游戏特效等很迅速,学好Python以后可能会在游戏开发公司谋求个好职位。然而他是个年轻的语言虽然比ruby老但是框架虽多却没有比较好的框架用来web开发(jsp有j2ee平台,asp有.net平台),不过要是做小网站它也是个不错的选择。如果在Linux系统的话编写命令是很好的,和perl一样,而且运行速度很快。虽然很多优点但是还是很少有人用它来做大的工程。个人感觉做大工程用java是最好的。Python的语法非常严格以至于业界描述它为一种清晰语言,这和perl正好背到相驰。这样也是个好处。perl易写难读,而Python强制编程员有个良好的编程习惯。好在他学起来非常容易。Python在编程领域的占有率一直处于稳步上升之中,根据最新的数据,Python排名第六。前五名分别是Java、C、PHP、C++ 和 VB。著名的搜索引擎 Google 也大量使用Python。更加令人吃惊的是,在Nokia智能手机所采用的Symbian操作系统上,Python成为继C++,Java之后的第三个编程语言!2006年的Google编程大赛已经将Python作为参赛语言之一,可见Python的影响力之巨大。
Ruby
Ruby是面向对象的编程语言,是脚本语言和PHP一样。她追求的是“简便快捷的面向对象编程”。Ruby是解释型语言,因此不需编译即可快捷地编程。同时Ruby具有类似 Perl的强大的文本处理功能,她可并不只是个玩具,您可以用她来进行实用的编程。此外,您还可以很方便地使用C语言来扩展Ruby的功能,因此可以把她当作各种库的前端来使用。若您曾经“想要一种简单的面向对象的语言”,或者认为“Perl的功能虽然好用,但它的语法真让人受不了”,又或者觉得“lisp系列语言的思想不错,但到处都是括号真让人讨厌,最起码算式应该按照通常的样式书写”。那么,Ruby或许能让您满意。
归纳以来,Ruby有以下优点:
解释器
Ruby是解释型语言,其程序无需编译即可轻松执行。
变量无类型
Ruby的变量没有类型,因此不必为静态的类型匹配而烦恼。相应地,错误检查功能也变弱了。
不需要变量声明
所有变量均无需声明即可立即使用。另外,从变量名即可判断出是何种变量(局部变量,全局变量,实例变量)。
语法简单
语法比较简单,类似Algol系语法。
不需要内存管理
具有垃圾回收(Garbage Collect,GC)功能,能自动回收不再使用的对象。
一切都是对象
Ruby从一开始就被设计成纯粹的面向对象语言,因此以整数等基本数据类型为首的所有东西都是对象,它们都有发送信息的统一接口。
类,继承,方法
Ruby当然具有面向对象语言的基本功能。
特殊方法可向某对象添加方法。例如,可以把GUI按钮被按下时的动作作为方法记述下来,还可以用它来进行原型库(prototypebase)的面向对象编程(有人这么干吧)。
用模块进行混合插入(Mixin)
Ruby故意舍弃了多重继承,但拥有混合插入功能。使用模块来超越类的界限来共享数据和方法等。
迭代器
该功能可以将循环抽象化。
闭包
可以将某过程片段对象化。对象化后的该过程片段就称作闭包。
功能强大的字符串操作/正则表达式
以Perl为样板创造出了功能强大的字符串操作和正则表达式检索功能。
拥有超长整数
添加超长整数功能后,可以计算非常大的整数。例如计算400的阶乘也轻而易举。
具有错误处理功能
错误处理功能可以使您编写代码处理出错情况。
可以直接访问OS
Ruby可以使用(UNIX的)绝大部分的系统调用。单独使用Ruby也可以进行系统编程。
动态加载
若OS支持的话,可以在运行时读入对象文件。
但Ruby也有下列缺点。
Ruby On Rails,优点是不像Struts那样需要大量的配置文件,一切都采取默认的配置,包括访问路径,uri等,而这也是它的缺点,不能灵活的配置。
总结就是ruby很适合做中小型web工程。他和jsp(J2EE)并不冲突,一个是低端的一个是高端的。而造成冲突的是PHP,不过php易学、免费、经过了很多年的考验很稳定,LAMP几近经典,是大中小型企业乐于选择的,是当前用的最多的脚本语言,Google、腾讯、网易等等大型网络集团都是使用的php这样也给那些小的企业了信心,特别是Linux集群技术的流行使得PHP更加不易受到ruby的冲击。但是不容小觑。潜力非常巨大。
PERL
perl和java是一样的。
第一. Perl强大的正则表示式(regular expression)比对以及字符串操作使这个工作变得简单而没有其它语言能相比。Perl非常擅长于切割,扭转,绞,弄平,总结,以及其它的操作文字文件。生物资料大部分是文字文件:物种名称,种属关系,基因或序列的注解,评住,目录查阅,甚至DNA序列也是类文字的。现在互相交换以以文字文件的形式存在的但是具有不兼容的资料格式生物信息资料是一个很头疼的问题,perl的这个方面的优点,可以在这一方面解决不少问题.
第二. Perl能容错。生物资料通常是不完全的,错误或者说误差从数据的产生时候可能就产生了.另外生物数据的某项值栏位可以被忽略,可能是空着的,或是某个栏位也就是某个值,被预期要出现好几次(举例来说,一个实验可能被重复的操作),或是资料以手动输入所以有错误。Perl并不介意某个值是空的或是有奇怪的字符。正规表示式能够被写成取出并且更正错误的一般错误。当然这种弹性也可能是各坏处。
还有,Perl 是组件导向的。Perl 鼓励人们将他们的软件写成小模组,不论是用 Perl 函式库模组或是正统的 Unix工具导向的方式。外部程序能够轻易的被整合进 Perl 程序,靠着管道(pipe),系统呼叫,或是插座(socket)。Perl5引进的动态载入器允许人们使用C 的函式,或者让整个编程过的函式库,被使用在 Perl直译器中。最近的成果是世界各地的智能结晶都会收录在一组模组里面,称为”bioPerl”(请参考 Perl Journal)
Perl 很容易去写并且能很快开发完。直译器让你不需要宣告你所有的函数型式以及资料型态,当未定义的函式被呼叫时只会引起一个错误,除错器也能与Emacs很好的合作并且让你能用令人舒服的交谈式的开发模式。
Perl是良好的原型语言。因为它快而且脏(quick and dirty),用 Perl建构新演算的原型比直接写成一个快的需要编程过的语言来的有意义。有时候发现结果是Perl已经够快了,所以程序变不需要移植;更多情形是某人可以用C写一个小的核心程序,编程成动态载入的模组或是外部的可执行程序,然后其它的部分用Perl来完成。这部分的例子可以参考 http://waldo.wi.mit.edu/ftp/distribution/software/rhmapper/)。
有一点要强调的是, Perl 在写作网页 CGI 方面非常优秀,而且重要性随着各实验将资料发表在网络上之后更是增加。我在基因中心环境下使用Perl 的经验从头到尾都是值得称赞的。然而我发现 Perl也有它的问题。它的松散的程序风格导致许多错误,这些在其它严格的语言都会被抓到。举例来说,Perl让你在一个变数在被指定值之前就能使用,这是个很有用的特性当你需要的时候,但是却是一个灾难当你单纯的打错了辨识名称。同样的,很容易忘记要宣告一个函式里面的区域变数,导致不小心地改到了全域变数。 最后,Perl 的不足之处在于建立图形化的使用者接口。虽然 Unix忠实信徒所有事情都能在命令模式下完成,大多数的终端使用者却不同意。视窗,选单,弹跳的图案已经变成了必要的时尚。
直到最近,直到最近,Perl 的使用者界面(GUI)发展仍是不成熟的。然而 Nick Ing-Simmons的努力使得 perlTK(pTK)的整合使得以Perl 驱动的使用者接口在 X-window上面成为可能。我的伙伴和我曾经在 MIT 基因中心写过几个 pTK为基础的应用程序供互连网使用者,而且从头到尾都是一个令人满意的经验。其它的基因中心则更大规模的使用 pTK,在某些地方已经成为主要的生产力。