正文

我所见到的编程高手的故事和一些回忆(下)

(2011-03-07 21:12:39) 下一个

记得那年刚来加州,最大的感概就是那蓝天白云,阳光灿烂.对比而言,新州的冬天,是令人苦不堪言的.


 


这次我是在加州的一个大公司工作,光程序员就上百人.有不少高手,而一般的高手在这儿并不出众.我在一个有约20名程序员的编程部门里工作.有一位高手是我过去的同事的中国同事,能力系数约为25.是我知道的最善于图形编程的.


 


在大公司里工作的好处是,有很多可用的宏.就我所知,多数宏写得平平,经过多人改写,代码支离破碎,且少有定期维护.除非非用不可,我以少用为妙.依我看来, 宏是应是由一人编写,以后也要由编写者本人维护,除非编写者力所不逮才可换人.


 


很快,有一个不可不用的宏引起了我的注意.这个宏专用于把一个文件转为另一类文件,我称之为宏R.宏R可称为QC程序员的眼镜.用了它,成百上千页的文件可由电脑程序自行对比检查完成.不过这个宏也常出问题,另有几种擅自的修改版本,也还不顶用.我开始问别人了,答复是,即使用法正确,问题仍会发生,不怪宏编得不好,而是所要处理的文件太复杂多变了.


 


R的原作者是程序员M.我研究过宏R的代码,编得确有许多闪光之处,能够正确组织代码应付如此复杂的数据处理问题,的确是大手笔.又上网查相关方面的论文,能搜到的不多,倒是有一篇论文读了很切题.再看作者,正是M.查本公司网站,见到M相片,并知道还在同一栋楼工作.--若有机会见到他,我估计我会说:我拜读过你的论文,受益匪浅


 


据后来我知道的,M是本公司昔日编程头号高手,大概来自欧洲,颇有编程天才.后荣升为经理.他的宏编程能力绝佳,他的能力系数定为:80.是我知道的人中能力最高的.


 


为工作需要,我盟生了擅自改一改的念头.再加以研究后,发现了其代码上的得与失.有数据处理流程细节上的把握失当,也有算法上的低效问题.而注解中见得着后来的修改者(为何不由原作者来维护?),但从根本上来说,修改又于事无补.


 


我干脆吸取宏R的长处,重写了一个宏(姑且称为R1)为我所用.R1的运行极快,为R10倍.且运行得更平稳.不久,部门组织2人测试来R1并要求将R1的功能加码,宏R1完成后也成为公司的正式版本.因有多项附加的功能,成为宏R的替代品.宏R1的难度系数:90


 


不久,本部门又来一个程序员Y,工作经验近10年.编程上见解独到,代码分析细致入微.高手,能力系数:20


 


一天,经理交给我一项任务,编一个宏(姑且称为G),为每个程序员所使用.要求它自行测出当前程序文件名和路径,找到最近的输入/输出数据存放处.总之,就是在每个程序的开头都使用这个宏,让它去做它所能做的一切.我是宏G的编程者,Y为宏G的两名测试者之一.没想到,在我刚开始编时,Y就给我两个好建议,进度加快了.开始测试后,他又有好的改进意见.就这样,编程,测试,讨论,直至顺利完成.宏G的难度系数:70


 


终于,一道作图难题悄悄地来了.说它是悄悄的,是因为没有人提出让我做.但谁都知道那是困扰本公司多年的一大难题.曾有人尝试过换用另一种编程语言去作这类图,不大成功.更关健的是,要想一次编成,反复使用,必须用编程的手段把它做成一个宏.也就是,要编一个作图宏.而作图宏的难度系数几乎为一般作图程序的两倍.


 


我就有挑战难题的习性.于是,抽空跟经理说(我的谦虚精神不够,大概是这样说的):我在以前的一家公司,有人称我为作图专家呢,公司不是有个作图难题吗,现在我想把它做出来,怎么样?她说,你做了,我们还得有人力花时间来给你测试.这要有个计划,以免耽误日常编程工作.等等看,先别急.


 


这倒像是我扁担挑子一头热呢.没关系,就当我吹牛吧.不过,在下个月的会议桌上,这项任务真的就提出来了并交给了我.这个宏可称为宏P,很快就成立了一个小组,我负责编程,有5个人作测试,另有一人专写用户指南.另外还有不少要求来自统计师,无非就是说:你要把图画成这样的或那样的,再就是除了正确,图还得要好看才成。这些要求我都答应下来了,难度可能增大一点.同时,也听到有人轻笑几声,我想那是在提醒我:“说得容易,做起来难”。


 


P的难度和复杂程度在不久后就展现开来,往往是过了一个难关,就又看到了下一个难点.无怪乎有人曾认为这是个令人生畏的难题.当我还在开发宏P的半途中,得不到成功的喜悦,只得凭着耐心向前探索.几经修改,我的代码仍旧组织得有条不紊,而在编程流程上我心中也有慎密的规划.我在心里鼓励自己:过去用计算机解决难题无数从未失手,这次一定要战胜困难走向光明.


 


做为一个程序员,他的工作就是凭着计算机来不断地解决难题。有些公司是没有高手的,或只有能说会道但动手编程能力差的所谓高手。遇到做不出的难题,就会抱怨那是人力所不可及的。若公司非做不可,就得采取分工合作的方式,费时费力。而产品即使成功,多半性能不佳,首先,各模块间配合不良易出错,另一个问题是代码量大,运行慢。


 


终于,宏P开发成功了,测试顺利通过,用户指南也有人写了。这是我在工作中所做的最难的一个作图宏。宏P的难度系数:150.后来,宏P在公司各部门推广使用并深受欢迎,因为这种复杂多变的图形,正是统计分析师所需要的。成为本部门的一项引以为傲的成果。


 


后来,我除了日常编程,时而,还负责宏R1,G,P的维护与改进工作。我另外又完成了两个难度约为100的作图宏。


 


程序员从手指尖流出一个个的键盘符号.当这些键盘符号以最巧妙的排列方式组成程序代码时,计算机就会又快又准地为你工作.放眼望去,我真想说:宇宙不过就是几行程序代码呢

[ 打印 ]
阅读 ()评论 (10)
评论
Blue_Diamond 回复 悄悄话 回复宗阕的评论:
主要是,我有空把自己的一段经历写了出来.
编程本来是枯燥的,因此,只有去发现其中的乐趣,才会有动力使你乐此不疲.
Blue_Diamond 回复 悄悄话 回复transfer168的评论:
谢谢你的好建议.我早有此念头.我因只有加籍,可能要去加拿大开公司了.
还是得申请美国绿卡.就能在美国开公司了.
Blue_Diamond 回复 悄悄话 回复落英如雪的评论:
以后还是写点更接近生活的才好.
Blue_Diamond 回复 悄悄话 回复rky101的评论:

你说中了.
rky101 回复 悄悄话 回复transfer168的评论:
哈,她应该是做SAS(统计软件)里的macro(宏)程序。跟通常意义上的computer programming不完全一回事。譬如,Bill Gates和Knuth等都不懂SAS。
落英如雪 回复 悄悄话 给我这个只会上网读小说的人扫盲了。好文章,新奇有趣味。
transfer168 回复 悄悄话 看你写的让我想起自己以前作通讯控制程序的那股自信和能力.只要能提供现有相关的DOC,我就能连上数据. 但一想到算法做图算法的程序还是头大. 你才是顶尖高手. 佩服. 我只觉得,以你这样的能力也许能广开眼界开发出自己的产品而不局限在公司内部的需求上, 这样你的能力也许能得到更大的发挥.
多得ta 回复 悄悄话 好看!真的很喜欢!
宗阕 回复 悄悄话 看得出您很醉心于编程,这是一项聪明人的游戏,真正玩得好的不多,能从编程中体会到美的就更少。写的很好。
登录后才可评论.