ScopeGuard 只是帮我们调用一个函数而已,至于这个函数是否有异常出来,它不该悄悄地把它吞了,而应该还我们本来面目,不知道是不是?可是为什么几乎所有介绍 ScopeGuard 的文章都说这 try … catch … 用得好呢?
posted @
2011-03-23 09:39 溪流 阅读(2528) |
评论 (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 溪流 阅读(789) |
评论 (0) |
编辑 收藏
嗯,写篇文章的目的是为了把我最新(现在是次新)的那篇文章给刷下去——我不想每次看见它了。
不知大家有没有发现,当使用 VS 来调试代码的时候,那些 STL 容器的信息会以比较看得懂的方式显示出来:

而我们自己写的,它只能按照数据成员来显示,如果数据结构稍微复杂点,看这些直接显示的内容得到的有用信息就会很少了:

那么,是否有办法能让 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 开始的那一段表示当该变量单行显示的时候该如何显示,也就是下图第二列的样子:

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,它用于描述点击变量左边的加号后,展开的内容怎么显示,如图:

IDE 会依次显示 children(#( … )) 括号内的以逗号分隔的内容,每个显示为一行。刚才的 #array, #list, #tree 都可以用,会显示成第一列索引第二列值的样子。
另外可以用 #(first, second) 的格式,first 会原样显示在第一列,second 会求值显示在第二列。
了解以上这些内容,我们已经可以针对 STL 的那些数据结构做自定义显示了,对一些别的数据结构作简单的自定义显示也不难。
最后给个效果图,定义了我自己的那些容器的显示方式。怎么样,看上去一定比开头给出的那个冷冰冰的样子好很多吧?

posted @
2011-02-27 17:10 溪流 阅读(12015) |
评论 (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 溪流 阅读(3549) |
评论 (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的一些特点:
- 不看邮件。往往发给他的邮件了,过了大半天跑过来问,告诉他邮件里写了,回答我没看。
- 不看文档。每次看他打开WORD文档,就滚得老快,像很熟悉似的,但找不着要找的内容。
- 喜欢在谈业务的时候说技术名词。(例:本来说升级程序连接上服务器了应该查询什么信息,会被描述成:我们会发一个TCP包,……)
- 喜欢在谈上层业务的时候时时刻刻问底层实现。(例:跟他说“连上服务器了,然后怎么怎么”,会被打断问:是一次TCP连接吗?)
- 喜欢在谈上层技术的时候问下层实现。(例:明明我们用的全是HTTP层次的API,非得每次说TCP包)
- 以为只有技术问题。(例:明明某些bug只是我们这样定义,QA认为应该那样定义,只是定义问题,争论不下去找他,他会先问我,“你这样做有什么困难?”)
- 没有逻辑。(例:有一次好像企图让某应用程序包含升级程序,想让被包含着的升级程序又包含该应用程序。)
- 没有业务概念。跟他讲话没法跟他概括出功能名词,提“某某功能”。如果要提某某功能,只能把这功能的全部API调用序列罗列一遍,他才能精确明白我在说什么。同样,他会用某些技术词汇来描述某某功能,我也听不懂。甚至不知道什么意思自造词,如:“我记得XP的是支持System Level的MUI的,Vista开始才支持Application Level的MUI的。”从来没有明白过这两个Level是什么意思,虽然我知道MUI在XP和Vista里有区别。
- 没有设计理念,虽然会画UML,忠实表达他代码是怎么写的。
- 不会拒绝需求,也不会预测需求以利于提前设计。
- 不主动向上请示。遇到我不好决定的事情,去问他,他也不好决定,也不问上级,也不做个有预测性的决定,任由我不知所措。
- 开会经常闲扯,每次被他打断好多次,不局限于部门内的会议里。让人不能专心。可能他认为这是制造轻松氛围的方式。
- 怕给别的部门造成任务。所以不管某些内容应不应该放在我们这边做,经常认为需要自己做,以为让别人做是态度不端正,“事情总是要做的”。那个升级程序的第二版,之所以要设计API,就是为了不要包含各种应用程序的复杂需求,但TP同事说下载失败了,他就来问我,你有没有做重试啊。我说当然没有啊,我只是给出了一种机制让他知道是成功还是失败了,要不要重试、用怎样的重试策略,明显应该他来么。见我坚决,他又装着很抱歉的样子,跟TP同事说我们重试没有做,你们那边方不方便做一下……
- 怕别人给自己造成任务。Test case 评审的时候,见J列了好几屏的case,他就抱怨说,你们搞得也太细了吧,这么多条,能测完么?那一次QA老大A义正言辞的说:这些需求,这些功能,本来需要这么多case来保证;这些都是我们分内的事,不管多还是少,只要是我们该做的,我们就要做。听得我暗暗感动了一番,自此以后总是在心里默默地钦佩他。
- 不给别人发言机会。就算自己业务不熟,也抢别人话,结果传达的总是有偏差。听他沟通以及与他沟通都是很辛苦的,不知道在谈业务还是在谈技术,反正一会儿这个一会儿那个,很具有跳跃性。有一次他让某同学做主题演讲,分享前阶段survey的内容,结果人家放了PPT开讲,他在下面的补充占了80%的时间,上面那个倒像是主持人了。
- 最重要的一点,不花心思好好安排别人的任务,总是专心写代码,与民争活。
刚到他手下的时候,我总觉得不对劲,我前前后后跟他谈过好多次(当然后来死心了不找他谈话了)。有一次他说“我可能对于自己作为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 溪流 阅读(2175) |
评论 (10) |
编辑 收藏