• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-90  評論-947  文章-0  trackbacks-0
             

            ScopeGuard 只是幫我們調用一個函數而已,至于這個函數是否有異常出來,它不該悄悄地把它吞了,而應該還我們本來面目,不知道是不是?可是為什么幾乎所有介紹 ScopeGuard 的文章都說這 try … catch … 用得好呢?

            posted @ 2011-03-23 09:39 溪流 閱讀(2514) | 評論 (6)編輯 收藏

            來句定場語吧:

            “我也許不同意你讓座或者不讓座的做法,但我誓死捍衛你選擇讓與不讓的權利。”——伏爾泰  (^_^)

             

            關于這個話題我早在大二的時候就想說了,奈何周圍都是自認為道德高尚的大學生朋友,幾乎無法溝通——盡管我現在也不期待看到這篇文章的人會認同我的觀點。但是我想,社會總比學校現實一點吧。如果看了這篇文章后你覺得不同意,罵過之后,請兩年之后再來看看,那時候也許有不一樣的理解。^_^

            可能有人說,讓座是件很自然的事情,覺得人家不方便,就讓一下,何必上綱上線呢。是的,我也不想上綱上線。但這位同學說的話只強調了一方面,沒有搶點另一方面。完整的說,讓座或者不讓座都是很自然的事,你覺得人家不方便并且自己也愿意,就讓一下,如果不想讓,也就不用讓,沒必要上綱上線的。但是悲哀的是,如此自然的事,被一群道德衛士給上綱上線了。

            不知道大家有沒有碰到這樣子的例子,自己本來也沒注意周圍有沒有需要讓座的,卻被某個站著的人“提醒”一下,某某某不方便,你給TA讓個座吧。然后不管你讓了,或者是沒有讓了,那個人可能會指責你沒有主動站起來,或者指責你沒有到最后也沒有站起來。

            這種人我稱之為道德衛士。近幾年不乏這樣的報道,什么某某人拿一百塊錢抽某人臉啦,某某老頭一屁股坐到某某超短裙女生腿上啦……被讓座的事例不斷上演。遺憾的是,輿論的聲音,幾乎被道德衛士劫持,每個人心中都有一個自己的道德的衛士,就像每個小白和小黑的電腦上都有個360衛士一樣,告訴我們自己應該支持哪一方,否則就會有道德風險。

            道德衛士的出現,讓這個本不該上綱上線的東西,變成必須要去面對的了。有些迫于道德壓力的人,坐公交車的時候就時時刻刻警惕周圍是否有老人上來了,是否有人刷了“老人卡”了。像我這樣灑脫,一路睡覺或者閉目養神的也有,不過不多。

            天涯上有篇帖子,LZ論證了“讓座是不道德的行為”(http://www.tianya.cn/publicforum/content/free/1/1967922.shtml)。對于這個論點,我不太同意,我認為讓座還是道德的行為,是高尚品德的體現。但是看看這樣的文章有助于我們解放思想,只有解放思想了,我們才能進一步討論。全文摘錄如下:

            今天跟讀大一的表弟一起坐公交,中途上來一個老太太,他馬上站起來讓座,
            接著就得意地譴責我沒有讓座,

            我問:為什么要讓座?
            他說:不讓座是不道德的。
            我問:什么是道德,誰說過讓座就是一種道德的行為?
            他說:你雖然讀完了研究生,但是你道德大大的壞。
            我說:你根本就不知道什么叫道德,讓座其實根本就不值得提倡。
            因為讓座根本就是一種不道德的行為。論證如下:

            一、什么是道德。

            道德是一種人與人之間的行為規范和資源分配方式。
            跟道德相應的概念有:禮儀、法制、權力。
            我們說,孔融讓梨是一種有道德的行為。
            這種行為體現的行為規范是愛護親人,
            體現的資源分配方式是先滿足親人的需要。
            親人之間有親緣關系,互相最為親近,聯系最為密切,
            當遇到困難或者不測之時,親人最能提供必要的援助
            因此,愛護親人,可以保障自己有良好的社會動員能力
            并可以廉價地動員這種社會資源滿足自己的需要。
            比如兒子孝順父親,父親辛勤勞作供兒子讀大學,
            兒子考上大學有一份好工作回報父親,
            這就是道德提倡的。是有道德的表現。

            二、何為有道德,何為無道德

            有道德的行為規范,符合人性;兒子孝順父母,這符合人性的需求。
            有道德的資源分配方式,能使資源達到最優分配。
            我們說,愛國家、愛民族是有道德的,因為國家民族是個人生存之本,
            如果背叛祖國和人民,必將遭到萬眾唾罵,
            不但是因為不符合人性,還因為,這是一種十分不合理的資源分配。
            國家耗費軍隊、土地、制度、安定等各種資源為每個子民享用
            但是這個子民卻背棄而去,使國家的資源消耗沒得到應有回報
            甚至成為自己的敵人。因此,這是對資源的嚴重浪費和破壞,是不道德的。

            三、道德與法律、禮儀、經濟之關系

            禮儀是道德的表現形式之一,法律是最低限度的道德,道德的實施,
            應當符合經濟學原理。
            違法的行為,必定是法律制定之時違反道德的行為。
            違反經濟規律的行為,必定是一種不好的道德,是有待改良的道德
            女子死了丈夫不得再嫁,這在古代是一種有道德的行為
            但是現在卻不是什么有道德的行為,因為不符合人性
            也不符合經濟學規律。女子再嫁,可以使下一代得到更好的撫養和教育
            可以重新建立一個以家庭為基礎的基本經濟單位,這顯然優于守寡
            只要是違法的行為,則必定是違反道德的行為
            有人認為,很多法律規定得不合理,違法不一定違反道德
            這種看法是錯誤的。法律既然被如此制定,那么就表明統治階級認可的最低限度的道德如此
            嫖娼是一種違法行為,因此,嫖娼行為是不道德的
            有人認為嫖娼符合人性,符合經濟學規律,不違反社會道德,但是它是違法的,因此,它是不道德的。所有違法行為,都是不道德的行為。

            四、讓座是一種不道德的行為

            1、讓座不符合人性。除了身體有某種缺陷比如長痔瘡之類的人之外,一般人都是希望在公交車上有座位的,可見坐座位符合人性。基本的人性,一般認為六種,包括安全、吃、住、性、舒適、社交。公交上站著容易被盜,而且汽車有緊急情況時,危險度更高,因此,坐著比之站著,更符合人對于安全的需求。而讓座,則是將基本需求無償讓渡給一個陌生人,正相當于叢飛自己孩子不聞不問卻到處去助學。

            2、讓座不符合經濟學規律。張五常認為讓座符合經濟學規律,他說,公交車上的座位是一種資源,自己此時將座位讓給老弱婦幼,是為了在未來,自己老弱病殘之時,別人也會將座位讓給自己,因此這是一種長遠的投資行為。這種說法近乎搞笑。幾乎等于說,你把錢扔在地上,別人就撿到錢了,因此,有朝一日別人也會把錢扔在地上,你就也可以撿錢了。這是可笑的,也是說不通的。你讓座這種投資行為,不可能產生什么預期的利益,它根本就是無利可圖的。

            自己無利可圖不一定就不道德,你把垃圾扔在垃圾箱里你無利可圖。你不能認為這不道德,因為從大面積的社會效果來考察,你仍是有利可圖的。你把垃圾仍在垃圾桶而不是路上,對于整個社會來說,你降低了公共服務成本,使公共服務將有機會更多從其他方面回報與你。因此,垃圾扔垃圾箱,符合經濟規律,也是有道德的行為。

            但是讓座,對于整個社會的資源分配來說,都是一種浪費。因為讓座不符合公平原則,先到著不能先占。也不符合效率原則,最有效率的資源分配方式顯然是先到者先得,如果先上車的不能坐座位,后上車的卻可以憑借強權或者武力奪權先前的座位,那這就是沒有效率的分配,而且也不公正。

            綜上所述,讓座是一種不道德的行為。

            文中的弟弟何嘗不是被從小培養起來的花兒一樣的我們呢?不錯,我們都曾有過這樣的時期,持過這樣的觀點。但是你是否愿意跳出那個被精心設計的道德枷鎖,回到現實生活中來呢?這里聲明下,我絕對不是陰謀論者,我只是個實證主義者,和個人主義者。

            文中的“讓座不符合人性”和“讓座不符合經濟學規律”我非常認同。對此我有以下補充:

            1、有人可能認為將座位無償讓給一個陌生人是沒什么大不了的。“看他們搖搖晃晃挺不容易的”,“小伙子年輕力壯么,站一下就站一下”,等等。請問,他們搖搖晃晃不同意,我們就容易了么?小伙子就都年輕力壯么?小伙子站一下就那么輕松嗎?無疑,說這樣的話的人,可能自認為站一下是無所謂的,座位不是他的“基本需求”,無關核心利益,所以無償讓渡給一個陌生人是沒什么大不了的。當然,你可以這樣認為。但是,你絕對沒有權利要求別人也這樣認為,不是所有人都對座位無所謂的。即便是所有人都“應該”對座位無所謂,為什么老人們就不應該對座位無所謂了呢?更何況,你能想象某些像我一樣的傻逼,可能等了兩班車,看沒座位不上,往前走了兩三站走到始發站去搞個位置,座位就是我此刻苦苦追求的核心利益,你還認為放棄這樣辛苦得來的座位是無所謂的嗎?

            2、為了自己以后老了有人給自己讓座,說得好像很有道理,很換位思考。這也是現在很多人的論據。正如文中說的,這種做法和不隨地丟垃圾是兩回事,根本不具有可比性,也沒法預期。何況,親愛的你,當你老的站不住走不了的時候,你覺得你那時還會要擠公交車嗎?

            當然,你絕對有權利去擠公交車,不論什么時候。只是,你得知道后果:幸運的話你可能碰上個位置,或者碰上有人給你讓座,不幸的話,你也許只能站著。你需要問下自己有沒有能力享受公交服務。如果能,那么,去吧;如果不能,你還是要去(當然你有權利去),說明什么?說明你是傻逼。無論你是不是傻逼,你都不能將“別人會給你讓座”當作一個理應發生的事情,當作一個前提。所謂“得之,我幸;不得,我命”。有如此坦然心態,那么,你去吧。如果你是幸運的,請虔誠的感謝上蒼或者感謝給你制造這個幸運的人。如果你是不幸的,那就默默承受吧。

            先到先得,是公交車上很自然的規律,在此規律作用下,那些不適合坐公交車的人就會被淘汰,進而選擇更適合他們的交通工具。我贊成、尊重、敬佩那種發自內心的資源的讓座行為。但是,當讓座被道德衛士綁架后,是什么樣的局面呢?那就是有人可以違反最基本的規則了,有人可以指指點點,你不能坐,他不能坐,只有某些人可以坐。這跟我們鎮上的某些場合是多么相似!每當某個領域的基本制度被人為破壞以后,這個領域便會出現特權階級,久而久之,便會形成一種慣性,這個領域的所有人都被綁架了,麻木了,以至于認為是理所應當的。這樣,事情會發展到怎樣的程度,是無法想象的。

            回到最簡單的層面,讓我們遵守最基本的規則,先到先得。偶爾有不適合坐公交車的人跑到公交車了,或許會有人給TA讓座,TA回去后可能會反思,我坐公交車自己本來就不方便,還害得別人要給我讓座,多不好意思啊,下次沒事盡量少坐坐;或者沒人給TA讓座,讓TA嘗到了代價,下次也會三思而后行。抑或,這次嘗到讓座的甜頭的不適合坐公交車的人,下次可能還是回去坐公交車,但可能沒那么幸運了。如此,在自然規律的作用下,不適合坐公交車的人將始終維持在一個較低的水平,將會和公交車能夠提供的座位以及讓座數量達到動態平衡,一切很和諧,道德衛士也就失去了賴以生存的土壤了。

            說到這里,我不禁要問問,是誰在慫恿那些不適合坐公交車的人去坐公交車?別的城市不說吧,就說杭州。70歲以上的老人都可以有老人卡,可以免費坐車。這里且不追究為什么一些看上去不太老的人都有老人卡,姑且認為他們都是70歲以上的。我不知道這是在鼓勵什么。老人們既然享受了政策優惠,難道還要打破基本公交規律,來享受“制度優惠”嗎?

            還有一個帖子,說得比較激烈,他在解釋什么是道德。

            面對公德淪喪的現實,你談個狗屁的道德,有么?在哪呢?

            什么是道德你弄懂沒有?聽胡爺給你普及一下這個小學知識:

            道德,由公德和私德構成。公德占道德九成以上的比例。什么是公德呢?它不是僅指你在公共汽車上給別人讓座。公德,主要指的是政府及其工作人員的行為操守,這東西,是用來建立政府公信力的。這部份內容,又占公德的九層以上。

            現在我問你:政府及官員的公德在哪里?——這部分淪喪,造成了公德整體的淪喪,也就是說,你一輩子不隨地吐痰并給孕婦讓了一百萬次座位所積累起來的善,都不足以抵消任何一次、僅僅一次“依法”暴力拆遷的罪惡;甚至都不足以抵消任何一次隨時發生的城管“依法沒收”下層民眾一筐感鴨蛋的罪惡。

            公德的淪喪,直接造成了整個道德的淪喪。——不是么?MD,這邊你搶老子的咸鴨蛋,那邊卻要求老子助人為樂?老子沒有半夜出去搶劫就算厚道了,你大爺的。

            別總裝火星來客,好像你多天使似的。呸。

            http://www.tianya.cn/publicforum/content/no01/1/415843.shtml

            我且不論他的解釋對還是錯,只是想說,我們是多么渺小。窮則獨善其身吧。如果你要兼濟天下,作道德衛士,那么請不要傷害別人。

            說說我自己吧,我偶爾也會讓個座,那是為了什么呢?不錯,為了道德優越感,為了由此帶來的身心愉悅。當有道德衛士在旁邊提醒或者指責我的時候,我發現讓我讓座的唯一收獲都被他們劫持了,我又有什么理由去讓座呢?

            很簡單的道理:我可以選擇做高尚的人,我也可以選擇做不高尚(但至少無害)的人,但是沒有人可以逼我做高尚的人。有人甚至打出了“為了尊重生命,拒絕讓座”的標語。我認為這才是我們這個時代所需要的,所要反思的,而不是相反的內容。只有這樣,我們的道德體系才能得以糾正,不至于在錯誤的道路上漸行漸遠。

            我又要引用了(http://hs.hongdou.gxnews.com.cn/viewthread-5062512.html):

            “我希望有一天,我們能堂堂正正地上公交車,把乘坐公交車當做一段放松的時間,可以欣賞街景,可以打個盹,可以聽音樂……不必時時警惕是否周圍有需要主動讓座的人,遇到有人請求讓座也不必像上課做小動作被老師點名般惶恐不安,想讓就讓,不想讓就不讓。而且沒必要說明原因,為了個座位就要公布難言之隱,難道非要和《唐伯虎點秋香》般比一比誰比誰慘?

            讓座不是必須的,不是義務,必須自愿,只有這樣,受助者才會懂得感謝,讓座者才不會覺得自己是被迫的,公交車上的互幫互助才會蔚然成風!”

             

            “好多孕婦和老人,明明快生產了,還是老人太老了,身體不好,少幾條錢,得空坐的士了。

            公交車經常急剎的,好危險的,萬一碰傷了,誰人付得起責任?

            我的朋友一般我都建議,除非實在是經濟不好,或者條件限制,一般要求大肚婆和老人家或者病人坐部的士去,反正你要不經常坐的,特事特辦。明白嗎?

            這就是文明和道德。比如桂林那些地方,幾百人上一部車,站都站不了,等下還要讓老人和其他病人小孩,我不得罪的說,司機吃毛的,明明超載,還放那些人上來,有時候,我就不坐,等幾班或者出多點錢坐的士。摩的。”

            我也希望有一天,我老了,老到走也走不動,我跑去乘一下公交車,沒有老人卡,真碰上有人讓座,我撫須而笑:“你的好意爺心領了。爺只是來重溫擠公交車的感覺的。”

            ==========

            最后加篇引用,這個LZ道理說得比我明白:http://forum.enorth.com.cn/postsShowAction.do?threadId=2931744&page=1

            posted @ 2011-03-06 00:12 溪流 閱讀(777) | 評論 (0)編輯 收藏

            嗯,寫篇文章的目的是為了把我最新(現在是次新)的那篇文章給刷下去——我不想每次看見它了。

            不知大家有沒有發現,當使用 VS 來調試代碼的時候,那些 STL 容器的信息會以比較看得懂的方式顯示出來:

            image

             

            而我們自己寫的,它只能按照數據成員來顯示,如果數據結構稍微復雜點,看這些直接顯示的內容得到的有用信息就會很少了:

            image

             

            那么,是否有辦法能讓 IDE 按照我們設想的方式來顯示數據呢?答案是肯定的。這個配置就位于 autoexp.txt 中(具體路徑為 X:\Program Files\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\autoexp.dat,如果是 VS 不同版本,“Microsoft Visual Studio 10.0”中的版本號換成其他的即可,VS 2005 以上版本都支持)。

            在里面搜索 vector,可以找到作用于 vector 的調試信息顯示方式的語句:

            std::vector<*>{
                preview (
                    #(
                        "[",
                        $e._Mylast - $e._Myfirst,
                        "](",
                        #array(
                            expr: $e._Myfirst[$i],
                            size: $e._Mylast - $e._Myfirst
                        ),
                        ")"
                    )
                )

                children (
                    #(
                        #([size] : $e._Mylast - $e._Myfirst),
                        #([capacity] : $e._Myend - $e._Myfirst),
                        #array(
                            expr: $e._Myfirst[$i],
                            size: $e._Mylast - $e._Myfirst
                        )
                    )
                )
            }

            這個語法的詳細官方說明好像沒有,不過大體上可以猜出來。

            第一行 std::vector<*> 是類型,說明下面的內容針對 std::vector,并且適用于任意模版參數。緊接著是一個大括號括起來的段落。

            preview 開始的那一段表示當該變量單行顯示的時候該如何顯示,也就是下圖第二列的樣子:
            image

            IDE 會依次顯示 preview(#( … )) 括號內的以逗號分隔的內容,加引號的會原樣顯示,變量用 $e 引用(將 $e 視為該類型的一個變量)。

            除了直接引號,變量的運算結果外,這里還可以寫一些高級點的玩意兒,如 #array,#list,#tree。

            #array 的格式為:
            #array(
                expr: … ,
                size:  …
            )
            其中 expr 里可以使用 $i,$i 為元素 index,size 表示元素個數。最終的結果為:
            $i=0時的expr, $i=1時的expr, …, $i=size時的expr。

            假設有一個結構:
            struct Vector
            {
                int *pData;
                int nCount;
            };
            其中 p 是指向一塊 count 個 int 的內存。如果要依次顯示這 count 個數字,preview 中應該寫:
            preview (
                #(
                    #array(
                        expr: $e.pData[$i],
                        size: $e.nCount
                    )
                )
            )

            #list 的格式為:
            #list(
                head: … ,
                size: … ,
                next: …
            ) : …
            其中 head 是指向第一個 Node 的指針,size 表示元素個數,next 表示 Node 中指向下一個 Node 的分量名,最后冒號后面還要寫一個 Node 中的值分量,也就是要顯示的那個變量。

            假設有結構:
            struct ListNode
            {
                int nData;
                ListNode *pNext;
            };
            struct List
            {
                ListNode *pHead;
                int nCount;
            };
            preview 的寫法為:
            preview (
                #(
                    #list(
                        head: $e.pHead,
                        size: $e.nCount,
                        next: pNext
                    ) : $e.nData    // 注意,這里的 $e 代表 ListNode,上面兩個 $e 都代表 List
                )
            )

            #tree的格式為
            #tree(
                head: …,
                left: …,
                right: …,
                size: …
            ) : …
            其中 head 是指向根節點的指針,left 和 right 分別是指向左右子樹的分量名,size 表示元素個數,最后冒號后面寫節點中的值分量。IDE會對整棵樹做中序遍歷。

            假設有結構:
            struct TreeNode
            {
                int nData;
                TreeNode *pLeft;
                TreeNode *pRight;
            };
            struct Tree
            {
                TreeNode *pRoot;
                int nCount;
            };
            preview 的寫法為:
            preview (
                #(
                #tree(
                    head: $e.pRoot,
                    left: pLeft,
                    right: Right,
                    size: $e.nCount
                    ) : $e.nData // 注意,這里的 $e 代表 TreeNode,上面兩個 $e 都代表 Tree
                )
            )


            preview 的格式就到此。接下來是 children,它用于描述點擊變量左邊的加號后,展開的內容怎么顯示,如圖:

            image

            IDE 會依次顯示 children(#( … )) 括號內的以逗號分隔的內容,每個顯示為一行。剛才的 #array, #list, #tree 都可以用,會顯示成第一列索引第二列值的樣子。
            另外可以用 #(first, second) 的格式,first 會原樣顯示在第一列,second 會求值顯示在第二列。

             

            了解以上這些內容,我們已經可以針對 STL 的那些數據結構做自定義顯示了,對一些別的數據結構作簡單的自定義顯示也不難。

             

            最后給個效果圖,定義了我自己的那些容器的顯示方式。怎么樣,看上去一定比開頭給出的那個冷冰冰的樣子好很多吧?

            image

            posted @ 2011-02-27 17:10 溪流 閱讀(12000) | 評論 (22)編輯 收藏

            目錄:

            2009-2010小結(一)畢業前夕
            2009-2010小結(二)初入職場
            2009-2010小結(三)加班考驗
            2009-2010小結(四)抑郁重重
            2009-2010小結(五)離職始末

            導致我產生離職的念頭的導火索是8月份與H的一件事。當時某項目的build腳本是我寫的,H決定要搬到build server,便讓D去配置。D當然要來拷我的腳本,也問過我要怎么用。由于上build server這件事H根本沒有知會我,所以我也懶得關心,問什么答什么而已。可是后來要出版本了,卻讓我去操作build server。build server 賬號卻不給我開一個,叫我用他的。我以為臨時叫我操作下的,第一二次我就用他的,D說怎么操作我就怎么操作。可是后來三番五次叫我操作——這任務的owner變成是我了。于是我先擅自直接向管理員申請了一個賬號(郵件有cc給H),然后重新整理了下D的腳本。期間出過幾次版本。很多天后的某個上午,我由于沒多少事,又去看build腳本,發現了一個問題,先前從build server出來的所有版本都沒有數字簽名。原因是我沒有在install shield里填上數字證書,因為install shield會很傻逼地在工程文件里存一個絕對路徑。我用了些腳本命令去簽那些文件。這個命令需要證書文件已導入本機。D把這些搬到build server上后,因為證書沒有導入到build server,所以簽名一直失敗。于是我換了個命令參數,改為不需要導入證書就可以簽的,然后報告給H,告訴他有問題并且已經修復了,昨天的版本要不要重新出。H根本沒有意識到是他擅自讓D搬我的腳本而不告訴我最后又讓我操作造成的,以為是我手中出的bug,以為得理了,以前所未有的強勢,要求我把數字證書填到install shield里去。我說install shield會保存絕對路徑,這會讓svn上的東西變成 build server only 或者 my machine only 的,另一個人要在本地搞就很麻煩。H說他覺得這不是問題,堅持要改。最后沒辦法,好,我改!反觀H自己也在參與的那個項目,他讓D處理的編譯腳本(D是很聽話一點也不拿主意的),那個目錄結構,除了打開vs solution知道可以編譯外,之后的installer是怎么出來的,除了H沒人知道。甚至D也搞不太清楚,經常問H。

            這一次讓我出離憤怒,前面搞些不給我賬號的小動作也就算了,居然要把東西改得更差,這樣的追求讓我忍無可忍。當晚回去我就找招聘信息。招聘信息之前半年也不是沒看過,但確實只是看看而已。那天,我是真正用心在看。過了兩天,我給一個W公司的HR信箱發了簡歷。按下發送的那一刻,突然感到無比的心虛,像是做了虧心事,像是已經背叛了跨國公司……

            W公司的反應比較慢,面試流程也拖得好長。9月初被通知一面,過兩周被通知二面,又過一周被通知HR面。最后算是拿到了口頭offer,可是工資不給力,甚至稅前比跨國公司還低(稅后比跨國公司高一點點)。我很想當著HR面義正言辭的拒掉,可是想想這也是個機會,先琢磨幾天吧,再加上HR姐姐居然是我的老鄉,不忍心這樣對待她。

            十一回家的時候,剛好有一天在A公司工作的C姐來我家找我爸媽有點事。我媽問她是不是可以推薦下我,她說可以的,我問她是干什么的,她說當HR。我說那還推薦啥,你給我直接過了唄。她說她管的是銷售的招聘。后來就隨便聊了下,她留下Email,叫我想好了發簡歷給她,但千萬別搞得她逼我跳槽的樣子。后來我回去跟她說確實是有跳槽動機的,只是W這邊我還要考慮,再加上前一陣子請假有點多了,不好又請,遲幾個月吧,或者半年以后。

            W這邊的offer我還真不忍心拒掉,反復考慮了半個月,最后覺得money還是王道,不給錢意味著不認可,還是拒了。

            這里我要特別感謝一下@空明流轉,他主動詢問并為我分析簡歷。讓我有史以來第一次意識到了自己的簡歷是多么的傻逼,也讓我知道在現狀下怎樣把簡歷寫得更牛逼。于是我靜下心來改簡歷,并給他review。雖說還是被他不滿意,但也畢竟沒有之前那樣子菜了,再加上我畢竟水平有限,再寫也寫不到哪里去。也是他讓我意識到了W公司之前給出的薪水是符合我的簡歷的——2009年應屆畢業生的薪資水平。他還分享了一些面試經常問的點,也讓我意識到不需要真正去用過也能回答出那些問題。

            正在我打算潛心修煉半年的時候,十月底C姐給我打了個電話,說她們開發有個職位正要招人,叫我趕緊給她簡歷。我所說還沒準備好,但也不好拒絕,便把簡歷給了她,是修改過的版本。又想到之前空明說看我博客覺得我還可以的話,把本博客地址也寫進了簡歷。

            經過一個簡單的電話面試之后,11月3號,收到通知4號面試。當天下午快下班的時候,我們跨國公司出了一件讓所有人震驚的事,由于iPad造成的上網本市場的消沉,那些OEM廠商的出貨量明顯下降,導致我們跨國公司的產品銷量也低了,加上失去了一個很大的OEM的長期訂單,公司做出了一個艱難的決定:裁員。米國總部之前已經裁了4個高管,TP那邊從120多人變成100人左右,HZ這邊從100人左右變成80左右。一種無形的壓抑在同事間傳播。當天晚上我都差點咽不下飯,不敢相信這些人明天就會消失了。雖說大多數都不熟,但畢竟是身邊的人啊,什么時候輪到熟人呢,什么時候輪到我呢。。。后來了解到,這些人的離職原由還是被寫成“主動辭職”,同時給予了N+1補償,心里也好過了點。

            第二天去A公司面試。昨天問他們需要半天還是一天,他們說半天,結果我只請了半天家。上午給了一張卷子做,做完了一面,面完午飯,被告知如果順利,會一直面下去(那還昨天還說半天就夠了?)。中午吃完飯,等二面的時候我給C姐打了個電話,說今天在面試,C正好在HZ,不過正在吃飯,說等等過來。還沒有等到C,二面面試官就來了。正要進去,C打電話說到了。只好跟面試官說等一下,跑去跟C匯報了下上午的情況。C在公司的樣子在跟在我家的樣子(作風)挺不一樣的,鼓勵了幾句,又像是出于禮貌的樣子,跟面試官打了個招呼。(我不知道這個招呼有沒有起什么作用。后來問他,他義正言辭地說沒有。最好沒有,呵呵。)等三面的時候 H 打了個電話,說TP有人找我,問一些業務問題,并問我什么時候回去。我說可能要遲點。三面是一個職務稍高的人,純粹聊天,聊聊為什么辭職,原來公司大概做什么的,過來后想做什么等等。期間H又打了個電話問些業務上的問題,并以“現在方便嗎?”開頭。等我接完電話回去,面試官說他這邊沒別的問題了。囧。四面是HR面,等我搞完回到跨國公司,都快4點了。前臺MM逮住我讓我補假。

            11月5日,CEO M從米國趕來跟我們開大會,目的是解釋這次裁員并說明以后前進的方向。HZ講完后他還要去SH,去TP,一站一站過去。M的演講水平說實話不咋的,這一點我和H的觀點比較一致。從會上,沒有讓我們看到希望,也沒有什么能夠真正鼓舞人心的話。期間接到了A公司的電話,說面試已過,接下去要怎么怎么。這時我突然很后悔,前天的裁員怎么沒把我裁掉!我要被裁啊!可以申請被裁么?!

            已近年關,辭職是件不容易的事。為了快樂點,哥決定放棄那些身外之物了——不出意外的話,這要至少工作半年才能從工資差額中彌補回來。至于期權神馬的,倒是不在意了,都裁員了,能不能生存還是個問題,暫時不用想著上市的美夢了。正式跟H提離職之前,某天下班后我以個人名義找L1談了談。她問我決定了嗎,還是有回旋余地。我說大概已經決定了,如果有余地,只在現在,明天以后絕無余地。我跟她說了遭遇的種種不幸。一開始她也有勸解味道的說H的好話,后來聽得多了,便默默地聽了。關于離職,L1說從朋友角度,覺得去A是個不錯的選擇;從公司管理者角度,還是希望我能留下來。只是她也沒法給出足夠的理由。她又說試試申請轉崗(之前8、9月份公司內部有一次轉崗機會),我說當時申請了,不過后來沒聲音了(后來H說是他沒同意)。她說愿不愿意去她部門做PHP,我不愿意。我說要是前面那個項目一直在她手下,可能也就沒這么多事了,至少不是現在。L1最后強調的一點是,叫我想清楚到底是為什么而走,是H,是公司,是你自己,或者是別的什么?這些因素在換了個公司之后會不會再出現?如果還是可能出現,那么你可能還要再思考一下。我很感謝這樣清醒的提示。不過這個問題我也想不明白,就當賭一把了。在跨國公司的近兩年,L1不僅擔當了我的啟蒙老師,還在平時工作中知無不言言無不盡,無處不散發著她的理念。很幸運有這樣的一個人關心、指導著我,在此再感謝她一下。

            第二天,我便找H談話,說明了事由。H表現的一點也不驚訝,嘆一口氣:“哎,公司的狀況我也不滿意。”都不用我說,已經為我想好理由了,可以與人解釋了。又說:“我想我給你的promotion還是蠻多的。”我說這個我也知道,謝謝你。他想了想:“要不你可以找A提下加薪。”A是HZ這邊的前總監現總經理。我說我又不是嫌錢少……最后他又說:“那你說,怎樣能留你?”我說,不知道,不過我既然提了,就已經做好準備了。生硬的挽留環節到此結束,接下來便簡單討論了下工作大概怎么交接,就完了。再過一天,我問他有沒有跟A和V姐知會過了,他說說過了。當周周五我拿了離職單。

            后來和V姐有一次談話,很尷尬地,我竟然在跟她提“我們公司”的時候口誤說成了“你們公司”。我真不想這樣的。完全不表示我心不再。對不起……

            交接期有一個新功能還要我做,也是跟網絡有關的。我決定趁此機會解決掉之前那個bug,我不能留下這么重大的隱患,那會是以后的罵名。于是發了一封郵件給H,cc給A、TP管此項目H上級,HZ的幾個相關主管,以及TP有用到我們升級程序的打過交道的所有人。我說有官方文檔說WinInet系列API在Service程序中不被支持,并貼上微軟原文,正式建議使用WinHttp,并請求不支持不帶SP1的XP。壓力之下必有反應,H馬上回復了一封,說“We planned to move to WinHttp.”呵呵,不知道什么時候plan了。后面L1跟了一帖問他本來打算什么時候上這一項的,他又不說了。TP的那幾個老大表示不支持裸XP是可以接受的,只是需要確保改過之后確實能修復那個bug。改過之后,經過兩輪測試,之前出現crash的機器全部正常了,TP老大表示接受。這事兒到這里才算圓滿。

            至于小bug們,偉大的接手者們,這將證實我的存在,也將見證你們的能力,哈哈~!哦不,接手者是H自己,這結果在我的預料之中。

             

            關于CppBlog:

            我是09年9月份來到這里的,當時吸引我在這里注冊的直接原因是 @vczh。不是因為他做的是什么,是因為當時下載了一份他的代碼,里面從最底層到最上層,全部是他自己造的。而自己造出一切設施,完全使用自己的設施來寫自己的東西是我長久以來的夢想,只是苦于一直沒有榜樣。在這里我找到了一個很好的范例和動力。

            再者,是這里的討論氛圍相當不錯,是個質疑都會被達者解惑。這里的達人是真正的達人,有著很多與眾不同的思考,竊以為這才是真正的技術。這里與CSDN完全不同。且不說CSDN問問題的人平均水平不怎么樣,就是那些號稱專家被眾星捧月的,也不過是會很多API而已,有自己思考的并不多。就算有,也不會來回我的帖子,我的博文想被專家們看到也難。而在這里,我可以輕易地發在首頁,看,本篇文章,以及牢騷滿腹的上一篇,我都可以發在首頁。這里的討論沒有權威,沒有專家,于是顯得更純粹更純凈了。說實話,知道某個人牛逼以后,往往在討論中就不想與他對立了,這樣子不好。我要克服這樣的心理。在此要特別感謝 @OwnWaterloo,你的評論讓我這兒熠熠生輝(,也感謝其他所有人的評論,只是你們加起來也沒他的多,呵呵)。多年以后,要說這里留下了什么,也許不是我的文章,而是大家的評論。只是 @OwnWaterloo 同學,你自己好歹也寫點什么呀,這樣我們才有更多的機會與你接觸,與你碰撞。

            關于心態:

            這是我最后要說的。很多人畢業沒幾年,工作沒幾年,便老去了。他們不愿意有自己的思考了,不愿意有改進了,不愿意嘗試新東西了。而借口往往可能是要成家了,瑣事兒多。這也許是事實,但肯定夠不成充分理由。這樣下去,一到中年,便會失去理想,把希望寄托在下一代身上,于是這一輩子就完了。我想說,請保持一顆年輕的心,保持好奇心,保持求知欲。千萬別以為自己“老了”而不能做某些事情了,那只是因為你“懶了頹廢了”才不愿意去做。如果有年輕的爸爸媽媽,請你們不要把希望寄托在下一代身上,這說辭看似偉大,實則自私,剝奪了下一輩尋找發展方向的機會。解放孩子們吧。

            M同學,我一直想讓你把博客搬到這邊來,就是想讓你也年輕起來。你是跨國公司我接觸得比較多的人當中還算有想法的人,在公司也許你要掩飾這些想法這沒有錯,給自己個機會放開討論吧。你說你不喜歡開發,還說我是你見過的唯一說喜歡編程的程序員,我覺得不像。你現在可能也只能算是會很多API的人,但我覺得你有成為有思想的人的潛質。希望你能看到。

            關于新的工作:

            在某年某月某日離開這個崗位之前我不想說太多。我現在挺好,一位正常的主管,一群有那么一點點追求的同事,還有一個不用做過多解釋的公司名,這就夠了。

            關于本文:

            寫到現在真是不容易啊,我想說,我做到了!沒有太監!謝謝大家!

            posted @ 2011-01-26 23:03 溪流 閱讀(3534) | 評論 (33)編輯 收藏

            目錄:

            2009-2010小結(一)畢業前夕
            2009-2010小結(二)初入職場
            2009-2010小結(三)加班考驗
            2009-2010小結(四)抑郁重重
            2009-2010小結(五)離職始末

            在正式轉到 H 手下之前,有件小事,不知道這件事有沒有對后來起什么影響,但愿是我多慮了。那一次L1出差一周,所帶的我這邊項目交給H代管。有一次發不知道正式的還是非正式的release notes,H問我,SVN number要不要寫的?我理解成他問我先前做法是怎樣的,于是順口回答說:不需要的。H說,你寫上吧。我說好。我隱隱突然意識到不對勁,他只是代管一下,怎么會改變一些既定做法?

            沒有預料到之后不久,便有了前文所說的行政上的調整,這個項目也歸H了。之后有一次臺北的產品經理發需求過來,要添加的一項功能是,在Win7任務欄添加圖標。經過一番調研之后我跟他匯報說,這事兒正規途徑做不了,微軟特意不允許以編程方式添加任務欄圖標的;真要做只有hacking方法,blabla。言下之意是想讓他拒絕掉這個需求。沒想到他居然同意了用hacking手段!這在L1時代是完全不可能發生的,哪怕是一點點沒有正規文檔給出的方法都不許使用,寧可少點功能。同意歸同意,他又不表示立即實施,時不時來問一下你準備如何如何,然后探討探討。

            過一兩天,有一次他又跑過來(位置還沒換,所以隔得比較遠),說,這功能我可不可以讓D來做呀?我奇怪了:當然可以啊!(你說了算么)于是他表示要讓D來做。那我就扔著,不做,網上東逛逛西看看。又過了一兩天,那一天下午他過來讓我加班,因為那功能需要做好。我又奇怪了,不說讓D來做了么,做沒做好,關我毛事啊,怎么又讓我加班呢?由于這是第一次他讓我加班,我什么也沒說。到了晚上,我不管三七二十一,把那個他準備讓D做的功能給做了——不是說因此加班么,那我給你搞定不就完事了?不知道他葫蘆里賣的什么藥。看到SVN提交的郵件以后,他又立馬跑過來,帶點驚訝地問我,你改了?然后又來看代碼,問這問那,最后離開。

            大家可能猜到了,我的期待徹底破滅,接下來是一段極其抑郁的生活。開始的時候加班是挺少,幾乎沒有。但是偶爾有的話,不會是那種任務很明確的,但就是讓你呆著,好在都不是很晚。

            關于剛才那個項目,還有另一番進展。不久以后,H突然跑過來跟我說,這個項目也差不多了,剩下的都是些維護工作了,我想把它先轉給M(當時是我和M一起維護)和D,再慢慢轉給D,把你們兩個都空(解脫)出來。我說我手上只有這一件事了,那我干什么?他語焉不詳地說了些什么,意思表示得好像是還有別的什么(重要)事情讓我干。于是這項目便開始慢慢從我手上溜走。猛然間我感到一陣害怕,我手上都沒事了,公司留我做什么?H是不是有什么想法?可是看H平時和和善善的,也很難揣摩他能有什么歹意。

            接下來給我做的事情,是陸陸續續的好多survey。一開始叫survey一下Windows驅動。我問,公司有這樣的項目么?他說有,并舉了例子。好,我去survey。過了些天,我看他給的那個例子就是個簡單的WinIO驅動,告訴我通訊協議我大概也能抄一個吧。于是我跟他匯報,那個例子基本上看得懂了,接下來要看什么/干什么?他像之前每次跟他匯報時一樣,為難地抬起頭,使勁想了想,然后叫我去看下文件系統過濾驅動。

            好,看就看,找些電子書,挑一些可看性比較強的,打印了二三十頁下來,慢慢磨。又過了些日子,覺得資料上面說的我大致能理解了,但是由于框架實在是太龐大了,不想去實驗,就跑去問,這方面公司到底有什么要做的么?H說他覺得這些技術蠻有用的,以后肯定會用到的,云云。嗯?敢情是想拿我當技術儲備?我就是survey帝啊!

            再后來,讓我去survey一下某品牌機自帶的一鍵還原軟件。我特意問,我們要做這個的?他說要的。于是我就拿著那個本子折騰來折騰去,耗了個把月吧。到最后實在想不出可以干什么,于是天天格它硬盤,拿著自己寫的demo程序還原之。期間H偶爾過來看看,大多數時間不太理。

            又想到一件事。某個加班的晚上,忘了是為了調試什么,H讓我過去看他調。可能由于之前某一次他看到我開著OllyDgb玩(我只是會一些很簡單的操作,知道怎么斷住MessageBox罷了),他自言自語地嘀咕“那個叫什么名字來著”,然后打開了OllyDbg。他又問我是怎么操作的。我說我是截哪個函數,然后怎么怎么瞎看的。于是看他操作。只見他按鍵飛快,F8長按,整個屏幕滾下去,過會兒又作不對勁狀,重新開始,又是飛快狀,不知道他要干什么,于是我忍不住開口了,跟他說,我當時是先這樣,然后看什么什么,大概可以得出什么結論。然后他有點兒照做的意思,可是過會兒又是操作飛快,整個屏幕在閃,看不出什么思路。我琢磨著他是不是沒怎么用過這玩意兒啊,不會用就別拿出來顯啊,拿你拿手的出來嘛。于是我又多話了。后來我也覺得我“提示”得多了,想不說,可是又覺得他是期待我說的樣子;想說,又覺得他沒叫我插嘴的樣子;想走,又覺得他沒叫我走的樣子。十分尷尬。只好有一搭沒一搭地說著。后來H終于怒了:你走!我一愣,懷疑是不是沒聽清楚,確定好像是真的,于是飛也似地跑了。半個小時以后,H拿了一些巧克力來分給我們,算是了結。之后我再也不敢在他面前提/玩OllyDbg,要玩就玩WinDbg,因為WinDbg我基本上完全不會用。

            轉眼到了年關,H給我的考核還是不錯的。據模糊了解,不管是獎金還是漲幅,似乎都在平均水平之上。這里還要感謝下財務的W姐,給雙薪的時候把我的實習期也算進去了,多少有點點心理安慰。

            過年回來后仍是無所事事,3月初H到米國總部去了一趟,更加沒事情做。M和D一直做著之前哪個項目的維護工作。H回來后,帶來了米國老大們的一些新主意,M和H一個老部下L3以及H自己被H安排來做這件事。大約三月底左右吧,H手上有多出一個項目,是手上將個新項目的升級更新程序。他自己開始搭最初框架,然后扔一點活給我和另一個同事做。沒過多久,H又表示要將它丟給我。他說,我們要重視一些設計工作。于是他拿StarUML畫了些圖,跟我說這個調了那個,那個調了誰。對著代碼一看,果然不錯,完全事實描述。可是你那些圖僅僅表達了你是怎么做的,這怎么夠?一點也沒看出來為什么要這樣設計。當時我第一次看到什么時序圖啊,還有點抵制,這點我要做自我批評。雖然圖不會看,可是代碼還是會看的。不夸張的說,這整個代碼一團糟,各種糟糕。一堆單件(一堆全局變量);業務代碼中會充斥著一大段API調用序列(底層API沒有封裝到一兩句話表達業務的程度);還有那個 WinInet 的返回結果里,case 到 timeout 之類的,老是來個 OnConnectFail(),搞得像個框架,可是正確的情況又直接刷刷刷寫下來了,不見什么OnConnectSucceed(),到底哪部分框架那部分是用框架?僅僅一處小小的多線程部分,搞得到處鎖。總而言之,一個模塊,互相糾纏著的幾個類,一層結構。為了搞個運行入口,居然建了個MFC SDI項目,在文件菜單建了一項來進入整個模塊。

            大家可能懷疑我說得太夸張了,這一點我不能舉出什么證據。當然,也許牛逼的人喜歡看糾結的代碼,這是水平。像我這樣的菜鳥只喜歡看簡單的代碼,除非有必要才增加模塊和層次,這才變得復雜一點點。我從那時起開始懷疑技術到底是什么,是不是多會用幾個API就是技術達人?

            好了言歸正傳,這個項目脫離demo,要變得正式一點,H讓我把他整成一個 Windows Service。好,我整,去掉哪個MFC的框,重新建了個 Service 的框架,然后入口放進去。我以為很輕松的一件事。結果,編譯不過,一看,有寫代碼用了MFC的類,CFile啦,CFindFile啦,,,好在總量不是很恐怖。我去跟H說,代碼里有一些用到MFC的,Windows Service有沒有界面,加上涉及到的一些功能用MFC也不見得多方便,都改為Win32 API吧。H不置可否,大意上說了句,程序里用MFC我覺得蠻常見的,大多數都用的吧。我反駁了句,那也看場合啊,我們現在完全沒必要引入MFC這個大依賴么。H沒有再說什么。我回頭將它們全部改掉,用CreateFile,FindFirstFile……。這邊剛改完,H又提交了一部分代碼,又是CFindFile,像是剛才什么都沒跟他說過似的。日!繼續改!

            接下來兩天,一直在考慮這個東西丟給我我能維護多久。思來想去覺得會堅持不住,我非常不愿意一個系統從一開始就是“老系統”。于是給H發了封郵件,說這些代碼雖然“有設計”,可是結構化不是很到位,然后給了一張通俗的框圖,表示這塊干什么那塊干什么,這塊只知道什么只需要處理什么,那塊又如何,而不用大家誰都知道誰。H過來表示“是啊”的感慨,然后又說了一些不著邊際的話(也許是著邊際的,只不過我沒記住),最后什么決定也沒做出。接下去幾天,我時不時追問他,可不可以動手改,他總是用一些話來搪塞,大概是些——“我覺得…總體是好的,只是,……”,“我覺得OK啊,不過明天的版本先出了”。我在問的同時,也在積極準備著,終于,在某個不得不改的時刻,我把它們全提交上去了。原來的代碼仍舊放在那個目錄不動,我不敢特意去做刪這個動作,太敏感。過了一會兒,大概H看到郵件了,又跑過來問:改了?會不會有什么問題?云云。

            ——這是我在H手下干的最傻逼的事情,沒有之一。這件事我跟一些人提過,今天把它完整的寫出來,也期待大家批評。我盡我的努力使我的描述盡可能客觀,但主觀性仍然是不可避免的。關于那個代碼是不是真有那么糟糕,是最容易帶有主觀性的,請大家自行判斷吧,我只能說很糟糕。做這件事情之前曾請教過M到底做不做好,M說如果為了項目好就應該做。回想起這一番,我有時候心理陰暗面來了,也會懷疑M那時候是不是陰我。不過M似乎沒有陰我的動機,可能在L1手下我比他稍微春風得意一些,但在H手下他明顯比我滋潤,沒必要啊。(M如果看到請別介意哈。)

            之后挺明顯的感到H不愿意管這個項目了,也有點選擇性不了解該項目。經常有什么新需求就答應下來,也不考慮現有設計能不能容納,我過去問他,他又裝作不知道的樣子,只說這怎樣怎樣就可以了,是可以做的。我又問那么這個改過之后接下來那些部分可能要改的可能不會改的,我好做應對,他又不知道了。不知道可能是選擇性的,但是對于需求的控制他這是發自內心的。因為在他自己也參與的那個項目里,也是不停地改,三天兩頭改,最后H跟PM鬧起來,干脆不理PM了。后來只好請QA MM J姐幫忙中轉。所以現在我想,他原來那個一層式結構確實是適合這樣折騰的。反觀L1帶的東西,幾乎所有未來一兩個月內的新需求,都是不會傷害到現有基本框架的,很多都是落入我們的預測的,往往變成了改個配置項這樣簡單的事情。曾經滄海難為水啊。當然H也會設配置項,可是設置的時候沒有邏輯性,某個選項代表什么沒法用一句話概括出來,大多數只能總結為,某個選項打開表示PM某個需求所要求的功能開啟。

            關于H,我想我可以可以寫好多好多。

            H曾經看到我寫 CString.Relpace(“{PlaceHolder}”,“XXX”),問,為什么不用 sprintf 呢?我無言以對。
            H看到我開著IE,會問,你為什么不用Firefox?我無言以對。
            H看到我開著IE,會問,你為什么不用Chrome?我無言以對。
            H看到我開著IE,嘆了口氣,你就是個微軟迷……我,我作委屈狀。
            H看到我在Word里打公式,會問你為什么不用Mathtype?我無言以對。
            H看到我寫注冊表,會問,你為什么不寫ini文件?我不知道我寫ini了他會不會問我為什么不寫注冊表。
            ……
            從此討厭“為什么不”的問法。

            自從我改了H的代碼之后,H就經常的說我的程序都是同步的,沒法即時退出。限于水平問題,當時沒一下子理解。好在是個服務程序,業務上也需要持續不斷跑,只有關機或者關閉服務的時候停止就可以了。這時候我安全退出和系統來強制結束的表面效果沒多少差異。等我明白這個問題之后,在9月份的第二版本中,我把這個問題全部改掉了,不留一絲同步的影子,H之后便沒說什么了。只是第二版的上線,由于對TP提供API等等,需要H對外公布。而H處于對此不管事狀態,加上別的項目也比較緊,一直沒上,直到我離職,也只是內部release,沒有出正式版。

            自從改了H的代碼之后,H就不太讓我碰C++的東西了,有一次H曾讓我去survey FileFox 插件。當時看了兩天,寫了個 Hello word 級別的插件,然后報告survey結束,有什么正式需求。結果讓繼續survey,并被問有沒有做這個方向的興趣,有的話可以和Linux端的人一起做那方面的項目。我或委婉或直接地表示不要寫js,不要為mozilla的野心服務,不看好FireFox平臺,我要繼續玩C++。過了些日子,被要求二選一,FireFox插件,或者Windows下的可能涉及D3D的另一個項目。我斷然選擇了后者。這個項目一開始也是在H手上的,可是不知為什么后來突然被L2拿去了。L2派手下T來做,因為我那時已經為此survey了一些時候了,便讓T和我一起做。這時候才感到L2的好啊。除了加班,對于L2我真的挑剔不出什么了——據說L2現在也會安排周任務了。我想多花些時間在L2的項目上,H又說他這邊的更新程序任務重,那邊的優先級低,有一次主動為我向那個項目告假2周,導致后來我進度上落后于T,其實這邊也就是幾個頑固bug而已。

            其中一個bug是crash,各種表現。最后查出是crash在InternetOpenUrl的函數里。摸索了一段時間后,發現使用過 SH 系列 API 后,在某些機器上就會 100% crash,為此當時還在這里發了一篇文章。把 SH 去掉之后,現象平息了一陣子。后來,隨著測試的深入,又報了。這下可沒辦法了。H自己也沒辦法。再很后來很后來,我找到了一篇微軟的文章,說 WinInet 不支持在 Service 里使用,并建議轉用 WinHttp。至于為什么用WinInet,這里又有一段故事。很早的時候,在我剛進去不久的時候,當時那個項目也有網絡交互,當時年少無知的我找了一段例子,是socket的。(那個作者還寫了這么一句注釋://If it works, it is written by masterz, otherwise I don't know who write it.)我用它搞了個支持 Http Get 和 Http Post 的小玩意兒。后來項目轉到H手上的時候,H看了說,你為什么不用WinInet呢?你的不能支持跳轉,不能支持https,并給了一堆WinInet函數名。(可是他為什么不指導我完善它呢?)我說我當初并不知道WinInet的存在,并問他改嗎。他說不用改了。所以后來他把升級更新程序的網絡下載模塊丟給我的時候,我就用WinInet了。好,回到現在,我發了封郵件給H,說WinInet在Service中不被支持,這可能是crash的原因,建議使用WinHttp,并告知WinHttp在沒有打SP1的XP里不支持。他回復說他覺得“OK”,但是他認為需要支持不帶SP1的XP。這相當于被變相打回了。但是他有沒有因此宣布此bug可以不修復,之后的日日夜夜,J總是因為這個bug的各種表現來找我。

            H自己手上那個項目據說忙得很,他和M、L3甚至忙到天天加班,卻從不要我加班,也不讓我參與。有時候碰上幾個界面的,M說ATL寫界面不方便,H就叫我寫個網頁,M在外面套個IE控件,這才零星有我一點點事。有一次我跟V姐抱怨了幾句,說在H手下被邊緣化了,什么都沒我的事。V說怎么會啊,H每次說起你都說你挺不錯的,他很喜歡你的。(是嗎?)也不知道V有沒有幫忙傳達過什么,第二天H就讓我加班,找的理由是我寫的界面跟他們也是有關系的,要發版本,要確保沒問題。我就做著網上隨便逛逛,最后跟他們一起回去。之后每次加班H都要叫上我了,大部分時間事情都不是很多,我就當放松下,大家一起玩玩,再蹭頓晚飯了。其實到了這時,由于長期無事,倒是有點期待加班了,之前對于加班的憎恨也不知不覺地化解了。我細細地觀察了H的加班,其實跟L2的加班是一模一樣的,都是沒有明確的下班目標,都是由于臨近發版本,都是由于更早的時候沒有做好任務安排以至于到了快發版本了才發現時間不夠。

            我手上那個升級程序的項目,H幾乎沒怎么管過,搞得我每天都不知道做什么。我只知道大約幾個月后要發布。至于周任務、月任務,都是沒有的。有一次H可能真的被他那邊的事情糾纏地搞不清楚了,終于召集他手下所有人,把接下去幾天的任務說了下,并且也說了這件事誰做那件事誰做。他是畫在白板上的,我們都沒抄下來,結束的時候拿手機拍了下。我滿以為他會發郵件再通知一遍的,哪知道神馬也沒有。我不知道他開那個會干嘛來著,也許不是為了明確我們的任務,只是為了用我們所有人的力量為他整理思路而已。

            長期的空閑狀態讓我壓抑,并且效率明顯降低。同樣一件事,現在的我比兩年前的我肯定完成得慢很多。我開始擔心自己的前途問題。我現在寫的所有關于H的,都是在空閑的時候反反復復回憶過的、思考過的,我很驚訝我盡然花了這么多精力去思考那么多事,也驚訝盡然有那么多事讓我久久不能忘懷。我總結了H的一些特點:

            1. 不看郵件。往往發給他的郵件了,過了大半天跑過來問,告訴他郵件里寫了,回答我沒看。
            2. 不看文檔。每次看他打開WORD文檔,就滾得老快,像很熟悉似的,但找不著要找的內容。
            3. 喜歡在談業務的時候說技術名詞。(例:本來說升級程序連接上服務器了應該查詢什么信息,會被描述成:我們會發一個TCP包,……)
            4. 喜歡在談上層業務的時候時時刻刻問底層實現。(例:跟他說“連上服務器了,然后怎么怎么”,會被打斷問:是一次TCP連接嗎?)
            5. 喜歡在談上層技術的時候問下層實現。(例:明明我們用的全是HTTP層次的API,非得每次說TCP包)
            6. 以為只有技術問題。(例:明明某些bug只是我們這樣定義,QA認為應該那樣定義,只是定義問題,爭論不下去找他,他會先問我,“你這樣做有什么困難?”)
            7. 沒有邏輯。(例:有一次好像企圖讓某應用程序包含升級程序,想讓被包含著的升級程序又包含該應用程序。)
            8. 沒有業務概念。跟他講話沒法跟他概括出功能名詞,提“某某功能”。如果要提某某功能,只能把這功能的全部API調用序列羅列一遍,他才能精確明白我在說什么。同樣,他會用某些技術詞匯來描述某某功能,我也聽不懂。甚至不知道什么意思自造詞,如:“我記得XP的是支持System Level的MUI的,Vista開始才支持Application Level的MUI的。”從來沒有明白過這兩個Level是什么意思,雖然我知道MUI在XP和Vista里有區別。
            9. 沒有設計理念,雖然會畫UML,忠實表達他代碼是怎么寫的。
            10. 不會拒絕需求,也不會預測需求以利于提前設計。
            11. 不主動向上請示。遇到我不好決定的事情,去問他,他也不好決定,也不問上級,也不做個有預測性的決定,任由我不知所措。
            12. 開會經常閑扯,每次被他打斷好多次,不局限于部門內的會議里。讓人不能專心。可能他認為這是制造輕松氛圍的方式。
            13. 怕給別的部門造成任務。所以不管某些內容應不應該放在我們這邊做,經常認為需要自己做,以為讓別人做是態度不端正,“事情總是要做的”。那個升級程序的第二版,之所以要設計API,就是為了不要包含各種應用程序的復雜需求,但TP同事說下載失敗了,他就來問我,你有沒有做重試啊。我說當然沒有啊,我只是給出了一種機制讓他知道是成功還是失敗了,要不要重試、用怎樣的重試策略,明顯應該他來么。見我堅決,他又裝著很抱歉的樣子,跟TP同事說我們重試沒有做,你們那邊方不方便做一下……
            14. 怕別人給自己造成任務。Test case 評審的時候,見J列了好幾屏的case,他就抱怨說,你們搞得也太細了吧,這么多條,能測完么?那一次QA老大A義正言辭的說:這些需求,這些功能,本來需要這么多case來保證;這些都是我們分內的事,不管多還是少,只要是我們該做的,我們就要做。聽得我暗暗感動了一番,自此以后總是在心里默默地欽佩他。
            15. 不給別人發言機會。就算自己業務不熟,也搶別人話,結果傳達的總是有偏差。聽他溝通以及與他溝通都是很辛苦的,不知道在談業務還是在談技術,反正一會兒這個一會兒那個,很具有跳躍性。有一次他讓某同學做主題演講,分享前階段survey的內容,結果人家放了PPT開講,他在下面的補充占了80%的時間,上面那個倒像是主持人了。
            16. 最重要的一點,不花心思好好安排別人的任務,總是專心寫代碼,與民爭活。

            剛到他手下的時候,我總覺得不對勁,我前前后后跟他談過好多次(當然后來死心了不找他談話了)。有一次他說“我可能對于自己作為RD還是作為Leader,身份上沒有區分清楚”,僅這一點,既然自知,何必占這個位置呢?不是每個人都能管人的,這要影響到別人的職業生涯,還要影響到公司的人員流失問題,后果非常嚴重啊。他的組,從09年中手下十多號人,到現在的三四個人。有點點想法的人,要么去別的公司了,要么去別的部門了。我想他沒有好好思考過。倒是給離開的人編好了冠冕堂皇的理由,以便與人解釋。

            用一個已經離職的同事的話說,XX項目,從需求、技術、搭框架、寫代碼,H都能一個人搞定,要我們干什么。
            另一個同事說:H是個全才,但他不會做Leader。

            我想,H要是一個和我平級的同事,除了對他沒有設計理念這一點不看好以外,我應該也會蠻崇敬他的吧,畢竟人家會用這么多API呢。

            H還說,對于項目,我必須親手搭個框架寫寫代碼,才能知道水有多深。可是,你要親手體驗水有多深又是何必呢,讓手下人告訴你水有多深不也一樣么?

            今年六月份,公司有一次計劃外的加薪,H對我還是很給力的;年中的獎金也不少。另有一次我生病了,H叫了另一個有車的同事一起把我送回住處,還幫燒了開水,噓寒問暖一番后才離開。還有當初是H讓我第一次通過了一面,從而拿到人生第一個offer……可以說,除了具體工作上,H對我真的還是非常不錯的,他也曾幾次和J訴說:我覺得我對他還是不錯的啊。也許我不該對他有那么多看法。可是,每次有不同意見,你為什么老是以“我覺得你對我有意見”強制結束討論并且不問具體“意見”呢?

            我記得CppBlog里有一位貌似從事管理的朋友發了一些文章,說要如何如何管理,并要如何永不重用某些手下。我一對照,某些情節和H的做法非常相似,于是在評論里比較激烈的回復了他,希望他的手下好運。

            本篇就寫了兩個晚上了,就到這里吧,字里行間可能充滿了怨懟,如果影響您心情了,小弟這廂給您賠禮了。下一篇將談談離職始末。關于我對H的種種,我知道也是充滿了偏見的,如果有做得/想得不對的,希望大家多些批評,多多糾正。

            ----------華麗的分割線,如果以后又想起H其人其事忍不住想添加,就加在后面----------

            2009年3月,公司要搞QT培訓,H部門,也就是我所在的部門出人的。但是H壓根兒沒跟我說有這回事。后來別的組的人都在各自老大的通知下知道了,我是本組的卻不知道。H從米國回來后問我有沒有去聽啊,我說沒有。我不知道他為什么認為我已經知道了這個消息了。搞得好像我沒興趣似的。不過這培訓我確實可能沒興趣,演講者一般只是介紹API使用,鮮有自己的思考。關鍵在于H通知不到位。

            posted @ 2011-01-25 22:17 溪流 閱讀(2168) | 評論 (10)編輯 收藏
            僅列出標題
            共18頁: First 5 6 7 8 9 10 11 12 13 Last 
            久久99国产精品久久99| 亚洲精品tv久久久久久久久久| 91麻精品国产91久久久久| 日韩久久久久久中文人妻| 伊人久久大香线蕉AV一区二区| 久久久久久亚洲精品不卡| 久久97久久97精品免视看| 久久久久黑人强伦姧人妻| 99久久免费只有精品国产| 国产精品99久久久久久宅男| 国产成人精品综合久久久| 久久这里只有精品视频99| 青青青青久久精品国产h久久精品五福影院1421| 中文字幕久久欲求不满| 国产午夜精品理论片久久| 久久精品中文字幕第23页| 久久最新免费视频| 久久精品国产日本波多野结衣| 久久久高清免费视频| 性做久久久久久久| 成人免费网站久久久| 久久精品无码一区二区三区免费 | 天堂久久天堂AV色综合| 亚洲中文字幕无码久久2017| 香蕉久久夜色精品升级完成| 国产精品久久久久天天影视| 国产99久久久国产精品~~牛| 色偷偷88欧美精品久久久| 亚洲成色www久久网站夜月| 色噜噜狠狠先锋影音久久| 亚洲精品成人久久久| 久久综合噜噜激激的五月天| 国产精品狼人久久久久影院 | 久久久久亚洲av成人无码电影| 日韩久久久久中文字幕人妻| 亚洲va久久久噜噜噜久久狠狠| 91精品国产91久久久久久蜜臀| 久久99这里只有精品国产| 日本精品久久久久中文字幕8| 久久99精品久久久大学生| 国产亚洲色婷婷久久99精品91|