程序员职业发展的要命Bug

管理员账号

2018-07-13

我们在工作中都会犯错,有些错误的破坏力惊人而猛烈,一夜之间就能爆发,造成严重后果,摧毁你整个职业生涯,但其实更危险的是那种悄无声息地影响你很多年的错误。一些倒霉家伙一直对老板忠心耿耿、任劳任怨,多年后对比自己与当年同级伙伴的境地,不禁发出这样的疑问:“为什么我还在这个位置?我做错了什么?”本文就来捋一捋这些会影响你职业发展的问题。本文选自《大师访谈录:成就非凡的软件人生》。

人如其行,如果你做的是无聊、愚蠢、乏味的工作,最终可能也会成为一个无聊、愚蠢、乏味的人。”
——Bob Black

人 的 问 题

软件开发团队的事情都和人有关。即使是软件团队生产出来的代码,也主要表达的是人的思想:你的同事是人,面对的老板是人,下属是人,客户也是人。这就是为什么在软件行业,如果你与人打交道发生问题时,就会遇到无穷无尽的麻烦的原因。

1 . 自断后路

总体而言,你能否把事情做好、得到好的评价和适时的晋升,依赖于同事能否与你携手合作在每年或每个产品周期中有抢眼的业绩。当你专注于一个项目,以完成任务和达到里程碑的目标为导向工作时,总有一些时候,很想绕开那些制造障碍的人。你很可能想向他们的上级反映情况、给他们施加压力,喝令他们改变行为,或者想办法不与他们一起工作。这是一种错误的想法。人们对有些事情总是能记得很长久,特别是对于那些认为自己曾经被轻视的经历。如果你之前得罪过某人,在未来的项目上,或者在你做提案、需要得到正面评价、加薪、加奖金、晋升时,或者只是需要他们搭把手时,将很难获得他们的帮助与支持。时间一长,问题会变得越来越严重:如果你每年都得罪几个同事,那么10年后,将有20个人完全不愿意与你共事。要注意,有些人现在是你的同行或者后辈,以后就有可能是你的经理、你的员工或者你需要依靠的人。职业发展是一个长期的过程,时光流转,人们的职位也在变化。所有的人,包括你在内,都在发展变化中,但各自有不同的轨迹和速度。与他人的关系处理得越好,越能保护你的职业发展。

2 . 聊别人的八卦

不要以为你背地里说的话别人不会知道。如果一年内你在100次闲聊中说了同事或领导的坏话(这还只是一周两次的频率),假设有90次的谈话内容没有外传,那么剩下的10次聊天内容会被传出去,最终对你的职业发展也会造成严重损害。不论是在公开的还是私人场合,发表言论时都要心怀善意——即使你面对的是笨蛋和懒虫。最后,我们来看一个小故事。

SuperDuperTech公司的程序员Curly对Moe的表现不满,于是向其他同事吐槽:“Moe真是一个白痴——他就是不会编程。因为他,我们肯定没法按时完成项目。我们大家每天加班,可那个笨蛋既蠢又懒,每天4点半就走了。”这番话不论Curly是对经理说的还是在同事面前说的,总会传到Moe的耳朵里。即使Moe不知道是谁说的,要想找到源头并不难。对于这种八卦,向来没有不透风的墙——公司里的八卦也不例外。现在,Curly需要弥补自己受损的职业形象,而她也损害了与Moe之间的关系,将来她想要得到Moe的帮助全凭运气了。更有可能的是,Moe将想办法报复Curly。

从道德层面讲,与同事和睦相处非常重要,说别人闲话而获得的一时好处,一点儿都不值当。如果你实在想要发泄不满,向上说而不是向外说——向你的上级说,而不是向你的同级同事说。对这些敏感信息,你的上司更容易保守秘密。

3 . 牢骚满腹

大家都讨厌唯唯诺诺、溜须拍马的人,比这种更让人讨厌的是不停抱怨的人。人们一般认为,建设性的、善意的意见有助于推动工作进展,但经常抱怨只会让同事和经理讨厌你。在任何组织中都有很多需要解决的问题,肯定能找到合理的方式来反映问题。首先,当你提出一个问题时,请务必至少准备一个备选的解决方案。提出建议,就能将你从问题抱怨者变成问题解决者。其次,准备好主动为你的这个解决方案提供帮助。如果你只知道抱怨,不想办法解决,而且袖手旁观,你一定会遭到大家的谴责。

其中,最阴险、丑陋的行为是打同事的小报告。这种行为通常来自两种错觉。一种情况是,打小报告的人可能认为通过贬损别人能抬高自己。这完全是胡扯。事实上,管理者都非常厌恶这种背后中伤的行为,对告密者产生负面印象。还有一种情况,打小报告的人可能会错误地认为他的领导不知道到底发生了什么,所以他需要汇报,以免不称职的同事继续做些不专业的工作。任何称职的领导通常都了解所有员工的长处和弱点。请记住,领导没有和你谈起过你的同事专业上的不足,并不意味着他对此毫不知情。你肯定不会希望领导与同事讨论你在专业上的缺陷。不要将领导的礼貌与不知情混为一谈。

不论怎样,告诉领导有人不称职或者工作做得不好,都不会给你带来什么好处。如果真的情况紧急需要让领导知道,请试着改变一下你说话的方式,不要从人的角度而是从项目的角度进行阐述。例如,不要说“小张没有做好测试”,而是说“我很担心我们的测试覆盖率。”

4 . 提太多的改进建议

任何人或组织都不可能在完善自我、重构和新举措上投入太多精力。对这些事情应该花适当的精力去做,投入多少才算适量则取决于包括公司文化、团队的业务压力等在内的许多因素。不停地提出新思路和改进方案既不会有什么帮助,也不会得到赞赏。相反,你应该每年只提几项,这样就不会让周围的同事觉得讨厌,而且你还可能在这些方面做出更大的贡献。

提了一两条建议之后,观察领导的反应。如果领导对此反应强烈并立即开始着手落实,就是一个好迹象,表明你的建议受到高度重视。如果你提的点子确实不错,却被忽略了,那么你的领导可能根本就不是一个想改变的人。如果是这样的话,你继续提供“建设性意见”不仅可能导致类似的结果(也就是无疾而终),你的领导可能很快把你看作是头号麻烦。这时你就该停止提新建议了。

5 . 缺乏管理团队的能力

作为初级员工,很多工作要靠个人能力来完成,比如设计、需求分析、编码、单元测试或产品方案等。但是当你晋升之后,你的职责就要慢慢变成调动团队的力量把事情做好,不管是否有人明确告诉你这一点。你的一部分工作是领导别人,但更多的工作是要清除障碍并推动议程,使团队尽可能高效地运转。如果你仍然单打独斗,没有领导团队的能力,你的职业生涯可能会就此止步。

简而言之,就是不要指望别人来按照你的步调走。每个人都忙于处理各自的问题。要想获得事业上的成功需要高超的协调能力,激励团队成员按照各自的流程完成大家共同的目标(当然也是你的目标)。要让人力和资源为你所用,说服他们这么做利于完成任务。仅仅这些也还是不够的,记住一点,其他人的工作也是业务需要。你需要将你的需求和他人的目标达成一致,给他们一些回报作为补偿,商定统一的交付时间表,定期跟进以确保工作进度;而且,也许最重要的是,要公开感谢他们的努力,共享荣誉。如果他们因为帮助你而得到很多正面反馈,那么在未来也会更愿意帮助你。

6 . 决策不当

商业生活中总是有许多棘手的问题,这些问题涉及道德、人员管理和战略。如果你遇到的每一个问题都汇报给上级领导解决,这基本上是在宣告你不具备自己做决断的能力。相反,如果所有艰难的决定都是你自己做的,你很有可能无法承担一些严重的后果。如何取得平衡?花一点时间来了解企业文化和决策过程,就会明白哪些问题需要汇报给上级领导解决。然后,培养自己对问题做决断的能力,做决策时要顺应公司价值观。如果有些问题确实需要提交给高层商讨,要有所准备,在汇报问题时可以提出自己的建议,供领导们参考。如果在有关技术和非技术的问题上总是做出错误的决定,你将很难被委以重任。这种形象一旦树立,就很难改变。

团队的问题

要完成重大任务需要整个团队的努力。只有最琐碎的任务才可以由一个人独立完成。你可能是一个和善的人、一个勤奋的员工、一名出色的计算机科学家,但是没有团队,你就不过是千军万马中的一个小兵。作为一名孤独的士兵,你保卫的领土和肩负的责任都很有限。

1 . 缺乏团队精神

软件开发是一项团队活动。团队精神能从根本上区分学校里的软件作业和专业的软件开发。不是每个人都能平稳地从学校过渡到职场,过渡不好的话,肯定会在多方面对其职业生涯造成损害。高级职位通常会留给那些团队工作出色的人。一定要与同事和睦相处,并帮助他们。如果可以的话,多承担些工作。通过各种方式——成为团队的信息源,贡献自己的生产力,或者提供新工具,来为团队出力。必要时,为团队利益牺牲自己的利益。

2 . 吝于赞美

在工作上取得了成绩,如果你只知道表自己的功,而不提及项目组同事的功劳,这些话肯定会传到同事那里,让人对你产生负面的印象。你可能不是故意的,但你没有提及他人的贡献,团队的其他成员会觉得你抢了他们的功劳。人与人的关系一旦破裂,就很难修补好。

我初入职场时就遇到过这样的事。当时我还只是IBM的一个初级员工。我们开发了许多演示程序。我的一位同事,他也是一名初级程序员,很明显地使用了我开发的一个功能。这个功能能将图像块传送到鼠标在屏幕上点击的位置。我当时很高兴与人分享自己的成果,他很快就将我的代码整合到自己的演示里,并开始在IBM内部展示他这个令人印象深刻的演示程序。屏幕块传输是一个小功能,但是相当直观,在演示中效果很好。遗憾的是,这位同事告诉大家是他自己开发出了这个演示应用程序。我非常沮丧,由于缺乏应对此类问题的成熟方式,几天之后,我去见了领导并告诉他是我开发了这项功能。最后,这件事对我的同事造成了很坏的影响,可能对我也造成了不好的影响。

回首这件事,如果当时我私下和那位同事谈一谈可能更好。我本来可以找到一个更委婉的方式谈这件事,比如在一个友好的非正式场合里,而不是在人背后当成一个不得了的问题提出来。在大家一起午餐时随口提一句即可,也不会弄出这么大的麻烦。很显然,我们两个人都没有处理好。如果这位同事能如实说明是谁的作品,不仅我会感觉更好些,而且他作为团队的一员复用团队的代码资产而不是重新造轮子,也会获得加分。我俩本应是从中获益的。有趣而奇妙的是,热情洋溢地赞美别人不仅是表达友好的行为,也绝不会影响别人认可你的贡献。你对队友的这些褒奖会让他们更愿意认可和宣传你的卓越贡献。这样人人都是赢家。

工作效率的问题

软件开发实际上与人以及由人组成的团队有关。在这些团队里,每个人都各司其职。团队带来的好处是实实在在的:当我们步履不稳时,会有人扶助;当我们摔倒时,会有人拉一把。但是如果我们一直拖后腿,对团队的损伤就会大于贡献。能力差的队员会长时间坐冷板凳,被派去做些无关痛痒的活儿,最终可能被团队裁掉。仅仅友善、聪明、有团队意识是不够的,你还必须是一个实干家。

1 . 写的代码中缺陷太多

代码缺陷的种类繁多,成因各异,逻辑错误、需求遗漏、运行时性能不佳或对项目目标理解错误都能导致代码缺陷。作为一名程序员,如果大家认为你编写的代码里总是有很多缺陷,你可能没有机会升职为团队领导,负责团队中的设计、规划和管理。高级技术职务也与你无缘。在我的团队里曾有一位开发人员非常善于创新研究和团队协作,但他写的代码总是有缺陷并且不能按时完成。他告诉我,他真的很想从事软件研发团队的管理工作。我向他解释说,只要他写的代码缺陷太多并且不能按时完成,他就不可能负责监控整个团队的代码质量。在另一方面,这类问题的解决方法其实是相当机械的。原先懒散的程序员可以变得勤奋一些,开发出更完整的设计、遵循编码标准、审查逻辑流程,并进行更完整的单元测试。你不可能让某个人一夜之间变得更聪明或者更有创造性,但你可以教他们软件研发质量的艺术。如果你有代码质量方面的问题,应该有办法解决。

2 . 工作效率低

员工为老板工作,并因此得到酬劳。员工的生产效率是以不同方式来衡量的,因为每个人的工作方式都不完全相同,人与人之间的差别很大。有些人是多产程序员;有些人通过创新或领导团队做出成绩。然而,有一个毋庸置疑的事实:如果你在软件开发的某个重要方面没有产出——创新、代码开发、领导力等——你的职业发展将会走下坡路。在职业生涯中,大多数人的生产力会有相当大的起伏。生活境况的改变,以及重大事件的发生,如家人去世、婚姻状况变化、严重的疾病或者搬到新家等,都会暂时使人分心,影响生产效率。幸运的是,这一系列的事件似乎对生产效率周期性波动的影响不大,职业生涯中的几个低点也不会对你造成多少不利影响。然而,几年间生产效率一直低迷就会有负面影响。补救措施很简单。首先,确保你喜欢自己的工作,因为如果你很讨厌它,就很难提高效率。其次,要了解自己,知道自己最擅长哪些方面。想办法去那些需要自己长处(编程、创造力、团队领导能力、组织管理或战略规划)的岗位工作,这样你的工作会更有成效。最重要的是,努力工作。

3 . 总是延期交付

没有几件事能比总是延期交付更快地毁掉你的职业生涯。这条准则适用于程序员、测试人员、策划人员、营销人员和管理人员(记住,管理者要承担员工失误导致的后果)。在研发方面,这个问题特别令人苦恼(而且十分普遍),因为软件开发周期本身就存在着巨大的不确定性。软件开发很复杂,并且很难管理。总而言之,年复一年的延期完成工作会对你的职业生涯产生不利影响,并且肯定会妨碍你得到项目管理的职位。项目总是延迟的话,你肯定没法得到晋升。

4 . 时间分配不当

时间分配的类别无非四种:紧急与非紧急,重要与不重要。高效人士会把他们的时间用于重要且紧急和重要但不紧急的任务上。

在紧急但不重要的任务上花太多时间,是一个相当普遍的问题。不要花太多时间阅读无用的电子邮件,参加没必要参加的会议,接听没必要接听的电话。很多这样的事情是紧急的,但不是很重要,它们消耗你的时间,让你没办法做该做的重要事情,最终导致你的职业发展停滞不前。一定要定期检查自己的时间分配方案,确保时间都花在重要的任务上。把时间花费在重要事情上,生活会有更多乐趣,而且这样安排时间的人通常会得到别人的高度认可。

5 . 专注于编外项目和臭鼬工厂项目

编外项目,有时也被称为臭鼬工厂项目(skunkworks project),一直是许多伟大软件创新的起源。这些项目可能孵化出一条新产品线或一家新的公司。在职业生涯中,花些时间做这些事情是有益的,特别是当你有办法让这些项目开花结果时。有些公司明确鼓励员工参与这些项目。但是,由于它们不是公司的常规业务,在这些项目上投入时间会被看成占用了正常工作时间。如果你的大部分时间都花在一个失败的臭鼬工厂项目上,你的职业发展也会受影响。要确保这类项目别占用你超过10%到20%的工作时间(具体比例取决于所在公司的企业文化)。

成长的问题

1 . 技术能力下降

这可能是不言而喻的事情,但在软件行业,你必须及时更新技能。说起来容易做起来难,在这一行,短短几年间知识就会更新换代。幸运的是,虽然知识的细节方面变化很快,但是有关操作系统、算法、数据结构、编程语言和开发流程的很多基本技能不会那么容易过时。当你的技能退化时,就会发现自己像是飞速发展的高科技世界里的一只恐龙。如出现这种情况,你的事业将开始严重倒退,除非你已经晋升到一定的职位,技术能力不再是最重要的指标。但我认为,在软件行业只有极少数职位对技术的要求不高。无论你是做技术支持、销售或市场营销,都要懂得用IT行业的行话来交流。紧跟潮流的关键是始终用前沿技术,并定期花时间做些“重要但不紧急”的事情,学习新的技能。

2 . 过度的自我推销

自我宣传是必要的。同事和领导不知道你的贡献,他们对你就没有什么深刻印象。虽然用一种适度且适当的方式宣传自己的成就很重要,但要注意不要越过适度宣传和自吹自擂之间的界限。人们讨厌以自我为中心的家伙。如果你对自己宣传得过了头,会给别人留下一个自私自利的自恋者的印象,与通过自我宣传带来的好处相比,有点得不偿失。请一定要谦虚、适度地做自我推销。

3 . 自我推销时抓不住重点

遗憾的是,我们大多数人对自己的成绩都没有正确的认识。有时候,我们认为很有价值的,别人却不太看重;我们不太看重的,别人却认为意义深远。想象一个场景,我们最喜欢的程序员Moe负责开发公司旗舰产品的新功能。Moe很高兴有这样的机会,他用简单的设计开发出了一个出色的功能。编码工作量很大,一共有2万行新代码。Moe对自己的设计非常满意,高兴地向领导和其他人介绍。但他们只是礼貌地点头、微笑,坦率地说,他们没觉得设计有那么好。这个设计是不错,但没有那么令人印象深刻。Moe真正的成就,其实在于他在短期内写的2万行高质量代码。如果他再敏锐些,就能意识到他的工作效率和产品质量才是真正的成就,但他却只看到了自己的设计。Moe发出了错误的信息,没有得到他应得的褒奖。

4 . 一直待在不重要的岗位上

每个人都需要接受挑战、成长,找到职业发展机会。在多数明智的公司,经理的任务就是要帮助员工获得这样的机会。不过,有时这些机会并不能顺理成章地获得。如果你一直在一个没有战略意义的岗位任职,你的职业发展将会受影响。不要指望任何人来拯救你——如果你自己都不寻求关注,别人为什么要为你说话?应该为自己争取一个有前途的岗位。要有礼貌,但要确保自己是有发展机会的。

基本原则 vs. 偶然事件

我们都会犯错,都会失败。事实上,我相信如果每年你没有干砸几件事,可能就是还没把自己逼到极限。幸运的是,这个行业对错误是包容的,因为每个人都会犯错。归根结底,关键要看你的长期表现。如果你平时工作效率高有创造力,与团队成员协作得很好,完成过重要任务,所有的偶发错误将被原谅和遗忘。

本文摘自《大师访谈录:成就非凡的软件人生》

本书是一本软件工程师的职场成长手册,作者总结了自己近20年从事软件行业的经验,为读者们奉上学校里不教而在日常工作中也无处可学的职场知识。如果自认为八面玲珑滴水不漏,可在本书中看一下纯技术角度的成长指南,让自己的两条腿一样强壮,健步如飞!

读者评论

相关博文

  • 软技能:工程师也能主导年终奖

    软技能:工程师也能主导年终奖

    管理员账号 2018-07-24

    小编说:要想在职业的道路上走得更快更远,除了练好技术,还需要具备诸多软技能。本文选自《大师访谈录:成就非凡的软件人生》。 不管你在哪家公司工作,如果公司还算不错,那么想要在事业上有所发展,最重要的就是出色地完成工作,有团队精神,能创...

    管理员账号 2018-07-24
    58 0 0 0