职场重生

这是我从《职场》杂志的一篇《每次晋升,都要具备重生的勇气》中看来的,作者是UPS中国区人力资源总监刘晓辉。

一个老鹰重生的故事:

鹰是世界上寿命最长的鸟,它的寿命有70年,
但是在它40岁的时候,
它的爪子开始老化,无法牢牢地抓住猎物;
它的喙变得又长又弯,严重阻碍它的进食;
它的羽毛长得又浓又厚,使得飞翔十分吃力。
因此,它只有两种选择,等待死亡或者抛掉过去的累赘重生–
重生的过程需要花上150天左右。
它必须很努力的飞到山顶,在悬崖上筑巢,停留在那里,不得飞翔;
老鹰首先用它的喙击打岩石,直到完全脱落;
它会用新长出来的喙把指甲一根一根的拔出来,然后静静的等候新的指甲长出来;
当新的指甲长出来后,它便把羽毛一根一根的拔掉;
5个月后,新的羽毛长出来了;
老鹰便能再翱翔30年!

其实,我们在职场的每一次晋升中,都需要具备这样重生的勇气:过去的成就可能会让你无法面对未来潜在的挫败;过去的工作风格和方法也可能并不一定适合新的职位……只有当你像鹰那样抛掉过去,来一次重生,才能在职场道路走得更高更远。

共勉!

早点给code请个医生

有这么一个场景:

一位穿白大褂的医生脸色凝重地走进ICU(重症监护室),对躺在病床上的70岁老人的家属说:太太,CT显示您先生大脑里有一恶性肿瘤,不过这个恶心肿瘤现在是可以通过手术来完全移除的。
太太:那好啊,什么时候安排手术?
医生:不过。。您先生岁数太大,身体机能无法承受手术中的创伤。虽然手术可以完全移除肿瘤,但是只怕先生挺不到手术结束了。
太太:那怎么办?
医生:那就保守疗法,将就活着呗,直到自然死亡。虽然会有痛苦和随时死亡的风险,但是比在马上的手术中死亡要好。
太太:……

与此同时。。。

一位穿着衬衫的高级软件工程师脸色凝重地走进办公室,对底下的工程师说:你的代码在项目结束前的Code Review(代码评审)中发现一个严重的性能瓶颈风险,现在体现不出来,但是在客户那边数据到达一个数量级就会体现出来了。。还好我已经有解决方案了。
工程师:那好啊,现在开始改?
高级工程师:现在来不及了,项目已经接近尾声。这个项目必须在明天提交客户上线,现在做出如此多的变动风险太大。
工程师:那怎么办?
高级工程师:先发给客户呗,在Release notes里面写清楚风险。随后我们开始做软件更新,然后再发个Patch过去。不过这段时间成本客户是不会给钱的,而且客户满意度会因为这个patch下降。
工程师:……

上面的两个场景有一个共同的尴尬:有一个解决问题的方案,但是因为时间(或者岁数)的关系来不及执行下去。
引发这种尴尬的核心原因是:发现问题太晚,总是在deadline前后发现。

项目背景介绍:
一个团队有4个项目组,每个项目组负责不同的项目,甚至有的项目组是daily deliverable。换句话说,4个项目组每天都很忙,其次是每个项目组不知道其他项目组项目的细节。
公司的SQA制定了流程有Peer Review(同事之间互相看代码)以及FTR(Formal Technical Review,正式的Code Review)。Peer Review一直没被很好的执行:
第一,没有正式的写入流程框图,给成员感觉只是“建议”(Rec.)级别;
第二,其他项目组成员不太熟悉本项目的细节,觉得看得效果不大;
第三,本项目组成员忙得焦头烂额,更不想找另外一个人来找自己的碴,而且其他项目组成员也很忙不太好意思请别人出来。
基于以上客观和心理状态,所以一个项目基本上就是开发测试交替进行,然后到项目完全开发完后,安排一个FTR。也就是下面这张图:

从上面这个图可以清晰地发现,Code Review放在最后。之前的Testing主要是QA做的黑盒测试,而有些Bug在不看代码做白盒的情况下很难测出来,现实是QA很少有做白盒看代码的能力,于是所有“别人看代码”的工作被放在了项目的后期。这样带来的结果是:
1. 一些小的Coding style和比较容易改的Bug被改掉;
2. 一些需要改动多处,改动Common function的Bug因为时间关系被Pending。因为QA之前完成了测试,如果再次改动关键被引用点,那么QA需要从头到尾彻底地重新测试一遍才能确保改动有效且不会引入Regression bug(即因为改动其他Bug而引入的新Bug),而deadline已经不允许这么干了。
可以容易发现,第二种Bug的改动价值更大,能够更大的提升软件质量,但是因为时间带来的风险原因而不得不“明知道是Bug,但是不改了”。

针对这个问题,我们来看看基本上被弃用的原始版瀑布开发模型(讲解使用,切勿模仿):

Testing在最后才引用进来,中间没有迭代Testing。DEV一条道开发到黑,全部开发完成后,然后QA开始测试。现在看起来都比较可笑,因为Bug是越早发现越好,越晚发现,修复bug的effort(成本)会成倍增加。Testing如此,为何Code Review不如此?

现在的解决方案是:
1. 增加Code Review Sprint。在项目的编码和测试阶段,会有3-4个左右的迭代deliverable,那么在每次deliverable之前,必须组织一次Code Review。具体的时间可以根据各个项目组的繁忙程度灵活调节。
2. 将Code Review Sprint写入流程,并且准备好合适的文档Excel表格用来提交Bug和对Code Reviewer的效果统计,确保执行力。
3. 每次Code Review Sprint大概持续时间是半小时到一小时。
4. Code Review Sprint发现的Bug种类有Coding Style, 算法逻辑,代码的严谨性,甚至Business Logic。
5. 在每次需求分析阶段可以适当引入不太忙的其他项目组成员,他们不用知道太多业务逻辑,只要知道大概业务逻辑和软件大功能点,以便日后做Review。(在软件行业的人混长了都有感觉,看界面就能大概猜到基本的UI逻辑)
Test Case Review Sprint亦如此,找其他项目组的QA来Review 本项目组的Test case,确保Test case格式正确,功能的覆盖面,正反测试用例的比例。
这样一来,很多关键Bug或者影响性能的瓶颈Risk能够在早期就被发现并被扼杀在摇篮之中,改动的Effort很小并防止了对以后代码的进一步影响。当然由于时间和资源有限的关系,这种Code Review可能不彻底,所以最后仍然加上一个FTR,做一次全项目组的技术评审。(题外话:其实很多人不太重视Code Review, 公司SQA在统计中发现Code Review中发现的Bug价值比黑盒测试中高10倍以上)

最近的一次项目尝试使用上面的方案,客户在电话里面说非常满意软件质量。

于是,就出现下面一个场景:

一位穿白大褂的医生表情轻松地走入了病房,对一个躺在病床上的小伙子说:CT显示你的大脑里面有一颗良性的肿瘤,现在用手术可以轻松解决。但是如果现在不做手术,你70岁的时候可能要在ICU(重症监护室)里面度过了。
小伙子:谢谢医生,现在可以手术吗?
医生:嗯,马上!

与此同时。。。

一位穿衬衫的高级软件工程师表情轻松地走入办公室,对一个正在埋头写代码的工程师说:刚才我花了半个小时做了个Code Review Sprint,发现你的代码里面有一处性能瓶颈风险。现在如果不改的话,那么将对以后的代码造成严重的影响,最后到客户那边的大数据负载下会不堪重负。
工程师:谢谢,您辛苦了,现在我可以将改动Commit进去吗?
高级工程师:嗯,马上!

六月,年半

五月底六月初,双子月。心情也是此起彼伏,犹豫,纠结,傍徨,时常充斥着日常的工作生活中。武汉的天气也很双子,体现不出来明显的特征,忽冷忽热,忽晴忽雨。繁忙的5月已经过去,自己花两个周末做的东东在公司培训中取得了不错的效果,自己也非主流般的去看了一场文科生的戏剧,回想起来,这些刚好映衬着双子月的特征,人的两面性更加突出。

公司的内部系统开始提示还有3天的年假没请,到7月29日不享用就算自动放弃。想到4月绵阳人走的时候承诺Alan童鞋要去他的工作地无锡看看,而4月因为一件重要事情不能离开武汉,另外5月的公司培训,眨眼就到6月了,“世界在飞速改变”定律推动我立即向经理申请了假期,直接从光谷奔向火车站,暂离武汉,动车一路向东。

到达无锡已经接近晚上10点,疲惫地坐车到公司无锡团队的下榻处,立马拿出鸭脖子供同事们享用。本想早点休息以便明天游玩,可是无法抵挡住两位重庆同事的热情,于是在烧烤啤酒加划拳的陪伴下,一直到深夜两点才洗澡睡觉。第二天,生物钟准时将我叫醒,无锡柔和的阳光早已经洒满客厅,同事还没起来,而街上已经有早起的人们在聊天买菜,这般恬静直接让我坐在沙发上开始享受这无锡的早晨。

出门,花了100元在路边找了个旅行社服务我们一天。在无锡便是游太湖最为重要了。带的相机哪里也没有闲着,眼睛在哪里便拍到哪里。整个的游玩,我将自己沉静下来,丢掉身上的所有东西,全身心充满好奇地去看这个陌生的城市,将自己溶到大自然中,不发出一点声音。自己就是一过客,就要有过客的样子。最惬意的时候,就是和Alan童鞋坐在太湖边,任湖风拂面,彼此之间谈工作,谈爱情,谈未来。。。想想就是很奇妙的事情,一个在光谷软件园天天上班的人,跑到无锡太湖中间的一个小岛的树荫下畅所欲言,把平时的苦闷,挫折,无奈,以及平时无法说出口的感受和想法,对着大自然的湖面发泄出来,然后忘掉,再以一个全新的姿态回到日常工作生活中去。因为明天行程去苏州,便打电话给在上海的同事或者已经离职的前同事顺便聚聚。这些都是我的同期生,经历过两年前血腥的试用期考核, 自然有如兄弟般的默契。几通电话很快就确定了,想想也是个很奇妙的事情,大学毕业那年在光谷软件园的办公室里面一起写代码,现在各奔东西不在一处,却又很快地在另外一个陌生的城市集结。。。呵呵

苏州,更是一个风景秀丽的南方城市。古香古色,连公交车站都是琉璃瓦飞檐造型。在这里的生活就是可以让人慢下来,特意走了一个苏州小巷,感觉武汉也有这样的小巷,只不过在武汉是主人,没有细致留心发现身边的这些美,而当你是过客的时候,角色不同,视角也不同。

感恩北塔,是孙权为他奶娘修的一座9层塔。当年孙权因为生下来非常丑陋被孙坚遗弃,是他的奶娘将他一口一口喂大,最后孙权成为一代君主,为答谢奶娘的养育之恩特修此塔。在此塔下我与佛有过一段对话:

我:阿弥陀佛(导游说跟佛见面打招呼的方式)

佛:施主,你&$*##%!^*@。。。(省略佛对我的评价,我觉得很准)

佛:我看你是有缘人,请烧一柱高香。(说完指向旁边包装精美的高香)

我:善哉,阿弥陀佛。(我走向高香)

佛:399元。。。(佛指了指他面前的桌子)

我:啊。。。我钱包里面真的没有这么多现金(当时钱包里面真的只有40了,找不到招行的取款机)

佛:如果你有诚意,也可以刷卡的。

我:卡里面也没有这么多钱(我撒谎了,因为我被佛的非主流意识吓到了)

佛:100。。100元有没有。。。

我:没有。。(当佛用销售的语气向我试探100元的时候,我在心中已经将他秒杀了。。我很想跟他说:在这次心灵的对话中,你输了)

佛没有说话,佛看我没走,也不好意思赶我走,因为我们已经不是佛与信徒的关系,而是销售和客户的关系了,所以销售给了我一张金卡之后,礼貌地告诉我有缘下次再见。

我平淡地笑了笑,随后登上了孙权修的感恩北塔。

接下来,我们随客船畅游过苏州城的护城河,来到了枫桥夜泊。在这里,此桥,此水,此景,我终于理解了枫桥夜泊的心境。

枫桥夜泊
[唐] 张继   
月落乌啼霜满天,   
江枫渔火对愁眠。   
姑苏城外寒山寺,   
夜半钟声到客船。

。。。。。。

终究还是回到了武汉,又恢复了往日的生活。公元2010年不知不觉过去一半,在工作方面依然有期望的斩获,而在工作之外体会到的还是挫折。谋事在人成事在天,很多事情你努力过,奋斗过,哪怕结果暂时不太理想,心中也不会有遗憾。只不过,天蝎座不服输的性格总会在绝望中找寻希望,男子汉,能够勇敢地拿得起,也应该坦然地放下。易经说,时间一变,什么都变了。未来的事情,谁也说不准,游戏还在继续,我将在追求幸福的道路上坚定前行。