这段时间忙于一个系统性的任务,恐怕做不到周更了(事实上,做不到了,距离上篇文章已超过半个月),下半年争取月更。
----------以下是正文
想走专家之路的程序员,成长路径如何选择?这些年走来有些许感触和觉悟。
软件技能模型
我把编程技能所需分为四个层次:
应用层:所从事的开发岗位直接相关的编程知识
传输层:编程语言的特性和使用,建模思维,设计模式
基础层:包括数据结构和算法,操作系统,编译原理,计算机网络等等
数学层:高等数学,概率轮,线性代数,离散数学
因此可以形成这样一条链路:
应用层 --〉传输层 --〉基础层 -〉数学层
反向走
数学层 --〉基础层 --〉传输层 --〉应用层
现实的问题从应用层向下传递,哪一层涉及到了,就为解决该问题提供支持,解决的结果向上汇合给到上一层,然后在应用层给出代码。这像极了安卓开发里的触摸事件传递。
这四层构成一个橄榄型,大量的时间和精力需要投入到基础层和传输层环节。
时间投放
大家在工作之中,不知觉的把大部分时间放在应用层,其实这样不好。而是要把大量的时间放在传输层和基础层,甚至是数学层上,超过的一半的时间放在基础层内容的精进上,尤其对于想走通技术专家之路的程序员更当如此。
现在你所从事的软件开发岗位,比如后端开发;职业生涯中后期你从事的领域变更了。过早的把时间投放在早期的应用层,将减弱了快速迁移和深入的研究的潜力
你所在公司的项目,不一定能存活下来。把时间放在应用层,如果项目失败了,虽然代码写完,你的技术收获还在,但是项目的溢出收益丧失了。将精力投入在基础层,这样你的收益大概率的将会贯穿于整个职业生涯。
程序员的高阶状态是自己造轮子和写框架,能解决其他大多数程序员搞不定的问题。要做到和大多数程序员不一样靠的是什么?那就要有大多数程序员所没有的东西,那是什么?基础层和数学层的能力。
一种实施策略
模型上层,应用层和工作关联最紧密,短期看提高应用层对工作最有助益。基础层、数学层离生产遥远,短期无法增加程序员的生产力,同时面临应用层技术潮流的更迭压力,这种情况如何处理呢?
一种处理思路是:层和层的连接通过线来连接。比如安卓领域,传输层是Java,Kotlin语言,基础层是操作系统,数学层是高数。 先走通这一条线。
另外,数学层的能力对不同领域层是相同的,可以复用。
最后,把握时间。不做其他不相关的事情。
小结
回顾过去,有2年左右时间,我把超过一半业余时间投入到了项目本身和应用层学习上,走了弯路。
希望本篇内容能带给你有益的思考。
生活不止眼前的苟且,还有诗和远方的田野,还有星辰大海。
领取专属 10元无门槛券
私享最新 技术干货