学习方法-读书笔记

学习方法

背景

不知道你是不是也有这样的感受:

光是上班累得要死,还要陪对象吃饭逛街看电影,或者送孩子去上培训班,根本就没什么时间学习;

等到哪天好不容易有点空余时间,又因为没有计划,只能随便找本书或者上网水水论坛看看;

就算知道要针对某个技能专门提升一 下,也不知道怎么学才能达到精通水平;

过段时间回头一看,前几周学的东西又忘得差不多了;

跟别人交流一下子就暴露了水平……

学习金字塔

源码不是万能的,不同技术维度要用不同的学习方法。
期望用最少的时间实现最好的学习效果。


学习方法大纲

  • 总原则:10000小时定律,在专业领域不断地提升能力,必须投入足够的时间;
  • 找时间:海绵学习法,10000小时≈10年*365天*3小时/天,需要时间管理方法;
  • 学什么:确定学习目标,三段式分解法,规划学习目标和计划,拆分为可实施的行动;
  • 怎么学
    1. 提升技术深度:链式学习法,自顶向下深入知识点,掌握关联技术;
    2. 提升技术宽度:比较学习法,比较相似知识/技能,掌握单个领域技术;
    3. 提升技术广度:环式学习法,依据业务闭环流程,掌握多个领域技术;
  • 高效学
    1. 学以致玩:Play学习法,通过示例掌握基本使用;
    2. 教学相长:Teach学习法,通过教学强化深入理解;
  • 组合使用
    1. 三段分解法;
    2. 海绵学习法;
    3. 根据学习目的采取学习方式
      1. P5/P6/P7:链式学习法;
      2. P7/P8:比较学习法;
      3. P8/P9:环式学习法;
    4. 采取“Play & Teach学习法”增强学习效果;

加餐三|10000小时定律

10000小时定律为成为专家的必要条件,而不是充分条件。

因素:

  • 环境;
  • 文化;
  • 时机;

关键

  • 精深练习,设定目标->挑战极限->更高目标->更高极限;
  • 激情,短期可以外在控制,长期需要内在驱动,从中获取喜悦和满足;
  • 伯乐,专家经验的针对性指导;

互联网技术领域落地

  1. 寻找伯乐
    1. 团队同事,方案设计->代码Review;
    2. 书籍/专栏/课程;
    3. 业界技术会议;
    4. 线下训练营;
  2. 技术迭代
    1. 基本原理和基础技术是稳固的,例如计算机基础、操作系统、计算机网络和数据结构;
    2. 新技术由老技术演化而来,例如jQuery解决JavaScript DOM编程太复杂Vue等前端框架解决jQuery在大型项目中难以协同和维护

20小时学习法

10000小时定律适用于成为顶尖领域专家的资源投入,但大部分情况下仅想快速掌握一门技能,可以考虑20小时学习法,详见TED演讲:别不信,你只需20个小时,就能学会任何事情!

  1. 分解步骤:把技能最大程度地细分,分成若干小步骤。
  2. 充分学习:基于分解步骤得到的小步骤,逐一练习。
  3. 克服困难:克服练习过程中的各种困难,包括生理、心理、情绪、工具、环境等。
  4. 集中练习:至少用 20 小时集中学习最重要的小步骤。

海绵学习法:找到10000小时

10000小时的含义

  1. 成为专家需要10年

    • 10000小时≈10年*365天*3小时/天,成为某个领域的专家,需要花费10年时间
    • 越早开始,越容易成为天才;
  2. 5000+5000!=10000

    • 专注单个领域,不同领域的投入不能代替单个领域的深入;

    • 领域划分取决于面对的问题和采取的思维方式,而不是工具;

    • 互联网行业的领域划分,建议在三级领域级别投入,例如客户端、服务端

    互联网领域

  3. 工作时间外也要主动提升

    • 工作时间主要在重复做事,提高掌握技能的熟练度,工作1天≈有效提升2小时;
    • 保证每天有1小时主动提升;

海绵学习法

“时间就像海绵里的水,只要愿挤,总还是有的”

  • 早起30分钟;
  • 通勤往1小时;
  • 上班第1个30分钟;
  • 通勤返1小时;
  • 睡前30分钟;
  • 周六/周日2小时;

关键在于坚持学习、养成习惯、积累规模

领域内学习会加速,参照专栏作者,一年阅读技术书籍20本+、非技术技术80本+互联网领域


三段分解法:10年成为大牛

坚持的动力

  1. 事业激情支撑;
  2. 持续正反馈激励

三段分解法

将“10年成为大牛”的宏大目标分解为按周执行的具体事项

  1. 分解等级
    • 中间的等级为关键的里程碑,参照阿里职级
    • 知识和技能存在迭代;
    • 升级需要2~3年;
  2. 分解技能
    • 针对职级要求,选择专项提升的技能,详见职级详解
    • 对照招聘职位要求,例如哈啰普惠-Java资深/专家研发
    • 根据工作内容,调整技术间的提升顺序;
    • 掌握一门技能的周期为6个月;
  3. 分解行动
    • 将技能提升目标分解为具体要做的事情;
    • 通过网上搜索/请教他人,细化为3~5个阶段目标,为期1~2个月
    • 按月计划,按周执行;

后端分解示例

岗位 Java后端开发
等级 P5->P6,2024.01~2026.01
技能 数据库:2024.01~2024.06
Linux:2024.01~2024.06
网络编程:2024.07~2024.12
阶段目标 提升Linux
1.《UNIX环境高级编程》,1.5个月
2.《Linux系统编程》,1.5个月
3.《UNIX网络编程卷1》,2个月
4. Linux常用命令实战,包括tcpdump、ps和top,1个月

链式&比较&环式学习法:多维度提升技术能力

根据学习目的采取学习方式

  1. P5/P6/P7提升技术深度,链式学习法;
  2. P7/P8提升技术宽度,比较学习法;
  3. P8/P9提升技术广度,环式学习法;

链式学习法:提升技术深度

应对面试连环炮/晋升连环问中的技术原理,例如Netty技术->Reactor网络模型->Java Nio->Linux epoll/select


链式学习法应用步骤

  1. 明确技术深度划分:

    1. 根据个人的理解画出领域分层图
    Netty领域分层 关联知识与技能
    编程框架 Netty(Java) Netty参数(ChannelOption.SO_BACKLOG、TCP_NODELAY、SO_REUSEADDR等)
    编程语言 Java网络编程 Java网络编程API
    操作系统 Linux网络编程
    计算机网络 TCP/UDP、IP
    工具&配置 Linux网络调优、Linux网络工具 网络问题定位
    操作系统内核 Linux内核实现 net.ipv4.tcp_tw_reuse和tcp_keepalive_time
    1. 根据固定套路画出细节分层图
    Netty细节分层
    接口设计 EventLoopGroup、ServerBootstrap、ChannelHandler
    设计原理 Reactor、IO多路复用
    设计方案 Pipeline、Zero-Copy、内存池
    实现源码 EventLoopGroup/ServerBootstrap/ChannelHandler等源码实现
  2. 明确学习层数

    1. 领域分层学习3~5层,
    2. 细节分层全学;
  3. 明确每层学习方式:

    • 领域上层偏应用,关注细节和熟练使用;
    • 领域下层偏原理,关注原理和简单应用;
    • 细节上3层详细学习;
    • 细节-实现源码层掌握设计原理和设计方案的关键实现;

比较学习法:提升技术宽度

应对面试连环炮/晋升连环问中的技术选型,例如Redis VS Memcached、MySQL VS Redis、Flink VS Spark VS Storm


比较学习法应用步骤

  1. 用链式学习法掌握一项技术,整理关键技术点表格

    Memcached技术点 说明
    集群方案 数据分片,一致性哈希
    并发模型 多Reactor,多线程
    持久化 无持久化,掉电即失
    高可用 数据分片,丢失部分数据
    数据结构 KV结构,Value为String
    性能 网络IO可以并行,大缓存数据读写效率高
  2. 基于关键技术点,学习另一项同型技术,整理差异思维导图(暂用表格表示);

    缓存技术点 Memcached Redis
    集群方案 数据分片,一致性哈希 主备复制、哨兵模式、Redis Cluster
    并发模型 多Reactor,多线程,libevent 单Reactor,单进程,epoll
    持久化 无持久化,掉电即失 AOF、RDB
    高可用 数据分片,丢失部分数据 主备复制、Cluster分片
    数据结构 KV结构,Value为String KV结构,Value有5种基本数据类型
    性能 网络IO可以并行,大缓存数据读写效率高 网络IO可以并发,小缓存数据读写效率高
  3. 对于差异较大的技术点,整理背后原理及应用场景表格

    差异点 原理 应用场景
    并发模型 Redis基于单进程无锁设计
    Memcached多线程基于CAS锁
    Redis读写大缓存数据会影响其他缓存操作
    大缓存数据读写:Memcached
    小缓存数据读写:Redis
    持久化/高可用 Memcached为缓存系统
    Redis为结构化的KV存储系统
    短时间丢失缓存影响较小:Memcached
    缓存生成代价高,丢失导致严重问题:Redis
    数据结构 Memcached Value为String
    Redis Value支持String、List、Set、Hash、Zset
    简单缓存方案:Memcached
    复杂缓存操作:Redis

环式学习法:提升技术广度

基于闭环的多领域学习

  • 最常见功能环,提升技术广度;例如用户登录的功能环前端(Vue)->客户端(JsBridge、OkHttp)->网络层(HTTP、TCP/IP、DNS)->机房入口(机房部署、F5)->Nginx(负载均衡、反向代理)->用户中心(微服务、MySQL、Redis)->安全中心(微服务、MySQL、机器学习)->数据中心(HBase、Flink)->用户中心->机房出口->网络层->客户端->前端
  • 业务环:业务的处理步骤,提升业务能力;例如用户登录的业务环用户输入手机号->手机号检查->前端安全验证->发送验证码->用户输入验证码进行登录->验证码校验->判断手机号是否注册->安全检测->登陆成功进入主页
  • 流程环:流程的处理步骤,提升管理能力;

环式学习法应用步骤

  1. 画出闭环,标注关键环节和关键内容;
  2. 由自己所在节点向外拓展;
  3. 相关节点细节分层仅学习接口设计、设计原理、设计方案,关键源码必须或者空闲时才看;

Play & Teach:保证学习效果

Play学习法:提升实践能力

Play 学习法通过主动模拟场景,提升对新技能的记忆和理解。

  1. 用链式学习法掌握一项技术;
  2. 列举常见场景,搭建模拟环境;
  3. 在模拟环境中演练常见场景;
场景 任务 作用 备注
入门使用 搭建环境,包括安装、配置、运行
编写Demo
熟悉基本的使用 适用所有技术
核心功能 使用核心功能 熟悉常见的API、工具、SDK 适用所有技术
性能测试 测试核心功能的性能 了解性能表现 适用中间件系统(例如Nginx)、存储系统(例如MySQL)和计算系统(例如Flink)
框架类和业务代码混合,场景复杂,demo测试结果仅供参考(例如SpringBoot、Netty)
异常测试 测试异常场景 全面了解系统边界 更适合独立运行的中间件系统

工作中的应用场景可能出乎意料,而模拟实践是工作实践的预备阶段,更好地应对突发复杂情况。


Teach学习法:提高理解程度

每个人的知识和技能是有限的,关注点不同,因此存在认识盲区,通过教别人来提高理解程度。

写作

  1. 指导原则:工作强相关的核心技术,投入时间写作;
  2. 重点:讲清楚,讲正确;
  3. 步骤:掌握技术整体架构,完善技术点内容;

培训

  1. 前置要求:掌握技术主题,归纳技术内容;

  2. 时间有限 + 现场压力;

  3. 积累现场经验;


加餐四|基础技术的理解

基础能力是指工作任务相关的基础能力,不是整个计算机技术的基础能力。

  • 基础≠底层;
  • 基础≠源码;
  • 基础≠不变;

使用技能图谱提升基础

维度 Java后端开发
工具 Java、InterlliJ IDEA、Postman、Maven
生态 Spring、MyBatis、MySQL
容器 Linux
原理 计算机基础、计算机组成原理、数据库原理

提升基础技术的技巧:

  1. 根据工作内容来决定基础技术的学习深度;
  2. 通过链式学习法将基础技术和实际用到的技术系统串起来;
  3. 跨领域转岗要慎重,要转的话就尽早转;

posted @ 2023-12-17 23:26  夜是故乡明  阅读(60)  评论(0编辑  收藏  举报