我的第一個項目是對一款公司現有產品的改造。原產品是一個鍵盤協議轉換器,用以把PC機的PS2鍵盤轉換為SUN工作站的串行協議鍵盤。新的產品是在現有產品的基礎上加一個PS2鼠標, 這樣就可以用廉價的PC鍵盤和鼠標代替昂貴的SUN工作站輸入設備了。
我曾在高校教過兩年電路,硬件基礎還比較紮實。我看了一下設計,MCU還有多餘的輸入輸出管腳,硬件上應該是可行的。問了一下先生,他認為餘下的存儲空間應該足夠用來添加所需的控製軟件。
心裏有了底,就告訴John說這個課題可以做。John很高興,也沒有限定完成的時間。在我看來,修改和增加程序就如同外科醫生給病人動手術。即使修改一個小的功能,程序員也必須了解代碼的整體結構,功能,這樣才知道從哪裏下手。同樣,內行可以根據一台手術確定一個主刀醫生的手術水平,一個有經驗的程序員可以通過程序看出代碼設計者的編程風格,邏輯清晰度,甚至於性格。
我很幸運,源代碼的結構清晰,模塊化強,注解完整。以前學編程時的做的軟件相對功能簡單,為了交差往往隻看重結果,不太在乎程序的風格和結構的模塊化,也不太考慮代碼的可靠性。這個程序向我提供了一個模版,為我形成自己的編程風格打下了良好的基礎。
那是一段艱苦的日子。我每天下午大約六點趕回來,接了女兒後和她一起回家。晚飯基本都是我和女兒自己吃,先生大約要到八九點之間才能回來。洗過碗,檢查完女兒的作業,安排她上床睡覺, 我的加班時間正式開始。打開電腦,調出源程序,恭候已經精疲力竭一臉不情願的先生。
先生的一個巨大缺點就是缺乏耐心。他曾經和我講過程序的整體結構,功能,可剛剛接觸代碼的我卻無法完全消化。隨著學習的深入,我開始針對性地提出問題,先生不解地問我為什麽他已經解釋過的東西我依然不懂。有時候這樣的情況一晚上會發生幾次,這時先生就變得不耐煩了,而自尊心極強的我就開始委屈地抹眼淚。先生往往會說早知我這麽痛苦,就不把我介紹到公司上班了。他甚至建議我趁著H1B工作簽證還沒有申請到,立即請求John停止申辦,這樣直接回家也不必考慮身份轉換問題。
我是哭過,吵過,動搖過,第二天又會精神抖擻地去上班。我詛咒發誓再也不求我先生,可第二天晚上還得求他幫忙,心裏恨恨地念著小不忍則亂大謀,君子報仇十年不晚。先生其實也不忍看我如此受罪,他常勸我說我不必給自己那麽大的壓力。他每天加那麽多的班,老板John又不是不知道,所以John對我的期望值不會太高,我隻要別太離譜就可以了。如果兩個人都那麽賣命,再把工作帶回家,為工作的事生氣就太不值得了。
我個性中不服輸的一麵占了上風,先生是先生我是我,我必須證明我自己的技術實力和敬業精神。在一個半月的時間裏,我針對需要增加的鼠標功能修改了電路。在熟悉代碼的基礎上,依著源程序的結構和編程風格,增加了一個鼠標模塊。當我告訴John 我的課題完成了並向他展示時,他完全是一副意想不到接著欣喜若狂的樣子。從那以後,我也成了他團隊裏的Key Member。看來我先生是對的,John原本對我並沒有太高的期望。
關於這個項目還有一個小插曲。公司裏有一個烏克蘭人Victor,他的頭銜是總工程師,負責公司裏幾乎所有產品的硬件設計。因為新入職還搞不清狀況,我自作主張修改了電路,後來知道了就趕緊拿著設計請他提意見。Victor的態度不太友好,他斷定我沒有實際經驗,考慮問題太簡單。事後才知道這是一個被Victor槍斃的產品,他認為硬件上無法實現。John抱著讓我練手的目的把它交給了我,剛剛入行沒有條條框框束縛的我卻用Victor沒想到的思路解決了問題,Victor自然是心裏不爽。需要澄清一下的是我和Victor在後來的工作中多次合作,見識了他堅實的硬件基礎和嚴謹的工作態度。我們至今還保持著聯係。