下载本文示例代码
去年我们到中国建筑科学研究院调研,王铁成院长在介绍他们进行企业改制的经验时,有句话给我留下了较深的印象:“企业要谋求发展,首先应认清自己,应知道我是谁,我过去是谁,我现在是谁,我将来是谁”。Who
am I?我要做什么?我要的是什么?我的优势是什么?我应该做什么?…
一个商业控件——用友华表Cell让我真实地体会到社会分工所带来魅力,它能使人充分发挥自己的特长而用更小的代价获取更大的收益。让我清楚了自己应该做什么,不该做什么。一个应用级开发团队就应该把精力放在专业技术的结合上,而不是做基础开发,让最擅长的人去作最擅长的事吧!我们仅仅是擅长把建筑与计算机拿捏到一起的那类人。我有缘结识了华表CELL,一个让我彻悟的控件!
一、结缘建筑与计算机
由于从小爱好无线电,记得81年高考填报志愿的时候,所填志愿大多与电子或邮电有关。大概是比较独立的缘故,好像当时父母就没有参加什么意见,最后一个志愿栏目很长时间都没有选定,我邻座的同学在他父母的督促下填写了许多建筑学校,想起我父亲也曾建议我报建筑学校,他说建筑业比较轻松、好玩,人生一世,怎么都是一过,没必要把自己搞得太累(他原来是造飞机的,在现在的成都飞机公司工作,57年被划成右派以后就被下放到建筑工地,在78年平反时政府说可以回到原单位恢复职务,他也没有回去一直在搞他的建筑)于是我也就照抄了一个学校。我所在的中学是四川有名的学校,那一年全校考得十分糟糕,平常考试通常在班上是十名以内的我,还是被最后、唯一的建筑志愿收走了,当时真不想去,但考虑到家庭的经济情况和如果拒绝报到的话必须停考一年(当时要求服从组织分配的规定),就这么开始了我与建筑之缘,后来发现有一帮不错的同学也就认命了。
84年毕业分配到四川省建筑科学研究院中心试验室从事应力应变测试工作,每次试验完毕后都要手工进行大量的数据处理,虽然当时单位已经有台式计算机,但由于我们常常在野外作业,需要及时得到测试结果处理报告,于是分配到一台日本SHARP公司生产的PC1500计算机。这个8-bit的小东西,基本内存只有8K居然五脏俱全,还有打印机。更让我着迷的是除了具有BASIC语言以外还可以用LH-5801
机器码驱动硬件和底层开发,也就是说我可以用汇编语言来开发自己的语言。除了能轻松应付工作以外,我还经常用它的接口来驱动和控制一些设备和信号,它对我来讲,更多的时候是一个玩具,但这段经历奠定了我与计算机结缘的基础。86年我获得了一次进修的机会,离开了我原来的岗位,回到单位以后又从事工程设计工作。基本上有五年的时间没有再摸计算机。
二、踏上开发这条船
后来被安排从事建筑结构设计,常常需要到计算站上机,并支付几百乃至上万元不等的上机费。一次到同学单位串门,看见他们使用PC1500计算机附带一个程序模块盒,可以完成绝大多数计算任务,但程序是加了密的,只能计算不能看见原程序。用我以前玩PC1500的基础,不到一分钟就将其解密了。于是向领导申请买了一台PC1500A,记得花了2400元,这时它的内存已经可以扩充到28K了,节约了大量的上机费。后来发现最主要的应用程序——框架结构计算程序,运算太慢,计算规模也太小,于是开始用汇编语言改写最耗时的解线性方程组的程序,一下子将过去需要耗费45分钟的计算提高到仅用15秒,再通过计算机接口扩充附加内存(最多可附加到512K,并增加了60多条扩展BASIC指令,可运行附加内存的程序、向附加内存存储变量,还可输出汉字),将只能计算3跨6层的规模提高到可以计算6跨15层的规模,许多朋友开始向我索要和购买程序,同时也让我发现了其间的商业价值。后来这个模块在国内销售到了十五个省市。
要用汇编语言写线性方程组的程序,现在我肯定不愿再干这种事情。但当时却一点也不觉得什么,没有给我留下难和苦的印象,它所带来效率上的大幅度提升,却让我记忆深刻。现在我们有些程序员,在程序运行较慢时,不太愿意花时间或认为不太可能会提高程序的执行效率,“想想阿波罗登月时,人类计算机的内存只有8K,我们就没有什么做不到的!只是看投入与产出是否合算而已。”不同的方案设计常常能让效率提高许多。实践中,只要用心!总能把慢的东西搞快!(不需要动用汇编)。
486诞生了,PC1500开始从我的世界退出。PKPM推出了大型结构计算及绘图软件,在当时的技术条件下开发出中国人自己的矢量图形系统,让我十分佩服。但整套软件需要十几万,对当时只有几百块收入的发烧友来讲,只有采取老办法来获取心爱之物——解密。由于不能得到所有正版软件的密钥,不能采用克隆密钥的办法,只有跟踪解密后分析仿制密钥。最初非常轻松,每必克之,后来对方不断升级更换密钥,就越来越难,也越来越有挑战性。由于我们单位已经购买有正版软件,解密的目的已经不再是对软件本身的需求,而是像在下棋、对垒、和一个没有见面的朋友在做智力游戏。记得最后一次解密,从开始到成功,花了半年多的时间(由于已经开始编写自己的建筑工程管理软件,便没有把解密放在心上,但没有完成一直让我觉得不舒服),到我的软件1.0出来需要做加密的时候,我开始设计自己的加密系统……终于一天我觉得有一个方案是最完美的,突然我想到对方是不是也采用了类似的方案,于是坐到计算机旁,成功了!那天家里只有我一个人,夜深了,没敢大叫,我兴奋地在大院里跑了一大圈。人生快乐之事,这大概也算一类吧!我终于体会到为什么说“对于科学技术来讲,最完善的方案,不同的人做出来的都应是一样的。”后来软件加密进入了加密锁时代,我也正式投入建筑工程软件开发行列,单位调动到我院的计算中心工作,从零开始写我的源代码,希望能用建筑和计算机两项技术融合的经验为我工程建设的朋友们提供一个综合的、拥有自主知识产权的《工程施工现场微机辅助管理系统》的软件产品,不再玩解密游戏,而是想方设法地研究加密保护自己的成果了,生活往往就会是这样一种怪圈。
Windows时代又到来了,自己多年熟悉的东西开始随风消逝,DOS中断被Windows API淹盖,解释型语言执行效率低和更容易被解密的特性被我们放弃了,Delphi
V1.0满身的BUG让人感觉不是在学用语言,而是在研究语言,不断地打补丁,累!这个时候才开始领悟到父亲当初建议我搞建筑的意义,没有办法,已经上了这条贼船。好在Delphi
V4.0推出了,虽然好多朋友仍说这是一个BUG不断的产品,但有了用1.0的功底,我们已经觉得非常不错了,用它我们开发出了自己的矢量图形系统,开发了《工程预算计价系统》、《工程网络计划管理》、《施工平面制作系统》、《标书及施工组织设计》等软件,开始逐步构建《工程施工现场微机辅助管理系统》的各个模块。因为有前面所讲的一些经历,在遇到困难的时候,最坏的打算是
“大不了自己打补丁”。为了使大家能共享一些成果,我们也自己编写一些DLL或常用单元,每一个模块都是我们自己开发的,虽然效果不错,但大家都觉得累。特别是升级,几乎都有程序员的事情。什么都自己做的开发方式所带来的负面影响越来越明显,我们开始尝试对外分包模块的办法,不理想!很难在本地找到一个像样的合作伙伴。曾经考虑过用EXCEL来嵌入开发,但一想到需要用户支付许多额外的附加费用,很快就放弃了。在一个缺少优秀程序员的团队,我开始困惑,开始问自己是否能够完成《工程施工现场微机辅助管理系统》这样一个工程。直到有一天,我看见了一个软件,很小的执行程序在一个界面下,能像EXCEL一样调用不同格式的报表,这正是我们预备自己去做的事情。于是我让我们的程序员去研究一下,他告诉我这个软件用了一个“CELL32.OCX”的控件,我们开始测试、了解这个控件,一个中国人自己开发的控件、一个分发费用才几千元的控件。我们开始用它做商业开发,起初只是用他来做各种报表的处理工作。随着工作的不断深入、对它越来越了解,不断感受到它的好处,也开始发现它的不足、开始打补丁、开始向开发商求助。通过互联网这个通道,两个不曾谋面的开发团队,一个在北京一个在成都,进行了多次成功的合作,我们的需求很快得到解决。然而让我更惊喜的是,我们发现这个控件的魅力不仅仅是做做报表而已……
三、华表开启那扇门
《吕氏春秋·察传》:宋之丁氏家无井,而出灌汲,常一人居外。及其家穿井,告人曰:“吾穿井得一人。”有闻而传之者曰:“丁氏穿井得一人。”国人道之,闻之于宋君。宋君令人问之于丁氏,丁氏对曰:“得一人之使,非得一人于井中也。”
这是我念初中时的一次文言文翻译测验题,当时没有什么课外读物,而现在只需在互联网上搜索一下关键词,就可知道这是一篇有名的寓言。我具体把它翻译成什么样不记得了,反正一塌糊涂。但这个故事我却始终没有忘掉。
作为专业性较强的应用软件开发,需要专业技术人员、程序员、内部测试员良好的配合。以过去的开发方式,一个软件项目的开展,程序员的压力和工作量是最大的,协调工作也会耗费一些不必要的时间,占用了大量的程序员,极大地限制了我们的研发能力。然而,当我们使用华表以后,成功地将程序员从事务性工作中解放了出来,程序员只需要按照计划书把需要的功能做出来就行了。专业技术人员和美工人员利用我们根据华表“超级报表”改进的“报表之星”软件进行功能和界面设计,并可由打字员和内部测试员分担他们的部分工作。对于我们这种专业技术人才资源丰富,优秀程序员匮乏的单位来说,无疑像是扩大了程序员队伍。我们的程序员可以把大部分的开发精力,用于与专业技术相关部分的程序研发上,而不是软件的各个角落。“丁氏穿井得一人。”而我用华表得多人也!
由于华表的出现,还让我们对OOP有更多的体会,原来面向对象的方法不仅仅是针对Program的。工作和项目实施中许多内容是可以继承和重载的。我们尽量把可组织的工作定义成为不同的类来划分和安排,效率进一步得到提升。
由于华表的出现,我们开始关注商业组件、控件。后来我们又引进了图形控件和界面控件等商业软件开发包。过去我们花了近一年的时间开发自己的矢量图形系统,而利用新的图形控件我们仅用了一个实习生做了三个月,大多数功能就已经超过原来的效果。是华表帮助开启了那扇通往正确道路门,唤回了我久违的轻松感觉!
四、我的Cell应用
好比饭店厨师,同样的配料,不同的厨师会做出不同的味道。Cell就像华表推出的一种配料,怎么做是需要我们去发挥的。再又好比儿时玩过的积木,刚给你的时候有说明书、还有附图,能照着附图搭建出一件东西能获得一种快乐,但积木的更大魅力还在于可以搭建出附图以外的世界。网上对CELL有各种各样的评价,有的说好,有的说不好。别的领域我不了解,就建筑工程领域来讲,CELL在工程管理和工程试验检测以及科技报表都有非常好的应用效果。下面是我们部分的应用例子:
1. 数据的查选和引用
在科技图表软件中有些输入框需要填入一些固定的选择数据,它们可能是一些表格内的参数,也可能是一段文字,甚至可能是表格中其他数据的运算结果。在通常的软件开发实践中可能会用弹出一个窗口来完成,但利用CELL提供的函数和功能,通过简单的设置就可完成。不过要做出一些特殊的效果,还是需要动一些脑筋,如果你用过CELL,试一试能否做出下面的一些效果,你会发现,发挥是一种再创作,可以为Cell做不同的诠释。
图4-1是一个简单的二级引用的下拉窗口,只需设置单元属性就可以完成。图4-2是一个引用具有合并单元格格式的下拉窗口,它的特点是引用的窗口保持了原有印刷表格的排版风格,不知你是否掌握了这个技巧。图4-3的下拉窗口里面的数字是通过表格上面其他单元格的数据计算出来的,上面的单元格数据发生改变,下拉窗口里面的数字和文字判断结论也会随着改变。这自然会让人想到,我们可以用Cell去做程序输入或工作界面。而其最大的优点就是完成这些工作并不需要占用程序员。
图4-1
图4-2
图4-3
图4-4
2. 公式与图形的处理
利用计算机处理科技报表,除了需要加入一些特殊的专业计算函数以外,其另一个特点就是还需要显示、打印公式和图形,当初的Cell是很难处理这个问题的,它只能处理光栅图形,这样很难兼顾打印和显示的矛盾,显示没有问题了打印很难看,打印可以了显示又很难接受,不能做到见即所得的效果。华表和我们一道解决了这个问题,这就是使用中国人自己开发产品的好处。我曾购买有国外的
图4-5
图4-6
两个中间产品,其中一个售价$385的控件情况与上面提到的很相似,我们十分清除问题的所在,还把解决方案告诉了对方,如果由对方去处理将非常简单,而且对提高这个产品的内在品质十分有利,对方回答“must
be a raster image”,如果实在需要这个功能估计追加费用“would be a between $2,000 and $5,000”!后来我们用打补丁的办法去解决的这个问题。
Cell还有一个方便的地方就是可以加入自定义函数,当你需要的功能Cell没有或你自己认为不够完善的时候,自己做吧,一样很轻松!图4-4是一个工程统计计算的报表,程序员仅仅补充了工程专用均方差计算函数,其他工作由一般技术人员完成,用户说这张表帮了他们大忙,过去需要干2周的事情,现在半天就可以了,公式排版样式与印刷的表格一模一样,还能自动进行中文结论填写!图4-5是一个嵌入AutoCad图形的例子。图4-6是一个嵌入Word排版格式文本和特殊公式的范例,后来我们还专门开发了一个将已经嵌入的图形和Word排版格式文本重新取回编辑的辅助辅助工具。
3. 自动采集、数据、图形、文稿合一的报表
Cell5.0已经有了比较强大的图表功能,但用于科技报表的特殊图形分析仍然不能满足要求。程序员可以利用自定义函数很轻松地追加一个图表功能;再加上一个自动采集接口,实现自动填写原始数据;还可以利用Cell本身的数据透视功能,实现数据重复引用,自动完成计算和报告结论。可以实现在试验完成的同时,完成试验数据分析报告(文字和图表):
单桩竖向静载试验结果及Q-S和S-lgQ曲线
单桩竖向静载试验结果及Q-S和S-lgQ曲线定制函数,能够自动计算统计数据绘制曲线,修改任意数据,图形和结论随之改变
4. 跨上网络的控件
华表Cell有一个插件,专门用于Internet平台,但我们没怎么用它。在我们目前的应用中,很少需要在网上去打开一个单独的Cell文件。我们的应用通常是用它做界面,做输入、输出、打印界面,它的好处就是可以获得见即所得的效果,如果还嫌不够美观,可以加上背景图片。最常见的应用是在同一个样式表(界面)上输入或输出不同的内容,即实际的需求是整个Cell表与某个数据库有关联,而不是Cell组建或插件中所提供的某个单元与某个数据库关联的功能。花一点功夫做个辅助控件即可满足这个需求,毕竟Cell已经给了我们太多的东西!
应用人员在最熟悉的报表样式上工作,无需专门培训
另外,应用Cell还可以做出很多的动态控制效果,比如动态扩展表格内容(即在同一表格下,用户可点取用Cell设定的按钮,改变部分单元格的形式和内容,变成另外一种样式,而不是选用另外一张表)。限定只读区域不能被点取(做界面非常有用,否则用户会在不相干的地方点出一些空白单元格来),用回车代替软回车在单元中录入文字(用户很少习惯用软回车来实现提行操作的)等等。很多需求都可以利用Cell提供的函数扩展一下就可以做到。这里就不以一一列举了。
五、结束语
去年春节前我利用出差的短暂间隙拜访了用友华表的几位朋友,和他们说到了Cell对我们的帮助和影响,他们曾建议我把这种感受写出来给大家分享,回来以后总被其他事情缠着没有时间静下来写东西。算起来又一年了,这一年间我们仍然不断地感受到这种影响的魅力。利用春节这个假期,我特意安排时间把这段故事写出来。算是还愿吧!
也许有朋友会问:为什么不一开始就用控件!我也曾希望时光能够交叉。历史就是这么形成的,在我们需要的时候,好的控件还在娘胎里,也许是1.0、2.0的版本没有足够的吸引力或缘份。我们就这么经历了、付出了。这就是我为什么要从81年说起的原因,它是一段历史,它是一个过程。我们没有今天刚出校门的同学那么幸运,他们不需要很了解什么是中断、什么是磁道,甚至可以不用了解API函数就可以开发很多软件,更不需要知道LH5801是什么。我希望有人能从我的故事中获得些什么,就像我用Cell一样。
也许还有人会说,你没有见过更好的控件吗?,比如谁谁谁可以直接进行格式文本编辑和插入矢量图形等等。我相信还会有很多很好的控件,不过“同一时间你只能趟过一条河流”,就像总有人问:究竟是VC好还是Delphi好,是VB好C#好?都是好东西,各有各的优势和不足,都能做出好东西来,适合你的就是最好的!我是做商业开发的,我用了华表Cell,实践证明、用户反映都很好!我推荐给大家!我体会到了控件的好处,等我有好东西了,我也会把它做成控件,觉得有价值的我会拿出来让大家分享!去年我们有个实习生总喜欢问我一句话:“有没可以直接用的函数来解决这个问题”,我说“如果有的话,你一个月就可以搞定几个项目了”。我想会有这么一天,当你需要某个函数的时候,你可以到网上去Down一个控件或叫其他什么东东的来用就可以了。现在我们可以DIY自己的电脑,自然我们也可以DIY自己的软件,甚至不需要精于Program。我们目前开发的“报表之星”正在往这个方向努力,希望让一般的科技人员能够DIY自己软件,甚至做出商业软件。
马上又要上班了,我将继续去搭建我的积木。也许我会很忙,但我的心情很愉快、很轻松。因为我知道,我们能够轻松地完成《工程施工现场微机辅助管理系统》,即便我调动到其他地方工作,我的那帮刚出校门的兄弟,也会帮我搞定的,不过他们的目标可比我高远多了。因为我们已经找到了一条通向正确目标的捷径,文革时期有句老话“只要路线对了头,一步一层楼”!感谢上天!感谢华表!感谢和我一起走过的朋友们!
祝华表越来越好!祝愿我们国家的本土软件兴旺发达!
2004.春节 草草于 成都
作者简介:
张扬:1964年7月生于四川成都。四川省建筑科学研究计算中心主任、高级工程师;成都建龙软件有限公司技术总监。毕业于四川省建筑工程学校工业与民用建筑专业和四川省建筑职业技术学院企业经济管理专业。先后从事工程电子力学测试、工程结构、设备工种设计、工程软件开发等工作。进行商业开发所用过的编程语言:BASIC、汇编、QuickBasic、Foxpro、Delphi。擅长电子技术、美术;爱好太极推手运动,获国家武术段位6段。
下载本文示例代码
阅读(221) | 评论(0) | 转发(0) |