选择Delphi作为主要的程序设计工具和语言,实际上是非常偶然的。2000年来到北京读博士,那时我只会FORTRAN语言,但非常羡慕那些可视化的程序设计者,能够将自己的算法研究做成容易推广使用的“软件”,于是自己也打算学一门。最开始我选择的是JAVA,买了本Visual J++的书。书还没看一半,SUN和微软打起了官司,结果微软输了,Visual J++不再进一步维持和开发,我的心真是凉了半截。那个时候对于程序语言和开发工具还不是非常了解。听得最多的是VB和VC(主要是微软势力大,宣传多的原因),不选择VB的主要原因是VB是解释执行的,我总觉得会太慢(JAVA也是解释性语言,但那本Visual J++的书吹嘘其JIT编译器极其优秀,编译出来的程序运行速度超过C);不选择VC的原因,并不是因为其难,而是因为我特别不喜欢C语言的那一套符号表述,怪怪的,感觉像咒语。Delphi据说是搞数据库的,而我当时对数据库基本没有兴趣。
一个偶然的机会,我在学院路的高教书店里翻看程序设计方面的书。翻来翻去总觉得有一种语言看起来特别舒服,比我当时喜欢的FORTRAN90 的语法风格还顺眼,感觉流畅得像一篇英文。这些书都是有关Delphi程序设计的书。我一下子来了兴趣,得!不是挑了这么久了,就下决心学Delphi吧。此后,我就和Delphi结下了不解之缘,迄今未已。
Delphi Pascal确实是一种非常优雅的程序设计语言。学习过程中觉得其逻辑非常严谨。我经常能从中找到举一反三的快乐。比如分号“;”的应用,应该什么时候加,什么时候省略,从一种情况可以推出另一种来。还有Begin..End的加不加的场合,也是清清楚楚的逻辑。那个时候,这些简单的逻辑推演会给我带来好些快乐。但是,在很长一段时间里,我一直对Deilphi Pascal的面向对象语言特征和程序构架知之甚少。大概是过了一年,我才知道Delphi里面自己也可以撰写封装类。而有关继承、多态的理解与应用更是直到2006年的时候,2007年才开始理解有关接口的概念。
熟悉程序设计语言的朋友们一定会觉得非常诧异,我学习面向对象程序设计居然经历了如此漫长的过程。我想其中大部分不能怨我,而应该怨Delphi和大部分有关Delphi的宣传。Delphi实在太好上手了。鼠标拖拖拉拉,寥寥几句源码就可以开发出像模像样Windows可视化“软件”。当时有多少人为这种RAD程序设计方式而欢欣鼓舞!同时,Delphi为了保持对Pascal语言的兼容,是完全支持过程式开发的,偏偏我在过程式语言(FOTRTRAN)编程方面有较深的功底,习惯一时难以更改。更主要的是,从Borland到Delphi大部分专业级用户,对Delphi的宣传和介绍主要集中在IDE上,不断强化所谓的RAD开发功能,而有关语言本身介绍得很少。当时的市面上基本上没有专门讲解Delphi Pascal语法的书籍。不像JAVA和后来的C#,许多专著专门讲语言,以语言为核心,而IDE则可以五花八门,属于另外一块内容。
这种对IDE的片面选宣传,使得许多人不知道Delphi实际上也是一种非常出色的面向对象的程序设计语言。在Delphi的发展历史上,曾多次引入创新性的程序设计理念。比如当前流行的单根类继承模式,就是从Delphi开始的;现代面向对象程序设计中的重要概念——接口(Interface)也是在Delphi Pascal中率先引入的。利用接口的多根继承弥补了单根继承的不足,又可以避免C++等语言中多重类继承的缺点。利用Delphi语言本身开发的VCL曾经是世界上最先进的程序设计框架(Framwork),是Delphi的瑰宝,至今依然散发着迷人的魅力。可以说,在面向对象的程序设计发展史上,Delphi Pascal具有承前启后的重要作用。然而,在强大的IDE的宣传下,Delphi中这些本质性的东西被湮没了,Delphi的一般用户了解不多,而不用Delphi的人基本上不知道。我的一位在北航读电子商务(计算机专业)博士的同学,在他导师的要求下用Delphi 做了几个项目,但始终不知道在Delphi中也能自己定义类,这实在是很令人遗憾的。
确实,对IDE,尤其是对其RAD的强势宣传,使得Delphi当时吸引了一大批初学者。然而,随着软件开发工具不断的竞争升级,当RAD变得不再神奇的时候,Delphi的厄运开始来临了。Delphi对语言的垄断使得Delphi Pascal的编译器独此一家,缺乏应有的竞争机制,同时也导致Delphi Pascal社区本身市场的不足。重快手培训而不重内功磨练的市场模式终将遭到应有的惩罚。加上当时的Borland公司的方向性决策错误(如Delphi7以后曾一度准备放弃WIN32平台,全面转向.Net),因此,大约自Delphi7以后,尽管Delphi版本不断升级改变,但没有得到广泛应用,许多Delphi程序员转向JAVA或者C#,Delphi的影响逐渐衰落。
当然,我还是很喜欢Delphi的,也一直没有重新学习另外一种语言,尽管这肯定不是什么难事了。而且,Delphi本身也一直在不断发展和进步。从Delphi2006开始,我期盼已久的运算符重载功能终于得以支持,这意味着关于复数的运算,不再像原来那样全部依赖函数,那么晦涩难懂了。
Delphi目前不再是引领前进的步伐,而是在追赶时代的潮流。我非常希望一些Delphi应用大家们能够好好地写几本Delphi Pascal语言的专门论著,更希望能够有其他Pascal系列的新语言出现,就像JAVA和C#继承自C、C++一样。但这,也许仅仅是一个梦吧。