本文是学习颜群的《如何快速且深刻的学习一门技术》的一篇记录文章,同时记录下个人一些我的感想,对方的不少观点让我很受启发,虽然本身平时对学习方法有些心得,可是真正去总结时间却不多。缺乏盘点的结果就是任凭本能和生物钟状态,显然这种方法是不可持续的。为了提高我的或团队的学习效率,如何摸索一套针对技术类型的学习方法是很是值得每一个技术人员去探索和总结的
软件开发正处于快速发展的时代,新技术层出不穷,那么在这个突飞猛进的互联网时代做为软件开发者,咱们应该如何保证本身的技术竞争力?咱们今天就来聊一聊,如何快速且深刻的学习一门新技术。html
你们可能都知道,英语考试里面有一个经典的题目叫"完形填空",老师常常告诉咱们,在作完形填空以前,必定要先花一分钟的时间,整篇文章快速的阅读一下,对整篇文章有一个大体的了解以后,若是再去作题,准确率就会提升不少,那我认为这种作完形填空的方法也应该一样适用于软件学习。前端
咱们在学习某一个软件新技术,也应该先快速的去浏览一下这个新技术的主要大体状况以后,再去研究每一个新技术里边到底包含了哪些技术细节,遵循从总体到深刻的过程。算法
各类技术都有本身的模板结构:spring
不管是前端仍是后端框架,这些技术都有一个共同的特色,就是他们有必定的套路可遵循,所以我认为一个比较好的学习方法应该是先无论三七二十一,先快速的去了解一下具体的套路究竟是什么,而后再去深刻研究套路里面的每一步究竟是什么,那这样才能高效的学习一门新技术。shell
那么如何了解套路呢?后端
在学习新有以前咱们必定得先宏观的全局性地快速地了解一下技术的全貌,那这样才能清晰的认识一下,技术里边哪些是套路,哪些是重点,那么这是你可能会继续问,到底应该如何的快速阅读技术的全貌呢?设计模式
这实际上是快速阅读理论知识了,推荐你们能够以快速的跳跃性的方式来查阅一些资料,来看一下执行流程是怎样的,具体细节你能够查阅技术官网,看书看博客或看一些视频教程的。重点要看这些教程里边反复出现的重复代码,通常而言那些频繁出现的重复代码就是这个新技术的技术代码结构了。微信
如何快速寻找新技术的代码结构:网络
这种方法虽然本身了解,可是平时应用并很少,没有刻意练习,更没有造成本能的习惯。这种方法看似囫囵吞枣,其实从效果来看是很是科学的。高屋建瓴,快速的在脑中建立全景图,有了模糊的知识树导航,对后续的深刻学习也好,耗费的时间成本也好,都会有一个初印象,必定程度上能够消除对新技术的陌生感和恐惧感。数据结构
既然是深刻学习,到后期观其大略应该是不够的,脑图比如地图,若是不能深入印在脑子里,实战必然没法作到熟练使用,如何能说是深刻学习呢?
因此前期观其大略,后期必然是烂熟于心。好比学习k8s,你若是不能很清楚的了解其中的7个大的组件用途和关联,那么在运维和开发过程必然会不自信。
技术初体验仅仅只能算一个入门程序,要想真正的掌握,必然还得进行深刻的学习,那该怎么深刻呢?
我认为经过案例来倒逼对理论的理解应该是一个比较好的方法,好比Netty案例库的学习。按照下面步骤搭建完毕以后,我对他的掌握就已经很熟悉了。
深度学习并不容易,这是一个打怪升级的迭代过程,中间必然会由于细节栽倒,从坑里爬起来返回理论,再返回实践验证。这里与其说是深度学习,不如说是对毅力的考验,若是在韧劲上能加上一点兴趣,遇到问题的心态可以更加放松,并乐于挑战,那么这个阶段,估计会倒下一大批同窗。
相信经过前面的讲解,你已经清楚的知道如何快速掌握一门新技术,可是如今还有两个重要问题须要解决:
这里我建议一个方式就是作微服务案例,经过案例来滚动整合先前的技术。咱们能够先用每个技术搭建一个独立的服务,而后再把由不一样技术搭建的微服务整合起来。
举个例子,当你学完ssh的时候,就用ssh搭建一个用户管理的服务,学完ssm的时候就用ssm搭建一个支付结算的服务,学完spring后搭建一个购物服务,再经过rpc技术和其余服务整合起来。
这么作一方面能够经过动手开发的方式来作项目,让咱们对已有的技术进行一个查漏补缺,由于在开发这些微服务案例的同时,你就会清晰的认识到这些技术里边哪些是重点,哪些又是本身当初在学习室给遗漏掉的。
另外一方面,这种微服务项目能够保持咱们对技术的一个新鲜度,好比说ssh,多是你半年前已经实现好了,如今和spring联调的过程当中,你天然也会对半年前的ssh进行一次复习了,那能够解决刚才的第2个问题就是防止遗漏的问题了。
到这里相信你们已经掌握了一种持续学习的方法了,这里的持续自己包含迭代和复习巩固在里面。
强化学习也能够理解为整合学习,是一种复习也是一种补漏,交叉螺旋上升,是在深度学习基础上的进一步巩固和强化,也是对知识的的一种水平延展。若是说深度学习目的是为了理解深入,那么强化学习要达到的是持久化,由于别忘了记忆是有遗忘曲线的。强化得越多,基础也扎实,可能的创新也会更充分。
最后再给你们讨论一下,如何学习技术难点,咱们能够将技术难点分为两类:
像数据结构和算法、设计模式以及架构设计等一些技术,都是较为难以理解的偏理论型。这些技术也常常是处于开发者在进阶路上的绊脚石,那我应该如何才能顺利的跨越这些障碍呢?
我认为能够采用先拆解目标在集中消化的方式来学习,举个例子对于算法设计模式等一些难以理解的技术来讲,尽可能不要想着花一周或者一个月就把他们完全搞定了,而应该先计算一下这些知识的数量,而后用碎片化的时间去学习。
举个例子,假设你想要学习算法,那首先要先计算一下这些算法一共有几个,好比说有30个,那就把这些算法再根据难易程度进行排序,有了这些难易排序以后,咱们就能够用碎片化的时间将30个算法逐个进行攻破。
好比在上下班的地铁之上,在晚餐后的半小时,或者说在睡前的一段时间,利用一些碎片化的时间去学习某一个算法,若是能真正的加以高效利用起来,相信你必定可以在不知不觉里边克服不少难点,从而减小对难点的为难情绪。
若是难点攻克差很少了,那此时就能够采用一个比较集中的时间,将它完全消化掉。
接下来咱们再聊一聊,如何学习篇实践性的难点技术,这里称之为实践,是由于有些技术必须借助于开发工具来追踪代码或者调试才能掌握的,好比说阅读一个框架的源代码,就是学习偏实践型技术的一个典型表明了。
对于偏实践性的技术学习,最主要的就是要在实践以前,内心边已经对要实践的内容有了清晰的基础理论了,实践仅仅是一种揭晓谜底的过程。
这里给你们换一下我当时学mybatis框架时的一些状况吧,当时在我阅读mybatis框架源码以前,我已经对这个框架应用比较熟悉了,所以我清晰的知道mybatis执行的步骤和流程。
如今仅仅是想经过阅读源码,亲眼见证一下它的底层究竟是怎么实现的而已,因而我经过开发工具,经过debug进入的源代码……
固然考虑到每一个人对技术的基础掌握是不同的,每门技术也有很大的不一样,因此不一样的人在不学习不一样的技术可能会存在不少的差别,但我相信这个学习新技术的总体思路是一致的,就能够先经过快速的总体阅读,而后逐步积累逐步深刻,能够说这应该是一个比较不错的学习方法吧
在不少时候开发者的学习时间都是比较孤独的,都是一我的趴在电脑前,必定程度来说,我的学习的气氛其实是没有团体好的,你们能够回想一下是否是在高中的自习室,或在大学的图书馆里的学习系统就比较好呢?
因此若是你有不少志同道合的朋友,那么彻底能够邀请他们来一同窗习,所谓独学而无友则孤陋而寡闻。
若是不方便,你也能够注册一个微信公众号或者说技术博客,再或者也能够将本身学习的一些项目部署在云端,而后开放给你们一同来访问。
总之,重点就是要想办法将本身的学习成果分享出来,让你们一块儿来阅读一块儿来访问,一块儿来监督你的学习,而且你也能够经过留言功能与你们进行一个互动。
若是你是讲师,也能够把本身学到一些知识录成视频分享出去,我相信若是你坚持这么作,除了可以营造自学的气氛之外,还能够将本身学到的基础沉淀下来,慢慢的也会为本身吸引到一批技术爱好者,从而提高本身的影响力,是否是一举多得呢?
今天的分享到这里就结束,最后再总结一下:
以上颜群给的更多的是学习方法,另外左耳朵耗子在《如何超过大多数人》中,从更多维度来探讨学习内容,包括知识来源,学习方法,具体操做三个维度,写的也是让人拍案叫绝。
学习的目的不是为了寻找答案,而是寻找方法,只有方法才是事半功倍的。我常想吴军为何会那么多才,在知识的深度和广度上作到兼得,必定是有过人的学习方法。并经过这种先进的方法持续的学习和积累。从清华毕业后去美国约翰霍普金斯大学留学,而后进入谷歌搜索,成为一名计算机科学家。作投资的同时,又写有《数学之美》 、《浪潮之巅》、《文明之光》、《大学之路》、《态度》《全球科技通史》、《硅谷之谜》、《智能时代》、《硅谷来信》等等。