程序员该如何选择成长路径

想走专家之路的程序员,成长路径如何选择?这些年走来有一些认识和思考

软件技能模型

我把编程技能所需分为四个层次:

  1. 应用层:所从事的开发岗位直接相关的编程知识
  2. 传输层:编程语言的特性和使用,建模思维,设计模式
  3. 基础层:包括数据结构和算法,操作系统,编译原理,计算机网络等等
  4. 数学层:高等数学,概率轮,线性代数,离散数学

因此可以形成这样一条链路:

应用层 –〉传输层 –〉基础层 -〉数学层

反向走

数学层 –〉基础层 –〉传输层 –〉应用层

现实的问题从应用层向下传递,哪一层涉及到了,就为解决该问题提供支持,解决的结果向上汇合给到上一层,然后在应用层给出代码。这像极了安卓开发里的触摸事件传递。

这四层构成一个橄榄型,大量的时间和精力需要投入到基础层和传输层环节。

时间投放

大家在工作之中,不知觉的把大部分时间放在应用层,其实这样不好。而是要把大量的时间放在传输层和基础层,甚至是数学层上,超过的一半的时间放在基础层内容的精进上,尤其对于想走通技术专家之路的程序员更当如此。

  1. 现在你所从事的软件开发岗位,比如后端开发;职业生涯中后期你从事的领域变更了。过早的把时间投放在早期的应用层,将失去了快速迁移和深入的研究的潜力

  2. 你所在公司的项目,不一定能存活下来。把时间放在应用层,如果项目失败了,虽然代码写完,你的技术收获还在,但是项目的溢出利益没有了。大概率的精力投入在基础层,这样你的收益将会贯穿于整个职业生涯。

  1. 程序员的高阶状态是自己造轮子和写框架,能解决其他大多数程序员搞不定的问题。做到和大多数程序员不一样靠的是什么?那就要有大多数程序员所没有的东西,那是什么?基础层和数学层的能力。

小结

回顾过去,有2年左右时间,我把超过一半业余时间投入到了项目本身和应用层学习上,走了弯路。

希望本篇内容能带给你有益的思考。