天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

軟件工匠熊節(jié)初當(dāng)程序員的故事

發(fā)布時(shí)間:2017-05-06 02:00

  本文關(guān)鍵詞:不敢止步:一個(gè)軟件工匠的12年,由筆耕文化傳播整理發(fā)布。


編者按:還記得你是怎么走上程序員這條路的嗎?還記得大學(xué)畢業(yè)后你的第一份職業(yè)嗎?還記得你當(dāng)初帶著滿腔熱血如何開(kāi)始編織你的人生嗎?還記得你工作后的第一份薪水嗎?希望小編能有幸聽(tīng)你們講你們的故事。本文寫(xiě)的是2000年那個(gè)時(shí)代還是在讀生熊節(jié)初當(dāng)程序員的故事,希望作者的經(jīng)歷也能帶你找回當(dāng)年的回憶。

接到那個(gè)電話,是在2000年的國(guó)慶長(zhǎng)假中。對(duì)于剛上大三的我來(lái)說(shuō),那本來(lái)只是一個(gè)普通的長(zhǎng)假:宅在宿舍里看電視、玩游戲,或是去樓下籃球場(chǎng)打打球。可是那個(gè)電話改變了我的假期計(jì)劃,乃至我的人生。

“喂?是熊節(jié)嗎?”電話那頭,一個(gè)中年男聲問(wèn)道。

“我是。你哪位?”

“你會(huì)C語(yǔ)言編程是不是?”中年男人很突兀地問(wèn)。

“呃……”我腦子里飛快地轉(zhuǎn)了幾圈。看來(lái)是在網(wǎng)上發(fā)的那篇求職帖起作用了,嗯,一定是這樣。于是我提起自信答道:“是,我用C語(yǔ)言做過(guò)好多東西。”

“那就好,那就好!敝心昴腥苏f(shuō)道,“你7號(hào)下午到宣武門(mén)這邊來(lái)一趟,面試,好不好?”

“好!”跟我說(shuō)完時(shí)間、地點(diǎn)、聯(lián)系電話,中年男人就掛了電話。

上大學(xué)以后,我一直在想辦法打工掙錢(qián),即使不能自給自足,至少可以補(bǔ)貼生活。前兩年里,我發(fā)過(guò)傳單、在中關(guān)村調(diào)查過(guò)硬件價(jià)格、幫人攢過(guò)電腦,甚至還試過(guò)跑到天成批發(fā)市場(chǎng)買(mǎi)一堆毛絨玩具,然后在女生宿舍樓門(mén)口叫賣(mài)。但對(duì)于酷愛(ài)編程的我來(lái)說(shuō),這些打工的方式終歸都是小打小鬧,我一直渴望找到一份編程的工作。所以那年暑假結(jié)束回到北京,我就在幾個(gè)程序員招聘求職的論壇里發(fā)了一個(gè)簡(jiǎn)單的求職帖,留下宿舍的電話號(hào)碼。手機(jī),在那個(gè)年代還是一件奢侈品。

同樣是奢侈品的還有自學(xué)編程的資源。那時(shí)候,Google、百度都還不存在,不論是想找一點(diǎn)自學(xué)材料,還是想找?guī)讉(gè)志同道合的朋友,都遠(yuǎn)不像今天這么容易。不過(guò)我運(yùn)氣挺好:大一的時(shí)候玩MUD,認(rèn)識(shí)了比我高兩級(jí)的師兄江焱風(fēng)—這當(dāng)然是游戲里的名字。江焱風(fēng)是我們學(xué)校MUD的天神,我就拜在他門(mén)下做了個(gè)巫師,一開(kāi)始幫著維護(hù)玩家秩序,然后也幫著寫(xiě)寫(xiě)游戲場(chǎng)景、寫(xiě)寫(xiě)NPC什么的。江焱風(fēng)看我挺喜歡編程的,就塞給我一堆LPC(用來(lái)開(kāi)發(fā)MUD的編程語(yǔ)言)教程,然后讓我開(kāi)發(fā)《笑傲江湖》里的一個(gè)新門(mén)派:衡山派。所以呢,我確實(shí)用C語(yǔ)言做過(guò)好多東西,最多的就是衡山派的場(chǎng)景、武功、道具、NPC……當(dāng)然我不會(huì)隨便跟別人說(shuō)的。

10月7號(hào)的下午,我先坐一趟公交再換一趟地鐵到宣武門(mén),又花了一點(diǎn)工夫找到叫“英嘉花園”的小區(qū)。打了一個(gè)電話,中年男人告訴我一個(gè)門(mén)牌號(hào)。

敲開(kāi)門(mén),就見(jiàn)了他本人:四十來(lái)歲,一米八左右身高,肩挺寬,但不胖,一身深色西裝,短頭發(fā)梳得整整齊齊,樣子看著有幾分儒雅,臉上掛著和善的笑容。

“你是熊節(jié)吧?”談吐透著一點(diǎn)北京口音,“來(lái)來(lái)來(lái),進(jìn)來(lái)坐。”

這是一間普通的住宅,客廳里沒(méi)幾樣家具,沙發(fā)上已經(jīng)坐了一位,大高個(gè)兒,白白胖胖的,臉上冒著幾顆粉刺,一條寬松的牛仔褲上還破了幾個(gè)洞,一看就覺(jué)得像北京孩子。一開(kāi)口,果然是標(biāo)準(zhǔn)的京片兒。

“你好,我叫楊剛,廣播學(xué)院的!

中年男人給我倒了杯水,也自我介紹。原來(lái)他姓汪,叫汪元。他這家公司叫“北京洛普電子有限公司”,專做各種LED顯示屏。如果你2000年前后去過(guò)首都機(jī)場(chǎng)或是西客站,你就一定看見(jiàn)過(guò)洛普的產(chǎn)品:那些滾動(dòng)顯示航班、車(chē)次的大屏幕,那些指引和提示旅客的滾動(dòng)字幕。這時(shí)候洛普正打算升級(jí)換代一個(gè)拳頭產(chǎn)品:證券營(yíng)業(yè)廳的行情顯示大屏。要做這么一個(gè)屏,就得有硬件、軟件兩大塊。我和楊剛就是這么一個(gè)分工:楊剛做電路和單片機(jī),我做控制程序。汪總第一次見(jiàn)面就把我倆叫到一塊兒,他說(shuō)是為了讓我倆先互相認(rèn)識(shí),方便以后配合。

說(shuō)是面試,其實(shí)根本沒(méi)測(cè)試我會(huì)做什么,只是大致聊了一陣對(duì)這個(gè)產(chǎn)品的構(gòu)想。汪總似乎對(duì)我倆也挺滿意,于是就談具體工作:每個(gè)禮拜來(lái)宣武門(mén)公司辦公室上兩個(gè)半天的班,主要目的是大家經(jīng)常碰頭溝通;月薪800塊。說(shuō)實(shí)話,我不知道月薪800塊到底算不算合適,偷瞄了楊剛一眼,看他表情還挺平淡的,也沒(méi)有不滿意的樣子。人家研究生都能接受,我一小本科肯定也能接受嘛,于是就這么定下來(lái)。

第二次去英嘉花園,汪總叫我去了另一個(gè)門(mén)牌號(hào),說(shuō)是洛普的辦公室。原來(lái)上次去的那間住宅是汪總自己的房子。照著這個(gè)新的門(mén)牌號(hào),我找到一間地下室。房門(mén)虛掩著,我推門(mén)進(jìn)去,汪總一眼看見(jiàn)我,高興地打著招呼:“快來(lái)快來(lái),就等你一個(gè)呢。”

地下室里布置成一個(gè)辦公室的格局,一張大沙發(fā),三張辦公桌。這會(huì)兒屋里坐著好些個(gè)人,汪總挨個(gè)給我介紹:姜哲,跑市場(chǎng)的;周怡,財(cái)務(wù);李帥,工程師;楊剛,上次已經(jīng)見(jiàn)過(guò)了;還有一位是陳老師,某高校計(jì)算機(jī)系的老師。

“咱們這個(gè)大屏,原來(lái)的控制程序就是陳老師做的。小熊你要好好跟陳老師請(qǐng)教,把技術(shù)學(xué)到手啊!

陳老師是個(gè)四十多歲的中年女性,外表沒(méi)什么特別,看著就是很樸實(shí)的人民教師的樣子。她說(shuō)本來(lái)和汪總合作也挺愉快,可是最近要評(píng)職稱,抽不出工夫做新版本。講起技術(shù),她倒是毫不藏私,看起來(lái)也是希望我盡快接手過(guò)去。很快,我就對(duì)接下來(lái)要做什么有了個(gè)大概的了解。

做一個(gè)證券行情顯示屏,主要有三部分工作。首先是硬件,16×16的LED點(diǎn)陣就可以顯示一個(gè)漢字,4塊點(diǎn)陣拼起來(lái)就可以顯示4個(gè)字的股票名稱,后面再跟上一串LED數(shù)碼管,就可以顯示這支股票的昨日收盤(pán)價(jià)、今日開(kāi)盤(pán)價(jià)、當(dāng)前成交價(jià)、當(dāng)日最高價(jià)、當(dāng)日最低價(jià)、成交量等信息,這就構(gòu)成了大屏上的“一行”。然后是硬件控制,就是用一片8051單片機(jī)控制一行里的漢字點(diǎn)陣和數(shù)碼管,讓它正確顯示信息。最后就是上位機(jī)控制程序,需要分析從衛(wèi)星接收來(lái)的行情數(shù)據(jù),然后把數(shù)據(jù)重組成適合顯示的格式,分發(fā)給每一行的單片機(jī)。

在這三部分里面,硬件方案已經(jīng)比較清楚,主要是汪總親自在設(shè)計(jì),楊剛提了一些單片機(jī)接口的建議。剩下兩塊,楊剛負(fù)責(zé)單片機(jī)編程,上位機(jī)控制程序則由我來(lái)負(fù)責(zé)。

聽(tīng)完陳老師講解老版本的控制程序,第二天又收到她發(fā)來(lái)的源代碼,我興奮地打開(kāi)Turbo C 2.0開(kāi)始編程。雖說(shuō)從沒(méi)做過(guò)什么正經(jīng)的軟件,有哪些事需要做,我還是能想清楚的。這個(gè)上位機(jī)控制程序需要做三件事。第一,分析行情數(shù)據(jù)庫(kù)。分析一個(gè)dBase格式的數(shù)據(jù)庫(kù)文件—準(zhǔn)確說(shuō)是兩個(gè)數(shù)據(jù)庫(kù)文件,滬市和深市各一個(gè),交易廳會(huì)安裝衛(wèi)星天線自動(dòng)接收上交所和深交所傳來(lái)的更新文件,我只管讀取這兩個(gè)文件就行了。第二,把處理好的數(shù)據(jù)按照和楊剛定好的協(xié)議格式通過(guò)串口線傳給單片機(jī)。第三,做一個(gè)界面,讓用戶操作這個(gè)控制程序。

在這三件事里,最讓我感興趣的是界面。用Turbo C做一個(gè)在命令行里顯示的菜單界面,用戶可以用方向鍵上下選擇菜單,這讓我覺(jué)得非?帷纫郧白鲞^(guò)的那些黑底白字符的程序酷多了。所以我立馬就把dBase、串口什么的都扔在腦后,開(kāi)開(kāi)心心地做界面。這個(gè)決定后來(lái)給我?guī)?lái)不少麻煩,不過(guò)也讓我從中學(xué)到了很多,這是后話,暫且不表。

很酷的界面做出一個(gè)雛形,我就想:得顯示點(diǎn)真實(shí)的數(shù)據(jù),看著才有范兒呢。于是我又開(kāi)始做dBase數(shù)據(jù)庫(kù)的解析。讀者可能有點(diǎn)兒困惑:為什么數(shù)據(jù)庫(kù)需要“解析”呢?別忘了,我們?cè)谥v2000年的事,那時(shí)可不像現(xiàn)在,各種數(shù)據(jù)庫(kù)驅(qū)動(dòng)一應(yīng)俱全,打開(kāi)Google就能找到。我花了半天工夫在網(wǎng)上搜索,硬是沒(méi)找到一個(gè)C語(yǔ)言的dBase驅(qū)動(dòng)庫(kù),只找到一篇描述dBase數(shù)據(jù)庫(kù)文件格式的文章。好在這個(gè)文件格式夠簡(jiǎn)單,無(wú)非就是把數(shù)據(jù)一行接一行地寫(xiě)在一個(gè)二進(jìn)制文件里。老話說(shuō)得好,靠貓靠狗不如自己動(dòng)手,我就自己動(dòng)手寫(xiě)了一段程序來(lái)解析dBase數(shù)據(jù)庫(kù)文件、讀取行情庫(kù)里的數(shù)據(jù)。

程序一天天生長(zhǎng)成型,可我一直在有意無(wú)意地回避一個(gè)重要的技術(shù)點(diǎn):串口通信。因?yàn)槲揖椭挥幸慌_(tái)電腦,連測(cè)試串口的辦法都沒(méi)有,這部分程序我寫(xiě)出來(lái)都沒(méi)法知道寫(xiě)得對(duì)不對(duì)。汪總聽(tīng)我描述開(kāi)發(fā)的進(jìn)展也挺開(kāi)心,并不催促我,倒是給我派了個(gè)新的任務(wù):跟姜哲一起出差。

洛普這家公司雖小,產(chǎn)品賣(mài)得還挺好,單說(shuō)證券信息大屏這個(gè)產(chǎn)品,華北各省各地也有好幾十家營(yíng)業(yè)廳用著洛普的屏。2000年,互聯(lián)網(wǎng)還不普及,大戶們要么自己家里裝了網(wǎng)絡(luò),要么可以去大戶室,散戶、尤其是廣大提著菜籃子炒股的中老年散戶就得靠證券營(yíng)業(yè)廳的大屏和交易終端來(lái)實(shí)現(xiàn)自己的財(cái)富夢(mèng)想。所以證監(jiān)會(huì)有要求,營(yíng)業(yè)廳要開(kāi)業(yè),不能只開(kāi)大戶室,必須得有個(gè)“廳”,大廳里得有行情大屏。所以華北地區(qū)只要有新?tīng)I(yíng)業(yè)廳籌備,洛普就有機(jī)會(huì)。一般營(yíng)業(yè)廳至少裝兩塊屏,比較寬敞的裝三塊甚至四塊,按一塊屏50萬(wàn)的報(bào)價(jià),洛普的生意是蠻好做的。而且那年業(yè)內(nèi)一直在風(fēng)傳創(chuàng)業(yè)板開(kāi)市在即,新?tīng)I(yíng)業(yè)廳想要能支持創(chuàng)業(yè)板的屏,老營(yíng)業(yè)廳也有可能趁這個(gè)時(shí)機(jī)換一套新的屏,所以這段時(shí)間洛普的幾號(hào)人都特別忙。要是那時(shí)知道創(chuàng)業(yè)板要到十年后才會(huì)開(kāi)市,也許我就沒(méi)這次工作機(jī)會(huì)了。

跑市場(chǎng)的姜哲更是忙得不得了。姜哲大概三十歲上下,板寸,身材結(jié)實(shí),左眉上有條不長(zhǎng)的疤,經(jīng)常戴個(gè)墨鏡,不常笑,開(kāi)口也是一股京片兒,看著有點(diǎn)兒像胡同里的地痞流氓。這段時(shí)間汪總和工程師李帥都在家里忙著做新屏的電路板,客戶服務(wù)就靠姜哲一個(gè)。可他又不懂技術(shù),除了能查個(gè)虛焊以外解決不了別的問(wèn)題。所以這就想到拉上我一起去客戶現(xiàn)場(chǎng)出差,好歹我能算個(gè)技術(shù)人員。

我出的第一趟差是太原,南方證券的一個(gè)營(yíng)業(yè)廳,那天有塊屏徹底瞎了,客戶火急火燎地打電話到洛普。那天我正好在那兒,汪總聽(tīng)完電話跟我和姜哲一合計(jì),也不用帶什么行李了,馬上去火車(chē)站,當(dāng)晚趕到太原給客戶維修,務(wù)必要保證營(yíng)業(yè)廳第二天早上正常開(kāi)業(yè)。我跟著姜哲打車(chē)到西客站,也沒(méi)買(mǎi)票,直接沖上最近一趟去太原的火車(chē),然后找乘務(wù)員補(bǔ)了兩張軟座坐下,一路無(wú)話。

到太原已是夜里,我倆打上出租車(chē)就直奔營(yíng)業(yè)廳。路上姜哲又接了個(gè)電話,跟對(duì)方說(shuō)“馬上就到”,想來(lái)是南方證券的人已經(jīng)等得心焦了。車(chē)到地方,只見(jiàn)營(yíng)業(yè)廳燈火通明,門(mén)口站著一男一女正等著我們。見(jiàn)我們下車(chē),靠前的圓臉眼鏡哥像是見(jiàn)了救星,老遠(yuǎn)就迎上來(lái),一把握住姜哲的手:

“哎呀,你們可算是來(lái)了……今天早上都還好好的呢,快中午那會(huì)兒,這第二塊屏突然就瞎了,還得讓你們這么大老遠(yuǎn)的趕來(lái),你說(shuō)這事兒鬧的……喲,還沒(méi)請(qǐng)教您貴姓?”

“您放心,您放心,保證您明兒早上照常開(kāi)業(yè)—免貴,姓姜,您叫我小姜就成。”姜哲臉上滿是殷勤的笑容,我還從沒(méi)見(jiàn)他這么熱情過(guò)。

四個(gè)人一起往里走,另一位三十多歲的女士轉(zhuǎn)頭問(wèn)我:“對(duì)了,這位工程師貴姓?”

“我?免貴……姓熊!

“噢,是熊工啊!

我一錯(cuò)愕!靶芄ぁ边@稱呼,一下子真沒(méi)跟自己聯(lián)系起來(lái)。女士還在熱情地說(shuō)著話:

“熊工看著可夠年輕的!

“哦,我今年二十,大學(xué)還沒(méi)畢業(yè)呢!

一聽(tīng)這話,走在前面的姜哲回頭狠狠地瞪了我一眼,嚇得我不敢開(kāi)口了。

走到大屏跟前,眼鏡哥打開(kāi)電源開(kāi)關(guān),只聽(tīng)“嘶嘶”的電流聲響起,幾塊三米多高、四米多寬的顯示屏就在我們眼前逐一亮了起來(lái)—當(dāng)然第二塊沒(méi)亮。這還是我第一次離這么近看證券顯示屏,LED點(diǎn)陣上一個(gè)個(gè)小黃燈閃得我眼發(fā)暈,上面顯示的文字和數(shù)字都顯得很不真實(shí)。

我又回頭看看女士和眼鏡哥,腦子里冒出了“客戶”這個(gè)詞:他們就是我的客戶吧?以前每當(dāng)這個(gè)詞從那些在公司里實(shí)習(xí)的師兄們嘴里若無(wú)其事地吐出來(lái),我都覺(jué)得好高端,F(xiàn)在我自己身邊就站著兩個(gè)客戶,滿臉焦急而又期盼地看著我們,一副欲言又止生怕擾亂我們的樣子。原來(lái)這就是“見(jiàn)客戶”啊。這感覺(jué)也讓我覺(jué)得很不真實(shí),再加上舟車(chē)勞頓,腦子有點(diǎn)兒迷迷糊糊的。

突然一陣恐慌從我的心里竄過(guò):我不知道該干什么了。從中午到剛才,我一直在為第一次出差而興奮著,F(xiàn)在這股勁兒一過(guò),我才意識(shí)到:面對(duì)一塊瞎了的屏,我根本就不知道該怎么辦。是硬件故障嗎?還是軟件問(wèn)題?怎么查?怎么修?我腦子里一片空白,愣在原地,也許就幾秒鐘時(shí)間,可感覺(jué)像是有一輩子那么長(zhǎng)。

“小熊,把大褂兒穿上。”姜哲扔過(guò)一件藍(lán)色的絕緣服,這簡(jiǎn)直就是我的救命稻草啊。我手忙腳亂地穿上絕緣服,不敢看兩位客戶的眼神,跟著姜哲就鉆到了大屏的背后。

顯示屏是用鋼桁架固定在墻邊,離墻根有大概一米距離,稍微側(cè)點(diǎn)身就能進(jìn)人。這地方平時(shí)沒(méi)人會(huì)來(lái),清潔工也不會(huì)打掃,一落手滿是灰塵和蛛網(wǎng)。姜哲左手舉著電筒走前面,右手不停地把大片蛛網(wǎng)撥拉到一邊,我跟在后面小心翼翼往進(jìn)走,不時(shí)提防著腳下的電線。走到第二塊屏的位置,手上、身上早已蹭滿了黑灰。

“來(lái),幫我舉著手電!苯馨央娡策f給我,“照這兒!彼麖慕^緣服的兜里摸出一支電筆,從上往下測(cè)了幾個(gè)點(diǎn),點(diǎn)點(diǎn)頭,嘟囔了一句:“嗯,行了!闭f(shuō)著又從兜里掏出一柄螺絲刀、一把線鉗、一卷黑膠布擱在腳邊,扯著嗓子喊了一聲:

“哎……把電給我斷了。”

不一會(huì)兒工夫,只聽(tīng)“咔嚓”一聲,幾塊大屏全滅了。少了電路板縫隙透過(guò)來(lái)的LED燈光和電流聲,墻角里突然變得又黑又靜。我舉著電筒,姜哲麻利地鉸下一段像是被老鼠咬斷的電源線,把兩邊線頭重新接好,用黑膠布裹得嚴(yán)嚴(yán)實(shí)實(shí),站起來(lái)拍拍手,又扯著嗓子喊:

“哎……打開(kāi)電瞧瞧。”

又是“咔嚓”一聲,過(guò)了幾秒鐘,跟著傳來(lái)了女士和眼鏡哥的歡呼聲。姜哲拾起地上的工具裝進(jìn)兜里,沖我一擺手:“走吧。”

出了營(yíng)業(yè)廳,女士和眼鏡哥硬要請(qǐng)我們吃飯。我倆本來(lái)也餓著肚子,略微推辭一下也就客隨主便了。吃完飯,眼鏡哥又開(kāi)車(chē)把我倆送到酒店門(mén)口方才告別。

我和姜哲只開(kāi)了一個(gè)標(biāo)間,兩張窄床,不過(guò)對(duì)于每天住在學(xué)生宿舍里的我來(lái)說(shuō),這完全不是問(wèn)題。洗完澡躺在床上,姜哲閉著眼抽著煙,一言不發(fā)。我實(shí)在按捺不住,轉(zhuǎn)個(gè)身問(wèn)他:

“哎,姜哥,你剛才怎么知道就是電源線的事兒呢?”

“嗨,整塊兒屏黑了,不是電源線是什么?”姜哲深吸一口煙,還是閉著眼,“像這種不上電,或者上了電不出字兒的毛病,都是小毛病,就是哪根兒線折了。要是遇上出字兒出一半兒,或者出來(lái)東西是錯(cuò)的,那我可就沒(méi)轍Up……”

“姜哥你真行。我年輕不會(huì)辦事,你多教著我點(diǎn)!蔽沂钦嫘暮芘宸

“你呀,”姜哲猛地睜開(kāi)眼瞪著我,“別老跟人說(shuō)你大學(xué)還沒(méi)畢業(yè),人家聽(tīng)了覺(jué)著不像話!

我的臉“騰”地一下紅了,嘴里囁囁地答應(yīng)著。

“行了,睡吧!闭f(shuō)完他把煙頭一掐,轉(zhuǎn)身躺下,關(guān)了燈。

波瀾不驚地寫(xiě)了兩個(gè)月程序,中間又跟姜哲跑了一趟秦皇島,我負(fù)責(zé)的控制程序已經(jīng)大致出來(lái)了。這時(shí)已近年底,汪總拿到了一個(gè)重要項(xiàng)目:南方證券青島館陶路營(yíng)業(yè)部。這個(gè)營(yíng)業(yè)部位于青島市中心,計(jì)劃春節(jié)后正式營(yíng)業(yè),大屏就選購(gòu)了洛普的支持創(chuàng)業(yè)板的新款—也就是我們正在開(kāi)發(fā)的這一款。汪總看看我和楊剛的開(kāi)發(fā)進(jìn)度都大致不差,營(yíng)業(yè)廳的裝修又已經(jīng)完工,大屏可以進(jìn)場(chǎng)安裝了,于是大手一揮,一行人浩浩蕩蕩地奔赴青島現(xiàn)場(chǎng)施工。

剛?cè)デ鄭u的頭幾天,汪總、李帥一班人立即進(jìn)場(chǎng),做電源、做桁架。我和楊剛倒是不用馬上進(jìn)場(chǎng),待在酒店完成我們的程序。這是我第一次看見(jiàn)真正的硬件開(kāi)發(fā),真是大開(kāi)眼界。跟我這抱著一臺(tái)PC過(guò)日子不一樣,楊剛那一堆家伙事兒擺出來(lái)就顯得很有范兒:示波器、仿真器、燒錄器、芯片、電路板、電烙鐵……擺了一桌子。寫(xiě)的程序也不是C,是匯編。那會(huì)兒我正是剛開(kāi)始對(duì)技術(shù)發(fā)燒的階段,總覺(jué)得越底層的技術(shù)就越牛,在我自己寫(xiě)的上位機(jī)控制程序里也嵌了幾小段匯編程序,好像不寫(xiě)匯編就不算真的編程似的。所以,一看見(jiàn)楊剛擺好造型點(diǎn)上煙開(kāi)始寫(xiě)程序的樣子,我就特崇拜他。

“小熊小熊,趕緊來(lái)看一眼!”我正在埋頭寫(xiě)程序,楊剛在背后叫我。

我轉(zhuǎn)頭一看,看見(jiàn)LED上顯示著黃色的“1234”。楊剛一臉興奮地搓著手。我又左看右看,也沒(méi)看出什么來(lái)。

“嗯,1234,看見(jiàn)了。特牛是吧?”

“一看你就不懂!睏顒偙梢暤卣f(shuō),扔過(guò)一根“中南!苯o我,“你忘了,咱這模塊是紅綠兩色的,給個(gè)5伏的低電平就紅色,15伏的高電平就綠色!

“嗯……是啊,這黃色怎么弄出來(lái)的?”我也被他吊起了興趣。汪總前幾天看了楊剛做的第一塊原型板,當(dāng)時(shí)就提了意見(jiàn):紅漲綠跌這都沒(méi)問(wèn)題,平盤(pán)的時(shí)候得用黃色顯示。楊剛當(dāng)時(shí)還撓頭說(shuō)早知道這樣就該選三色的LED模塊。

“我讓單片機(jī)控制它每秒60次在高低電平之間切換,就成黃色了。”楊剛得意揚(yáng)揚(yáng)地說(shuō),“你瞧這單片機(jī)忙的,嘖嘖……”

我一下就明白了。這就跟放電影是一樣的道理,60赫茲頻率切換的紅色和綠色在肉眼看來(lái)就是毫無(wú)閃爍的黃色。而且稍微改變切換的節(jié)奏還可以得到橙色之類的不同顏色。這時(shí)我對(duì)楊剛那個(gè)仰慕啊,猶如滔滔江水……

類似這種有創(chuàng)造性的解決辦法,不光楊剛有,我也想了不少。比如說(shuō)自己寫(xiě)dBase數(shù)據(jù)庫(kù)驅(qū)動(dòng),再比如說(shuō)顯示漢字。為了省成本,汪總和楊剛在電路板上只設(shè)計(jì)了很小的ROM,不把漢字庫(kù)放在單片機(jī)上,而是由上位機(jī)把漢字傳給單片機(jī)—當(dāng)然就不是以內(nèi)碼的形式,而是一個(gè)長(zhǎng)度為1024的數(shù)組,直接對(duì)應(yīng)控制LED點(diǎn)陣的1024個(gè)點(diǎn)。如果數(shù)組的第一個(gè)元素是0,就表示點(diǎn)陣左上角的點(diǎn)熄滅。如果是1,就表示這個(gè)點(diǎn)被點(diǎn)亮。這么一來(lái),楊剛就完全不用操心要顯示的是漢字、字母還是數(shù)字,只要把我傳給他的點(diǎn)陣圖忠實(shí)地顯示出來(lái)就行了。

我也覺(jué)得實(shí)現(xiàn)這個(gè)功能挺好玩的。為了測(cè)試它,我還寫(xiě)了一個(gè)模擬LED點(diǎn)陣的程序:在屏幕上顯示16行、64列的發(fā)光點(diǎn),這樣我就可以看到傳輸出去的1024長(zhǎng)度的數(shù)組代表了什么圖形。

一個(gè)難題是漢字庫(kù):我得找到一個(gè)16×16的字庫(kù),才能知道每個(gè)漢字的內(nèi)碼怎么轉(zhuǎn)換成一幅點(diǎn)陣圖。在學(xué)校BBS上幾番請(qǐng)教高人,終于讓我找到了解決方案:把UCDOS里的字庫(kù)摳出來(lái),就可以得到點(diǎn)陣圖。

和那個(gè)年代比起來(lái),現(xiàn)在的年輕人剛開(kāi)始工作時(shí)發(fā)揮創(chuàng)造性的空間就小得多了。絕大部分的開(kāi)發(fā)任務(wù),都有現(xiàn)成的框架提供了標(biāo)準(zhǔn)的做法,即使偶爾遇到一兩個(gè)難題,Google搜索一下通常都能找到答案。雖然解決問(wèn)題是更快了,留給人思考的空間也更小了。寫(xiě)程序如果沒(méi)有充分思考,只是照搬別人的解決方案,怎么能學(xué)到東西呢?所以我還挺慶幸自己的職業(yè)生涯開(kāi)始于前互聯(lián)網(wǎng)時(shí)代的。

就這樣,一個(gè)難題接著一個(gè)難題被攻克,我們擺在桌上的實(shí)驗(yàn)板已經(jīng)連在一臺(tái)電腦的串口上,顯示著一支股票的名稱和當(dāng)前價(jià)位,當(dāng)然,還不是即時(shí)刷新的。見(jiàn)這情形,汪總就開(kāi)始催促我們?nèi)ガF(xiàn)場(chǎng)安裝。

去現(xiàn)場(chǎng)安裝也不是說(shuō)去馬上就能去的。我們先花了一整晚時(shí)間,燒錄了400片單片機(jī),第二天一早才拿著這些單片機(jī)去現(xiàn)場(chǎng)。這時(shí)營(yíng)業(yè)廳已經(jīng)準(zhǔn)備得七七八八,大屏也已矗立起來(lái),只是暖氣沒(méi)開(kāi)通,給散戶們準(zhǔn)備的塑料長(zhǎng)椅也還沒(méi)運(yùn)進(jìn)來(lái),整個(gè)廳里空蕩蕩、冷颼颼的,進(jìn)去以后得把外套再裹嚴(yán)實(shí)一點(diǎn)。

我們幾個(gè)人把單片機(jī)分了分,搭著梯子爬上爬下,一會(huì)兒就把四塊大屏全都插好了。通上電,只見(jiàn)大屏從上往下先亮后滅,自檢完成。我把筆記本電腦打開(kāi),楊剛從大屏腳上拖出一條串口線插在電腦上,興奮地搓著手。我打開(kāi)編譯好的控制程序,在菜單里選擇“開(kāi)始輸出”,回車(chē)……

大屏上顯示出行情數(shù)據(jù)了,但每隔兩三行就有一兩行不亮。我退出控制程序,再來(lái),效果還是一樣—不,不完全一樣,有幾行剛才亮的現(xiàn)在不亮了,也有幾行剛才不亮的現(xiàn)在亮起來(lái)了。再試,仍然是隨機(jī)的有一小半不亮。

第一次現(xiàn)場(chǎng)實(shí)驗(yàn),就這樣以失敗告終。

跟楊剛一塊走回酒店,看我垂頭喪氣的樣子,楊剛拍著我的肩膀安慰我:“沒(méi)事兒,誰(shuí)寫(xiě)程序不出點(diǎn)漏子?這點(diǎn)兒小問(wèn)題,,咱倆很快就能弄好!

我倒不是擔(dān)心問(wèn)題解決不了,雖說(shuō)頭一回見(jiàn)這么不合常規(guī)的情況,心里確實(shí)有點(diǎn)兒沒(méi)底。剛才現(xiàn)場(chǎng)實(shí)驗(yàn)的時(shí)候,不光我們的人在,業(yè)主南方證券的人也在,營(yíng)業(yè)廳經(jīng)理魏治就站在旁邊目睹了整個(gè)過(guò)程。我偷偷留意魏治的神色,一開(kāi)始還只是嚴(yán)肅,后來(lái)臉色越來(lái)越難看,最后小聲嘟噥著走回樓上去了。汪總見(jiàn)這情形,趕緊跟了上去,走出兩步又回頭對(duì)我說(shuō):

“小熊啊,趕緊跟楊剛回酒店去,再調(diào)調(diào)程序,啊?”

倒是和顏悅色,言語(yǔ)間也透出了幾分著急。

要是把我擱在魏治的位置,我肯定也會(huì)又氣又急。急的是營(yíng)業(yè)廳開(kāi)業(yè)在即,這關(guān)鍵的大屏卻遲遲不能就緒。氣的是汪總先是吹噓新產(chǎn)品高科技云云,后是拍胸脯保證絕不會(huì)拖營(yíng)業(yè)廳籌備的后腿,臨了才知道原來(lái)產(chǎn)品都沒(méi)完工,感情是把館陶路營(yíng)業(yè)廳當(dāng)了小白鼠。想到這里,我心里多了幾分愧疚,又加快了腳步。

回到酒店,楊剛很快搭了一個(gè)更大的實(shí)驗(yàn)板:5行LED顯示,每行只有兩列,股票名稱和當(dāng)前價(jià)位。我把串口線接上,運(yùn)行程序,果然5行里有兩行沒(méi)亮。之前我們一直用單行的實(shí)驗(yàn)板,從來(lái)沒(méi)發(fā)現(xiàn)過(guò)這個(gè)問(wèn)題。

發(fā)現(xiàn)問(wèn)題可不等于就能解決問(wèn)題,尤其是這種隨機(jī)的問(wèn)題。我使出了渾身解數(shù),別說(shuō)解決問(wèn)題,連到底是什么原因都找不出來(lái)。這種工控程序可不像做個(gè)網(wǎng)站,一個(gè)請(qǐng)求一個(gè)應(yīng)答,報(bào)文都清清楚楚。我編程的對(duì)象是串口線,對(duì)面是楊剛的單片機(jī),我的程序里發(fā)一個(gè)信號(hào),不代表這個(gè)信號(hào)真的發(fā)到了串口線上,不代表單片機(jī)收到了這個(gè)信號(hào),也不代表單片機(jī)發(fā)出了回執(zhí),更不代表我收到了回執(zhí)。可以出錯(cuò)的地方太多了,隨機(jī)的錯(cuò)誤又增加了復(fù)雜度。楊剛說(shuō)“很快就弄好”,我倆硬是折騰了兩天兩宿,問(wèn)題依然照舊。

這會(huì)兒已經(jīng)是凌晨一點(diǎn)多,現(xiàn)場(chǎng)實(shí)驗(yàn)失敗之后,我倆已經(jīng)連續(xù)調(diào)試了40個(gè)小時(shí),吃盒飯、上廁所之外,腦袋全都湊在屏幕前,全靠香煙和速溶咖啡支撐著。楊剛突然一拍桌子,大喊一聲:

“受不了啦!走,小熊,出去溜達(dá)會(huì)兒。”

我也著實(shí)快受不了了。于是我倆站起來(lái)狠狠地伸了個(gè)懶腰,摸下樓來(lái),朝著街角那家餃子店晃悠過(guò)去。這家店面積不大,四五張桌子,沒(méi)啥裝修,就勝在夜里開(kāi)得長(zhǎng),總有出租車(chē)司機(jī)三兩成群地吃著宵夜聊著閑天。

“老板,一斤餃子,兩碗兒羊肉湯!

“好嘞……餃子您要什么餡兒的?”

“半斤白菜半斤韭菜—哎,小熊,你說(shuō)你那程序怎么就能收不到握手信號(hào)呢?”

我們已經(jīng)發(fā)現(xiàn),之所以有幾行屏顯不亮,是因?yàn)榭刂瞥绦蚋鷨纹瑱C(jī)握手沒(méi)握上。控制程序一開(kāi)始運(yùn)行,就會(huì)從串口廣播一個(gè)啟動(dòng)信號(hào);收到啟動(dòng)信號(hào)的單片機(jī)則應(yīng)答一個(gè)握手信號(hào),同時(shí)帶上自己的ID號(hào),這樣控制程序就知道下面究竟有多少單片機(jī)了;接著,控制程序就會(huì)把行情數(shù)據(jù)按ID號(hào)逐行發(fā)給單片機(jī)。整個(gè)過(guò)程中,控制程序只有一次需要接收來(lái)自單片機(jī)的信號(hào),就是這個(gè)握手信號(hào)。在出來(lái)之前我們已經(jīng)發(fā)現(xiàn),5塊單片機(jī)都收到了廣播的啟動(dòng)信號(hào),也各自都發(fā)出了握手信號(hào),但控制程序總是只能收回兩三條。

“唉……”我使勁地?fù)现^,幾天沒(méi)洗澡,頭皮有點(diǎn)兒癢,“要真是收不到還好呢,這收到仨還掉倆,這算怎么回事兒……”

“別急啊,咱再?gòu)念^捋捋。你看啊,單片機(jī)肯定是沒(méi)問(wèn)題吧—我不是推卸責(zé)任啊,調(diào)試信號(hào)咱都看見(jiàn)了,再說(shuō)要是發(fā)不出去握手信號(hào)肯定幾塊全都發(fā)不出去,不會(huì)是這個(gè)情況。”

我無(wú)奈地點(diǎn)點(diǎn)頭。確實(shí),怎么看都是控制程序的問(wèn)題。

“你聽(tīng)完握手信號(hào)以后的程序肯定也沒(méi)問(wèn)題,所以只要握上手就都對(duì)了。”

我又點(diǎn)點(diǎn)頭。總算有個(gè)好消息,雖然不是新消息。

“那就是握手信號(hào)沒(méi)聽(tīng)全,有些聽(tīng)見(jiàn)了有些沒(méi)聽(tīng)見(jiàn)!

我把腦袋點(diǎn)得像雞啄米一樣。

“你是怎么聽(tīng)串口上來(lái)的信號(hào)的?”

“我埋了一個(gè)中斷。一開(kāi)始用C語(yǔ)言寫(xiě)的,上次跟你聯(lián)調(diào)的時(shí)候發(fā)現(xiàn)不好使,換成拿匯編寫(xiě)了,你記得這事兒不?”

“記得,記得。那段兒程序是我拷給你的。應(yīng)該沒(méi)問(wèn)題呀,怎么可能聽(tīng)漏呢?”

我腦子里突然靈光一閃,一拍桌子:“啊呀!”

“哎?想到什么了?”

“你說(shuō)會(huì)不會(huì)是Windows先攔了一遍中斷,就給攔掉了?”為了編程方便,我在Windows里開(kāi)了一個(gè)DOS命令行窗口來(lái)執(zhí)行控制程序。

“有這可能!”

我倆狼吞虎咽地吃完餃子,三步并作兩步?jīng)_回酒店,馬上動(dòng)手實(shí)驗(yàn):關(guān)機(jī),重啟進(jìn)入DOS模式,執(zhí)行控制程序……

好了。5行屏顯全都乖乖地亮著。

退出控制程序,重開(kāi);再退出,再開(kāi);拔掉實(shí)驗(yàn)板電源,再插上……隨便我們?cè)趺凑垓v,程序穩(wěn)如泰山,5行屏顯全都亮著,一點(diǎn)問(wèn)題都沒(méi)有。

我倆大眼瞪小眼,面面相覷了大概10秒鐘,然后同時(shí)蹦出兩個(gè)字:“睡覺(jué)!”

以前在學(xué)校BBS上看見(jiàn)有人說(shuō)Windows是對(duì)程序員不友好的操作系統(tǒng),這時(shí)候我才知道它是有多不友好。

一覺(jué)睡到了下午,我倆把最新版本的程序拷在U盤(pán)里,興沖沖地去了工地。聽(tīng)我們大致一說(shuō),汪總也露出贊許的笑容,叫我們趕快試試。

我打開(kāi)放在大屏背后角落里的電腦,把程序拷進(jìn)去,楊剛拖出串口線插上。我跟他對(duì)視一眼,心里居然有點(diǎn)兒緊張。我深吸一口氣,敲下回車(chē)鍵。

整個(gè)大屏都亮了。像波浪一樣,從上到下、從左向右,LED一行一行地挨個(gè)亮了起來(lái),顯示出股票名稱和行情數(shù)據(jù)。我和楊剛興奮得蹦了起來(lái),擊掌相慶,周怡在一旁夸我:“行啊小熊,真給弄出來(lái)了!蓖艨偢褐握镜眠h(yuǎn)遠(yuǎn)的說(shuō)著悄悄話,魏治也在連連點(diǎn)頭。

大家圍著大屏看了一會(huì)兒,興奮勁兒也過(guò)去了,于是又各司其職。魏治溜達(dá)到大屏跟前站定,笑瞇瞇地盯著大屏上看下看。看著看著,他臉上的笑容漸漸消失,臉色變得難看起來(lái)。

“這數(shù)據(jù)不對(duì)吧?”魏治終于忍不住開(kāi)口了,“深發(fā)展昨天的收盤(pán)價(jià)不是這個(gè)數(shù)。還有這兒,這兒……肯定是不對(duì)!

我和楊剛半信半疑地對(duì)望一眼,打開(kāi)機(jī)器上的數(shù)據(jù)庫(kù)文件跟大屏對(duì)比。果然,雖說(shuō)數(shù)據(jù)都顯示出來(lái),可顯示的位置都不對(duì):今天的開(kāi)盤(pán)價(jià)跑到了“昨日收盤(pán)”列,諸如此類。這點(diǎn)小問(wèn)題還不是分分鐘手到擒來(lái)?我倆這么想著,席地一坐,打開(kāi)程序開(kāi)始折騰。

從到青島算起,已經(jīng)過(guò)去了小一個(gè)月,直到這時(shí),魏治才真正算是看到了這幾塊大屏的廬山真面目。不難想見(jiàn),他會(huì)發(fā)現(xiàn)多少問(wèn)題、有多少想要修改的需求。他這修改意見(jiàn)一提不要緊,我才發(fā)現(xiàn)自己寫(xiě)的程序有多糟糕:讀數(shù)據(jù)、計(jì)算、顯示格式、下發(fā)……所有事都攪在一起,這里一改,那里又出個(gè)錯(cuò),真是牽一發(fā)而動(dòng)全身。魏治提的幾條修改意見(jiàn),我愣是在工地又干了一個(gè)通宵才全部改完。楊剛這天表現(xiàn)得極其仗義,雖說(shuō)都是上位機(jī)程序的修改,跟單片機(jī)沒(méi)關(guān)系,他還是陪著我熬了一宿,倆人有說(shuō)有笑、有咖啡有煙,倒也不覺(jué)得難受。

第二天早上,看了我們修改的結(jié)果,魏治看起來(lái)挺滿意。在大屏跟前轉(zhuǎn)悠了一會(huì)兒,他轉(zhuǎn)身問(wèn)汪總:

“老汪,回頭創(chuàng)業(yè)板開(kāi)了,咱們就拿兩塊屏顯示滬深行情,騰出兩塊屏來(lái)顯示創(chuàng)業(yè)板,你看怎么樣?剛開(kāi)市的時(shí)候肯定關(guān)心創(chuàng)業(yè)板的人特多……”

聽(tīng)到這兒,我心里“砰”地一跳。洛普的新款顯示屏宣稱的最大賣(mài)點(diǎn)就是支持創(chuàng)業(yè)板。其實(shí),對(duì)程序來(lái)說(shuō),創(chuàng)業(yè)板跟主板沒(méi)什么區(qū)別,都是同樣的數(shù)據(jù)庫(kù)文件,這也正是我們敢這么宣傳的原因。然而,創(chuàng)業(yè)板究竟幾時(shí)開(kāi)市一直沒(méi)有定論,所以對(duì)于魏治這樣的營(yíng)業(yè)廳經(jīng)理來(lái)說(shuō),“支持創(chuàng)業(yè)板”不僅僅是能顯示創(chuàng)業(yè)板的數(shù)據(jù),更重要的是,能調(diào)整每一塊屏顯示的內(nèi)容?蛇@個(gè)汪總著力宣傳的核心賣(mài)點(diǎn),我們忘了做了。我偷眼一瞅楊剛,見(jiàn)他正沖我吐舌頭做鬼臉—沒(méi)轍,趕快弄吧。

這次可不止是修改上位機(jī)程序就能解決的了。楊剛在單片機(jī)里根本沒(méi)考慮一塊屏能顯示不同市場(chǎng)的情況,現(xiàn)在得修改單片機(jī)程序,之前燒的400片單片機(jī)就全都報(bào)廢了。我倆花了幾個(gè)小時(shí)修改程序,在實(shí)驗(yàn)板上反復(fù)核對(duì),覺(jué)得差不多靠譜的時(shí)候,已經(jīng)又是夜幕降臨了。

這時(shí)已經(jīng)是我倆在五天里熬的第四個(gè)通宵了,靠煙和咖啡強(qiáng)打精神久了以后,手就會(huì)不受控制地發(fā)抖。又趕上我們?yōu)榱斯?jié)省成本,買(mǎi)的8051單片機(jī)都是便宜貨,管腳軟得不行,往燒錄器上插時(shí)一不小心就把管腳給撅折了。那一宿,我倆和李帥一道,喝掉了大半盒麥斯威爾速溶咖啡,抽掉了一條中南海,撅折了好幾十片單片機(jī)。后來(lái),我把這些報(bào)廢的單片機(jī)收起來(lái),把管腳全撅掉,在中間鉆上孔,用細(xì)繩串起來(lái),做了一條項(xiàng)鏈,算是對(duì)這段打工經(jīng)歷的紀(jì)念。從那以后,我再也不能抽混合型香煙,也不能喝速溶咖啡,全拜這幾個(gè)通宵所賜。

毫不意外地,楊剛把單片機(jī)程序改完之后,連上大屏一試,我的上位機(jī)程序又出了若干bug。照原計(jì)劃,第二天就是我在青島的最后一天,剩下的應(yīng)該只是些掃尾工作。雖說(shuō)已經(jīng)困得快要抬不動(dòng)眼皮了,我還是硬打著精神繼續(xù)改bug,F(xiàn)在回想,記憶都已經(jīng)不太清晰,只記得我當(dāng)時(shí)買(mǎi)的是晚上7點(diǎn)的火車(chē)票,到6點(diǎn)半我終于拿出了最后一個(gè)版本的程序,然后拎著行李打車(chē)、在站臺(tái)上狂奔,總算在6點(diǎn)57分跳上了回北京的列車(chē)。

上了火車(chē),我倒頭便睡得昏天黑地。好不容易醒來(lái)以后,我呆呆地望著窗外,腦子里不斷地重復(fù)著一個(gè)念頭:這軟件,以后不能這么做。

那時(shí),二十歲的我知道的事情還少,也說(shuō)不出什么大道理,但剛過(guò)去的一個(gè)星期已經(jīng)足夠讓我印象深刻。我腦子里有很多“為什么”無(wú)法解答:為什么我寫(xiě)的程序一改就會(huì)出bug?為什么單片機(jī)上做什么修改我都得跟著改程序?為什么做了三個(gè)月的項(xiàng)目直到最后三天才能看見(jiàn)做的東西究竟是什么樣?最要緊的是,為什么要五天里熬四個(gè)通宵才能把事情做完?我不知道是什么地方,但我知道,一定有某個(gè)地方不太對(duì)勁。軟件不能這么做,不然我沒(méi)辦法拿做軟件當(dāng)一輩子的職業(yè)。

就這么呆著、望著、想著,北京站旁邊的恒基中心遠(yuǎn)遠(yuǎn)地出現(xiàn)在視野里。我職業(yè)生涯的第一個(gè)項(xiàng)目,就在這樣的忙碌奔波中結(jié)束了。

本文摘自熊節(jié)新書(shū):《不敢止步:一個(gè)軟件工匠的12年

軟件工匠熊節(jié)初當(dāng)程序員的故事


人郵IT書(shū)坊ID:ptpressitbooks


  本文關(guān)鍵詞:不敢止步:一個(gè)軟件工匠的12年,由筆耕文化傳播整理發(fā)布。



本文編號(hào):347469

資料下載
論文發(fā)表

本文鏈接:http://sikaile.net/wenshubaike/mishujinen/347469.html


Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

版權(quán)申明:資料由用戶0c129***提供,本站僅收錄摘要或目錄,作者需要?jiǎng)h除請(qǐng)E-mail郵箱bigeng88@qq.com