程序员的发展之路
有话说丨程序员的职业道路是死路一条?
↑ 点击上方“ 法本 ”关注我们
在中国我发现一个不幸的现实,那就是大多数软件开发工程师(程序员)都会在30岁左右遇到职业发展的瓶颈并不可避免的迷茫和衰落。在中东和美国我都有认识50岁以上的程序员朋友(头发花白),在中国40岁以上的程序员至今我一个都不认识。而这样的情况就我认识的程序员朋友和技术岗位朋友的反馈来看,往往是在没有太多准备的情况下不期而至,让自己在职业发展上措手不及。我的第一期专栏文章就想跟大家(主要是给我司的2000多名开发工程师)聊一聊程序员的职业发展问题,以及对未来发展的几个重要岗位的正确预期,一切都是希望大家为职业道路的发展做好思想准备。
大约3年前,我在全球最大的科技博客站点techcrunch看过一篇文章“It’s all about age”。其中提到有研究称:“在未来的日子里一个程序员最高效最有创造力的时间窗口会越来越有限”。这对于程序员这个岗位、对于整个IT产业、对于整个现代经济都是一个很现实和很严肃的问题。
● 一个程序员的职业发展道路应该是怎么样的?
● 程序员在职业上有哪些选择,对不同的职业道路应该做好哪些准备?
● 对于这些选择应该抱有什么样的期望?
可能不少人会说,你这个问题就是个废话,混得好的不就是转型当经理(管理者)或者高层领导者,要不就创业搞个吊炸天的APP。但其实我遇到过不少技术牛人、牛逼程序员当了管理者后并没有更高的绩效表现,这个绩效最重要的一个KPI是---自己不开心,你会发现你提升了薪酬待遇,却没有提升工作成就感,最终没能有更好的发展。也许你会说有钱就可以了,成就感这个东西又不能当饭吃,但它最终会影响你的长期绩效表现,会带来个人和组织都双输的结果。所以回过头来问,是不是大部分程序员都清楚的明白一个管理岗位的具体素质要求和工作要求是什么,或者说自己对于管理岗位的期望是什么,管事、管人、管业务到底有什么区别,我们都有自己的Manger,那到底中层管理者和高层管理者有什么区别,自己的期望和职业计划到底应该怎么规划?
这里想提前说的是,不管什么职业道路大部分人都会在某个岗位和发展区间上停住,并直到退休。也有小部分快速的跳级发展,管理岗位并不适合每一个人,你对职业的需求在不同时期也不同。在20多岁的时候你可能很讨厌成为一个管理者,40岁的时候却绝对拒绝去写代码。当然,如果抛开收入因素,也许很多的需求刚好相反。尽早的了解你可以做的选择所带来的结果,调整好期望,将对自己开心的成长和快速的提升大有裨益。
我们来看看从一个初级的程序员到技术岗位顶端CTO有哪些岗位可以选择,目前的收入区间是怎么样的,以及对这些岗位应该有什么样的预期。
下图是一个程序员的职业发展机会,也可以说是一般意义上的能力路径(当然你可以辞职创业直接做董事长,这不在今天的讨论范围,也跟能力路径关系不大),其中的薪酬区间只是目前市场情况下的一个平均区间,不排除一些土豪行业开的土豪工资。
我眼中的初级开发人员(JuniorDeveloper):
有0-3年开发经验(从学校出来就写程序),能写简单的脚本语言,初步的了解整个应用开发过程,初步的了解通用数据库和应用服务器(Queues, caching等等),对于复杂的应用并不能全盘承接不同的开发步骤。当你刚开始程序员生涯的时候会感觉很抓狂,很多时候会感觉力不从心,怀疑怎么可能有人能够独立完成一个巨复杂的应用开发。但是过不了多久,你迈过了刚才那个坎以后,马上就会开始想为什么自己还没有被晋升为高级程序员,因为找到感觉后的你总认为那些资深的程序员干的活和自己没什么两样。
其实一个初级程序员最大的特点就是缺乏经验,这个特征基本在所有职业的初级岗位中都一样,解决方案就是时间和实践。就算最聪明的、学习能力最快的程序员也需要通过足够的Coding和Debug才能累积出更高一级岗位需要的智慧。在开发工作中,一种公认的能力就是软件建模,这需要你写出足够多的bug,然后debug后才会逐步深入了解建模的价值和其中的精髓。
我眼中的高级开发人员(SeniorDeveloper):
有4-10多年开发经验,能写复杂的应用,深入理解整个应用开发的全生命周期,深入理解各类数据仓库和应用服务器。在软件开发过程中可以承接任何部分的工作。一个资深开发人员最显著的特点应该就是可以独立构建和组织构建整个大型应用。在我看来大多数开发工程师的职业道路中最长的一段路应该就是这个角色,甚至如果你讨厌做管理类的工作,就是喜欢写程序,构建应用,你可以一辈子做一个资深程序员,就像我文章开头说到的,在欧美太多白发苍苍的Senior Developer,但就我的经验来看,并不是年纪越大就越能胜任这个岗位,都怪这个世界变化太快,某种意义上来说,资深程序员主宰了这个世界的发展,这个世界的发展决定了一个资深的程序员在不同的时间点应该是什么样子。
如果能够胜任这个角色,在职业发展上就有很多可能性了,当你足够的了解流行的技术和架构,完全可以成为某些项目、产品和商业组织的技术负责人和CTO。这个时候在人员管理和组织运作技巧上就需要重点的学习和了解了,但不论如何这些岗位真正考验的还是技术能力。
我眼中的开发经理和架构师的画像:
是7-10多年的开发经验,具备了一定的高级开发者的技术技能。如果是开发经理,他需要在人员培养、工作沟通、业务导向意识上有突出的表现,能够具备在后续顺利的过度到中层管理人员的潜质。如果是架构师,则需要在应用架构设计上有更多的创造性思路和提升开发质量的经验,一般来说在特质上不适合转向管理岗位。
如果干了7年的开发工作,你发现管人管事不是你的菜,那么成为一个出色的架构师将是最合适的选择。架构师时不时还是要写代码,但是更多的是对复杂系统和应用框架的设计,然后带领整个团队(初级程序员、高级程序员)沟通和落地执行开发工作。一个软件架构师的责任就是利用多年积累下来的技术智慧去构建一个成功的软件应用和软件项目。当有新的CR进入时,能够知道如何正确的构建和扩展应用架构。
如果是一个开发经理,那么就更多关注在人的事情上了,他能够指导和引导初级工程师和高级工程师,他可能不会直接拥有人事权力,但基本上团队的正常配置与运作需要他更多的意见和决策力,尤其是在代码编写的过程中。
我眼中的中层管理者(manager):
他们可能有很多不同的title,比如说经理、总监、开发经理、产品经理、项目经理等,总之是理论上的程序员的BOSS了,有权限任用和辞退开发工程师,并向高级管理者汇报。
管理线的晋升无疑是比较传统的程序员发展路径,但对于不同的管理岗位来说工作的关注点可能会发生很大的不同。比如,如果你擅长跟踪不同作业领域的推进以及特别能够抓细节,那成为一个优秀的项目经理可能是正确的选择。如果你喜欢研究产品功能和性能,提升产品质量,那可能更适合作为一个产品经理。
当然最常见的情况还是先转变为开发经理,成为产品经理和项目经理的partner, 来协调、管理开发者团队,使得工作顺利推进。但不管什么管理岗位,它都需要更强的人际技巧,沟通能力,处理冲突的能力,并且更多的扮演团队中粘合剂。话说回来,作为管理者不仅仅需要招募工程师和程序员,在必要的时候也需要辞退工程师,这就意味着作为管理者你很难和团队真的成为朋友,如果成为朋友在很多情况下会把自己放在很尴尬的境地。如果一个团队中谁从程序员变成了开发经理或者项目经理,一夜之间其他程序员就会对这个晋升者改变态度和观点。所以说,做管理者是个苦活,并且不太容易会获得别人的感激。
当然,当你带领团队获得成功的那一刻,回报将都向你涌来。
我眼中的高层管理者:
如VP, CTO 或者 CEO,他们是中层管理者的老板,一般向更高层的管理者或者董事会汇报工作。
很显然和中层管理者的不同点就是,高层管理者的责任就是管理中层管理者,但是一般来说合格的中层管理者是不需要被管理的,他们需要被指引。高层管理者需要让中层管理者了解在业务上、工作上、能力上需要前往的方向,并有力的把他们代入和认同这个方向,而不是一点一点的具体事务的指导(当然最好具备指导的能力)。
一个高层管理者的重要职责就是做出更重要的高层次的决策,并激发他的整个团队包括所有管理者沿着决策走下去,确保执行落地,让队伍相信这个决策,相信自己,相信在决策下的每一个任务。
越往上走,就越离你的程序编写越远,到了最上层,那里全是关于人的事情。中层经理还能时不时享受技术工作带来的快感,到了高级管理者必须要花费几乎所有的时间去做关于人的事情:激励、动员、领导、部署。如果这个时候你仍然想编程,那往往不会去做一些核心项目(当然,除非你是bill gates,但不是每个人都会成为比尔盖茨)
高层管理者的任务就是保证公司全体人员都清晰的了解大家的事业方向,都认同这个方向,都能够使各级工作沿着这个方向走向胜利。这是一个貌似很困难的工作,充满了风险,头痛和陷阱。如果你已经干上了,可以推荐去看一本书--《创业维艰》《the hard thing about hard things》, Ben 写的,Ben Horowitz, 不是Ben Xie。
高层管理者不是与生俱来的,他们是被培养和自成长的。当然,可以从初级程序员开始。
最后我想总结一下我的观点。在当今,程序员这个工作和岗位从来没有这么重要过,充满了历史的机遇和事业的机会,在可见的未来,全产业全社会对程序员和相应的高级岗位都求贤若渴,毫无疑问对程序员来说,这是个伟大的时代。因此,不需要那么急着去规划所谓的自己的职业道路,做好手边的开发事,写出漂亮的代码,做出优秀的软件,未来就已经在你的面前。
Ben丨谢鹏
2016/07/26
❶ 点击历史信息,查看更多内容
❷ 长按二维码,关注法本公众号
❸ 复制www.farben.com.cn
在浏览器打开