正文

我所見到的編程高手的故事和一些回憶(下)

(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 回複 悄悄話 好看!真的很喜歡!
宗闋 回複 悄悄話 看得出您很醉心於編程,這是一項聰明人的遊戲,真正玩得好的不多,能從編程中體會到美的就更少。寫的很好。
登錄後才可評論.