跳到主内容

每天90分钟坚持一年:我补齐底层知识的避坑实录 ​

为什么下班后的学习总是半途而废 ​

工作几年后,很多开发者都会遇到同一种焦虑:业务代码越写越熟,但一旦聊到操作系统、网络、编译原理、数据库存储引擎,就只能停留在面试八股文层面。我也曾买过大量课程,收藏夹里塞满长文,结果三个月后回头看,真正沉淀下来的东西少得可怜。

问题不在于不够努力,而在于把「看完」误当成「学会」。下班后的自驱学习和学生时代完全不同:时间被会议、需求、通勤切碎,精力在白天已经被消耗大半,如果还按线性刷课的方式推进,几乎必然失败。

去年我做了一次实验:每天固定投入90分钟,持续52周,目标是补齐计算机底层知识。一年后,我并没有成为内核专家,但能够独立读懂 TCP 状态机、用 eBPF 排查简单性能问题、看懂 MySQL 一条 SQL 在引擎层的大致执行路径,更重要的是重建了对技术学习的掌控感。

三种学习路径的实测对比 ​

在正式开始前,我对比过三种主流路径,并各自试行了两周。

第一种是「刷课派」:跟着一门体系化视频课从头到尾看。优点是结构完整、启动成本低;缺点是被动接收,看完第三章就忘了第一章,做题时大脑一片空白。

第二种是「啃书派」:直接读《CSAPP》《操作系统导论》这类经典。信息密度极高,但对在职状态不友好,某一晚加班后断掉节奏,再翻开书会有强烈的心理负担。

第三种是「刻意练习派」:以一个可验证的输出为目标,倒推所需知识,在90分钟内完成「学习—动手—复述」闭环。比如不满足于记住「三次握手」,而是用 tcpdump 抓包、画出状态迁移、写一段故意触发 TIME_WAIT 的代码。

最终我采用第三种为主、经典书为索引的混合模式。判断标准很简单:一周后能否不看资料,把知识讲给一个假想的同事听,并跑通一段自己写的代码。

设定本周可验证目标30分钟:精读与提问40分钟:动手实验15分钟:费曼复述5分钟:记录卡点

把一年拆成可以执行的90分钟 ​

宏大目标最容易带来虚假满足感。我把「补齐底层知识」拆成四个季度模块:操作系统与并发、计算机网络、数据库与存储、编译与运行时。每个模块13周,每周只允许一个主题,例如「进程调度与上下文切换」「TCP 拥塞控制」「B+树与缓冲池」。

每周日晚上花20分钟做计划,回答三个问题:本周结束时要产出什么?用什么命令或代码可以验证?哪一章资料只作为索引、不需要通读?这套机制的关键是把输入约束在最小范围,把节省下来的时间全部交给输出。

一个典型的90分钟片段 ​

以学习 TCP 握手为例,我不会停留在背序号,而是在终端里完成一次可观测实验。下面是当时使用的最小脚本:

bash
# 用 tcpdump 抓取本机与示例服务之间的 TCP 包
# -i any 监听所有网卡,-S 显示绝对序列号,方便观察握手过程
sudo tcpdump -i any -n -S tcp and host example.com -w handshake.pcap &

# 主动建立连接后立刻关闭,触发三次握手与四次挥手
curl -s -o /dev/null http://example.com

# 停止抓包,随后可用 Wireshark 或 tshark 分析
kill %1
tshark -r handshake.pcap -V | less

抓包之后,再用 Python 故意制造一批短连接,观察 ss -s 中 TIME_WAIT 数量变化。那一刻,「为什么连接池能降低开销」不再是面试答案,而是可以从内核计数器里亲眼看到的现象。

用 productivity-tools 降低意志力消耗 ​

持续一年的事情,不能依赖每天重新下决心。我用三类 productivity-tools 把流程固化:

  • 日历即承诺:在日历中锁定每晚21:00—22:30,设置为「忙碌」,默认拒绝这段时间的非紧急会议。
  • 任务管理单一入口:用 Todoist 或 Things 维护「本周实验」清单,每个任务必须以动词开头,例如「用 strace 追踪一次 malloc」,而不是模糊的「学内存管理」。
  • 笔记与间隔复习:在 Obsidian 中为每个主题建立一页,包含「一句话结论、实验步骤、卡点、延伸问题」,再借助 Anki 把容易遗忘的命令和概念做成卡片。

工具的价值不在于花哨,而在于减少决策。打开电脑就知道今晚做什么,才可能在疲惫的工作日坚持下来。

进度、精力与健康的长期平衡 ​

前两个月我犯过典型错误:周末突击五小时,想把工作日缺失的进度补回来。结果第三周开始失眠,周一晚上完全不想学习。后来我把规则改为「单日最多2个番茄钟之外的学习量」,周末只安排一次90分钟的轻量复盘,把省下来的时间用于跑步和睡眠。

刻意练习不是透支比赛。我给自己设了三条硬约束:晚上23:30前关灯,每周运动三次,连续两天状态差就主动降载。事实证明,稳定的90分钟远胜于偶尔的5小时。一年52周中,我完整执行了约42周,其余10周因出差、生病或项目上线只做了最低限度复习,但没有一次因为断档而彻底放弃。

允许「最低版本」非常重要。状态差的晚上,我只做一件事:打开笔记,把上周的费曼复述读一遍并录音3分钟。这保住了连续性,也避免了「断一天等于失败」的灾难化思维。

避坑总结:三个真实教训 ​

坑一:只收藏不输出,知识停留在短期记忆 ​

常见错误现象是浏览器收藏夹越来越满,问起某个概念好像听过,但让你手写实验步骤或排查线上问题时毫无头绪。修正方法是强制每个主题产出一个「可运行产物」:一段抓包命令、一个迷你线程池、一页画图笔记。没有输出的输入,在周复盘时直接标记为未完成。

坑二:追求完美路线,迟迟不从第一章开始 ​

很多人花大量时间比较哪门课最好、哪本书最权威,却一个月没有动手。我的修正方式是「两周试跑、快速定稿」:先用现有资料开始,允许中途更换一次,但一旦进入季度模块,就只补充不重学。学习路线的最优解,往往是那个能让你今晚就开始的方案。

坑三:用熬夜换进度,导致三周后全面崩盘 ​

具体表现为晚上学到凌晨,第二天代码评审注意力下降,周末补觉后又产生负罪感。修正方法是把学习时长写入健康预算:固定结束时间、睡前一小时不看源码、用运动恢复注意力。把90分钟看作一年期资产,而不是当天必须榨干的任务。

坑四:笔记越写越厚,复习频率越来越低 ​

初期我习惯大段摘抄,最后笔记变成另一本没人看的教材。后来采用固定四段式:一句话结论、最小实验、真实卡点、延伸问题。每页控制在300字加必要代码,超过就拆页。笔记是为了三个月后的自己能快速唤醒记忆,不是为了感动当下。

一年后回看,真正收获的是学习系统 ​

如果只问这一年学了多少底层知识点,答案可能并不惊艳;但如果问是否具备了攻克陌生硬知识的能力,答案非常确定。我拥有了一套可重复的节奏:拆解目标、约束输入、强制输出、间隔复习、保护睡眠。

下班后的刻意练习,本质上是在有限精力里设计一个不容易失败的系统。每天90分钟并不神奇,神奇的是当你把目标缩小到一晚可以完成、把标准提高到必须动手验证、把节奏调整到可以持续一年,时间会替你完成剩下的复利。

免责声明

本工具与文章内容仅用于学习测试场景,优化建议仅供参考,请勿直接用于生产环境,由此产生的风险自行承担。