LeetCode周赛排名47万,面试挂掉7场,简历被标记"算法薄弱"——这是@dev_journey三个月前的状态。现在他在GitHub直播写红黑树,2000人围观他调试段错误。
差距不在智商,在敢不敢把自己扔进"公开处刑"模式。
DSA(数据结构与算法)这东西,程序员圈子里有个默契:人人都说重要,人人都在拖延。前端工程师@dev_journey的坦白很典型——"我宁愿再写十个React组件,也不想碰动态规划"。
他的转折点来得有点狼狈。去年秋招,某大厂面试官让他手写LRU缓存,他盯着白板15分钟,最后写了段连自己都看不懂的伪代码。"出门我就查了Offer状态,显示'流程已结束',连拒信都省了"。
从"闭门造车"到"公开处刑"
@dev_journey的解法反直觉:不是报班,不是刷题2000道,而是开博客实时记录自己的愚蠢。
「第一次写链表,我花了4小时才搞懂指针为什么能指向自己。如果没人看见,我肯定假装会了然后跳过。」他在第一篇博文里写道。
这个策略偷师自费曼学习法,但加了层社交压力。每篇帖子标题都是自曝短板:"Day 12:我还是不懂递归的栈帧""Day 23:二叉搜索树删除节点,我写出了内存泄漏"。
评论区成了他的免费助教。有人指出他漏了边界条件,有人推荐《CSAPP》特定章节,还有人直接贴出更优雅的实现。三个月下来,他的C++代码从"能跑就行"进化到"RAII规范、智能指针全覆盖"。
为什么选C++这个"地狱难度"
Python写DSA像开自动挡,C++是手动挡还漏机油。但@dev_journey故意选难的:「Python帮你藏了太多东西。malloc失败怎么办?引用计数循环引用怎么破?你不疼过就不会真懂。」
他的学习路径被切成碎片:
链表不讲"插入删除",先死磕"节点结构体里指针占几个字节"。递归不背模板,先画十层调用栈直到手抽筋。动态规划从斐波那契的重复计算开始,而不是直接上背包问题。
「每个概念我必须用两句话讲给完全不懂的人听。讲不清楚,就是没真懂。」
这种"降维解释"逼他直面模糊地带。比如指针,他最初的版本是"变量存地址",后来改成"指针是内存门牌号,*是敲门动作,&是查门牌号本身"——后者被读者赞了300多次。
公开学习的隐藏收益
意外收获来自招聘市场。某金融科技公司HR私信他:"看了你写的Trie树实现,比很多三年经验的人扎实。来聊聊?"
他的GitHub仓库从3个star涨到1400,其中一半是"收藏了等于学了"的围观党,但剩下的一半真的在提PR、改bug、讨论复杂度优化。
更微妙的变化在心理层面。「以前看到Hard题直接跳过,现在会想'这能写篇好文章'」。他把恐惧对象变成了内容素材,焦虑感被好奇心稀释了。
数据侧面印证:他的LeetCode提交记录从月均8次涨到日均3次,通过率从31%提到67%。不是量变引起质变,是"有人看着"的压力重构了优先级。
这套方法对谁没用
@dev_journey自己列了排除名单:需要即时正反馈的人(前两周阅读量可能是个位数)、完美主义者(你的早期代码会被截图嘲笑)、以及只想速通面试的(他花了90天才"感觉入门")。
他的最新博文标题很说明问题:"Day 89:终于能独立写出AVL树的旋转,但离'掌握'还差得远"。
评论区有人问他:如果重来,会不会选Java或Go?他回复:「会选C++,但会提前买本《C++ Primer》而不是靠Stack Overflow拼答案。」
他的下一步计划是直播写B+树,目标数据库索引实战。读者投票想看"红黑树删除"还是"跳表并发实现",前者以73%胜出——显然大家都想看他再摔一次。
如果你也在DSA里挣扎,他的建议只有一句:「找个地方,把你的不懂写下来。公开的那种。」
现在的问题是:你敢不敢让自己最狼狈的学习过程,被2000个陌生人围观?
热门跟贴