陈小涛的技术学习笔记

为什么某个行业的经验 > 代码

这句话说出来容易被骂,尤其在一个到处都在讲"学会编程就能改变一切"的环境里。但我还是要说,因为它是我干活这些年最实在的一条体会:代码只是手里的那把锤子,决定你盖出什么的,是你脑子里那张图纸,而那张图纸来自你对这件事的真实理解。锤子可以买,图纸只能靠时间攒。

需求理解隐性约束真实场景顺序问题

一、先说清楚我在说什么

我这句话里的"经验",不是指"在这行待了很多年"这个资格,也不是指人脉或者资历。我指的是很具体的一件事:你对这门生意里那些"没说出口的常识",掌握到什么程度。

每个行业都有一堆默认规则——从业者觉得理所当然、所以从来不会写进需求里的东西。这些规则没人教、也很难从文档里读出来,只能在实际做事的过程里撞出来。而它们往往决定了做出来的东西对不对路。

真实理解 知道要什么 代码实现 能不能做到 最终结果 对了 / 不对味 理解越准,实现越省力,返工越少 上游 中游 下游 上游错了,中游做得再漂亮也只能一起错
代码在下游,真实理解在上游

二、两次让我印象很深的对比

一个是别人身上看到的,一个是我自己吃的亏。

这两件事的共同点很有意思:问题都不在代码上。第一次的差距是"想到了没写进需求的东西",第二次的差距是"没人写进说明的常识"。两次代码本身都写对了,结果却差很远。

三、为什么代码容易让人高估自己

我认真想过这个问题。代码这门手艺有几个特点,会系统性地让人产生"我很强"的错觉:

于是出现一个很常见的失衡:人们系统性地高估"把东西做出来"的价值,系统性低估"想清楚要做什么"的价值。因为前者的成果看得见,后者的成果只是"避免了一次错误",而避免掉的错误人们不会记得。

坑点:我见过最典型的失误,是用很讲究的技术手段去解决一个根本不该存在的问题。因为没去搞懂真实场景,把全部力气花在把错的东西做精致上。做得越精致,返工越心疼。

四、经验到底值钱在哪

不是为了给"经验"这个词抬轿子,我想把它的具体价值拆出来,因为它其实是可以被观察的:

1. 能分辨哪些需求是真的,哪些是伪的

提需求的人往往说的是"他想到的解法",不是"他真正的困难"。没经验的人照着解法做,做完发现没解决困难;有经验的人会往回问一句"你原来是怎么干的,哪一步最难受",往往能找到一个更简单的真问题。

2. 知道哪里会卡

每个行业都有一批隐性的约束条件——某些环节必须按固定顺序、某些数据天然不干净、某些规则只在特定时段生效。这些都不在设计图里,但都会在真实运行中咬人。提前知道它们,就能提前留出处理空间;不知道,就只能等着被咬。

3. 知道真实的人会怎么用

设计时的用法和实际用法经常是两回事。有人在输入框里贴一整段带格式的文字、有人会在网络很差的车上操作、有人会把中间步骤跳过。这些都不难处理,但前提是你得先知道它们会发生。

4. 知道什么会变、什么不会变

行业里的规则、口径、流程,哪些是稳定的,哪些过两个月就调整——这个判断只有待在里面的人才做得出。而它直接决定你哪个部分该做扎实、哪个部分该做成能随时改的样子。

5. 知道什么代价是可以接受的

技术喜欢追求"更优解",但现实里的很多场合,一个够用且立刻能跑的方案,比一个更优但要等三个月的方案价值高得多。这个判断需要你知道这件事的紧迫程度和容错空间——而这些信息只存在于业务现场。

五、两者不是对立的

说到这里必须补一句,免得被理解成"代码不重要"。不是这个意思。两者的关系我理成这样:

经验决定

  • 做什么(方向和取舍)
  • 做到什么程度算够
  • 哪些坑必须先堵
  • 先做哪一步、后做哪一步

代码决定

  • 能不能真的实现
  • 做得快不快、稳不稳
  • 以后改起来疼不疼
  • 能不能规模化

两个都缺不了。只有经验不会写代码,那想法永远停在纸上;只会写代码不懂这行,那做出来的东西大概能跑但不对。真正稀缺的是两样都有一点点的人——而更常见的情况是,很多人代码水平其实够用了,卡住他的是对这件事的理解。

「技术能解决的问题,比技术能想象的范围小得多。真正稀缺的不是"能用代码实现",而是"知道该实现什么、以及不该实现什么"。 —— 干活这些年最实在的一条体会

六、那我现在怎么做

这条体会改变了我干活的顺序,很具体:

  1. 先问、先看,再动手。接到不熟的领域,我第一件事不是打开编辑器,是找做过这件事的人聊,或者自己去看真实的数据长什么样。宁可多问半小时,也不带着错误理解写三天。
  2. 逼自己把"为什么"写下来。写需求的时候不只写"要做什么",还写"为什么要做、不做会怎样"。写不出来,说明我还没想清楚,那就继续问。
  3. 先做一个能跑的最小版本给对方看。比起憋一个月拿出一个"完整"的东西,早点让对方看到雏形、早点纠正理解偏差,返工量会小一个数量级。
  4. 把"能跑"和"对味"分开验收。"程序没报错"是最低标准。真正的验收问题应该问:它有没有解决你原来那件难受的事?

我的结论

别神化代码。它很重要,但它是执行层。真正拉开差距的,是你对要做的那件事,到底理解到什么程度。

而且这两件事的学习规律完全不一样:代码可以在几个月内速成,行业里的门道只能靠时间和真实的接触慢慢攒。所以如果你已经有了某个行业的积累,那它的价值千万别低估——那是花钱买不到、也速成不了的那一半。