見屏幕一黑,絕影也不知道是怎麼回事,以前在公司測試的時候從來沒出現這種情況,反正肯定是程序出了問題,壞就壞在還是全屏,圖像一黑,整個屏幕就黑了。他用眼角的餘光瞟了瞟周總,還好周總正在興致勃勃地給醫生們介紹kipacs是如何如何好,只有醫院領導一個人發現了問題。他趕忙退出全屏關掉kipacs,再次打開。
醫院領導正要開口,絕影搶在他前面說:“這是正常現象,一般kipacs用久了就要重啓一次。”那言外之意就是:“這黑屏的事,沒啥大不了的,我們早就知道了。並且這又是不能解決的,要能解決我們還不早就解決了。就比如手機一樣,就算是nokian95,夠高檔了吧,可是你能拿它放dvd嗎?放不了,還是將就着用吧。所以還是麻煩你們偶爾重啓一下吧。”
周總聽他這麼說,回過頭來,丈二和尚摸不着頭。
最後醫院領導還是在驗收報告上籤了字,一行人撤回公司的時候,周總問:“小絕阿,那個kipacs重啓是怎麼回事呢?以前怎麼沒聽你說過?”
絕影哪敢給他講很話,忙說:“沒什麼大不了的,回去我調研一下,估計還有些小bug。”
在公司做case就是這樣,雖然公司要求所有bug的發現和修正都要最終體現到軟件開發文檔裏,但實際操作起來,往往是程序員發現了自己的bug能隱瞞下來的都隱瞞下來,自己抽個時間或者加班把它修改了,這樣給領導的印象要好一些。這和現在很多小煤窯的做法差不多,雖然上頭三令五申要杜絕安全隱患,但事故總還是要發生的,雖然又說發生事故要如實上報及時補救,但小老闆們總是能隱瞞不報就隱瞞不報,自己私下處理了事。你想真要是如實上報你一個小小煤窯一年12個月就報了二十多個事故上去明年的開採許可證還怎麼可能拿得到?
絕影說是小事,回到公司又看了半天都還是沒搞明白,問題就出在調窗上,這個調窗原理說簡單點其實就是把圖像的一些屬性調整一下然後重新繪製到dc上,小幅度地調整都沒有問題,就是大幅度長時間調整最後顯示圖像的部分都會黑掉。先他以爲是對wm_paint消息的處理有問題,這個就比較麻煩,系統經常要發送wm_paint這個消息,在裏面下個斷點或者加個messagebox就一直要不停地彈出。搞了半天還是找不出個所以然。你想要是真是對這個消息處理出現了問題,那應該一早調窗就有問題纔對。
調試了幾次,絕影發現系統變得越來越慢,打開任務管理器,乖乖,kipacs居然佔用了300多m內存。要知道kipacs剛啓動時不過只佔用了17m內存。看樣子像是內存泄漏。這樣想,他繼續調窗,調一下發現內存漲上去可又沒降下來,果然是調窗的時候發生了內存泄漏。
知道了原因解決起來就要快得多,原來是getdc獲取dc後沒有使用releasedc把它釋放,這部分在wm_paint消息中,wm_paint消息又頻繁發送,所以那內存泄漏起來真是要命得很。
加上releasedc,kipacs終於可以流暢地調窗,看看任務管理器,內存佔用基本穩定在20m。
搞完這個bug,絕影看看時間,已經是晚上9點多,公司的人早不知道什麼時候都走*光了。這次的事情還是給絕影留下了深刻的教訓以至於在很常一段時間,別人問他:“影頭,你看看我這程序,怎麼老是出問題阿?”他都會跟別人說:“先看看是不是有內存泄漏。”
問題解決了,等到第二天周總來到公司,絕影便輕描淡寫地對周總說:“昨天那個kipacs需要重啓的問題我已經解決了,是個小問題,內存泄漏。”
所以什麼叫打腫臉充胖子。明明昨天花了5,6個小時憋得幾乎走投無路終於解決出的問題現在在老總面前卻輕描淡寫地說:“是個小case而已。”想bossliu也許也是這樣,自己不知道熬了幾個通宵腦細胞不知殺死多少終於給做出個多線程出來,卻輕描淡寫地說:“多線程嘛,那個還不容易,二三十分鐘就搞出來了。”兩個人都是愛吹牛,好像自己能耐大得不得了,什麼技術阿方法阿算法阿解決方案阿還不一切都盡在掌握中,原以爲牛這樣吹了,大家就決定自己有多了不起,結果最後受苦的是自己,開心的是老闆,老闆們正是利用了這種心理,他們會說:“不錯不錯,這麼個大問題能這樣快地解決,這個程序裏面還有二十多個bug,都是小問題,給你一天的時間夠了吧。”
周總對絕影反映的問題還是比較關心,他說:“內存泄漏這個問題是廣泛存在的阿,這種問題又最不好調試。我給你介紹個軟件吧,boundscheck,專門測試內存泄漏。”
在以前,絕影絕對不會去關心別人介紹的什麼軟件,首先那軟件是別人介紹的,自己又不熟悉,軟件好不好阿,怎麼用阿都要自己去摸索,特別是這個boundscheck一聽就知道是個英文版的軟件,還要拿金山詞霸去翻譯菜單或者網上到處去找漢化版,本來以爲用這個軟件能極大地提高勞動生產率,結果反而花在學習上的時間都遠遠超過了它提高的勞動生產率,這叫“磨刀誤了砍柴工”。
可這次絕影還是比較慎重,昨天雖然把問題解決了但實在把自己搞得太痛苦,也幸虧昨天開了任務管理器發現了問題,要不說不定把代碼跟蹤到太平洋還不知道問題在哪裏。
去網上下個boundscheck6forvc,原來是大名鼎鼎的numega公司出的,想能出softice這樣的軟件的公司出的東西還能有假嗎?就比如今天微軟宣佈出了一個新的操作系統,那還不成爲各大網站的頭條新聞。所以不僅是衣服,就是軟件也有個品牌效應。
那天在公司又調研了一整天,絕影第一次知道了“純化測試”這個詞。以後每次周總說:“ok,明天我們進行purification。”絕影就跟大家翻譯道:“好,明天我們進行純化測試,沒裝boundscheck的把boundscheck裝上,不會用的找我。”
最近幾天bossliu在公司頗爲得意,看來醫院對kiregis試運行非常滿意,要他修改的地方也很少。kiregis的代碼一直是bossliu在負責,絕影從來沒去看,這也好,世界上最幸福的事情就是你把事情交給別人別人做好了交給你居然和你的要求一模一樣,根本不用改。因爲沒什麼事做,bossliu正好潛心研究起c++來。
本來有好多事情都是一樣,會做容易做好難,就說這c++就算你是寫了五六年程序的程序員,說函數模板、類模板、純虛函數、虛基類這些東西你又用上了多少。bossliu研究了一些這方面東西,再加上kiregis在醫院取得了成功,覺得差不多火候已到,絕影也不過爾爾,不過就是彙編好一點嗎?還是那句話,彙編不過100多個指令,有什麼難的。
可絕影總以爲他對c++的研究應該僅限於“理論”上。
兩人見了面,bossliu問:“你知道這個xxxx基類的構造函數會被調用幾次麼?”
絕影自知肯定回答不上來,在這種情況下最好就不要去回答,bossliu是有備而來故意刁難你,不是帶着請教的,所以就算你僥倖答對了,也並不能讓他對你欽佩的感覺油然而生;要是你答錯了,就正中他的下懷,從此以後凡是有技術上的討論,他總是會拿“你xxxx這個問題都不知道,還說個p呀”來壓你。
這正如魯迅先生說的,一家人生了孩子,你說:“這孩子好呀,以後要當什麼什麼大官有多少多少錢。”那你是騙人的,可人家父母愛聽。你說:“這孩子最後會死。”這是真話,可人家父母不愛聽。怎麼辦,你最好就說:“呵,這孩子……你看……呵……哈哈……”
所以絕影避開問題地重點,也打起哈哈來:“研究c++阿?有什麼好研究的?我告訴你,c++能做到的,用匯編都能做到。彙編能做到,c++還有些做不到哦。”
這是絕影的殺手鐧。首先把問題轉移到彙編上來。這方面他有幾年積累,算是個小行家。再說的確在自定位和精確計算代碼長度這兩個技術上只有彙編能做到,這是高級語言的死穴。管它什麼語言,他用這兩點都能把它殺了。
bossliu很不服氣地說:“我知道你那彙編,在windows下不過是換成‘invoke’來調用api罷了。還能唬我。bossjue,你去各大公司看看。你那玩藝過時了。”
“你懂個p,存在就是合理,懂不?這是哪個大哲學家說的。”
“我知道我知道。可你那玩藝就快連存在的價值都沒有了。我問你,除非你搞病毒,還能有什麼彙編能做高級語言不能做的?”
這又將了絕影一軍,每次他跟別人說:“我嘛,擅長彙編。”就最怕別人問:“你搞病毒的?”別人這樣說,就好像說:“你這人,真長得就像個賊。”所以每次他都不得不跟別人講一大堆什麼彙編不一定搞病毒,除了搞病毒彙編還有什麼什麼用途,還能寫什麼什麼程序。想了半天,絕影實在想不起彙編還有什麼優勢,但沉默下去就是認輸,從此以後,bossliu就可以名正言順在他面前顯擺c++,從此以後自己和彙編語言在公司中就再沒有什麼地位。請急之下,他忽然又想起大學時候做過的大數運算庫,終於洋洋得意地說:“誰說沒用了,我曾經把一個c++做的大數運算庫算法原封不動地翻譯成彙編,算1024位乘法速度居然提高了200倍。我用匯編,可以把大部分操作數都存到寄存器中,可憐的c++阿,還得全部存到內存中,做高級運算還是應該在一旁休息去吧。”
說完這話,bossliu沉默了。這是理論論據和事實論據都充分。本來彙編速度快這是毋庸置疑的,再加上絕影有寫好的程序擺在那裏,bossliu從哪裏駁都駁不倒。見他不說話,絕影大模大樣往自己桌子上一坐,心裏嘀咕着:“還跟我比c++,我彙編是通喫。”
大概過了10分鐘,bossliu忽然跳起來大聲說到:“bossjue我差點讓你給忽悠了,剛纔忘記了cache。現在的cpu都有cache,cpu對cache的訪問速度和寄存器差不多,c++會把經常使用的變量放cache裏面,速度應該和彙編差不多纔對。”
絕影本來以爲可以穩坐釣魚臺了,沒想到bossliu就是這麼個不見棺材不掉淚的人,聽他這麼說還是有道理,至少從理論上講應該是這樣,這下他又解釋不了實踐上200倍的速度差,現在沒有理論作爲依據,就是牽強地去跟bossliu解釋也會把自己在這次爭論中置於非常不利的地位。最後,還是絕影沉默了。
從那次爭論以後,bossliu再也沒給絕影誇過c++的好,也沒再誇自己在c++上的造詣有多深。絕影也沒再在bossliu面前顯擺彙編有多無所不能,自己彙編有多爐火純青。兩人都心知肚明,他們倆水平一般,要是繼續在這語言孰優孰劣上爭論,誰都沒必勝的把握,如果輸了,臉就丟大了。還不如好好再深造幾年,到時再一比高低。
很多年以後,絕影終於想到當初想不出來的問題:彙編語言使用寄存器並不是對寄存器訪問比對內存訪問更快,而是對寄存器尋址比對內存尋址更快。很多時候他想把這個告訴bossliu,但他終於還是沒告訴他。
一晃兩個月過去,絕影和bossliu去醫院對他們的軟件系統作了兩次例行維護和更新,醫院的規模還算大,登記數據已經有三萬多條,kiregis還是經受住了耐力測試。kipacs經過絕影兩次更新基本上也運行比較穩定。在領工資的時候,周總對絕影說:“xxx醫院的case已經驗收合格,這個月給你發500元的獎金。因爲這個case的收入也不多,就你kipacs貢獻最大,所以獎金也就你有,對其它的人就不要聲張了。”
本來絕影覺得這麼大的case忙了這麼久才500元的獎金周總也真是太扣門了,但聽周總這麼說,絕影還心裏笑着走出了他的辦公室,恨不得立馬當衆大聲宣佈:“知道嗎?xxx醫院項目獎金500元,就我絕影一個人有!”
bossliu也進了辦公室。周總還是說:“xxx醫院的case已經驗收合格,這個月發給你500元的獎金。因爲這個case的收入也不多,就你kiregis貢獻最大,所以獎金也就你有,對其它的人就不要聲張了。”
當然,bossliu在出來的時候也恨不得力馬當衆大聲宣佈:“知道嗎?xxx醫院項目獎金500元,就我bossliu一個人有!”
大家一個二個領完工資,臉上都喜氣洋洋。公司的電話響了,張廠長積極地搶着去接了電話,說了幾句,回過頭來說:“醫院打來的,找絕影,好像程序有些問題。”
絕影一下傻了。傻的不是程序有些問題,是醫院居然指名點姓要找絕影,而且醫院居然還知道“絕影”的名字,自己麻煩了。()