一个课程引发的思考

那天是在等公车的时候,在那刷手机,看到了某个培训机构在某个公众号的上的推文,其主要的目的就是吸引一批想要在职场上继续向上提升的中级Java开发工程师,当然其培训价格不菲,当然我也报了名,不然也就没有这篇文章,但是我要在前边先说明,这并不是一篇喷人家课程的文章,而是通过报名这个课程的学习获取到的关于程序员应该如何进行学习的感悟。

记得当时,我之所以会报名是因为我非常了解我当时的处境——在一家小公司,在做着几个简单的单体架构的项目,这里要说明一下,并不是说单体架构的项目都简单,而是我们公司做的项目是真的很简单,让人看起来就像是一种玩具,然而当时各种公众号以及博客上都在传达着一种信息,传统的单体架构难以承载大型项目,分布式架构以及微服务是大势所趋。于是,我就报名了这个课程,我当时的目的很简单:

  • 了解天天在耳边嗡嗡的分布式到底是个什么东西,搞得好像很高大上一样
  • 积累点分布式项目的经验
  • 未来现有公司如果发展到一定程度的时候我的知识储备能够帮助公司解决问题,当然最终目的还是要实现升职加薪啊~~

其实总结为一句话就可以是,通过加深自己的能力,给自己获取更丰厚的回报。我相信每个报名的人都是抱有这种心态的,而且我也认为这是一种正常的心态。

这个课程到现在为止,断断续续学了有三四个月了。整个学习阶段毫无疑问是及其痛苦的,我分析了一下让我如此痛苦的原因,其主要矛盾主要如下:

  1. 实操性的知识,如Dubbo、Kafka这两个组件,如果你以前从来没有用过他们,你第一次学习他肯定不知道他应该处于一个大型项目中的哪一环。没有业务场景支撑,只能在虚拟机上搭一搭,简单的感受一下这个东西。
  2. 原理性的知识,无法理解深刻,还是以Dubbo、Kafka为例,连用都没用过,去学原理,学完了顶多也就是个了解。没有实践做支撑,你去学原理,总感觉像是空中楼阁,当时去理解这个原理好像是听明白了,但是之后去面试你能确保你能记得住吗,没有真正的用这些原理去解决过问题,这些原理就是纸上谈兵,何谈理解深刻?其实,这些原理性的知识我觉得应该是你对其先有一定的了解,随着在项目中遇到种种问题,你利用这些原理去解决问题,在这个过程中,你就能够对这个原理有更深的理解,从而内化为自己的东西,然后在以后的面试过程中你能够对面试官娓娓道来,不虚不装,展示你的真本领,这才是一个正常的发展之道。然而,现实情况是,你对一个完全不熟悉的框架,应该在项目中去用他解决什么样的问题都不知道的情况下,你要去学他的原理,你的最终目的就是能够将来用这些原理去跟面试官吹牛逼,然后拿一个高薪,是,可能是很多人用这招屡试不爽,也可能这中学习方式对于很多人来说是非常适合的,但是我自己非常明确的是:我没法通过这种方式快速的进行学习,也没法通过这种方式达到我的目的。
  3. 源码,不用说了,到了学习源码这个级别,那就证明你对这个框架的基本原理了解的差不多了,想要理解其主要的业务线是如何设计和实现的。但是你连用都没用过的东西,你去看他源码,不能说一点收获没有,但是你付出的时间跟你所获得的的收获是完全不成比例的。

我每次上课,真的是一直都处于上边的矛盾当中,只不过是没有像现在这样,把这些矛盾都写下来,我总觉得事在人为,我只不过是在给自己不想学习找借口,我强迫自己去看,去学,但是当我发现我花费了大量时间,收效却微乎其微的时候我的心情是及其郁闷的。我甚至有时候会觉得自己可能不适合这个行业, 因为我觉得我明明想要去好好学习这个东西,却总是达不到目标,全都是半途而废,无一例外。

我回想了一下学习这个课程的这个过程,我发现了我自身的一些毛病:

  1. 急于求成,我总是着急赶紧把一个知识点学习完,从而用最快速的时间把所有的课程都学习完,快速的提升自己的能力,然后去换取报酬。
  2. 不愿意动手,并不是不愿意动手,而是觉得不值得动手,不想浪费时间,这点是基于第1点的。
  3. 没有复习,也并不是真的不愿意复习,还是想赶紧把整个课程学完,我总认为做一个软件工程师,最重要的是实践,很多理论性的东西,只有通过实践才能内化成自己的东西,可以说这点也是基于第1点。
  4. 目标不清晰,对于第一次接触的知识,不应该过于苛求自己。
  5. 自我矛盾,在急于求成的前提下,又定下扎实掌握好课程所讲的大多数细节的目标,这本身就是一个矛盾。

以上的一些毛病,我觉得是基于一个我内心的强烈的诉求,用最快的时间涨薪。这种诉求又是基于我现在的生活状况所致,我是一个家庭条件非常一般的人,父母很多时候真的会带给我无形的影响,虽然我知道那是爱,当然这是另外的话题了,不多说了。

基于我的家庭状况,我定下的目标是没有问题的,经济基础决定上层建筑,没有经济基础其他一切都是浮云,这点将是我以后行事的基石,当然君子爱财取之以道,这里想要表达的是别在自己经济上还没有什么能力的时候去追求些不切实际的东西,并不是一心向利的心里。

我最大的错误是采取了错误的策略。首先,急于求成是最大的失败,欲速则不达,对于每一个知识点都囫囵吞枣的看过去,其最终结果只能是对什么都只是个了解;其次,没有认识到学习这个课程应有主次之分,绝对不能一视同仁,对于那些第一次学习的知识,不要定太高的目标,简单了解其使用即可,先对它在整个体系结构中(这里指的是分布式系统)的位置和作用有一个了解,然后在深入到它的细节当中去,不然真的要把自己给学死了。

这里还要反思一下自己,之前明明总结了关于学习知识的层次的一些经验,这里却没有学以致用,如果在开始学习之前就能够将其利用起来,我相信这次的这个课程学习会少了很多的痛苦也会少走很多弯路。

基于以上,应该重新制定一套关于学习这套课程的策略:

  1. 对于当前已经在工作中使用过的知识,如SSM、MySQL,要去掌握其原理,并阅读相关源代码,不能快速的学完就算了,对于这些知识, 一定要亲自动手去写去试,做详尽的笔记,制定一个较高的目标。
  2. 对于从未使用过的知识,只做简单了解,也不用上手实操,对其在分布式架构中的位置和作用有一个了解即可,目标不要定的太高。

另外,还有一个思考就是,以前自己换工作的思维是,先看市场上的公司要求会哪些技术,然后根据自己的实际情况对自己不会的知识进行学习和补充,以求等到学好了之后再去面试,现在看来这样有个很大的弊端:

学习周期时间太长,现公司没有应用这些技术的时候,很难去掌握这些技术,真正的技术的学习是很难通过掌握理论去学习的,一定要有业务场景跟着才行

因此,应该是这样的顺序,先看看市场的大情况是什么样,对那些普遍要求的技术有一定的了解,当然对于你当下正在用的技术要掌握的门清,对那些还没有用过的技术先有个了解,然后掌握这些技术的面试题,之后通过几次面试掌握这些知识面试经验,然后到公司里边去跟着业务去学习技术,这样在这个公司这几年里你又掌握了这些技术,这样你就会越来越好,也打破了那个越没有应用场景技术越差的死环。

你可能感兴趣的:(一个课程引发的思考)