我的第一个项目是对一款公司现有产品的改造。原产品是一个键盘协议转换器,用以把PC机的PS2键盘转换为SUN工作站的串行协议键盘。新的产品是在现有产品的基础上加一个PS2鼠标, 这样就可以用廉价的PC键盘和鼠标代替昂贵的SUN工作站输入设备了。
我曾在高校教过两年电路,硬件基础还比较扎实。我看了一下设计,MCU还有多余的输入输出管脚,硬件上应该是可行的。问了一下先生,他认为余下的存储空间应该足够用来添加所需的控制软件。
心里有了底,就告诉John说这个课题可以做。John很高兴,也没有限定完成的时间。在我看来,修改和增加程序就如同外科医生给病人动手术。即使修改一个小的功能,程序员也必须了解代码的整体结构,功能,这样才知道从哪里下手。同样,内行可以根据一台手术确定一个主刀医生的手术水平,一个有经验的程序员可以通过程序看出代码设计者的编程风格,逻辑清晰度,甚至于性格。
我很幸运,源代码的结构清晰,模块化强,注解完整。以前学编程时的做的软件相对功能简单,为了交差往往只看重结果,不太在乎程序的风格和结构的模块化,也不太考虑代码的可靠性。这个程序向我提供了一个模版,为我形成自己的编程风格打下了良好的基础。
那是一段艰苦的日子。我每天下午大约六点赶回来,接了女儿后和她一起回家。晚饭基本都是我和女儿自己吃,先生大约要到八九点之间才能回来。洗过碗,检查完女儿的作业,安排她上床睡觉, 我的加班时间正式开始。打开电脑,调出源程序,恭候已经精疲力竭一脸不情愿的先生。
先生的一个巨大缺点就是缺乏耐心。他曾经和我讲过程序的整体结构,功能,可刚刚接触代码的我却无法完全消化。随着学习的深入,我开始针对性地提出问题,先生不解地问我为什么他已经解释过的东西我依然不懂。有时候这样的情况一晚上会发生几次,这时先生就变得不耐烦了,而自尊心极强的我就开始委屈地抹眼泪。先生往往会说早知我这么痛苦,就不把我介绍到公司上班了。他甚至建议我趁着H1B工作签证还没有申请到,立即请求John停止申办,这样直接回家也不必考虑身份转换问题。
我是哭过,吵过,动摇过,第二天又会精神抖擞地去上班。我诅咒发誓再也不求我先生,可第二天晚上还得求他帮忙,心里恨恨地念着小不忍则乱大谋,君子报仇十年不晚。先生其实也不忍看我如此受罪,他常劝我说我不必给自己那么大的压力。他每天加那么多的班,老板John又不是不知道,所以John对我的期望值不会太高,我只要别太离谱就可以了。如果两个人都那么卖命,再把工作带回家,为工作的事生气就太不值得了。
我个性中不服输的一面占了上风,先生是先生我是我,我必须证明我自己的技术实力和敬业精神。在一个半月的时间里,我针对需要增加的鼠标功能修改了电路。在熟悉代码的基础上,依着源程序的结构和编程风格,增加了一个鼠标模块。当我告诉John 我的课题完成了并向他展示时,他完全是一副意想不到接着欣喜若狂的样子。从那以后,我也成了他团队里的Key Member。看来我先生是对的,John原本对我并没有太高的期望。
关于这个项目还有一个小插曲。公司里有一个乌克兰人Victor,他的头衔是总工程师,负责公司里几乎所有产品的硬件设计。因为新入职还搞不清状况,我自作主张修改了电路,后来知道了就赶紧拿着设计请他提意见。Victor的态度不太友好,他断定我没有实际经验,考虑问题太简单。事后才知道这是一个被Victor枪毙的产品,他认为硬件上无法实现。John抱着让我练手的目的把它交给了我,刚刚入行没有条条框框束缚的我却用Victor没想到的思路解决了问题,Victor自然是心里不爽。需要澄清一下的是我和Victor在后来的工作中多次合作,见识了他坚实的硬件基础和严谨的工作态度。我们至今还保持着联系。