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