昨天在知乎上看到一个程序员发展的好问题:
死月是前端领域一个比较知名的IP,之前在大搜车带领整个node团队,出过书写过技术专栏,在业内享有比较高的知名度。
认识死月的同学都对他评价非常高,甚至在这个帖子下面一个阿里P8都站出来认为阿里P6级别是委屈了死月同学:
之所以说这是个好问题,因为它太有共性了。不光是死月同学,我身边带过的下属、认识的朋友就有不少技术特别牛逼,但在公司级别和待遇一直上不去。
成为高级程序员之后,很多人就止步于此,一直得不到提拔和晋升。
今天分享下我对这个问题的看法:
首先技术这个维度做到高级程序员,差距就不会有太显著了。
如果排除阿里内部不公平的可能性(或许也可能是这个原因),可能死月是欠缺在其他技能上了。
比如:沟通表达能力、产品业务洞察力、资源协调整合能力、向上管理能力、技术认知及前瞻性等等。
对程序员来说,高级程序员意味着掌握了下面这些技能:
阿里P6+就是高级程序员,而P7是技术专家。那技术专家和高级程序员究竟还有哪些距离呢?
我想举一个个人的例子来说明这个问题:
18年我放弃几个大厂P8+ Offer选择加入了某独角兽公司,担任技术VP和创新事业部总经理。上任的第一件事就是参与重构整个公司的架构,深入了解了下,我们首先把公司当时的架构画出来了,简单点说就是个大泥球架构:
这家公司的数据库是单库模式,一张表就有几百个字段,简直搞死人。
当时公司已经惨到只要改一个功能就得测试2周的悲惨境地,线上出一个故障技术团队更是惶惶不可终日。
耗时2周我们才完成第一步:深入了解了这个大泥球和对应支撑的业务。
接下来耗时1个月,采用ddd领域设计:
在充分了解业务之后,基于领域模型,我们做了对业务的拆解:
接下来我们最终确定了新架构的六大关键元素:
前端业务模块
支撑业务模块
核心业务模块
中台服务模块
平台服务模块
基础架构模块
基于领域模型的拆解,我们还确定了六大关键元素之间的并列、包含、支撑关系。
然后我们设计出了新的架构:
以上,是我们确定的公司的新的技术架构图,紧接着团队攻坚3个月,按照架构图的设想重构了公司的技术框架。
重构完成后,公司的程序员们再也不用为了一个bug拔光自己的胡子了。
而要完成这么一个大工程,技术能力只是最底层的,更关键的就是:产品业务能力、向上管理、技术之外的软实力、资源协调能力、领导力等等。
在成为高级程序员之后,决定你技术生涯的,更重要的不再只是技术,而是各种软技能和你本身的性格。
关于以上几点,简单给点建议:
1.产品业务能力
程序员需要具备产品业务能力吗?尤其对一心走技术专家路线的人来说,大概率会有这个疑问。
我认为是需要的,因为技术本身只是工具,只有和合适的产品业务结合才能创造真正的价值。
这意味着理解产品业务就非常重要了,拿我在那家独角兽公司的例子来说,如果不对公司业务了如指掌,如何做好架构拆解和技术选型呢?
事实上,大厂的技术专家也都是业务精通者,只有这样才能真正用技术驱动业务。
2.技术之外的软实力
比如你沟通能力很强,比如你就是很会讲(甚至很会写PPT),向上管理能力很强,能够获得更多资源,把一些事情做成,这都是软实力。
再比如你的周报月报写的就是比别人漂亮,清楚的用数据表达了成绩,讲清楚了卡点和重点。
以上这些都是技术之外的软实力,可别小瞧这些,关键时刻它们能加速你的发展。
3.输出&贡献
输出换个词是贡献,就是你用技术能力、产品业务能力做出来的事情。
输出的大小取决于自身和环境,很多人往往重视自身却忽略环境的影响。
简单点说,如果你一开始就在微信团队,哪怕你就是做了一个小模块,可能也输出巨大,反之你要是在一个失败的团队,哪怕是架构师,输出也会被公司认定为非常有限。
成为高级程序员之后,大家要学会选择环境,这里面就是思考和选择的力量了。
另外还有几点技能对程序员发展比较关键,比如向上管理、领导力、沟通表达能力等,这些关键点在前几天分享过一篇,感兴趣的朋友可以看看:雷总:我也想做高级工程师 ! (opens new window)
今天就分享这么多了,程序员的职场之路并不平坦,希望我的每一个程序员读者都能在职场一马平川。
其他原创:
又一大厂员工猝死。。。 (opens new window)
豆瓣9.8!这三本计算机书籍太牛逼了! (opens new window)
雷总:我也想做高级工程师 ! (opens new window)
卧槽,还有985大学在大一上C语言课?? (opens new window)
PS:最近弄了一个新微信号,欢迎大家围观,洋哥是个不错的段子手、鸡汤大师: