浪白的博客の小站
首页项目归档照片墙音乐灵境说说杂谈友链关于
封面

写给刚开始写代码的自己

2026-08-28 21:45:00
✨ 心情:温和
# 随笔
# 成长
# 总结

前几天有个朋友刚转行做开发,问我有什么建议。我零零散散说了些,事后想想可以整理得更清楚。

写下来,算是给当年的自己。

一、把"看懂"和"会写"分开

最开始学编程的时候,看教程什么都懂,自己写就卡住。当时以为是自己笨。

后来明白这是正常的。看懂是被动接收,会写是主动构造,中间隔着一道墙。 拆掉这道墙的唯一办法是自己动手写,而且写的时候不看教程。

现在我学新东西的流程是:看一遍文档,然后关掉文档自己写一遍。写不出来再回去看,但只看看不出来的那部分。

这个"自己写"的环节,比看十遍教程有用。

二、错误信息要读到底

以前看到报错第一反应是复制去搜索。搜到答案贴上,问题解决了,但不知道为什么。

现在的习惯是先读完错误信息:

  • 出错的文件和行号
  • 具体是什么错(类型不对?变量未定义?文件不存在?)
  • 调用栈里哪一层是我的代码

大概七成的错误读完信息就能想明白。剩下三成再搜,但搜的时候也能问出更准确的问题。

"读错误信息"是个可以练的技能。 而且越往后越重要,因为越复杂的系统,报错信息里包含的线索越多。

三、先让它跑起来,再让它变好

我以前写代码喜欢一次写对。想清楚了每一个边界情况,然后一口气写完。

问题是:想得越多,开始得越晚。而且大部分"想清楚"的边界情况,实际上根本不会发生。

现在的做法是先写一个"能跑就行"的版本。

比如要写数据同步:

# 第一步:最朴素的方式,能跑通就行
for row in source:
    target.save(row)

跑通了,确认基本逻辑对,再考虑:

  • 批量写入(性能)
  • 失败重试(健壮性)
  • 断点续传(大批量)
  • 并发(提速)

每一步都有可运行的版本,而不是先在脑子里设计完整再动手。

这个方式还有个好处:早发现"需求理解错了"。如果花两周设计再开始写,发现理解错了就白费;如果先写个粗糙版本给人看,十分钟就知道方向对不对。

四、代码是写给人看的

我用了很久才接受这件事。

刚工作时,我评判代码的标准是"能不能跑"。后来加上"跑得快不快"。再后来才是"别人能不能看懂"。

现在我优先级最高的反而是可读性。因为:

  • 代码被阅读的次数远多于被编写的次数
  • 一个读不懂的优化,三个月后自己也不敢改
  • 团队协作下,看不懂就等于不能用

具体怎么做:

名字要准。 processData() 不如 calculateMonthlyRevenue()。多打几个字,省下别人十分钟。

函数要短。 一个函数做一件事。如果一个函数需要"并且"来描述它做什么,那就该拆。

注释写"为什么",不写"是什么"。 // 循环用户列表 没有意义;// 这里要倒序,因为后面的逻辑依赖最新的在前 有价值。

五、学会说"我不知道"

这条我花了最久。

刚开始工作时,怕被人觉得水平不行,遇到不懂的会含糊过去,或者凭猜测给个答案。

结果是有一次猜错了,导致同事基于我的错误信息做了一天的无用功。那件事很尴尬。

后来我改了:不知道就说不知道,然后说"我去查一下"或者"我不确定,可能是 X,我们验证一下"。

出乎意料的是,没人因此觉得我水平差。反而因为我给的答案可信度高了,大家更愿意问我。

"我不确定"比一个错误的肯定答案有价值得多。

六、把时间花在基础上

我有一段热衷于学各种框架和工具。React、Vue、Django、Laravel、Spring 都摸过一遍。

但基础的东西——数据结构、算法、操作系统、网络、数据库原理——一直是短板。

结果是:遇到性能问题不知道怎么分析,遇到并发问题只能靠搜,遇到奇怪的 bug 看不懂底层原因。

真正的分水岭出现在我开始读《深入理解计算机系统》和看数据库的实现原理之后。很多"玄学问题"变得可以推理了。

框架会过时,基础不会。

七、接受"写不完"

以前总觉得项目做完了就轻松了。实际上没有"做完"这回事。

需求会变、依赖会升级、服务器会换、流量会涨。维护是常态,不是例外。

接受这一点之后,心态好很多:

  • 不用追求"一次写完美",反正要改
  • 不用做完所有功能才上线,可以慢慢迭代
  • 不用因为"还有 TODO"焦虑,TODO 本来就不会清零

八、记录比记忆可靠

我记性一般。以前靠记性,经常出现"这个坑我好像踩过但忘了怎么解决的"。

现在会写:

  • 踩过的坑和解决办法
  • 一个决策的来龙去脉(为什么选 A 不选 B)
  • 排查问题的过程(哪怕最后没解决)
  • 看到的好文章和自己的理解

不用写得多正式,我自己用的就是简单的 Markdown 文件。

写下来这个动作本身就有价值——它强迫你把模糊的理解整理成清楚的表述。很多时候写的过程中就想明白了。

九、关于"天赋"

这个可能是最想对当年的自己说的。

我曾经因为"别人好像很快就懂了,我要好久"而怀疑自己不适合做这行。

后来发现两点:

一、别人没那么快。 你看到的是他学会之后的表现,没看到他卡住的时候。

二、这东西确实有快慢,但差别没想象中大。 而且持续性比初始速度重要。我见过很多上手快的人三五年后停在一个水平,也见过上手慢但一直在深挖的人后来居上。

如果一定要选一个特质,我选"能持续地投入时间",而不是"聪明"。

十、最后一条

做点能给别人用的东西。

学的时候容易陷在"学"本身。但真正让我进步最快的,是做一个真的有人在用的东西。

因为有人用,所以:

  • 要考虑他没按你预期操作的情况
  • 要处理你没想过的数据
  • 要把错误信息写清楚(不然他看不懂)
  • 要真的把功能做完(不然他不用)

这些都逼着你把东西做扎实。玩具项目可以糊弄,有人用的项目不行。

最后

这些话如果传回去给当年的自己,他大概会觉得"这些我都知道啊"。

知道和做到之间还是有距离的。而且有些事大概只能自己踩过才懂。

不过还是写下来了。万一有点用呢。

avatar

浪白

邪恶的浪白

2026年8月

一
二
三
四
五
六
日
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Recent Records

工具链的耐心是有限的

2026-08-05 22:00:00

"够用就好"这四个字,我花了很久才懂

2026-07-15 23:10:00

重读自己五年前写的代码

2026-05-30 21:25:00