【技术前沿】由VBA 想到的
作者:研发部 杨盛海
这段时间由于工作原因研究了一下VBA,感觉完全是如坠五里雾中,主要原因是对ATL乃至对COM技术的应用不了解。简单说一下VBA,用过Office系列软件的朋友都知道它,用VB语法来控制文档生成过程,很不错。不只是Office,很多其它优秀软件都有VBA模块,比如AutoCAD。
这些都是VBA技术的应用,作为编程序的,当然想把好东西都拿来自己用,VBA技术 无疑是这些软件的亮点,所以成功地把VBA应用到自己的软件中是当前这段时间要攻克的主要难题。
历尽千辛万苦找来了VBASDK,却无从下手,看来还是知识储备不足啊。相对于知识的贫乏来说,更令人恼火的是,微软已经不再发放VBA的商业发行许可了,在这期间本人询问了他们的市场人员n次未果,这意味着,如果一旦把产品做出来了,发行的话要冒被罚的风险,不得已只能放弃。微软放弃的原因无非就是没有市场,或许还有别的原因。
没有市场不能说这项技术不是好技术,是没有多少人能玩得转而已,就像燕翅鲍放在菜市场一样,同样没人会光顾的。VBA的底层是COM技术,具体是经过封装的COM技术-ATL。有关COM技术的书已经很少了,为了研究VBA,我从网上找了一些ATL的电子书,在电脑上看得很费眼,于是想买两本纸书下了班看,居然搜遍网页而不得。最终在淘宝上买到了相对模糊的电子书印刷版,如获至宝。
同样是微软的技术,反观现在市场上大行其道的.net技术,书店的书架上则是琳琅满目,应有尽有。尤其是C#,现在毕业的大学生们其主修的课程就是C#。
这里不得不说一下,同ATL以及VBA一样.Net技术的底层也是COM技术。每个勤于思考的程序员看到这里不禁要问:同样是生活在一起的两口子,做COM的差距咋就这么大呢?
这里说一下两种技术的根本不同,ATL需要人们要懂得最基本的COM原则,而.net就不需要。即使是已经了解COM原则的人们学习ATL也是颇费心思的,因为ATL中眼花缭乱的模板和宏定义就够人喝上一壶的了。不过这不难理解,ATL只是简化了COM代码的编写,其它的则没有变,几乎就是直接从底层开始构建COM组件。之所以难理解,只是因为微软的开发小组按照他们自己的规则把COM开发过程简化了,而别人要理解这个规则需要一定的耐心和一定的时间。打个比方说,两个特务在街头对暗号,一句简单的词语就能知道对方想表达的意思,这个暗号规则就是ATL,而普通人想知道暗号的规则是需要花时间的,当然,如果熟悉了,那么暗号用起来还是事半功倍的,所以学习ATL的过程就是一个艰苦的学习某个规则的过程。是对自己思维的改造过程。
而.net就不一样了,它采用的方式是以人们自然的思维去封装代码,是用自然的面向对象思想将COM技术封装起来,用户不用改变自己的思维,只是集中于程序所要表达的意思就行了。所以.net给人的感觉就是亲切,用起来很顺当。因为它是对COM技术的使用,而不是让用户直接从底层开始用COM开发,所以不需要用户了解COM规则。这好比两个不能见面的军官,他们要交流的话,需要让手下的特务来传达他们的意思,这两个军官自然也不用去熟悉什么暗语口令了,直接让手下用人话告诉他们就行了。人们总是比较容易接受他们能轻易掌握的东西,另外,.net涵盖了Windows编程的方方面面,无论是上层的数据库、网络还是底层的文本编码、多线程等都覆盖到了,做起软件来得心应手,再加之微软公司的大力推广,.net想不火都不难。
然而,.net繁华的表面下是无数COM组件默默无闻的工作,好多人总是拿.net和COM来做比较,这好比说是拿一辆车和发动机来比较一样,发动机是隐藏在车里面的。车离开了发动机就走不了了,而发动机装在其它的东西上也照样能开,比如装在三轮车上组成电动三轮。所以对.net和COM作比较是没有任何意义的,有意义的事情是你如何来看待它们。
在目前我们国家的软件环境来看,能赚钱是最直接的目标,能在最短时间里赚到最多的钱是人们普遍的想法,所以软件开发就以快速开发高额应用项目为主,什么项目钱多就做什么,什么工具好用、开发快就用什么。目前来看,还是国际外包项目比较钱多,而且有些国外客户,为了缩短软件交付时间,自己先把软件结构设计好,然后再把最累最繁锁的编码测试环节交给我们的程序员来完成,更有甚者,把涉及到核心技术的代码封装成动态库,只留给我们程序员调用的接口,几乎就是在和我们的制造业看齐了。我想任何一个程序员都不愿意做流水线民工吧,而我们做的某些项目就是在担当这样的角色。.net设计的初衷是好的,为我们广大程序员带来了方便,而它的负面影响也是不容忽视的,.net程序员只需要知道调用哪个类的哪个函数就行了,弱化了程序员对系统的控制,并使我们逐步产生了对.net的依赖而无法自拔,长此以往,我们对系统底层知识,对软件运行机理,对那些我们应该掌握的知识就逐步淡忘了。
由此看出,只做那些好做、做得快、赚钱多的项目,在短时间内可以获得丰厚了利益,但是从长远打算来看,终究不是办法。软件企业还是要有自己的核心竞争力,程序员还是要有自己看家的本领,向微软学习,要学习他们不向任何复杂事物低头的态度,要学习他们能够制定自己的规则,而不是等他们制定好规则出来我们去遵守。像COM这样的核心技术正在我们国家渐渐消失,不能不说是一种竞争力的削弱,期望我们广大的程序员同行们在不远的将来能看到这一点的改善。