看到了题主的问题,其实这个问题何尝不是很多软件开发人员的困惑呢。至少我自己如此。
不知道题主和各位知友意识到没有,在任何公司,个人永远就是一枚螺丝钉的角色。当公司的平台越大,工作细分粒度越细的时候,螺丝钉的感觉就特别明显和突出。毕竟,任何公司都是以盈利为目的的团体,而非为了满足个人的兴趣和发展。所以就我个人的经历而言,当你在某个技术领域或者细分点有一定的经历和经验后,你会发现公司以后的新产品基本这个部分的开发依然都是你的活。说的有点空,给题主说个自己的经历。
前面的很多回答中,我都提到自己毕业后就加入了华为,从事嵌入式底层驱动软件开发工作。从最开始几十万行的代码维护,到后面参与新平台的研发,其实一直都在围绕我最熟悉的几块业务单元:CPU相关的驱动(Cache,MMU,Memory),各类定时器,各类锁(Spinlock,rwLock)和DMA功能。哪怕后面我参与了多个项目,用了很多款ARM主控芯片,依然都是在负责CPU驱动,定时器,锁和DMA。从公司的角度看,这么做无可厚非,毕竟你是这块最熟悉的人,换了新的芯片和平台哪怕操作系统,但是你上手肯定是最快的。算个经济账,合算的很。但从咱们员工个人看,日复一日的接触Cache的一二级概念,写透等操作;天天闭着眼睛都能念出定时器在各个平台的实现原理;睡觉都能想到自旋锁的代码,真的无趣,也会感觉工作没有任何新鲜感和挑战性。
这也许就是题主提到的越来越没有精力,也没有成就感的主要原因。毕竟熟悉的东西,不需要太多投入就能产出,公司喜欢看到,但是个人的确没啥太多价值体现。这样的恶行循环后果就是;个人的技能栈越来越单一,越来越迷茫。尤其互联网上天天喊着“程序员35岁天花板”“搞软件的35岁以后怎么办”等等无疑更加加重迷失自己的目标。
和题主分享一下当时我的一些办法,希望能够给题主一些思路。当年我所在的团队已经意识到很多人技术栈单一的问题,一旦遇到新的大项目很难尽快转变。所以得益于当时团队领导的支持,只要你想去承担新的模块,一般都会乐意支持你。所以,在维护原有代码基础上,我又申请开发新的模块,如板级通信协议开发,linux操作系统相关开发(用户态编程)。同时积极转变思维,抓住机会往PL管理方向靠拢。虽然最后还是离开了华为,但是很多基础的技能栈都是当年在那个时候积累下来的,毕竟有压力有动力。
所以说题主可以考虑一下:
- 申请承担一部分新的开发工作,丰富自己的技能栈;
- 六年的时间,其实也可以考虑往管理,测试,质量和SE方向靠拢,看看公司是否这方面的机会;
- 也可以看看外面的机会,是否有能更好的岗位机会和发展空间(对比下薪酬福利和劳动强度,未来发展等因素,毕竟一个程序猿的技术生涯能有几个六年)
- 自主自学一些相关的技能栈知识,为后续1-3进行积累。
后记:
其实对于程序员来说,什么是成就感?解决一个技术问题,通过自己努力构建越来越高的个人技术壁垒体现个人价值等等,都可以让一个程序员越来越有信心和热情。
以上建议,仅代表个人观点,仅供题主参考。不喜勿喷。 |