写在文章开头
作为开发者,不知你是否观察过这样一种现象:面对一门新技术,有的人能够快速完成检索、学习和总结,并将其应用到实际项目中;而有的人工作多年,仍然依赖教程手把手地教学,不具备元学习能力,始终无法做到与时俱进。
所谓元学习能力,即「学会如何学习」的能力。软件开发是一个需要持续学习的行业,技术栈的更新速度远快于大多数职业,一个开发者能否在职业生涯中不断成长,很大程度上取决于其元学习能力的强弱。而造成上述差距的核心原因,正是前者掌握了一套科学的学习方法,后者则始终停留在低效的学习习惯中。
《断墨寻径》是笔者23年左右进行自我迭代复盘时发现的一门宝藏课程,它从认知科学和神经科学的角度,系统地回答了「如何有效学习」这一核心问题。本文结合该课程的核心观点,从软件从业者日常学习场景出发,梳理出一套完整的学习观,内容涵盖以下几个方面:
- 知识与记忆的区别
- 两种学习方式——指令学习与归纳学习
- 学习效果的偏差——欠拟合与过拟合
- 学习材料的有效性——有效实例与有效描述
- 知识的适用范围——限定条件也是知识的一部分
- 学习的瓶颈与突破——材料瓶颈与模型瓶颈
- 大脑的记忆机制与有效训练
- 精细加工——建立新旧知识的关联
- 知识的验证——新例预测与表述转换
本文不会介绍任何具体的计算机知识,而是提供一套学习的方法和技巧。通过提升学习的底层能力,帮助读者在职业生涯中实现更高效的成长。
我是SharkChili,Java 开发者,Java Guide开源项目维护者。欢迎关注我的公众号:写代码的SharkChili,也欢迎您了解我的开源项目 mini-redis:https://github.com/shark-ctrl/mini-redis。
为方便与读者交流,现已创建读者群。关注上方公众号获取我的联系方式,添加时备注加群即可加入。
知识与记忆的区别
什么是记忆
在学习方法之前,我们需要先区分两组核心概念:记忆与学习、信息与知识。
记忆的目标是重现信息,即将已经见过的内容重新复现出来。这类信息通常没有规律可循,只能通过反复强化来记住。典型的例子如:
- 面向对象三大特性:仅需记住"封装、继承、多态"这三个名字
- 事务中 ACID 四大原则:仅需记住"原子性、一致性、隔离性、持久性"及其英文缩写
- HTTP 状态码 200、404、500 含义:仅需记住数值与含义的对应关系
学习的目标则是泛化,即根据已知信息推断出从未见过的新情况该如何处理。与记忆不同,学习适用于情况无限、事先未知的场景,这也是学习方法需要解决的核心问题。
简单来说,记忆应对的是已知情况的重复出现,而学习解决的是未知情况的应对。
什么是知识
与记忆不同,知识的目标是生成新信息、解决新情况,即泛化。这类规律不是凭空产生的,而是通过大量实例,经过实践、归纳、总结得出的。
以算法时间复杂度的推导为例,掌握这类知识的标志是:给定任意一段代码,我们都能推导其时间复杂度。其推导规则如下:
- 定位代码中的循环或递归部分
- 计算循环或递归的最长执行次数
- 用 n 代替次数的最高阶,如
5n² + 3n → O(n²)
例如:
publicvoidfunction(intn){for(inti=0;i<n;i++){// todo something}}这段代码只有一层循环,循环次数为 n 次,因此时间复杂度为O(n)。
而对于双层嵌套循环:
publicvoidfunction(intm,intn){for(inti=0;i<m;i++){for(intj=0;j<n;j++)<