学习者的窘境:程序员如何有效学习才能有成就感

简介: 学习者的窘境:程序员如何有效学习才能有成就感

我是一个程序员,俗话说活到老学到老,程序员更是一个需要持续学习的职业。那么程序员该如何有效学习?这是一个需要不断思考的过程。今天分享一个我思考的模型,主要讲述如何选择学习的知识及有效学习。


image.png


 图1是一个学习的通用流程,专家或者熟练从业者从具体的行为或者经历进行总结提炼,形成一些抽象的可以复用的框架或者套路,然后学习者通过文字等媒介进行学习,有意识的或者无意识的转化成学习者自己的抽象层知识,也就是我们通常而言的学习的内化过程,再通过这些知识去解决学习者面对的具体问题。


image.png


除了上面的模式,还有一种较为常见的是我们看到或听到一些具体行为,有意识无意识的从中总结提炼出知识,然后当我们遇到类似的情景的情况时,调用这些知识进行解决。如图2


image.png


比如有时候公司出了线上bug邮件通报里面会提到一些解决过程,我就会每次比较关注一下,然后总结下遇到线上问题的排查思路,以弥补缺乏这方面实战经验的薄弱点。


根据以上两个模型,可以很好的帮助我们理解一些场合下为什么会学习效率底下的问题。


在模式一中,我们需要学习他人的知识,然后融合进入自身,再去解决问题。这里有三个要求:


R1. 需要能够融合进去自身,即你可以理解接受


R2. 需要这个知识是能够解决你的问题的


R3. 这部分抽象知识要有价值。


image.png



R1---如果你学习的东西对于你而言太过于深奥,比如你对
bionioaio丝毫不懂,上手就去学习netty,那么你要么没法学会,要么事半功倍,这就是学习顺序的重要性。从图上看就是抽象层的两个圈特别远。


R2---工作和学生时代学习的目的有很大不同,学生时代是要学习课本,而工作是需要解决问题。所以往往我们是先有了具体层的任务才需要去找寻抽象层的知识,所以学习应该搜索式,而不应该是推送式。很多你收到的推送的极其有价值的文章并不一定适合你当下。我是后端程序员,有人推荐给我一个css的经典文章,很大程度上不看是我最好的选择。顺带一提,根据你的工作需要,去找对应需要的知识,做中学,学中做效果会更好。从图3看就是你要学习的抽象知识,和你具体的行为之间是断路的。


image.png


R3---技术里常说深度这个词,是否有价值就是对你而言够不够深,当然是否深是相对于你而言的。比如我订阅过一个技术专栏,可以说是食之无味,弃之可惜。时不时也会有一些有价值的知识,但是大部分时候会感觉飘飘然不知所云,这种情况下,更好地选择是选择知识密度更高的知识。


image.png


如果你是从模式二一些具体行为中,有意识无意识的提炼出了知识然后去解决问题。需要满足两点,第一这个具体行为真的有足够的价值。第二你有这个能力及时间进行提取。比如我在得到听过一个教人高效学习的精品课,有几节老师讲了很多他曾经如何高效学习的例子,但是这对我有用吗?没有。因为都是说他通过刻意练习的方式学习英语的行为故事,刻意练习我曾经听过多次,这些具体行为也很难总结出什么模式来,除非完全相同的场合,否则难以复用。这也就是很多知识付费被批评的原因之一,经常是大段充斥着励志的故事,但是可以对你产生引导的思考却很少。


image.png


需要注意的是有没有价值是因人而异的,比如具体行为中蕴含的信息你从未了解过,那么会解决你不知道的问题,比如听朋友说他在leetcode刷题,然后我也去做了很多道,比如知道了tinySpring,解决了我对spring源码入门的畏惧等等。要明白一些情况下知道就是一种价值。另一种情况是你所要面对的场景和他讲述的场景十分接近,那么也是有意义的。

 

通过上面两个模式就是希望能够让大家明白,学习的内容一定要有选择,要建立自己的信息筛子。


image.png


我们抽象而成的知识有很多其实是无意识的总结而成的,学会有意识的总结会产生数量级上的区别。你总结的知识会在今后解决其他问题的时候产生有价值的帮助,会在你学习其他知识的时候帮助你理解。比如之前做一个系统涉及了很多设计方面的问题,如幂等,业务建模,一致性等。在学习reids主从同步时,就会把redis用到的很多理解和系统设计结合思考,从redis上学到的新的理解,也会在我之后系统设计时候产生指引。

说到这里不知道是否会让人有一种学习仿佛很容易的感觉,但是为什么实际学习和解决问题如此困难呢。真实场景中的问题总是复杂的,需要用到很多的知识,而你需要经历这个知识是什么,怎么用这个知识,什么时候用这个知识,为什么要用这个知识的各个阶段。比如先知道了mq是什么,然后知道了mq如何配置,如何编写代码,然后还需要去考虑mq在什么场景下使用合适,最后还要考虑如果是需要快速开发的需求能不能不用的问题,这也是你对知识认知提高的过程。


image.png


在终身学习的基础上,筛选学习的内容,不断总结,在学习中建立自己的知识体系,新手期学习经典教科书加多实践,熟练期看书加去努力解决更多复杂问题,高手期去遍历知识领域。这样学习效率也会越来越好,在面对问题时才能做到不再杂乱无章的思考,而是很清楚需要用到哪些知识,对问题的解决能力也会越来越强。






相关文章
|
3月前
|
开发者
从代码中汲取智慧——我的编程之旅与技术感悟
【9月更文挑战第24天】在数字世界的迷宫中,代码是指引我们前行的罗盘。它不仅仅是冷冰冰的指令集合,更是一扇窗,透过它,我们可以看到逻辑的严谨、问题的解决以及创新的火花。本文将分享我在编程旅途中的一些深刻体会,从最初的困惑与挫败,到逐渐掌握编程语言的乐趣,再到通过代码解决问题的成就感。我将探讨如何通过编程提升思维能力,以及编程对个人成长和职业发展的重要性。无论你是编程新手还是资深开发者,这段旅程都将启发你去思考和探索技术的深层次意义。
36 1
|
2月前
|
测试技术 开发工具 开发者
软件开发者的自我修养:从新手到专家的进阶之路
本文详细探讨了软件开发者从新手成长为专家所需的关键技能与心态。通过持续学习、注重代码可维护性、掌握版本控制、实施测试驱动开发、进行代码审查、提升沟通技巧、有效管理时间和勇敢面对失败等方面,全面分享了实用心得与建议。适合各阶段开发者阅读,助力职业生涯发展。
|
7月前
|
算法 Java 程序员
程序员职业发展之旅:从代码入门到身体管理的完美进化
程序员职业发展之旅:从代码入门到身体管理的完美进化
|
设计模式 算法 程序员
代码能力,程序员自我修养之基石
提高代码能力不是一蹴而就的事,需要我们不断努力,通过持续学习和练习、参与开源项目、阅读优秀的代码、与他人合作、提升解决问题的能力等方式,提高自己的代码能力,为自己为公司创造价值。
239 0
代码能力,程序员自我修养之基石
|
程序员
程序员成长第四篇:程序员的职业天花板
程序员成长第四篇:程序员的职业天花板
151 0
|
分布式计算 算法 NoSQL
如果说程序员的硬通货是技术,那么软技能是什么?
程序员往往一心扑在编程技术上面,学习编程语言,算法,网络,自己子领域相关的知识等等。这非常正确,也是作为coder的核心竞争力所在,姑且称之为“硬技能”吧。 对于有一个程序员来说除了日常码代码之外,其实也需要很多编程之外的软件能,非专业上面的技能可以更好的展现你的情商,与人合作的能力等。
|
存储 算法 安全
2020年程序员/工程师必看的三本编程书籍
因为新冠肺炎疫情,很多同学都宅在家中,所以有大把的时间进行学习和充电。作为程序员或工程师的你,想要在代码方面更精进一步的话,应该看哪些书?
3707 0
2020年程序员/工程师必看的三本编程书籍
下一篇
DataWorks