如果不出所料,我的观点很容易绝对会引来骂声,因为这篇帖子已经会触动某些人心里面最痛而又最不敢面对的那根神经。但我还是想说,因为对于一块即将坏死的骨头,最理想的医疗方式是敲碎它,再等它重新生长。
关于.NET与J2EE技术平台的真实实力,有几个明白人真正地弄清楚了?要是真正的清楚,我认为这世界上可能也只有微软公司和IBM公司才真正的清楚吧。
但因为某些商业策略,两家公司都不会把最真实的一面展示给我们。我们现在所看到的部分,可以说是被包装过的,只能看到其中一面。
上面只是一个引子,我主要是想说的是几乎6年来(之前我不清楚,因为我98年才开始接触编程),这个业界给我留下的印象。
很早很早就听说了,VC比VB好得太多,但当时以我的基础,看VC着实吃力,于是我是直接学的VB编程,在接触VB的过程中,一开始基本上就是拖拖控件,然后在事件中写写过程,再到后来,大约过了一年吧。我突然发现VB的应用面十分广泛,与微软自己的东西有着非常优秀的集成,比如Office系列,提供一种完整的新体验,虽然我没有做过多少关于Office方面的开发(只操纵过Word来做报表),但是VB给我留下了深刻的印象。后来,接触了一本叫<<Windows Script Host核心编程>>的资料,才更加认识到VB的力量。很多时候,如果我要做一个简单的小程序,然而又不想使用Visual Studio之类的重量级IDE时,就可以写出一个vbs脚本来完成。
比如说,要建立一张表,用于进行某些数据输入测试时,我会用vbs写一个与Access生成的文本表结构相同的文本文件,在其中写入几千上万条数据,然后,再用Access把它们导入,整个过程,只需用右键在桌面上生成一个记事本,然后花不到5分钟时间写出代码,再改个扩展名,双击运行,最后,用Access导入表。整个过程就几分钟时间,而且一般情况下,写过一次的代码,下次修改起来也只是分分钟的事情。
感受到它的好处后,我就在够网上发了国内最早的VBS的教程(现在还可以在smiling上找到,当时国内几乎没有这方面的资料),后来直到年底,爱虫病毒的爆发,国内开始研究VBS,VBS才开始真正地流行起来。
后来,因为某些因素,我不得不接触一段时间(两年左右)的VC,在写VC代码时,有一些需要进行重复性的工作,我用VBS来进行处理,大大地提高了一些编程效率,那段时间整体用下来的感受就是:它将一些底层东西暴露给了开发者,开发者完全可以根据这些底层东西来构建自己的世界。VB就像现成墙啊,门啊之类的,而VC就是砖头,VB可以快速构建一个房间,而VC必须一砖一瓦的来进行。
在使用VC的过程中,接触了一些真正的面向对象的书籍,真正的接触下来,我觉得,说VC是面向对象不如说它是面向消息或面向窗口还更为恰当一些,因为大多数的时间都被无聊得打发在消息映射与处理上了,在对象的支持上,VC也许的确做得不错,而且对一些现成类库的支持算是做得好的,但我觉得:麻烦就是麻烦,没有其它可说的。而且它并不支持属性,都是用暴露公共函数接口来实现的,记得当时还有一篇教程中说,VC中这种方式是多么多么的优秀,说实话,现在真想一脚踩死那个作者。
我承认对VC++的研究不深,但是,VC的开发效率的确低于VB的开发效率,VC的执行效率虽然非常高,但很多时候开发效率的确优于性能。
后来,搞网站开发时,用的是ASP,因为VB的基础,能够十分迅速地上手,而VC在此时,除了一些需要叫究时效的地方需要针对IIS的接口进行一些开发外,我已经很少使用它了。
微软公司此时开始实行了.net战略(当时是Beta版),其中C#语言吸引了我,因为它具有一些能够让我感觉方便的特性,比如,装了sdk后,直接在记事本时写代码,然后就可以任何地方使用csc编译,这让我觉得VBS的便利性移植过来了,但真正地进行使用时,才发现,还是麻烦。
后来用了Visual Studio.net Beta2时,发觉VB.NET失去了原有VB6的一些特性,比如,原来在VB6中,直接点击运行时,可以非常非常迅速地看到运行效果,而在VB.NET中,却要等候漫长的编译过程,然后系统才挣扎着把程序运行了,整体给我的感觉就是痛苦。
于是,决定,学VB.NET不如干脆学C#,因为微软公司的宣传中,C#是专门给.net框架使用的。国内的C#资料十分稀少,很多东西,我都是从JAVA的书中学来的。当时对JAVA最大的不解就是:JAVA不是号称真正的面向对象吗?怎么不支持属性,也用方法过程来代替?而且相关的资料中也是像VC里那样说,说这样才是正道,我的脚又痒了。
在面向对象的思想中,一门语言是否真正的能够支持,我觉得应该是它是否能够提供良好的思想支持。把属性用方法程序实现,我认为这是不可取的,这会影响到对象思想的正确认识,对于那些过于匆忙学习面对对象程序设计的初学者来,对事物的理解会千万不少的麻烦,而且也不利于正确的思考。
举个现实的例子:坦然说,VB6是支持对象编程的,但它更像面向驱动的工具,不过,比起面向窗口来说,能够更好的提供对现实世界的逻辑描述,VB6的程序中,体现出了较强的触发性,而且这个触发性是很容易实现,而在VC中,因为消息的处理较为繁琐,更多的程序们不愿意采用直接的方式来实现,所以国内许多VC程序员思想都只是面对窗口的开发。
话回正题:虽然熟悉了一段时间的JAVA,但我还是选择了.NET,原因主要是在于,长期对微软公司产品的信心,同时还有对Windows系统的感觉非常良好。至少为什么这样,以后会做一些说明。
看见业界有许多观点就是:VB6是非专业的程序员使用的开发工具,对此,我觉得十分不解。
为什么会有如此的看法,我估计是一种极端狭隘的思想在作怪,因为这个大家总认为简单的东西不好,而且更严重的是,VB6的上手实在是太快了,很对不起苦苦花了N年时间,才学会如何做好一个窗口的程序员们。
而且更让VC程序们气愤的是:VB6与数据库的操作具有很大的紧密性,让VC程序员感觉到了巨大的压力。说实话,这压力本来不应该出现,但国内不少VC程序员们水平实在太差,写出的程序可用性简直可以与垃圾相当,并且好像学了N年的编程,仍然在做数据库,重要的心思都放在了如何将代码实现上,而不是对现实世界的描述。
对这类程序员来说,我不得不说几句不敬的话:
1、面向对象的思想你们一点也没掌握,你们的思想纯属面向窗口!
2、面向对象的工具在你们的手中纯属浪费!
当然,我的观点有所偏激,不过对于业界对于编程语言的态度比我好不到哪里去。
不过,令人欣喜的地方也有不少,比如Ratioal Rose之类的建模工具在国内的日加普及,无论业界观念如何,不少VC程序员们的代码质量也有所上升,毕竟这个工具更有利于让他们从代码的陷阱中爬来,虽然,还有不少公司是先做程序,再补UML图。
我认为,如果你没有真正用过几年的VB和VC,是没有在两种编程语言的工具上面做出比较的权利的,因为它们各有所长,正如这个世界上有生产三角尺的,也有直接用三角尺来画图的工程师一样。
世界是不断进步的,我们的程序员对世界描述的方式也是在不断地进步,从最古老的象形文字发展到现今能够对世界进行更为进步的描述,是一个不断渐进的过程,同样的,编程语言也是如此,随着时代的发展,对世界的描述将会更为高效,但高效不等于简洁,我们可以从现实的自然语言中进行探讨,就可以明白:
英文的语法比中文语法来说,更为简洁,但是中文的表现力不是英文能够比拟的,简单的说,几乎所有英文都可以用中文进行较好的描述,而中文翻译成英文的时候,这个过程却是一个麻烦的过程,很多时候,中文的描述在英文中并无法进行很好的体现。中文与英文之间的映射是一个多对一的方式,但即使是这样,英文中也有60%的语言冗余,这虽然制约了人的大脑对信息高效获取处理的能力(人的每秒通过感官获取的数据可以达到上G的信息量,然而进入大脑时,因为过渡机制,人的大脑实际上每秒只能处理不到1K的数据量),但另一方面,这也让我们增强的世界的感受,不是吗?
语言的发展说明了一个道理,这个世界的描述并不是只要求一种通用的描述方式,因为世界本身就是多元化的,程序的描述也将会越来越丰富,我们从发展到现在的java及C#语言,就可以看出,有很多时候,你处理一个功能时,很许多种实现方式,而且这些方式之间并不存谁是更好的方案,更多的时候,要取决于个人的语言描述风格来体现。