目錄:
2009-2010小結(jié)(一)畢業(yè)前夕
2009-2010小結(jié)(二)初入職場(chǎng)
2009-2010小結(jié)(三)加班考驗(yàn)
2009-2010小結(jié)(四)抑郁重重
2009-2010小結(jié)(五)離職始末
在正式轉(zhuǎn)到 H 手下之前,有件小事,不知道這件事有沒(méi)有對(duì)后來(lái)起什么影響,但愿是我多慮了。那一次L1出差一周,所帶的我這邊項(xiàng)目交給H代管。有一次發(fā)不知道正式的還是非正式的release notes,H問(wèn)我,SVN number要不要寫(xiě)的?我理解成他問(wèn)我先前做法是怎樣的,于是順口回答說(shuō):不需要的。H說(shuō),你寫(xiě)上吧。我說(shuō)好。我隱隱突然意識(shí)到不對(duì)勁,他只是代管一下,怎么會(huì)改變一些既定做法?
沒(méi)有預(yù)料到之后不久,便有了前文所說(shuō)的行政上的調(diào)整,這個(gè)項(xiàng)目也歸H了。之后有一次臺(tái)北的產(chǎn)品經(jīng)理發(fā)需求過(guò)來(lái),要添加的一項(xiàng)功能是,在Win7任務(wù)欄添加圖標(biāo)。經(jīng)過(guò)一番調(diào)研之后我跟他匯報(bào)說(shuō),這事兒正規(guī)途徑做不了,微軟特意不允許以編程方式添加任務(wù)欄圖標(biāo)的;真要做只有hacking方法,blabla。言下之意是想讓他拒絕掉這個(gè)需求。沒(méi)想到他居然同意了用hacking手段!這在L1時(shí)代是完全不可能發(fā)生的,哪怕是一點(diǎn)點(diǎn)沒(méi)有正規(guī)文檔給出的方法都不許使用,寧可少點(diǎn)功能。同意歸同意,他又不表示立即實(shí)施,時(shí)不時(shí)來(lái)問(wèn)一下你準(zhǔn)備如何如何,然后探討探討。
過(guò)一兩天,有一次他又跑過(guò)來(lái)(位置還沒(méi)換,所以隔得比較遠(yuǎn)),說(shuō),這功能我可不可以讓D來(lái)做呀?我奇怪了:當(dāng)然可以啊!(你說(shuō)了算么)于是他表示要讓D來(lái)做。那我就扔著,不做,網(wǎng)上東逛逛西看看。又過(guò)了一兩天,那一天下午他過(guò)來(lái)讓我加班,因?yàn)槟枪δ苄枰龊谩N矣制婀至耍徽f(shuō)讓D來(lái)做了么,做沒(méi)做好,關(guān)我毛事啊,怎么又讓我加班呢?由于這是第一次他讓我加班,我什么也沒(méi)說(shuō)。到了晚上,我不管三七二十一,把那個(gè)他準(zhǔn)備讓D做的功能給做了——不是說(shuō)因此加班么,那我給你搞定不就完事了?不知道他葫蘆里賣(mài)的什么藥。看到SVN提交的郵件以后,他又立馬跑過(guò)來(lái),帶點(diǎn)驚訝地問(wèn)我,你改了?然后又來(lái)看代碼,問(wèn)這問(wèn)那,最后離開(kāi)。
大家可能猜到了,我的期待徹底破滅,接下來(lái)是一段極其抑郁的生活。開(kāi)始的時(shí)候加班是挺少,幾乎沒(méi)有。但是偶爾有的話(huà),不會(huì)是那種任務(wù)很明確的,但就是讓你呆著,好在都不是很晚。
關(guān)于剛才那個(gè)項(xiàng)目,還有另一番進(jìn)展。不久以后,H突然跑過(guò)來(lái)跟我說(shuō),這個(gè)項(xiàng)目也差不多了,剩下的都是些維護(hù)工作了,我想把它先轉(zhuǎn)給M(當(dāng)時(shí)是我和M一起維護(hù))和D,再慢慢轉(zhuǎn)給D,把你們兩個(gè)都空(解脫)出來(lái)。我說(shuō)我手上只有這一件事了,那我干什么?他語(yǔ)焉不詳?shù)卣f(shuō)了些什么,意思表示得好像是還有別的什么(重要)事情讓我干。于是這項(xiàng)目便開(kāi)始慢慢從我手上溜走。猛然間我感到一陣害怕,我手上都沒(méi)事了,公司留我做什么?H是不是有什么想法?可是看H平時(shí)和和善善的,也很難揣摩他能有什么歹意。
接下來(lái)給我做的事情,是陸陸續(xù)續(xù)的好多survey。一開(kāi)始叫survey一下Windows驅(qū)動(dòng)。我問(wèn),公司有這樣的項(xiàng)目么?他說(shuō)有,并舉了例子。好,我去survey。過(guò)了些天,我看他給的那個(gè)例子就是個(gè)簡(jiǎn)單的WinIO驅(qū)動(dòng),告訴我通訊協(xié)議我大概也能抄一個(gè)吧。于是我跟他匯報(bào),那個(gè)例子基本上看得懂了,接下來(lái)要看什么/干什么?他像之前每次跟他匯報(bào)時(shí)一樣,為難地抬起頭,使勁想了想,然后叫我去看下文件系統(tǒng)過(guò)濾驅(qū)動(dòng)。
好,看就看,找些電子書(shū),挑一些可看性比較強(qiáng)的,打印了二三十頁(yè)下來(lái),慢慢磨。又過(guò)了些日子,覺(jué)得資料上面說(shuō)的我大致能理解了,但是由于框架實(shí)在是太龐大了,不想去實(shí)驗(yàn),就跑去問(wèn),這方面公司到底有什么要做的么?H說(shuō)他覺(jué)得這些技術(shù)蠻有用的,以后肯定會(huì)用到的,云云。嗯?敢情是想拿我當(dāng)技術(shù)儲(chǔ)備?我就是survey帝啊!
再后來(lái),讓我去survey一下某品牌機(jī)自帶的一鍵還原軟件。我特意問(wèn),我們要做這個(gè)的?他說(shuō)要的。于是我就拿著那個(gè)本子折騰來(lái)折騰去,耗了個(gè)把月吧。到最后實(shí)在想不出可以干什么,于是天天格它硬盤(pán),拿著自己寫(xiě)的demo程序還原之。期間H偶爾過(guò)來(lái)看看,大多數(shù)時(shí)間不太理。
又想到一件事。某個(gè)加班的晚上,忘了是為了調(diào)試什么,H讓我過(guò)去看他調(diào)。可能由于之前某一次他看到我開(kāi)著OllyDgb玩(我只是會(huì)一些很簡(jiǎn)單的操作,知道怎么斷住MessageBox罷了),他自言自語(yǔ)地嘀咕“那個(gè)叫什么名字來(lái)著”,然后打開(kāi)了OllyDbg。他又問(wèn)我是怎么操作的。我說(shuō)我是截哪個(gè)函數(shù),然后怎么怎么瞎看的。于是看他操作。只見(jiàn)他按鍵飛快,F(xiàn)8長(zhǎng)按,整個(gè)屏幕滾下去,過(guò)會(huì)兒又作不對(duì)勁狀,重新開(kāi)始,又是飛快狀,不知道他要干什么,于是我忍不住開(kāi)口了,跟他說(shuō),我當(dāng)時(shí)是先這樣,然后看什么什么,大概可以得出什么結(jié)論。然后他有點(diǎn)兒照做的意思,可是過(guò)會(huì)兒又是操作飛快,整個(gè)屏幕在閃,看不出什么思路。我琢磨著他是不是沒(méi)怎么用過(guò)這玩意兒啊,不會(huì)用就別拿出來(lái)顯啊,拿你拿手的出來(lái)嘛。于是我又多話(huà)了。后來(lái)我也覺(jué)得我“提示”得多了,想不說(shuō),可是又覺(jué)得他是期待我說(shuō)的樣子;想說(shuō),又覺(jué)得他沒(méi)叫我插嘴的樣子;想走,又覺(jué)得他沒(méi)叫我走的樣子。十分尷尬。只好有一搭沒(méi)一搭地說(shuō)著。后來(lái)H終于怒了:你走!我一愣,懷疑是不是沒(méi)聽(tīng)清楚,確定好像是真的,于是飛也似地跑了。半個(gè)小時(shí)以后,H拿了一些巧克力來(lái)分給我們,算是了結(jié)。之后我再也不敢在他面前提/玩OllyDbg,要玩就玩WinDbg,因?yàn)閃inDbg我基本上完全不會(huì)用。
轉(zhuǎn)眼到了年關(guān),H給我的考核還是不錯(cuò)的。據(jù)模糊了解,不管是獎(jiǎng)金還是漲幅,似乎都在平均水平之上。這里還要感謝下財(cái)務(wù)的W姐,給雙薪的時(shí)候把我的實(shí)習(xí)期也算進(jìn)去了,多少有點(diǎn)點(diǎn)心理安慰。
過(guò)年回來(lái)后仍是無(wú)所事事,3月初H到米國(guó)總部去了一趟,更加沒(méi)事情做。M和D一直做著之前哪個(gè)項(xiàng)目的維護(hù)工作。H回來(lái)后,帶來(lái)了米國(guó)老大們的一些新主意,M和H一個(gè)老部下L3以及H自己被H安排來(lái)做這件事。大約三月底左右吧,H手上有多出一個(gè)項(xiàng)目,是手上將個(gè)新項(xiàng)目的升級(jí)更新程序。他自己開(kāi)始搭最初框架,然后扔一點(diǎn)活給我和另一個(gè)同事做。沒(méi)過(guò)多久,H又表示要將它丟給我。他說(shuō),我們要重視一些設(shè)計(jì)工作。于是他拿StarUML畫(huà)了些圖,跟我說(shuō)這個(gè)調(diào)了那個(gè),那個(gè)調(diào)了誰(shuí)。對(duì)著代碼一看,果然不錯(cuò),完全事實(shí)描述。可是你那些圖僅僅表達(dá)了你是怎么做的,這怎么夠?一點(diǎn)也沒(méi)看出來(lái)為什么要這樣設(shè)計(jì)。當(dāng)時(shí)我第一次看到什么時(shí)序圖啊,還有點(diǎn)抵制,這點(diǎn)我要做自我批評(píng)。雖然圖不會(huì)看,可是代碼還是會(huì)看的。不夸張的說(shuō),這整個(gè)代碼一團(tuán)糟,各種糟糕。一堆單件(一堆全局變量);業(yè)務(wù)代碼中會(huì)充斥著一大段API調(diào)用序列(底層API沒(méi)有封裝到一兩句話(huà)表達(dá)業(yè)務(wù)的程度);還有那個(gè) WinInet 的返回結(jié)果里,case 到 timeout 之類(lèi)的,老是來(lái)個(gè) OnConnectFail(),搞得像個(gè)框架,可是正確的情況又直接刷刷刷寫(xiě)下來(lái)了,不見(jiàn)什么OnConnectSucceed(),到底哪部分框架那部分是用框架??jī)H僅一處小小的多線(xiàn)程部分,搞得到處鎖。總而言之,一個(gè)模塊,互相糾纏著的幾個(gè)類(lèi),一層結(jié)構(gòu)。為了搞個(gè)運(yùn)行入口,居然建了個(gè)MFC SDI項(xiàng)目,在文件菜單建了一項(xiàng)來(lái)進(jìn)入整個(gè)模塊。
大家可能懷疑我說(shuō)得太夸張了,這一點(diǎn)我不能舉出什么證據(jù)。當(dāng)然,也許牛逼的人喜歡看糾結(jié)的代碼,這是水平。像我這樣的菜鳥(niǎo)只喜歡看簡(jiǎn)單的代碼,除非有必要才增加模塊和層次,這才變得復(fù)雜一點(diǎn)點(diǎn)。我從那時(shí)起開(kāi)始懷疑技術(shù)到底是什么,是不是多會(huì)用幾個(gè)API就是技術(shù)達(dá)人?
好了言歸正傳,這個(gè)項(xiàng)目脫離demo,要變得正式一點(diǎn),H讓我把他整成一個(gè) Windows Service。好,我整,去掉哪個(gè)MFC的框,重新建了個(gè) Service 的框架,然后入口放進(jìn)去。我以為很輕松的一件事。結(jié)果,編譯不過(guò),一看,有寫(xiě)代碼用了MFC的類(lèi),CFile啦,CFindFile啦,,,好在總量不是很恐怖。我去跟H說(shuō),代碼里有一些用到MFC的,Windows Service有沒(méi)有界面,加上涉及到的一些功能用MFC也不見(jiàn)得多方便,都改為Win32 API吧。H不置可否,大意上說(shuō)了句,程序里用MFC我覺(jué)得蠻常見(jiàn)的,大多數(shù)都用的吧。我反駁了句,那也看場(chǎng)合啊,我們現(xiàn)在完全沒(méi)必要引入MFC這個(gè)大依賴(lài)么。H沒(méi)有再說(shuō)什么。我回頭將它們?nèi)扛牡簦肅reateFile,F(xiàn)indFirstFile……。這邊剛改完,H又提交了一部分代碼,又是CFindFile,像是剛才什么都沒(méi)跟他說(shuō)過(guò)似的。日!繼續(xù)改!
接下來(lái)兩天,一直在考慮這個(gè)東西丟給我我能維護(hù)多久。思來(lái)想去覺(jué)得會(huì)堅(jiān)持不住,我非常不愿意一個(gè)系統(tǒng)從一開(kāi)始就是“老系統(tǒng)”。于是給H發(fā)了封郵件,說(shuō)這些代碼雖然“有設(shè)計(jì)”,可是結(jié)構(gòu)化不是很到位,然后給了一張通俗的框圖,表示這塊干什么那塊干什么,這塊只知道什么只需要處理什么,那塊又如何,而不用大家誰(shuí)都知道誰(shuí)。H過(guò)來(lái)表示“是啊”的感慨,然后又說(shuō)了一些不著邊際的話(huà)(也許是著邊際的,只不過(guò)我沒(méi)記住),最后什么決定也沒(méi)做出。接下去幾天,我時(shí)不時(shí)追問(wèn)他,可不可以動(dòng)手改,他總是用一些話(huà)來(lái)搪塞,大概是些——“我覺(jué)得…總體是好的,只是,……”,“我覺(jué)得OK啊,不過(guò)明天的版本先出了”。我在問(wèn)的同時(shí),也在積極準(zhǔn)備著,終于,在某個(gè)不得不改的時(shí)刻,我把它們?nèi)峤簧先チ恕T瓉?lái)的代碼仍舊放在那個(gè)目錄不動(dòng),我不敢特意去做刪這個(gè)動(dòng)作,太敏感。過(guò)了一會(huì)兒,大概H看到郵件了,又跑過(guò)來(lái)問(wèn):改了?會(huì)不會(huì)有什么問(wèn)題?云云。
——這是我在H手下干的最傻逼的事情,沒(méi)有之一。這件事我跟一些人提過(guò),今天把它完整的寫(xiě)出來(lái),也期待大家批評(píng)。我盡我的努力使我的描述盡可能客觀(guān),但主觀(guān)性仍然是不可避免的。關(guān)于那個(gè)代碼是不是真有那么糟糕,是最容易帶有主觀(guān)性的,請(qǐng)大家自行判斷吧,我只能說(shuō)很糟糕。做這件事情之前曾請(qǐng)教過(guò)M到底做不做好,M說(shuō)如果為了項(xiàng)目好就應(yīng)該做。回想起這一番,我有時(shí)候心理陰暗面來(lái)了,也會(huì)懷疑M那時(shí)候是不是陰我。不過(guò)M似乎沒(méi)有陰我的動(dòng)機(jī),可能在L1手下我比他稍微春風(fēng)得意一些,但在H手下他明顯比我滋潤(rùn),沒(méi)必要啊。(M如果看到請(qǐng)別介意哈。)
之后挺明顯的感到H不愿意管這個(gè)項(xiàng)目了,也有點(diǎn)選擇性不了解該項(xiàng)目。經(jīng)常有什么新需求就答應(yīng)下來(lái),也不考慮現(xiàn)有設(shè)計(jì)能不能容納,我過(guò)去問(wèn)他,他又裝作不知道的樣子,只說(shuō)這怎樣怎樣就可以了,是可以做的。我又問(wèn)那么這個(gè)改過(guò)之后接下來(lái)那些部分可能要改的可能不會(huì)改的,我好做應(yīng)對(duì),他又不知道了。不知道可能是選擇性的,但是對(duì)于需求的控制他這是發(fā)自?xún)?nèi)心的。因?yàn)樵谒约阂矃⑴c的那個(gè)項(xiàng)目里,也是不停地改,三天兩頭改,最后H跟PM鬧起來(lái),干脆不理PM了。后來(lái)只好請(qǐng)QA MM J姐幫忙中轉(zhuǎn)。所以現(xiàn)在我想,他原來(lái)那個(gè)一層式結(jié)構(gòu)確實(shí)是適合這樣折騰的。反觀(guān)L1帶的東西,幾乎所有未來(lái)一兩個(gè)月內(nèi)的新需求,都是不會(huì)傷害到現(xiàn)有基本框架的,很多都是落入我們的預(yù)測(cè)的,往往變成了改個(gè)配置項(xiàng)這樣簡(jiǎn)單的事情。曾經(jīng)滄海難為水啊。當(dāng)然H也會(huì)設(shè)配置項(xiàng),可是設(shè)置的時(shí)候沒(méi)有邏輯性,某個(gè)選項(xiàng)代表什么沒(méi)法用一句話(huà)概括出來(lái),大多數(shù)只能總結(jié)為,某個(gè)選項(xiàng)打開(kāi)表示PM某個(gè)需求所要求的功能開(kāi)啟。
關(guān)于H,我想我可以可以寫(xiě)好多好多。
H曾經(jīng)看到我寫(xiě) CString.Relpace(“{PlaceHolder}”,“XXX”),問(wèn),為什么不用 sprintf 呢?我無(wú)言以對(duì)。
H看到我開(kāi)著IE,會(huì)問(wèn),你為什么不用Firefox?我無(wú)言以對(duì)。
H看到我開(kāi)著IE,會(huì)問(wèn),你為什么不用Chrome?我無(wú)言以對(duì)。
H看到我開(kāi)著IE,嘆了口氣,你就是個(gè)微軟迷……我,我作委屈狀。
H看到我在Word里打公式,會(huì)問(wèn)你為什么不用Mathtype?我無(wú)言以對(duì)。
H看到我寫(xiě)注冊(cè)表,會(huì)問(wèn),你為什么不寫(xiě)ini文件?我不知道我寫(xiě)ini了他會(huì)不會(huì)問(wèn)我為什么不寫(xiě)注冊(cè)表。
……
從此討厭“為什么不”的問(wèn)法。
自從我改了H的代碼之后,H就經(jīng)常的說(shuō)我的程序都是同步的,沒(méi)法即時(shí)退出。限于水平問(wèn)題,當(dāng)時(shí)沒(méi)一下子理解。好在是個(gè)服務(wù)程序,業(yè)務(wù)上也需要持續(xù)不斷跑,只有關(guān)機(jī)或者關(guān)閉服務(wù)的時(shí)候停止就可以了。這時(shí)候我安全退出和系統(tǒng)來(lái)強(qiáng)制結(jié)束的表面效果沒(méi)多少差異。等我明白這個(gè)問(wèn)題之后,在9月份的第二版本中,我把這個(gè)問(wèn)題全部改掉了,不留一絲同步的影子,H之后便沒(méi)說(shuō)什么了。只是第二版的上線(xiàn),由于對(duì)TP提供API等等,需要H對(duì)外公布。而H處于對(duì)此不管事?tīng)顟B(tài),加上別的項(xiàng)目也比較緊,一直沒(méi)上,直到我離職,也只是內(nèi)部release,沒(méi)有出正式版。
自從改了H的代碼之后,H就不太讓我碰C++的東西了,有一次H曾讓我去survey FileFox 插件。當(dāng)時(shí)看了兩天,寫(xiě)了個(gè) Hello word 級(jí)別的插件,然后報(bào)告survey結(jié)束,有什么正式需求。結(jié)果讓繼續(xù)survey,并被問(wèn)有沒(méi)有做這個(gè)方向的興趣,有的話(huà)可以和Linux端的人一起做那方面的項(xiàng)目。我或委婉或直接地表示不要寫(xiě)js,不要為mozilla的野心服務(wù),不看好FireFox平臺(tái),我要繼續(xù)玩C++。過(guò)了些日子,被要求二選一,F(xiàn)ireFox插件,或者Windows下的可能涉及D3D的另一個(gè)項(xiàng)目。我斷然選擇了后者。這個(gè)項(xiàng)目一開(kāi)始也是在H手上的,可是不知為什么后來(lái)突然被L2拿去了。L2派手下T來(lái)做,因?yàn)槲夷菚r(shí)已經(jīng)為此survey了一些時(shí)候了,便讓T和我一起做。這時(shí)候才感到L2的好啊。除了加班,對(duì)于L2我真的挑剔不出什么了——據(jù)說(shuō)L2現(xiàn)在也會(huì)安排周任務(wù)了。我想多花些時(shí)間在L2的項(xiàng)目上,H又說(shuō)他這邊的更新程序任務(wù)重,那邊的優(yōu)先級(jí)低,有一次主動(dòng)為我向那個(gè)項(xiàng)目告假2周,導(dǎo)致后來(lái)我進(jìn)度上落后于T,其實(shí)這邊也就是幾個(gè)頑固bug而已。
其中一個(gè)bug是crash,各種表現(xiàn)。最后查出是crash在InternetOpenUrl的函數(shù)里。摸索了一段時(shí)間后,發(fā)現(xiàn)使用過(guò) SH 系列 API 后,在某些機(jī)器上就會(huì) 100% crash,為此當(dāng)時(shí)還在這里發(fā)了一篇文章。把 SH 去掉之后,現(xiàn)象平息了一陣子。后來(lái),隨著測(cè)試的深入,又報(bào)了。這下可沒(méi)辦法了。H自己也沒(méi)辦法。再很后來(lái)很后來(lái),我找到了一篇微軟的文章,說(shuō) WinInet 不支持在 Service 里使用,并建議轉(zhuǎn)用 WinHttp。至于為什么用WinInet,這里又有一段故事。很早的時(shí)候,在我剛進(jìn)去不久的時(shí)候,當(dāng)時(shí)那個(gè)項(xiàng)目也有網(wǎng)絡(luò)交互,當(dāng)時(shí)年少無(wú)知的我找了一段例子,是socket的。(那個(gè)作者還寫(xiě)了這么一句注釋?zhuān)?/If it works, it is written by masterz, otherwise I don't know who write it.)我用它搞了個(gè)支持 Http Get 和 Http Post 的小玩意兒。后來(lái)項(xiàng)目轉(zhuǎn)到H手上的時(shí)候,H看了說(shuō),你為什么不用WinInet呢?你的不能支持跳轉(zhuǎn),不能支持https,并給了一堆WinInet函數(shù)名。(可是他為什么不指導(dǎo)我完善它呢?)我說(shuō)我當(dāng)初并不知道WinInet的存在,并問(wèn)他改嗎。他說(shuō)不用改了。所以后來(lái)他把升級(jí)更新程序的網(wǎng)絡(luò)下載模塊丟給我的時(shí)候,我就用WinInet了。好,回到現(xiàn)在,我發(fā)了封郵件給H,說(shuō)WinInet在Service中不被支持,這可能是crash的原因,建議使用WinHttp,并告知WinHttp在沒(méi)有打SP1的XP里不支持。他回復(fù)說(shuō)他覺(jué)得“OK”,但是他認(rèn)為需要支持不帶SP1的XP。這相當(dāng)于被變相打回了。但是他有沒(méi)有因此宣布此bug可以不修復(fù),之后的日日夜夜,J總是因?yàn)檫@個(gè)bug的各種表現(xiàn)來(lái)找我。
H自己手上那個(gè)項(xiàng)目據(jù)說(shuō)忙得很,他和M、L3甚至忙到天天加班,卻從不要我加班,也不讓我參與。有時(shí)候碰上幾個(gè)界面的,M說(shuō)ATL寫(xiě)界面不方便,H就叫我寫(xiě)個(gè)網(wǎng)頁(yè),M在外面套個(gè)IE控件,這才零星有我一點(diǎn)點(diǎn)事。有一次我跟V姐抱怨了幾句,說(shuō)在H手下被邊緣化了,什么都沒(méi)我的事。V說(shuō)怎么會(huì)啊,H每次說(shuō)起你都說(shuō)你挺不錯(cuò)的,他很喜歡你的。(是嗎?)也不知道V有沒(méi)有幫忙傳達(dá)過(guò)什么,第二天H就讓我加班,找的理由是我寫(xiě)的界面跟他們也是有關(guān)系的,要發(fā)版本,要確保沒(méi)問(wèn)題。我就做著網(wǎng)上隨便逛逛,最后跟他們一起回去。之后每次加班H都要叫上我了,大部分時(shí)間事情都不是很多,我就當(dāng)放松下,大家一起玩玩,再蹭頓晚飯了。其實(shí)到了這時(shí),由于長(zhǎng)期無(wú)事,倒是有點(diǎn)期待加班了,之前對(duì)于加班的憎恨也不知不覺(jué)地化解了。我細(xì)細(xì)地觀(guān)察了H的加班,其實(shí)跟L2的加班是一模一樣的,都是沒(méi)有明確的下班目標(biāo),都是由于臨近發(fā)版本,都是由于更早的時(shí)候沒(méi)有做好任務(wù)安排以至于到了快發(fā)版本了才發(fā)現(xiàn)時(shí)間不夠。
我手上那個(gè)升級(jí)程序的項(xiàng)目,H幾乎沒(méi)怎么管過(guò),搞得我每天都不知道做什么。我只知道大約幾個(gè)月后要發(fā)布。至于周任務(wù)、月任務(wù),都是沒(méi)有的。有一次H可能真的被他那邊的事情糾纏地搞不清楚了,終于召集他手下所有人,把接下去幾天的任務(wù)說(shuō)了下,并且也說(shuō)了這件事誰(shuí)做那件事誰(shuí)做。他是畫(huà)在白板上的,我們都沒(méi)抄下來(lái),結(jié)束的時(shí)候拿手機(jī)拍了下。我滿(mǎn)以為他會(huì)發(fā)郵件再通知一遍的,哪知道神馬也沒(méi)有。我不知道他開(kāi)那個(gè)會(huì)干嘛來(lái)著,也許不是為了明確我們的任務(wù),只是為了用我們所有人的力量為他整理思路而已。
長(zhǎng)期的空閑狀態(tài)讓我壓抑,并且效率明顯降低。同樣一件事,現(xiàn)在的我比兩年前的我肯定完成得慢很多。我開(kāi)始擔(dān)心自己的前途問(wèn)題。我現(xiàn)在寫(xiě)的所有關(guān)于H的,都是在空閑的時(shí)候反反復(fù)復(fù)回憶過(guò)的、思考過(guò)的,我很驚訝我盡然花了這么多精力去思考那么多事,也驚訝盡然有那么多事讓我久久不能忘懷。我總結(jié)了H的一些特點(diǎn):
- 不看郵件。往往發(fā)給他的郵件了,過(guò)了大半天跑過(guò)來(lái)問(wèn),告訴他郵件里寫(xiě)了,回答我沒(méi)看。
- 不看文檔。每次看他打開(kāi)WORD文檔,就滾得老快,像很熟悉似的,但找不著要找的內(nèi)容。
- 喜歡在談業(yè)務(wù)的時(shí)候說(shuō)技術(shù)名詞。(例:本來(lái)說(shuō)升級(jí)程序連接上服務(wù)器了應(yīng)該查詢(xún)什么信息,會(huì)被描述成:我們會(huì)發(fā)一個(gè)TCP包,……)
- 喜歡在談上層業(yè)務(wù)的時(shí)候時(shí)時(shí)刻刻問(wèn)底層實(shí)現(xiàn)。(例:跟他說(shuō)“連上服務(wù)器了,然后怎么怎么”,會(huì)被打斷問(wèn):是一次TCP連接嗎?)
- 喜歡在談上層技術(shù)的時(shí)候問(wèn)下層實(shí)現(xiàn)。(例:明明我們用的全是HTTP層次的API,非得每次說(shuō)TCP包)
- 以為只有技術(shù)問(wèn)題。(例:明明某些bug只是我們這樣定義,QA認(rèn)為應(yīng)該那樣定義,只是定義問(wèn)題,爭(zhēng)論不下去找他,他會(huì)先問(wèn)我,“你這樣做有什么困難?”)
- 沒(méi)有邏輯。(例:有一次好像企圖讓某應(yīng)用程序包含升級(jí)程序,想讓被包含著的升級(jí)程序又包含該應(yīng)用程序。)
- 沒(méi)有業(yè)務(wù)概念。跟他講話(huà)沒(méi)法跟他概括出功能名詞,提“某某功能”。如果要提某某功能,只能把這功能的全部API調(diào)用序列羅列一遍,他才能精確明白我在說(shuō)什么。同樣,他會(huì)用某些技術(shù)詞匯來(lái)描述某某功能,我也聽(tīng)不懂。甚至不知道什么意思自造詞,如:“我記得XP的是支持System Level的MUI的,Vista開(kāi)始才支持Application Level的MUI的。”從來(lái)沒(méi)有明白過(guò)這兩個(gè)Level是什么意思,雖然我知道MUI在XP和Vista里有區(qū)別。
- 沒(méi)有設(shè)計(jì)理念,雖然會(huì)畫(huà)UML,忠實(shí)表達(dá)他代碼是怎么寫(xiě)的。
- 不會(huì)拒絕需求,也不會(huì)預(yù)測(cè)需求以利于提前設(shè)計(jì)。
- 不主動(dòng)向上請(qǐng)示。遇到我不好決定的事情,去問(wèn)他,他也不好決定,也不問(wèn)上級(jí),也不做個(gè)有預(yù)測(cè)性的決定,任由我不知所措。
- 開(kāi)會(huì)經(jīng)常閑扯,每次被他打斷好多次,不局限于部門(mén)內(nèi)的會(huì)議里。讓人不能專(zhuān)心。可能他認(rèn)為這是制造輕松氛圍的方式。
- 怕給別的部門(mén)造成任務(wù)。所以不管某些內(nèi)容應(yīng)不應(yīng)該放在我們這邊做,經(jīng)常認(rèn)為需要自己做,以為讓別人做是態(tài)度不端正,“事情總是要做的”。那個(gè)升級(jí)程序的第二版,之所以要設(shè)計(jì)API,就是為了不要包含各種應(yīng)用程序的復(fù)雜需求,但TP同事說(shuō)下載失敗了,他就來(lái)問(wèn)我,你有沒(méi)有做重試啊。我說(shuō)當(dāng)然沒(méi)有啊,我只是給出了一種機(jī)制讓他知道是成功還是失敗了,要不要重試、用怎樣的重試策略,明顯應(yīng)該他來(lái)么。見(jiàn)我堅(jiān)決,他又裝著很抱歉的樣子,跟TP同事說(shuō)我們重試沒(méi)有做,你們那邊方不方便做一下……
- 怕別人給自己造成任務(wù)。Test case 評(píng)審的時(shí)候,見(jiàn)J列了好幾屏的case,他就抱怨說(shuō),你們搞得也太細(xì)了吧,這么多條,能測(cè)完么?那一次QA老大A義正言辭的說(shuō):這些需求,這些功能,本來(lái)需要這么多case來(lái)保證;這些都是我們分內(nèi)的事,不管多還是少,只要是我們?cè)撟龅模覀兙鸵觥B?tīng)得我暗暗感動(dòng)了一番,自此以后總是在心里默默地欽佩他。
- 不給別人發(fā)言機(jī)會(huì)。就算自己業(yè)務(wù)不熟,也搶別人話(huà),結(jié)果傳達(dá)的總是有偏差。聽(tīng)他溝通以及與他溝通都是很辛苦的,不知道在談業(yè)務(wù)還是在談技術(shù),反正一會(huì)兒這個(gè)一會(huì)兒那個(gè),很具有跳躍性。有一次他讓某同學(xué)做主題演講,分享前階段survey的內(nèi)容,結(jié)果人家放了PPT開(kāi)講,他在下面的補(bǔ)充占了80%的時(shí)間,上面那個(gè)倒像是主持人了。
- 最重要的一點(diǎn),不花心思好好安排別人的任務(wù),總是專(zhuān)心寫(xiě)代碼,與民爭(zhēng)活。
剛到他手下的時(shí)候,我總覺(jué)得不對(duì)勁,我前前后后跟他談過(guò)好多次(當(dāng)然后來(lái)死心了不找他談話(huà)了)。有一次他說(shuō)“我可能對(duì)于自己作為RD還是作為L(zhǎng)eader,身份上沒(méi)有區(qū)分清楚”,僅這一點(diǎn),既然自知,何必占這個(gè)位置呢?不是每個(gè)人都能管人的,這要影響到別人的職業(yè)生涯,還要影響到公司的人員流失問(wèn)題,后果非常嚴(yán)重啊。他的組,從09年中手下十多號(hào)人,到現(xiàn)在的三四個(gè)人。有點(diǎn)點(diǎn)想法的人,要么去別的公司了,要么去別的部門(mén)了。我想他沒(méi)有好好思考過(guò)。倒是給離開(kāi)的人編好了冠冕堂皇的理由,以便與人解釋。
用一個(gè)已經(jīng)離職的同事的話(huà)說(shuō),XX項(xiàng)目,從需求、技術(shù)、搭框架、寫(xiě)代碼,H都能一個(gè)人搞定,要我們干什么。
另一個(gè)同事說(shuō):H是個(gè)全才,但他不會(huì)做Leader。
我想,H要是一個(gè)和我平級(jí)的同事,除了對(duì)他沒(méi)有設(shè)計(jì)理念這一點(diǎn)不看好以外,我應(yīng)該也會(huì)蠻崇敬他的吧,畢竟人家會(huì)用這么多API呢。
H還說(shuō),對(duì)于項(xiàng)目,我必須親手搭個(gè)框架寫(xiě)寫(xiě)代碼,才能知道水有多深。可是,你要親手體驗(yàn)水有多深又是何必呢,讓手下人告訴你水有多深不也一樣么?
今年六月份,公司有一次計(jì)劃外的加薪,H對(duì)我還是很給力的;年中的獎(jiǎng)金也不少。另有一次我生病了,H叫了另一個(gè)有車(chē)的同事一起把我送回住處,還幫燒了開(kāi)水,噓寒問(wèn)暖一番后才離開(kāi)。還有當(dāng)初是H讓我第一次通過(guò)了一面,從而拿到人生第一個(gè)offer……可以說(shuō),除了具體工作上,H對(duì)我真的還是非常不錯(cuò)的,他也曾幾次和J訴說(shuō):我覺(jué)得我對(duì)他還是不錯(cuò)的啊。也許我不該對(duì)他有那么多看法。可是,每次有不同意見(jiàn),你為什么老是以“我覺(jué)得你對(duì)我有意見(jiàn)”強(qiáng)制結(jié)束討論并且不問(wèn)具體“意見(jiàn)”呢?
我記得CppBlog里有一位貌似從事管理的朋友發(fā)了一些文章,說(shuō)要如何如何管理,并要如何永不重用某些手下。我一對(duì)照,某些情節(jié)和H的做法非常相似,于是在評(píng)論里比較激烈的回復(fù)了他,希望他的手下好運(yùn)。
本篇就寫(xiě)了兩個(gè)晚上了,就到這里吧,字里行間可能充滿(mǎn)了怨懟,如果影響您心情了,小弟這廂給您賠禮了。下一篇將談?wù)勲x職始末。關(guān)于我對(duì)H的種種,我知道也是充滿(mǎn)了偏見(jiàn)的,如果有做得/想得不對(duì)的,希望大家多些批評(píng),多多糾正。
----------華麗的分割線(xiàn),如果以后又想起H其人其事忍不住想添加,就加在后面----------
2009年3月,公司要搞QT培訓(xùn),H部門(mén),也就是我所在的部門(mén)出人的。但是H壓根兒沒(méi)跟我說(shuō)有這回事。后來(lái)別的組的人都在各自老大的通知下知道了,我是本組的卻不知道。H從米國(guó)回來(lái)后問(wèn)我有沒(méi)有去聽(tīng)啊,我說(shuō)沒(méi)有。我不知道他為什么認(rèn)為我已經(jīng)知道了這個(gè)消息了。搞得好像我沒(méi)興趣似的。不過(guò)這培訓(xùn)我確實(shí)可能沒(méi)興趣,演講者一般只是介紹API使用,鮮有自己的思考。關(guān)鍵在于H通知不到位。
posted on 2011-01-25 22:17
溪流 閱讀(2169)
評(píng)論(10) 編輯 收藏 引用 所屬分類(lèi):
Other