回想入行这几年,一直停滞不前,在焦虑/拖延/睡不醒中消耗的大部分的时光,仰望大佬的成就,看着同行的背影越来越远,促使我思考,不能再用没兴趣/没时间/没精力来逃避,从今天开始找到目标,击破障碍,奉行怦然心动的人生哲学,专注/习惯/持续。
觉悟
高效学习,首先进入学习方法的效果,主要区别在于主动性。
The Pyramid Learning / Cone of Learning
Average Retention Rates
Passive Teaching Methods
Lecture 5%
Reading 10%
Audio / Visual 20%
Demonstration 30%
Participatory Teaching Methods
Discussion Group 50%
Practice by Doing 75%
Teach Others 90%
不盲目追求速度和数量,选择效率更高,更主动的学习方法。
学习步骤:
- 知识采集。获取信息源头,多方印证。
- 知识组网。形成体系结构,不是单纯的记忆,要能够推演。
- 技能转换。举一反三/实践/教授
学习的目的:
- 学习不仅是为了找到答案,更是为了找到方法。
- 学习不仅是为了知道,而是为了思考和理解。
- 学习不仅是为了开拓眼界,而是为了找到自己的无知,了解自己。You do not know what you do not know
- 学习不仅是为了成长,更是为了改变自己,改变思维方式,改变与生俱来的垃圾和低效的算法。
知识地图收集
- 从源头获取信息,最新/最酷/最有营养
- 注重基础和原理,基础知识和原理性的技术,是经历过长时间考验的,是智慧结晶。
- 使用知识地图,学习不是为了记忆知识点,而是为了找到知识地图。
方法论模板
持续2-3年,成为领域内之手可热的佼佼者。
WHY
- 技术出现的背景/初衷和要达到的目标或者解决的问题。
- 技术的优势和劣势或者trade-off。
- 技术适用的场景,技术场景/业务场景。
HOW
- 技术组成部分和关键点,灵魂所在。
- 技术的底层原理和关键实现。
WHAT
- 已有实现和他之间的对比,不同的侧重,不同的思路,深入细节。
举一反三
持续强大思维能力。
基本能力
- 联想能力,同一事务的不同用法,相关事物的联系。
- 抽象能力,找到解决问题的通用模型。
- 自省能力,左右互博,思辨能力。
训练方法
- 对于一个场景,制造各种不同的问题和难题。
- 对于一个问题,努力寻找尽可能多的解答,比较优劣。
- 对于一个解,努力寻找各种不同的测试案例,使其健壮。
总结和归纳
越了解,积累越多,越能够分辨细节,感觉参考对外国人的脸盲。
学习的开始阶段,不急于总结归纳/下判断/做结论,保留部分知识的不确定性,保持对知识的开放态度。
把看到和学到的信息,规整/排列/关联好,结构化信息,找到规律/相通/共同,进行简化/归纳/总结,最终形成套路/模式/通用方法。
使用上述方法,联系输出和转述。
实践
- Eat your own dog food.
- Grow up through the pain.
持续不懈
每周 ARTS: Algorithm / Review / Tips / Share
持续一年,形成习惯。
代码阅读
- 了解细节阅读代码,WHAT & HOW & DETAILS
- 了解原理看书/文档,WHAT & HOW & WHY
阅读源代码前准备
- 基础知识
- 软件功能
- 相关文档
- 代码的组织结构
了解代码组成
- 接口抽象定义,接口/抽象定义
- 模块粘合层,中间件 middleware / Promises 模式 / 回调 Callback / 代理委托 / 依赖注入
- 业务流程
- 代码逻辑。业务逻辑和控制逻辑,多线程处理/异步控制/远程通信/序列化都属于控制逻辑,两种逻辑混淆造成代码混乱。
- 出错处理。2/8 删掉处理错误的代码,排除干扰,高效阅读代码。
- 数据处理。倒腾数据,冗长无聊,不理会。
- 重要的算法。索引列表算法/全局唯一ID算法/信息推荐算法/统计算法/通读算法,难懂,但是最具技术含量。
- 底层交互。和操作系统/JVM交互,需要底层技术知识。
- 运行时调试
方法
- 自顶向下,从总体到细节
- 程序流程图 / 调用时序图 / 模块组织图
- 代码逻辑归类
- debug 了解真实发生
面对枯燥的知识
- 一步一步,带着问题学习
- 认真阅读文档
- 用不同的方法学习。看书/听课/脑图/博客/讲课/解决实际问题
- 不被打断
- 总结压缩。表格/图示/笔记/脑图
- 未知关联到已知
- 用教的方法学习
- 学以致用
- 不要记忆
- 多尝试,不怕犯错误