千里之行,始于足下,无论你有多么的豪情万丈,总要从最基础的东西做起。
然而要做一个好的基层工作人员,并不是低头认认真真写好代码就可以的,其中可大有学问。
按照余世维所论,一个好的下属应该:
我也总结了如下几点,欢迎大家补充。
当前的项目管理中,多是强调结果的,号称结果导向或者结果驱动。
作为一个基层,做人重要,做事更重要,除了良好的沟通能力,能拿得出真金白银的成果,更是每个项目经理愿意看到的事情。
然而怎么叫好的结果呢?
一九五八年党的八大二次会议上,提出多快好省的建设社会主义。多快好省四个字即体现了前辈革命家的理想壮志,也成为后来中国管理者心中的梦。所以我们时常听到如下的话:"这些功能下个月一定要出来","代码质量要高,要有详细的注释,测试用例,code review","最好提前一周至少三天,可以准备demo","项目现在经费相对比较紧张,希望大家克服一下"。
然而现代的项目管理给我们画出了如下的三角形:
范围,预算,时间三者相互制约,牵一发而动全身。欲范围大(多),就应该增加项目预算(不省),如增加人手,增加资源,买第三方成品,或者应该延长时间(不快),如推迟release的时间等。欲按期完成(快),则可以增加预算(不省),或者减少功能(不多)。
然而现实中,老板可不这样想,预算是早就做好了的,时间也是确定了的,功能缺一不可,作为基层的程序员我们唯一可以影响的就是用加班换来更多的时间,当然还有中间的一个圆圈——项目的质量。
到底是尽快的做出一个实现基本功能但设计稍有缺陷,测试不太完备,有少量的Bug的版本出来然后慢慢改进呢,还是经过慢慢的精心设计,做出有完备的测试用例,经过严格测试少有Bug的版本呢?
这个问题如果你问程序员,大部分人会选择后者。尤其对于初涉职场,充满激情的程序员们,往往满脑设计模式,满口软件工程,几乎见不得注释中的错别字和没有覆盖到的测试边界,似乎一个不完美的方案就有辱于软件工程师的名号了,我们称之"技术洁癖"。
如果你问项目经理,也会告诉你后者,而且最好以后者的形式用前者的时间(多少有些多快好省的味道)。然而很少有项目经理会直接看你的代码,更不关心你用的何种设计模式,也不会一个个看你的测试用例来思考是否覆盖所有的边界,更不会看你写的注释了。
所以很不幸,除了少数精通技术,熟悉细节,了解程序员苦衷的项目经理外(这可是大多数程序员都翘首以待的领导啊),大部分喜欢前者。
因为精心的设计,良好的文档是需要大量的时间,完备的测试用例的代码量几倍于实现本身,功能测试,性能测试以及Bug的修改更是难以估计时间的,所以总的时间将几倍于前者的时间,在此过程中,你献给项目经理的,除了等待,还是等待。
人是不喜欢等待的,尤其是很少反馈的等待,当我们用windows的时候,往往会出现估计时间相当不准确的进度条,然而我们还是喜欢看着进度条一直走到底,同样项目经理也是。
总是能够很快的做出项目经理能够看到的版本,便容易给人一种能力很强的感觉,至少大部分人会这样认为。
也许你会说:我做的版本Bug很少,后期维护成本低,QA一测不就能够看出孰优孰劣来了吗?
仍然很不幸,在大多数人看来,你一个月做了一个稳定的版本被认为是做了一件事情,而别人两个星期做了一个不稳定的版本,后两个星期改了三个Bug是做了四件事情,而且其每次的会议总有进度可以说,成绩斐然。
而且一个人身上所挂着的Bug的个数,实在不是一件值得羞愧的事情,反而是一件令人感到荣耀的事情,这说明了你重担在身,举足轻重。
如果你做了一个模块,用了一个月,后来半年都不曾出过Bug,而另一个人做一个模块两个星期,出过多个Bug,并且后来兼任其他模块的时候还在改Bug,还是很不幸,你会被认为所做的模块相对简单,不容易出Bug,并随着项目的进行而被淡忘,会被这样提及:"他在半年前做过一个项目",而另一个人却会被认为所做的很复杂,有很多疑难杂症,而且后来会被认为身兼数职,会这样被提及:"随着能力的提升,同时维护并负责多个模块,有并行工作的能力,有很强的解决问题的能力"。
也许你觉得我说的太极端,那就举一个历史上的例子吧,有兴趣大家可以看李亚平的《前清秘史——入主中原之路》,其中是这样描写当时并称“南戚北李”的两位将军的:
李成梁屡立大功,受封为伯爵,跻身于帝国贵族行列。在当时,他的地位、名望等,很有可能已在戚继光之上。有一种看法,包括《明史》的作者们认为,恰恰因为戚继光威名太盛,坐镇蓟门十六年,使敌人从来不敢来犯(没有Bug啊),于是转道入侵辽东,才给了李成梁屡立战功的机会。张居正死后,新政被废,受到张居正支持重用的戚继光被迅速边缘化,在郁郁寡欢中死去(可能明朝认为蓟门这个模块不需要再维护了)。而李成梁,他同样受到过张居正的支持和倚重,然而,可能由于下面的三个原因:其一,远离京师,与张居正没有过多的私人交往;其二,赫赫战功给万历皇帝留下了深刻印象(每次总有进度可说);其三,动荡不安的辽东局势离不开这位骁将(辽东模块还需要维护啊)。从而,李成梁避免了池鱼之灾。
当前社会中,不是如此吗?是修了坚固的河堤的市长感动中国,还是和民众一起抗洪抢险的市长感动中国呢?是治理的地方路不拾遗的公安局长应该升职,还是让黑社会猖狂十年然后一举击溃的公安局长会升职呢?
如果你觉得你的项目经理英明过于历史甚至当朝首辅,那么恭喜你。
当一个模块或者一个任务交给你的时候,可能存在各种各样的困难,会出现各种各样的问题,需要各种各样的资源,这一切都应该慎重考虑后尽早提出。
问题的尽早提出,其实是风险控制的一种手段。
调配资源,排除干扰,风险控制是一个项目经理的重要责任之一,然而不要认为项目经理会英明神武到知道一切细节,也不要认为这是项目经理的事情,与你无关。其实一个模块,真正了解细节的是你。
所以对团队来讲,事先问题没有提出,到时候出现是你的甚至你的团队的责任,问题及早提出了,项目经理向相关人员请求资源,到时候没有解决就不是你的责任,甚至也不是你们团队的责任了。这个样子既帮助你的项目经理控制风险,又能够在外国人面前撇清责任,是每一个项目经理都欢迎的事情。
对你个人来讲,问题及早提出了,以后或有Bug,或有delay,都不会给人一种突然的感觉,也给项目经理一种对你,也对整个项目可控的感觉。
从心理学上来讲,人们多惯于先听坏消息,再听好消息,而不愿意先听好消息,再听坏消息,这就是我们常说的冷热水效应:一杯温水,保持温度不变,另有一杯冷水,一杯热水。当先将手放在冷水中,再放到温水中,会感到温水热;当先将手放在热水中,再放到温水中,会感到温水凉。
一个经常举得例子是:某汽车销售公司的老李,每月都能卖出30辆以上汽车,深得公司经理的赏识。由于种种原因,老李预计到这个月只能卖出10辆车。深懂人性奥妙的老李对经理说:“由于银根紧缩,市场萧条,我估计这个月顶多卖出5辆车。”经理点了点头,对他的看法表示赞成。没想到一个月过后,老李竟然卖了12辆汽车,公司经理对他大大夸奖一番。假若老李说本月可以卖15辆或者事先对此不说,结果只卖了12辆,公司经理会怎么认为呢?他会强烈地感受到老李失败了,不但不会夸奖,反而可能指责。在这个事例中,老李把最糟糕情况――顶多卖5辆车,报告给经理,使得经理心中的“秤砣”变小,因此当月绩出来以后,对老李的评价不但不会降低,反而提高了。
不知从何时开始《致加西亚的信》以及《没有任何借口》此类的书开始畅销,从而以执行力的名义把责任全部推到被领导的一方,用军队的方式来要求自己的员工,不讲条件,没有借口,从不说不,来完成领导所给的任务。真不知道资本家有什么资格这样要求自己的员工,作为军人为祖国献身后至少能够成为烈士,家人受到抚慰,而资本家在员工连跳九人的情况下却在论证这个数字其实低于全国平均自杀率的。
然而大多数的领导的的确确喜欢没有借口的下属,也不喜欢听到说不。所以当一个任务下达的时候,或者一种方案被指定的时候,不要直接说不。
领导毕竟是领导,能做到现在的位置,毕竟有强于你的地方;领导毕竟也是人,提出的方案也可能是拍脑袋拍出来的,也许会有不合理性。
然而需要记住的一点是:上情下达可以拍脑袋,下情上达则要用证据。
当你认为领导给的任务或者方案有问题的时候,除了上面提到的喊难在前之外,一定要加一句,"我试试看"。
当你经过实验测试,有数据或者日志足以证明你的结论的时候,可以尝试说,"我觉得可能有些问题"。
然而有时候简单的测试并不能够证明的时候,或者领导再次坚持的时候,那就上手做吧,只是别忘了做的有扩展性一些,能在多种方案之间较容易的切换,并将领导坚持的方案暴露出来。当测试人员发现问题的时候,将比你说不有效果的多。这时候领导关心的便是如何Bug进行修复,不在纠结到底应该采用你的方案还是他的方案了,当然此时你千万不要得意洋洋的指出领导原来方案的不合理性,你不指出,领导其实是从心里认可了你的方案的,并且为你记了一功,如果你指出来,就适得其反了,大部分领导绝不会表面承认自己的错误的,可能会再次坚持自己的方案的合理性,并把因此带来的项目失败或者delay记在你的头上。也许大家清晰的记得曹操不承认"鸡肋"的退兵禁令而杀杨修的故事吧。如果你觉得你的领导气度大于曹操,那么再次恭喜你。
也许你会说:这不是浪费了一个过程吗?其实不然,你先做了领导的方案,然后改Bug的时候应用了自己的方案,在领导眼中,你是一个好的下属,好的执行者,你是做了两件事情的。
如果你坚持做了自己的方案而没有优先用领导的方案,则会有以下风险:
所以,毫无怨言的接受任务——让上司圆满,如果有问题,让Bug来说。
在外企,一个常说的词叫"professional",何为职业化,一个通俗的说法就是,该干什么的时候就干什么,当然无论干什么,永远不要忘记,你是一个程序员,一个基层的程序员。
前面说过,除了写程序,外企的生活是丰富多彩的,健身,按摩,小食品,饮料,旅游,年会,各种协会等等不一而足,而且外企的氛围是相对宽松的,你可以在任何时间尽情享用,没有人会有意见,当然是在你完成了工作的基础之上的。
然而永远需要记住的是,写程序才是你的天职,而多彩的生活是公司对员工的福利,是一种施舍,说的不好听一点,公司花钱请你来是写软件的,不是让你来娱乐的,公司让你娱乐是给你脸,你总不能给脸不要脸吧。话说的难听一点,但细想想,话糙理不糙,试想如果项目经理每次来巡查的时候都看到你或大声的说笑,或尽情的饮食,或玩桌上足球的时候,其内心不会有上面的想法?只不过是一种优雅的方式表达出来罢了。比如走到你的面前,微笑着问:"你的feature做的如何了?","Bug XXX有没有结果?",顺便强调一下你所做的模块的难度和重要性:"你做的这部分比较有难度,是对你能力的挑战",并在最后来一句:"慢慢做,不着急"。你可知晓此彬彬有礼下面的深意?经理两次到你这里来说"不着急"的间隔越短,其实是说明这件事情越着急的。
所以说在办公室的大部分时间,你都应该低头写程序,谈话也要讨论技术问题,娱乐要适度,除非你想被人觉得工作量太少,不努力,或者你有足够的信心自己负责的模块不会出问题。
另外在开会的时候,你由于任务太多,总是盯着自己的笔记本默默写自己的代码吗?不要这样,这样会让组织会议的人感到不被尊重,会让领导觉得你对项目组不够关心,不够投入,甚至不够忠诚。开会的时候,就要像开会的样子。你可以提前阅读材料来准备几个问题;你可以支持,补充或建议组织者的方案;你可以在外国人面前举出证据来维护中国团队的利益;实在没招,你至少可以记会议记录,会后发meeting minutes。这样你给人的印象永远是你是有想法的,你是有贡献的,你是关心项目的,你是热爱团队的。
一个Team出去吃饭,或者出去旅游的时候,你是得意忘形的放开手脚去玩吗?甚至脱离团队和要好的朋友去逛吗?不要这个样子。余世维在《经理人常犯的11个错误》的演讲中曾经说过,出去Team building,对于员工来说是休息,而对于经理来说是工作。的确,你要清楚资本家为什么会出钱让员工去做这些和工作看起来无关的事情?为什么要大家一起出去而不是每人发钱自己去玩?当然是要增加团队的凝聚力和归属感,为共同合作奠定基础。既然对于经理来讲是工作,难道你不应该有责任辅助你的经理做好工作吗?在大家一起吃饭的时候,如果冷场,积极的起一个话题吧;在经理提出玩一个团队游戏的时候,率先支持,主动去做吧;在外出旅游的时候,帮助你的经理订餐馆,清点人数,摄影照相吧;当爬到山峰,或者年会表演节目的时候,喊出增加团队凝聚力和影响力的口号吧;在活动结束后,整理资料,相片,发出email来进一步增加活动的效果吧。这样你就是有组织能力的,辅助经理成功的,有良好影响力的,也是热爱团队的。
这里提到了团队聚餐中的话题问题,这里顺便提一下,当然根据不同的Team的氛围以及当时的情况而定,话题的优先级依次如下:
最后,如果你在学校中是演艺明星或者体育明星,那么年会的表演以及团队之间的比赛也不是你表现英雄主义的地方,而是体现团队意识的地方,也是交流沟通的好机会。所以不妨在节目中介绍一下自己团队的产品;不妨在角色设定的时候劝说core team的人加入扮演一个牛人角色(欢乐可以一定程度上冲淡马屁味道);不妨申请印有团队logo的运动衣;不妨在运功过后和高层一同边走边聊(比平时冲到高层办公室里面好的多的机会);不妨去敬HR一杯酒,被她们多灌几杯(HR的办公室是个敏感区,平时很难交流感情啊);不妨去维护机房的团队那里敬酒以感谢他们的工作,去前台那里敬酒以夸赞她们的服装,发型等(他们对你来说真的很重要,想想几百人的团队,前台和运维都只有两三个人,还是那就话,当供需相差很大的时候,价格都会越来越高)。这将使你成为一个受欢迎的人。
做一个好的基层程序员,除了完成自己的本职工作以外,也需不断增加自己的影响力,这既是你的品牌,也是日后加薪升职不可缺少的因素。
增加影响力主要有以下几种方式:
在增加的影响力的前面,我加了一个形容词——适当。要有和你的level相匹配的影响力,小心功高盖主啊。外国人有时候会强调leadership without authority,然而如果你果真这样做了,多半会招来同事的敌意(你凭什么指手画脚的啊),也可能会招来你的lead心中的隔阂(没有authority你都能够lead啦,给你authoriy还不反了天了,你lead,那我干嘛),所以还是不在其位,不谋其政的好。
当同事完成一项功能或修改完一个Bug的时候,你是否给过真诚的赞誉,帮其增加上述的影响力?
当同事帮助你解决了问题或者提出了优秀的方案,你是否公开表示感谢,让群众和领导都知晓?
当领导问及你做的模块的时候,你是否有意隐瞒了他人的功劳而突出自己的贡献?
当会议的时候,你是否会处心积虑的故意反对竞争对手的方案,虽然你觉得其实这真的是个好方案?
当发现其他人的Bug,Code reivew的时候发现他人的设计缺陷,你是否幸灾乐祸的大声疾呼,唯恐他人和领导不知?
你是否在同事,领导,HR的面前非议他人,嘲笑他人的设计,褒贬他人的缺陷,鄙视他人的技术,虽然的确你是此方面的大拿?
当你有幸获得一份荣誉的时候,你是否先谢国家(公司),再谢政府(团队),再谢领导,再谢同事?
给别人光环吧,别人也会给你光环。
一个只顾自己头上光环的人,以及一个别人给了光环而不知回报的人,最终都会孤立无援,难以开展工作,是涸泽而渔的做法。
我们必须承认的一点是,每个人都有自己的长处,也有自己的短处,每个模块都有优美的地方,也有不尽人意的地方,你有你擅长的技术,别人也有别人擅长的方向。如果大家互相向别人的头上套光环,则外人和领导看到的会多数是光环,从而大家精诚合作,团队蒸蒸日上。如果大家全部互相揭疮疤,则外人和领导则看到的会多数是负面的,从而大家互相猜忌,整个团队都没有希望。
历朝历代都有权臣,权臣之间必有党争,派别之间多知道对方的优势,也掌握了对方的把柄,如果派系之间相互合作,则大家都会壮大,皇帝则不会知道下面的暗流涌动,然而英明的皇帝多挑拨派系之间的关系,使他们互相揭露对方的把柄,从而下情上达,从中制衡。
我们也会经常看到,当一家公司的高管离开他的老东家而投奔新东家的时候,公开场合下,此高管多会十分赞誉在老东家中工作过的时光,赞誉工作过的团队,赞誉老东家的产品和项目,赞誉自己在老东家取得的进步,而老东家也多会给与此高管十分积极的评价,肯定其作出的贡献,其为公司带来的价值,其培养出的团队。其实如果两者之间如此的默契,如此的互相满意,就不会发生跳槽的事件了,既然选择分道扬镳,则其中必有隔阂,只不过互相心知肚明,各不言明罢了。这样无论对公司的发展,还是对此高管的职业生涯都有好处。试想,此高管必然是清清楚楚公司的优势劣势,公司也明明白白高管的功过是非,就像一对生活了很久的夫妻,既知道你能言善辩,也知道你鼾声震天,既知道你玉树临风,也知道你不爱洗澡,如果在公开场合互相指责,甚至谩骂,岂不家丑外扬?
很多程序员宁愿多写程序,也不愿意写report,觉得十分麻烦,而又无聊。
但是Daily report,weekly report真的非常的重要。
首先report可以帮助你管理自己的时间。在时间管理中,我们知道,人总是有重要而紧急的事情,重要而不紧急的事情,不重要而紧急的事情,不重要而不紧急的事情之分。你是否总结和思考过自己真的总是做了重要而紧急的事情么?人们总是忙啊忙,从早忙到晚,天天加班,其实每天都在处理各种各样的突发紧急的事件,使得计划一拖再拖,而忽略了对自己很重要的事情。试想想吧,你原来计划过要读的书有多少是真正去读了的?你在朋友面前畅谈的宏图大志有多少是真正实践过的?你还记得儿时的梦想吗?你是一直向着自己想要的方向在不断的进步吗?时间管理的原则告诉我们,每个人应该有一张思考的床,不要穷忙、瞎忙、无心的忙。写daily report和weekly report不完全是应付上司的,也是自己思考总结的过程啊。我还记得最初每周定计划的情况,当一周过去进行回顾的时候,我当时吓了自己一跳,我原以为自己一直过的非常的充实,却发现计划做得事情真的只做了大概三分之一,照此下去,如何进步啊。有兴趣大家可是试着制定一下计划,越详细越好,工作方面的可以写给上司看,学习,社交等方面的可以自己写给自己,有时候多少有些身在江湖,身不由己的感觉。
其二report可以帮助你总结自己的进步。当天做的事情一般人还是记得的,一个星期做的事情,大概就模糊了,半年前做的事情,则很多细节都忘记了。很多的时候,当我们每年对自己进行年终总结以期待明年加薪的时候,当我们想要跳槽来总结自己忙碌了几年的成果的时候,往往会发现,report到用时方恨少啊。面试的时候,对于有经验的人,往往会将项目经验问的很细很细,当时你为什么选择这种方案呢?系统的速度如何一步步改进提高的?你发现你可能说不清楚了。平时尽量多详细的记录一下自己每天的进步吧,这可是影响到你薪水的闪光点啊,对方的公司正等着一个牛人来提高他们的性能呢,你明明取得很不错的结果,只是忘记了自己做了哪些改进,岂不可惜啊。
其三report可以帮助你增加自己的影响力。如上面所述,report不但可以让自己知道自己做了什么,也可以让上司知道你完成了什么,如果写到wiki上,还能让更多的人知道你的成绩。
其四report可以作为维护权利的证据。这一点前面也说过,作为初入职场的基层,作为相对美国来说弱势的中方,证据是非常重要的。当项目delay的时候,你如何证明你是提前schedule完成的?当性能遇到瓶颈,你如何证明你曾经高效且没有做过改动?在写程序的时候,我们知道,当context不在的时候,唯一能够定位问题的,就是log了,report就是你工作的log。
其五report可以使你的上司对你放心。很多初入职场的基层,埋怨上司过多的干预自己的工作,总是有事没事的过来问,做的如何了?有什么困难?这段时间在做什么?有时候这种询问会打断你的思路,着实让人困扰。其实情有可原,你刚来,不放心是可以理解的。如何做到你办事,他放心是你的责任。当有阶段性成果的时候实时报告自己的状态,每天写daily report报告自己的进度都是让上司放心的办法。一个有意思的现象是,当你一天一封daily report向他汇报的时候,他却不怎么过来干预你的工作了,甚至到最后daily report他也不怎么看了。
做到此一点,方能主动向上司汇报你的工作进度——让上司知道,对上司的询问,有问必答,而且清楚——让上司放心!
初入职场,激情高涨,多喜欢将自己满负荷运作,无论是需求来自领导还是来自同事,都不好意思拒绝,最后弄得自己疲于奔命,焦头烂额。
其实工作中,是应该给自己留有一定的buffer的,一方面,可以在项目有了突发事件的时候,不至于临阵慌乱,尚有调整和处理的时间,不至于第二天demo,当天晚上代码才完成。另一方面,要做好以上所述的事情,还都是需要buffer的,绝不能够低头干个不停。
另外,公司是要对项目负责的,而自己的职业前途,却只有自己负责。除了每天忙于项目之外,总要有一定的时间进行自我进步,从而提升自己的价值。前面也说过,有的人面试的时候,仅仅知道项目中用到的知识点,而相关的却很少知道,从而使自己的职业生涯既不广,也不深。所以日常工作中,留有一定的buffer来将知识点变成知识面是很重要的。
所以如果你真的很忙,真的很累,要勇于喊出来,而不要默默的承受着,当然这不是让你装忙装累,而是向周围散发出一种信息,就是你已经负荷较满了。这样你的领导在安排任务的时候,会综合考虑,你的同事在向你提出需求的时候,也拒绝的合情合理。当然你不能总是喊忙,总是不出成果,如第一点中所说,result永远是最重要的。而总是喊忙,总是能出成果,确是一种工作努力的表现。有的人认为,只有相互说话才叫沟通,其实不然,殊不知自言自语,凝重的表情,同样是沟通的手段。
也只有在有buffer的情况下,你才能做到充实自己,努力学习,才能了解上司的言语——让上司轻松,你才能够做到对自己的业务,主动提出改善计划——让上司进步。