![]()
GitHub上有个仓库,作者每天上传一段用C++实现的链表代码,附带的注释比代码还长。点进去看提交记录,最早的一条写着:"今天终于搞懂了node和指针的区别,原来我之前一直在用Java的思维方式写C++。"
这个仓库的主人叫Alex,三个月前还在前端项目里逃避DSA。现在他的README写着:"停止逃避,把最难的部分公开拆解"。
我问他怎么突然头铁了。他说不是突然,是算了一笔账:过去两年刷了47个React项目,面试时却被一道反转二叉树卡住。"那种感觉像健身两年,发现连自己的体重都举不起来。"
为什么公开学习是"作弊码"
Alex的方法不复杂,但反直觉。
别人学DSA关起门来刷LeetCode,他偏要把每个概念翻译成大白话发出来。"解释给外人听的时候,漏洞藏不住。"他试过在博客里写"指针就是地址",结果读者追问"那地址存在哪",发现自己根本答不上来。
这种被迫暴露无知的过程,他称为"用羞耻感驱动深度学习"。
![]()
具体操作上,他把每个大主题切成碎片。不是"今天学链表",而是拆成:节点是什么→指针怎么连→插入时内存怎么变。每个碎片必须能用自己的话讲清楚,才进入下一个。
C++被选为工具,恰恰因为它"难"。
JavaScript把内存管理藏起来了,Python更彻底。但C++强迫你面对malloc和free,面对野指针和段错误。"痛苦是特征,不是bug。"Alex说,"当你亲手搞出一个内存泄漏,再亲手修好,那个概念就焊在脑子里了。"
他的时间线:从逃避到"能解题"的87天
第1-14天:纯语法。不是hello world,是直接上手struct和指针运算。每天结束必须提交一段能运行的代码到GitHub,哪怕只是手动遍历一个数组。
第15-30天:第一个数据结构——链表。Alex的笔记里反复出现一句话:"画图,必须画图"。纸上的箭头从歪歪扭扭到工整,对应代码从抄教程到独立实现。
第31-60天:栈和队列。他开始在解释文章里用类比:栈是餐厅叠盘子,队列是排队买咖啡。有读者评论"这也太基础了吧",他回复:"我就是写给三个月前的自己看的。"
![]()
第61-87天:树和图。突破点发生在第73天,他第一次不靠提示写出了DFS的非递归版本。"那天我意识到,之前记不住不是因为笨,是因为没真正理解栈在递归里的作用。"
现在他的仓库有1.2k star,但Alex说数字不重要。"重要的是我不能再假装懂了。每个commit都是公开承诺,断更就是打脸。"
这个方法适合谁
不是所有人。
如果你需要快速过面试,去背题更快。但如果你和Alex一样,受够了"好像会了,一写就错"的状态,公开拆解可能是解药。
关键不是平台,是"被迫清晰"的机制。可以是博客、可以是视频、甚至可以是对着同事讲。核心只有一条:解释的时候,不能用"大概""差不多"糊弄过去。
有个细节很有意思。Alex的仓库里最早的几篇文章,现在看满是错误。但他没删,只在顶部加了个链接指向修正版。"留着是为了提醒自己,进步不是替换掉过去的无知,是承认它然后覆盖它。"
他最近开始啃动态规划,第92天的commit message是:"今天终于懂了为什么叫'状态转移',以前以为是术语,现在发现真的是在转移状态。"
你学DSA的时候,有没有某个概念是"突然懂了"的?那个瞬间之前,你卡了多久?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.