首先明确什么是底层开发,这个界限很难划分,有人说搞音视频底层编解码就是底层了,但是我们看来不是这样,下面还有rom中音视频模块,再下面还有driver,最后到物理硬件。那么我们姑且这么划分,以是否有大量的的业务逻辑为界限。业务逻辑,一般就是和产品形态紧密连接。以音视频为例,上层播放应用,会接入数据、UI等产品需求。下层播放内核,主要以播放器为中心,对音视频数据注入,解码,渲染。
我们从几个方面看下应用层和底层
1、市场需求
应用层工作机会往往较多,如10个工作,9个是应用层相关。毕竟企业或是公司都是商业化,都是围绕产品开发。而底层是支撑应用层。很多公司也不需要底层开发。因为完全可以用第三方的解决方案。可以在一定程度上节省公司人力物力。所以很多底层开发都是在稍微具有一定规模的公司才有。从这点上看,底层的确有点坑。
2、开发难度
一般底层开发都是用c/c++实现,应用层开发很多都是java/php等这些高级语言实现,不排除一些工业级软件使用c++开发,从上手来说,熟练c/c++相比于熟练java开发,周期会更长。但并不是说java就不好,java能写那么多很棒的应用,这点上c/c++比不上的。但是一般有些特色一点的东西,如在Android平台上,都会放到Native中开发。一方面是效率提升,另外就是安全。
3、发展方向
底层走的是窄、精路线,工作年限越长,对于个人专家能力越有提高。应用层走的是广、多路线。工作年限越长,对软件
架构设计越强,当然也是可以锻炼专家能力。应用层变化多,参与变革的机会会多很多,底层改动少,不是特容易有这样机会。完全看个人兴趣。
4、薪资待遇
这里只讨论专家工程师,不讨论走管理路线的。底层待遇比应用层多,随年限增加,呈趋势。
最后,不要认为底层有前途,做应用层一样有前途。有人说,做底层,看起来很厉害的样子,这些都不是重点。重要是投入进去,精益求精。上层的东西更有意思,更有发展空间。不仅是要面对灵活多变的需求,各种功能,把这些东西组织成一个产品就是非常考验能力的。光谈技术,怎么搭建架构?要做一件事情有多种选择的时候,如何选择?如何保证稳定性?如何保持扩展性?如何不在不必要的地方浪费精力?如何提高开发效率?而底层,眼前的一些细节就已经让人很伤脑筋了,好不容易解决,也没有办法去考虑能不能做得更好更可靠。老做底层,很容易只见树木不见森林。至于收入方面,很可能底层开发因为技术更新慢,所以更容易积累,单纯做技术的时候薪水就容易上升。而做上层,技术更新快,新涌入的人也多,得持续努力学习,开拓视野。做完底层的人,更喜欢做上层,这样既然能领略森林之美,当然是森林更适合你。