成为首席软件工程师的一些经验
成为首席软件工程师或技术榜样既是一个伟大的责任,也是一个很好的职业机遇,但中间的过程却是艰辛的。
成为首席软件工程师或技术榜样既是一个伟大的责任,也是一个很好的职业机遇,但中间的过程却是艰辛的。
对自己和自己的工作负责,与尽可能地推卸团队的责任是有着很大区别的。
许多软件开发人员做起自己的工作来很是得心应手,却在晋升到首席开发这个领导职位时,因为对所涉及的额外责任没有准备而焦头烂额无所适从。
作为一个有着多年职业经验的首席软件工程师,我想向大家分享一些我认为有用的东西。
你为什么想成为一名首席软件工程师?
在你想要处理成为首席软件工程师产生的问题之前,首先你得成为首席软件工程师。
而在你成为一个首席软件工程师之前,首先你需要回答为什么。
你为什么想成为首席软件工程师?
这是自我的追求吗?
是因为你觉得可以赚更多的钱,或者拥有更高的声望吗?
还是说,是因为你想关心、领导和激励大家更好地完成工作?
你可以是因为自我的追求,也可以是因为想赚更多的钱或者爬上更高的地位,但如果你想获得成功——并维持这个职位——那么你的动机应该基于是为了帮助他人,领导他们取得胜利,并激励他们尽可能地做好工作。
如果你的目标只是金钱和权力,那么你不但只能是一个糟糕的首席软件工程师,而且也不会喜欢这份工作,因为额外的工作和责任会渐渐湮灭你获得新职位的欣喜。
我这么说不是为了打击你,有野心有抱负是没有错的,关键是要适度,要有正确的方向。
要想成为最有效率的首席软件工程师的途径是让你的团队更优秀,然后各种奖励也会随之而来。
而将奖励和声望放在第一位,只会让你的团队受到不良影响。
成为首席软件工程师
好,那么你真的想要成为首席软件工程师吗——即使它可能是一个吃力不讨好的工作,甚至可能还没得加薪?
如果你的答案是肯定的,那么下面我们就来说一说该怎么做。
首先,你必须认识到,即使没有正式授予称号,你也可以成为首席软件工程师。
领导地位不是挂上头衔就能具备的。
leader之所以是leader,是因为有人会追随他们,而不是因为他们被任命了某个职位。权力可以被授予得到,但领导力却只能靠自己。你可以是一个没有领导力的权威,也可以成为未经授权的leader。事实上,一些最有效的leader,其实却并没有被上级授予任何权力,因为他们并不需要。
按照这种说法,成为一名首席软件工程师更多的是要赢得团队的尊重和信任,这比什么都重要。
为了成为首席软件工程师,你需要证明你不仅具有技术能力,还具备促进关系、鼓励、构建协同感,以及启发大家的能力。
一个真正的leader,无论任何形式,都能够把大家团结在一起,拧成一股绳朝着共同的方向前行。
下面这些特点是我认为一个好的技术领导人所应该具备的:
- 负责
- 充满动力
- 擅长技术
- 谦逊
- 有坚定的信仰
- 良好的沟通技巧
- 可靠
如果你想成为首席软件工程师,那么你需要专注于开发这些特性,还需要提升你的软技能。
而最优秀的首席软件工程师不但能指点我们正确的技术方向,还能启迪我们成长,让我们更好地完成工作,并且能做到将团队利益牢记于心,不徇私,能够让我们放心信赖。
最成功的leader能帮助大家更加成功。
如果你想成为首席软件工程师,那么首先你可以想象一下你想要什么样的团队leader,然后将自己当成那个人去做。
忘记政治博弈,设法为他人给予有用的服务,现在就开始采取行动,不要颐指气使,也不要自以为是,保持谦逊和真诚的态度来帮助团队中的其他成员。
成为首席软件工程师的意义
如何担任首席软件工程师以及如何成为首席软件工程师其实是同一件事,所以,下面的建议不但适用于那些已经成为首席软件工程师的登顶者,也适用于那些想要成为首席软件工程师的攀登者。
现在我们就来说一说首席软件工程师最重要工作…
…让他或她的团队取得成功。
不光团队要取得成功,而且尽可能地也要让团队中的每一个个体取得成功。
如果你想成为一名优秀的首席软件工程师,那么你的主要工作——也是你最重要的事情——就是尽可能多地让你身边人取得成功。
如果你能做到这一点,那么你就成功了。
但是,该怎么做呢?
以身作则
一开始一定要以身作则。
不要指挥别人怎么做,要做给他看。你希望别人做什么,那么首先你自己先做,然后让他们明白为什么这样做是有益的。
不要威逼利诱,也不要争得面红耳赤,如果你真的想激励大家,那么你先做给大家看,用实际行动和得出的结果证明给大家你的方法是最好的。
如果你想要团队中的开发人员写出更好的程序,那么首先你自己的程序要写得更好,并且为此你付出的努力有眼可见。只有这样,你制订的编码标准才能令人信服。因为他们看到你的程序,会受到鼓舞,会心甘情愿地写出和你一样质量和可理解的程序。
如果你想要团队中的开发人员编写单元测试或实践测试驱动开发,那么你最好不但能先做出表率,还能用具体的结果表明你所推荐的方法是最好的。这需要言出必行和脚踏实地,光是传教式地说你听到或读到所谓最好的方式是行不通的。
如果你想要团队中的开发人员能够开发他们的技能和个人发展,那么你最好能够做个榜样。你应该比别人花更多的时间用于学习新的东西,与其他人分享你所学到的内容。你应该写一些博客分享你的学习进展,并鼓励大家一起来学习。
问题的关键是,如果你希望大家能跟随你,那么你必须先带头,以身作则。
敢于承担责任
当leader犯错的时候,谁该承担责任?
对,是leader。
当团队成员犯错的时候,谁该承担责任?
对,还是leader。
如果你想成为首席软件工程师,那么你必须敢于承担责任,不仅要敢于承担自己的错误,还包括团队其他人犯的错误。
我知道这一点很多人打心眼里是不认同的。我也知道,当我建议大家为别人的失误承担责任时,大多数人是嗤之以鼻的,但我依然要实话实说。
如果你不愿意承担责任——我的意思是全部的责任——不愿意承担团队的失误,那么你就不应该成为首席软件工程师。
不过这并不意味着你就不能成为一个好的团队成员。也不能说明你不能为团队的成功做出贡献和帮助别人进步。
我只是说,如果你想成为首席软件工程师,那么你必须做好准备——心甘情愿地——承担团队失败的责任。
一个好的leader会欣然接受这个责任。
一个好的leader敢于一力承担责任,保护团队免受指责,这样团队成员就可以自由地冒险,这样团队成员就不会浪费多余的时间为别人擦屁股。
就像我之前说的,领导职位并不适合每一个人。
哦,现在又多了一个承担责任。
猜猜团队的成功会归功于谁?
leader?
No。这是一种约定俗成的单边协议。
是的,leader是团队成功的主要负责人,但他或她从不将功劳占为己有。
相反,一个好的leader会将成功归功于团队。
还记得我有说过成为首席软件工程师是一个吃力不讨好的工作吧?
促进交流
一个良好的首席软件工程师不仅要为团队的行为负责,而且还应该充当与其他团队、管理人员、业务人员及其他任何需要进行交互的人的代言人。
这并不意味着,首席软件工程师就是唯一一个与团队外的人交流的人,但首席软件工程师往往是负责传达团队的愿景和想法给他人,特别是非技术人员的人。
作为首席软件工程师,你得能清楚有效地与非技术人员交流技术解决方案,同时避免冲突。
这不是一件容易的事,特别是当你要说的是坏消息的时候。人们往往喜欢迁怒于报信者。
与“业务”进行沟通的最佳方式是,首先确保自己能够清楚地了解正在构建的软件的具体进展,以及正面临的技术挑战。
你越明白这是怎么回事,就越容易传达给别人。
这意味着,你需要不断地去了解大家都在做什么,以及面临着什么样的挑战,并且在解说的时候你还需要转化成非技术术语。
这需要练习,但却是首席软件工程师必备的技能,因为大部分正在构建的软件需要与利益相关者和客户进行沟通。
特别是当你需要指出为什么“业务”的某个点子不可行或不是手头问题的正解时,情况变得更加困难了。
人是很容易屈服于权威之下的——然后要么承诺交付不了的东西,要么同意一个不认同的解决方案——当然也有人敢于大胆反对那些站在你技术优势对面的任何人,但你得坚持立场无所畏惧。
优秀的首席软件工程师能够理解业务需求,能够与决定或立场背后的非技术推理产生共鸣,然后提出一个明确,理性的论点,以促成提议的解决方案。
优秀的首席软件工程师知道什么时候可以妥协——可能不是最优的,但会避免不必要的冲突,也知道什么时候应该坚定立场,为了不让团队不堪重负或不承诺那些不能交付的任务。
优秀的首席软件工程师能促进团队和其他部门间的交流。
帮助大家做到最好
首席软件工程师对团队造成的最有利的影响是,他们的存在能够提高其他开发人员的执行水平。
如果你想成为一个好的首席软件工程师,那么你不仅需要不断促进自己的个人发展,还必须激励其他人和你一起进步。
作为首席软件工程师,你应该每天花时间学习和阅读最新的技术和趋势,以便于尽可能地跟上技术技能当前的发展脚步。你应该确保你对于你的团队正在使用的技术理解得最为透彻——如果可能的话——这样你就可以成为你的团队的可靠支持,你就可以自信地引导他们往更好的技术方向前进。
同样地,你应该鼓励你的团队成员开发和提升他们自己的技能。你应该给他们资源来做到这一点。你应该分享你正在学习的东西,并指引团队成员以帮助鼓励他们专业化地成长。
你应该尽一切可能来确保你的团队具备成功所需的要素,同时你还应该表现出你就自己而言非常关心他们个人的成功和成长。
你的关心会引起他们的重视,更高水平地完成工作任务的可能性也会更大。
成为一个首席软件工程师并不是一件容易的事
我在这篇文章的开头就提到,你必须得问问自己你是否真的知道成为首席软件工程师意味着什么,或者你是否真的想成为一名首席软件工程师。
这工作不容易,甚至可能是吃力不讨好的,它可以涉及到很多的牺牲,但如果你关心其他人的成功,并愿意投入时间和精力来帮助大家做到这一点,那么你有潜力成为一名伟大的首席软件工程师。
但是,如果你只是追求更高的职位,或者是可以指挥别人怎么做的权力,或者如果你的动机完全是基于成为首席软件工程师之后的加薪,那么你会发现自己在这个位置上步履维艰。
所以,好好地想一想,你是否真的想成为首席软件工程师,如果你已经下定决定的话,那么要谦虚,要敢于承担责任,要尽你的力量使你的团队——以及团队成员——尽可能地成功。
发表回复