陈小涛的技术学习笔记

开发心得

做过的项目多了,慢慢攒下几条自己信得过的习惯。都不是什么高深理论,全是被现实教训出来的。它们的共同点是:每一条刚开始做的时候都觉得很麻烦,做久了才发现省下的是大麻烦。这篇按"一个东西从想法到长期在用"的顺序来写,你能看到每条习惯是在哪个阶段救的命。

最小可用版本日志配置分离留后路写给未来的自己

一、动手之前:先把"做成什么样"写下来

这一条看着像废话,但它是省时间最多的一步。我以前的习惯是"想个大概就开干",结果做到一半发现某个关键地方自己都没想明白,于是前面的活儿要重新拆。

现在我改成先用几行字回答三个问题,写在最前面:

这三句话通常十分钟就能写完,但它们会把后面几周的方向定下来。更重要的是,写的过程里你会自己发现"原来我还没想清楚"。

二、第一步:先有能跑的最小版本

别一上来就想着做全。先做一个最小、能跑、能看见的东西,哪怕功能少得可怜。它的价值不在功能,在于它给了你一个"地基"——后面所有东西都是往它上面加的。

写一版 能跑的 跑起来 看结果 改一处 再试 每一圈都要小到能在一天内走完
小步快跑,比一次憋大招稳得多

这个循环有两个隐含要求,都容易被违反:

三、第二步:让它经得起别人用

能跑了之后,会有一个危险的错觉:以为"能跑"就等于"做完了"。实际上从"我自己能用"到"别人也能用",中间还隔着好几道坎。我把这几道坎总结成三件事:

1. 日志:出问题时别靠猜

程序出问题的时候,人的第一反应通常是"我猜是哪错了"。这个猜测的准确率非常低,而且一猜就沉迷,花两小时在错误的方向上。正确反应应该是:让它把过程打印出来看看。

# 关键节点各留一行,出问题时一眼看出卡在哪
print("收到输入:", str(data)[:80])
print("清洗后条数:", len(cleaned))
print("处理结果:", result)
print("已写入:", save_path)

我的习惯是:凡是"跨出去"的动作,前后各记一笔。读了文件、发了一个请求、写了一次库、返回了一个结果,每个动作都留一行。这样事后排错不用推理,直接看日志就行。

经验:日志里最有价值的往往不是你写的那句描述,而是数量和时间——"收到 124 条""耗时 3.2 秒"。数量对不上、时间突然变长,都是问题最早的信号。

2. 配置与代码分开

会变的东西别写死在代码里。路径、地址、开关、阈值、密钥——全部放到外面的配置文件里。这样换台机器、换批数据,改配置就行,不用动代码。

这条我一开始觉得是"过度设计",直到有一次要把一个脚本从自己的电脑挪到服务器上,发现里面有十几处硬编码的路径要改,改漏一处就报错。那次之后我就老实了。

3. 把可能的意外接住

自己用的时候,你大概知道会输入什么。别人用的时候,什么都会发生:路径不存在、文件被占用、编码不是 UTF-8、网络中途断了。这些不能靠"应该不会发生"来规避,只能靠提前处理。

我的做法不复杂:把单个条目的处理包在错误捕获里,失败了就记下来、跳过、继续处理下一个。最后统一汇报"成功了几个、跳过了几个、为什么跳过"。核心原则是一条坏数据不该毁掉整批任务。

四、第三步:上线之后才是真正开始

"上线"这个词容易给人一种"完成了"的错觉。实际上从这一刻起,你才开始接触到真实的使用情况:真实的输入、真实的网络、真实的并发、真实的人。

这个阶段有几件事我特别在意:

最容易犯的错:把"上线"当成终点,然后就不管了。真实情况是,上线前的问题都在你预料之内,上线后的问题才在预料之外——而后者才真正决定它能不能长期用下去。

五、几条通用的保命习惯

给自己留回滚的余地

动重要数据或配置之前,先备份、先留一版能退回的状态。关键在于对"重要"的定义要放宽一点——只要你事后可能会后悔,那它就是重要。复制一份的成本几乎为零,回不去的成本可能是一整天。

真正的麻烦通常不是"改错了",而是"改完发现不对,却回不去了"。留后路不是保守,是专业。

每次只改一处

我发现新手和老手有一个很明显的区别:新手喜欢一次改好几处然后跑一次;老手每次只改一处,改完立刻跑。一次改三处,出现问题时你不知道是哪一处导致的,于是只能靠猜——而猜出来的结论往往是错的,会把你引向更深的坑。

坑点(这条我很认真):别在深夜、疲惫、赶时间的时候动关键的东西。这时候判断力最差,而手滑的代价最高。我吃过的几次大亏,全是在凌晨一两点、又累又急的状态下发生的。后来我给自己定了个硬规矩:过了午夜不碰数据,睡一觉第二天做,往往五分钟就搞定了。

文档写给三个月后的自己

你以为记得住的细节,三个月后一定忘。当时为什么这么写、这个参数是干嘛的、这条分支是处理哪种特殊情况的——顺手记两笔。不需要写得多正式,写在代码旁边一行注释就够。

这条的收益我感受特别深:三个月后回来看自己写的东西,如果能五分钟就改得动,说明当时那两行注释帮了大忙。

先让它对,再让它快

不要一开始就优化性能。绝大多数性能问题,要么根本不影响实际使用,要么出在你完全没预料到的那一行上。正确顺序是:先做对、先能用,等真的慢了——而且是能看见它慢——再去量、去定位、去改。


小结

这些习惯听起来都朴素,但每一条背后都有我交过的学费。它们的共同逻辑其实是一句话:假设自己会犯错,然后让每个错误都便宜。

小步迭代让方向错了能早发现,日志让问题能被定位,配置分离让迁移不疼,留后路让改动可逆,别在深夜动手让判断不失准——每一条都是在降低犯错的代价。把这几条变成习惯,比多学十个新框架都管用。