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

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

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


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


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






相关文章
|
存储 JSON 监控
grafana/promtail 作用
Grafana/ Promtail 是一个日志的收集、存储和可视化工具。它主要用于监控和分析分布式系统的日志数据。Grafana是一个开源的数据可视化工具,而Promtail是Grafana的一个组件,用于收集和发送日志数据。Grafana/ Promtail具有以下作用: 1. 日志收集:Promtail可以从不同的源收集日志数据,如系统日志、应用日志等,并将其发送到中央存储库,如Elasticsearch、Loki等。 2. 自动发现和标记:Promtail可以自动发现并标记正在运行的容器和主机,以便在收集日志时进行标识和过滤。 3. 丰富的日志格式支持:Promtail支持多种常见
693 0
|
缓存 安全 开发工具
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
1337 0
|
3月前
|
存储 Kubernetes 监控
Kubernetes日志管理:使用Loki进行日志采集
通过以上步骤,在Kubernetes环境下利用LoKi进行有效率且易于管理地logs采集变成可能。此外,在实施过程中需要注意版本兼容性问题,并跟进社区最新动态以获取功能更新或安全补丁信息。
299 16
|
11月前
|
Devops Shell 网络安全
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
525 16
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
|
10月前
|
存储 API 数据安全/隐私保护
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
968 6
|
算法 机器人 中间件
C++的主要优势是什么?
C++的主要优势是什么?
577 1
|
敏捷开发 存储 数据管理
自动化测试框架设计:从理论到实践
【7月更文挑战第13天】本文将深入探讨自动化测试框架的设计原理与实现方法。通过分析自动化测试的必要性和框架设计的基本原则,结合具体案例,展示如何从零开始构建一个高效、可维护的自动化测试系统。文章不仅涵盖框架的结构设计,还包括最佳实践和常见问题的解决策略,为读者提供一套完整的解决方案和实操指南。
|
存储 NoSQL 数据库
Harbor 共享后端高可用-简单版
主机配置包括3台服务器,运行Harbor v2.10.0和Docker 24.0.5,其中10.0.90.68额外运行Postgres+Redis。基础安装配置中详细描述了Docker的安装步骤,包括添加仓库、安装、配置国内镜像源和启动Docker。安装postgres+redis服务使用docker-compose.yml文件,通过`docker-compose up -d`命令启动。最后,安装Harbor涉及修改harbor.yml配置文件,设置主机名、数据库和Redis连接信息,然后运行`install.sh`脚本。
379 3
Vue3.0+ts填坑 warning Unexpected any报类型警告
Vue3.0+ts填坑 warning Unexpected any报类型警告
371 0