从写不出代码到别人问我怎么学的,我花了三年
说实话,我入行的时候写代码挺菜的。
第一次接需求,一个简单的用户登录功能,我写了三天。看别人的代码像天书,自己写又总是报错,调试的时候盯着屏幕发呆,不知道问题在哪。
后来我发现,不是天赋问题,是方法问题。那些看起来「开挂」的程序员,背后有一套系统化的积累方式。我把这三年摸索出来的东西整理了一下,不一定对,但确实是我一步一步踩出来的。
先把一门语言写到肌肉记忆
我一开始贪多,Python、Java、Go都想学,结果哪个都没学透。
后来强迫自己先死磕Python,每天写,写到不用想就能敲出列表推导式,写到看到问题第一反应不是查文档而是直接动手。大概花了两个月,突然有一天感觉「通了」。不是全通了,是这门语言的思维方式进脑子了。
多范式编程这件事,写多了就会发现,不同的场景真的需要不同的思维方式。数据处理用函数式更简洁,业务逻辑用面向对象更清晰,实时交互用响应式更自然。
算法不是背题,是练直觉
我刷过LeetCode,一开始按标签刷,刷完就忘。
后来换了个方法,不看标签,直接做题。做不出来就硬想,想半小时再去看题解。这样很痛苦,但印象深。慢慢地,看到数组求最值就本能地想滑动窗口,看到最优解就本能地想动态规划。不是背出来的,是练出来的。
调试能力,是被bug逼出来的
我最有成就感的一次调试,是生产环境一个偶发的内存泄漏。复现不了,日志看不出问题,团队折腾了一周。
最后把日志按时间切片,逐段对比内存变化曲线,发现某个第三方库的回调里有个闭包引用了大对象。这个过程中,耐心和不放过任何异常数据的直觉,比方法论更重要。
架构设计,是从需求里长出来的
我做过一个微服务拆分,一开始按功能模块拆,结果服务之间调用链太长,性能反而更差。
后来重构,按业务边界拆,把高频调用的功能合并到一个服务里,低频调用的独立出去。架构设计没有银弹,单体、微服务、事件驱动,各有各的适用场景。
代码质量,是读烂代码练出来的
我第一次做Code Review,觉得别人的代码都挺好的,挑不出毛病。
后来读了一些开源项目的「坏味道」案例,再回头看团队代码,突然能看出来了。命名不清晰、函数太长、职责不单一、重复代码,这些之前视而不见的问题,现在一眼就能抓到。
性能优化,别急着上缓存
我踩过一个大坑,系统慢,第一反应加缓存,结果缓存一致性搞不定,数据乱了。
后来学乖了,先 profiling,找到真正的瓶颈。数据库查询慢,先看索引,再看查询逻辑,最后才考虑分库分表。缓存是最后一步,不是第一步。
技术沟通,是把复杂讲简单
我做过一次技术分享,讲分布式事务,准备了三十页PPT,讲了一半发现下面的人都在玩手机。
后来反思,不是内容不够深,是讲得太深。技术沟通的关键不是展示你知道多少,是让对方理解多少。
技术趋势,别追新,追适合
我见过太多人追新技术,React 火了学 React,Vue 火了学 Vue,最后哪个都不精。
我的做法是,新技术出来,先问三个问题:解决了我现在的问题吗?跟现有技术栈兼容吗?社区成熟度够吗?三个问题有两个答案是否定的,就先观望。
坦白说,我还在路上
上面这些,是我三年摸索出来的,但说实话,很多我也还在练。
比如算法直觉,我现在看到难题还是会卡壳。比如架构设计,复杂场景下我还是会纠结。
这些不完美,我觉得正常。技能树不是终点,是地图。你知道自己在哪里,想去哪里,剩下的就是一步步走。
说到知识沉淀和学习,我最近在用一个叫Ai好记的工具。

它能把B站、慕课这些平台的网课视频转成图文笔记,自动生成思维导图和精华速览。

我一般是把技术直播和公开课丢进去,它转出来的结构化笔记帮我快速把握核心内容。不是广告,就是单纯觉得对学习效率有提升。如果你也跟我一样,收藏夹里躺了一堆视频没看,可以试试看。
FAQ
Q,技能树需要多久才能建起来? A,我觉得没有「建起来」的那一天,是持续迭代的过程。我三年才摸到门,可能五年后又觉得现在的理解很浅。
Q,怎么平衡深度和广度? A,70%时间死磕深度,30%时间涉猎广度。深度是立身之本,广度是视野拓展。
Q,遇到瓶颈期怎么办? A,换个环境刺激一下。参加技术会议、换个项目、跟不同领域的人聊,往往能打破思维定势。