软件行业是一个要求持续学习,终生学习的行业。对于行业的从业者来说,如何有效、高效的持续学习,就是一个经常被讨论的问题。
软件是建立在硬件的基础上的,然而哪怕硬件都已经日新月异了,软件也必须跟上才行。
我们想一下,不用十年前,哪怕五年前,我们用的电子产品,数码产品都是什么,与现在的差异如何?
所以,作为软件行业的从业者,不学习就意味着跟不上时代,要被淘汰。想一想持续学习也是刚需。
既然变化这么快,不学就淘汰,那么肯定是要学习了。但是,学习的具体目的是什么呢?
其实这里说的也就是学习的效果,既然不学习会被淘汰,那么学习了就不会被淘汰了么?究竟学习以后,软件研发从业者被赋予了什么能力呢?
我们看主要有两点:
一是快——天下武功,唯快不破
二是解决问题——从我们从业的第一天起,我们的工作内容就是解决问题。如果你不能解决问题,那么也就失去了在岗位的胜任力和价值。
结合在一起就是:“快速解决问题”。持续学习,不断积累,其实就是为了我们能够随时随地快速解决问题。
有了学习的具体目标,我们的努力就会有方向性了。
说点题外话,为什么学历比较好的小伙伴,更受行业的欢迎呢?比如硕士研究生,本科计算机相关行业等等,另外名校、985、211也都是经常被列在招聘需求中。
这要从我们讨论的学习目标说起:“快速解决问题”。这类学历好的小伙伴,每个学期都在为这个目标努力呀:用一周的时间完成准备期末考试并取得优异成绩…… (你们当年是这样吗?)
真正的原因是因为他们经历了本科、硕士阶段的学习积累,积累了很适合他自己的“学习方法”,这个可以受用终生。
如何去学习?我们主要从三个部分来分析:
抽象的归纳;
空杯的心态;
广度和深度。
我们面临的知识和内容太多了,如何才能学到?如果没有方法,那么每次学习都是疲于奔命,为了学习这个概念而执行了学习的动作,但是没有学习的效果。
这时候就需要抽象了。比如,你是做 Java 后端开发的,想学习更多的开发语言,来学习 Python。那么如何抽象呢?
总结起来就是:你作为一个从业者,你只要进入了行业,就不再是小白。那么学习任何东西,也都不是纯粹的小白了,要利用归纳能力,和已经掌握的现有知识对比,抽象整理“相同点”和“不同点”,利用旧的知识来学习新的知识,同时归纳并反思旧的知识,相互促进。
抽象是一层一层的。
第一层:通过相似的旧的知识,对比归纳学习新的知识,比如 通过 Java/ C++ 学习 Python/C# 等。
第二层:不断的学习新的各种知识以后,对比归纳这些知识的共性,抽象并提取通用层面的知识点,比如 通过 net remoting/ WCF / SpringMVC 学习 SpringBoot/SpringCloud,然后抽象归纳 研发框架的通用知识点。
第三层:通过在工作中从事(辅助)非职责工作的内容,来提取行业的通用知识点。比如 研发职位的小伙伴,通过完成 测试、测试开发、项目管理、需求分析、风险评估、产品规划、运营、运维等其他职能的工作,贯串行业的通用知识点。
其实打通第三层的小伙伴,大多数都是资深级别的从业者,非富即贵(资深架构师或者资深管理者)。
无论学习什么,都要摆正心态在先。如果想学到更多学问,先要把自己想象成“一个空着的杯子”,而不是骄傲自满。
在学习的过程中,一定会遇到一个问题:到底是广度优先,还是深度优先呢?这个不纠结:广度优先。因为没有广度,你根本就没有深度的概念了。
广度学习:一般对应“抽象第一层”:通过旧的知识,来学习类似的新的知识。
深度学习:一般对应“抽象第二层”:通过新的学习,来会到旧的某个知识上,去深挖。
广度和深度的结合:一般对应:“抽象第三层”:通过广度和深度的大局学习,整体上把握行业。
最后想说的是:学无止境。如果没有好的学习方法和学习目标,那么学习无异于大海捞针,还不如不学习,去做点别的更有意义的事情。