記得那年剛來加州,最大的感概就是那藍天白雲,陽光燦爛.對比而言,新州的冬天,是令人苦不堪言的.
這次我是在加州的一個大公司工作,光程序員就上百人.有不少高手,而一般的高手在這兒並不出眾.我在一個有約20名程序員的編程部門裏工作.有一位高手是我過去的同事的中國同事,能力係數約為25.是我知道的最善於圖形編程的.
在大公司裏工作的好處是,有很多可用的宏.就我所知,多數宏寫得平平,經過多人改寫,代碼支離破碎,且少有定期維護.除非非用不可,我以少用為妙.依我看來, 宏是應是由一人編寫,以後也要由編寫者本人維護,除非編寫者力所不逮才可換人.
很快,有一個不可不用的宏引起了我的注意.這個宏專用於把一個文件轉為另一類文件,我稱之為宏R.宏R可稱為QC程序員的眼鏡.用了它,成百上千頁的文件可由電腦程序自行對比檢查完成.不過這個宏也常出問題,另有幾種擅自的修改版本,也還不頂用.我開始問別人了,答複是,即使用法正確,問題仍會發生,不怪宏編得不好,而是所要處理的文件太複雜多變了.
宏R的原作者是程序員M.我研究過宏R的代碼,編得確有許多閃光之處,能夠正確組織代碼應付如此複雜的數據處理問題,的確是大手筆.又上網查相關方麵的論文,能搜到的不多,倒是有一篇論文讀了很切題.再看作者,正是M.查本公司網站,見到M相片,並知道還在同一棟樓工作.--若有機會見到他,我估計我會說:我拜讀過你的論文,受益匪淺.
據後來我知道的,M是本公司昔日編程頭號高手,大概來自歐洲,頗有編程天才.後榮升為經理.他的宏編程能力絕佳,他的能力係數定為:80.是我知道的人中能力最高的.
為工作需要,我盟生了擅自改一改的念頭.再加以研究後,發現了其代碼上的得與失.有數據處理流程細節上的把握失當,也有算法上的低效問題.而注解中見得著後來的修改者(為何不由原作者來維護?),但從根本上來說,修改又於事無補.
我幹脆吸取宏R的長處,重寫了一個宏(姑且稱為R1)為我所用.R1的運行極快,為R的10倍.且運行得更平穩.不久,部門組織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的作圖宏。
程序員從手指尖流出一個個的鍵盤符號.當這些鍵盤符號以最巧妙的排列方式組成程序代碼時,計算機就會又快又準地為你工作.放眼望去,我真想說:宇宙不過就是幾行程序代碼呢。
主要是,我有空把自己的一段經曆寫了出來.
編程本來是枯燥的,因此,隻有去發現其中的樂趣,才會有動力使你樂此不疲.
謝謝你的好建議.我早有此念頭.我因隻有加籍,可能要去加拿大開公司了.
還是得申請美國綠卡.就能在美國開公司了.
以後還是寫點更接近生活的才好.
你說中了.
哈,她應該是做SAS(統計軟件)裏的macro(宏)程序。跟通常意義上的computer programming不完全一回事。譬如,Bill Gates和Knuth等都不懂SAS。