首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >代码不是工程的起点,而是结果:资深工程师写代码前都在想啥

代码不是工程的起点,而是结果:资深工程师写代码前都在想啥

作者头像
前端达人
发布2026-06-24 20:42:06
发布2026-06-24 20:42:06
1280
举报
文章被收录于专栏:前端达人前端达人

先讲个你大概率见过的场景。

新人小李入职第三周,组长扔给他一个需求:「给『导出订单』那个页面加个『重试』按钮,导出失败了用户能点一下重来。」

小李一听,心想这还不简单。他刷地一下打开编辑器,找到一个长得差不多的页面,复制粘贴,改俩名字,按钮接上接口,弹个"导出中…"的小提示,十分钟提了个 PR,在群里发:「搞定,求 review。」

组长没急着夸他,回了一句:「你先别写。导出为啥会失败?」

小李愣住了。

这一愣,就是新手和高手之间,最值钱的那道坎。

今天咱们就聊聊:那些真正厉害的工程师,在动手写代码之前,脑子里到底在转什么。 我尽量不讲大道理,每一条都给你配一个一看就懂的例子。

先说个反常识的结论

很多人觉得,"开始敲代码"就等于"开始干活了"。手指在键盘上噼里啪啦,特别有成就感。

但你有没有发现一个现象:越是急着写代码的人,后面返工越多。

需求做歪了、上线就崩、PR 大到没人想看、一个小改动牵出一堆 bug……这些坑,几乎都是"想都没想清楚就开干"埋下的。

为啥高手不这样?因为他们心里有个账:

代码这东西,敲起来很爽,养起来很贵。

你写的每一行,后面都得有人读它、测它、改它、出了事还得半夜爬起来修它。打字快不代表它免费。

所以高手会先停几分钟。不是磨蹭,是先把不确定的地方想明白,再动手。下面这 10 件事,就是他们停下来想的东西。

1. 先搞懂:用户真正要解决的是啥?

回到小李那个"重试按钮"。

组长那句"导出为啥会失败",问的就是这个。

需求单上写的,不一定是真问题。 它可能只是某个人拍脑袋想出来的解法。

你顺着想一下:如果导出失败,是因为订单太多、几十万条数据一次性塞进内存把服务搞挂了——那加个"重试"按钮有啥用?用户点一次崩一次,点十次崩十次,越点越气。真正要做的,是把导出改成"分批导出",而不是加个让他反复受罪的按钮。

再举个更常见的:测试小姐姐报 bug,「用户改不了头像!」

新手一听"改不了",第一反应是去翻前端的上传按钮。但高手会先问一句:是谁改不了?

一问才发现:管理员能改,普通成员改不了,而且只在测试环境这样——原来是上周改权限的时候,漏配了一个角色。这跟前端的上传按钮半毛钱关系都没有。

划重点:高手不是上来就问"我该写哪段代码",而是先问"我们到底在解决啥问题"。把问题问具体,能省你一下午。

2. 先看看:这事儿是不是早有现成的写法?

新手有个通病:遇到问题,喜欢当"全世界第一个遇到它的人"。

要做个表单,自己发明一套校验;要调个接口,自己设计一种返回格式;要加个加载动画,自己搞一个新样式……每一个单看都没毛病,但塞进整个项目里,就跟一锅乱炖一样。

打个比方:你们公司所有的接口返回都长这样——

代码语言:javascript
复制
{ "成功": true, "数据": {...}, "错误信息": null }

结果你新写的接口,非要返回成一个纯文本 "ok"。下一个接手的人就懵了:怎么就你这个不一样?

高手动手前会先翻翻:这个项目里,类似的功能别人是怎么写的? 有现成的、还能用的,就跟着来,保持一致。

但注意,这不是让你"无脑抄"。有时候你照着的那个"模板"本身就是个老 bug,你一抄,等于把毛病又传染了一遍。所以高手抄之前会先看懂:这么写是有道理,还是当年某个人随手写的烂摊子。

划重点:动手前先看一眼——你是在解一个新问题,还是在无视一个早就有的现成答案。

3. 先划清楚:这次改动,到哪儿为止?

这是新手最容易踩的雷。

还是小李。他做"重试按钮"的时候,顺手看见旁边一个函数写得丑,重构了;又发现一个变量名不好,改了;改完发现测试挂了,又去修测试……

最后提了个 PR,改了 28 个文件。组长打开一看,头都大了:哪些是这次需求必须改的?哪些是你顺手动的?谁分得清啊。

高手会在动手前就划好一条线:

代码语言:javascript
复制
这次只干一件事:给导出页加重试按钮
─────────────────────────────────
✅ 要改:那个按钮、对应的接口调用
❌ 不碰:旁边那个丑函数(下次单独开一个 PR 收拾)
❌ 不碰:顺手想优化的变量名

我见过最厉害的同事,都特别会说一句话:

"这事儿是相关,但不该塞进这个 PR 里。"

一个改动越小、越聚焦,review 的人越能一眼看明白有没有风险。这不是抠门,是让活儿干得干净。

划重点:在改动开始"越滚越大"之前,先把它的边界画死。

4. 先看真实数据,别在脑子里想象数据

程序员写代码,喜欢按"理想情况"来。但线上的真实数据,从来不按你的理想出牌。

举个特别真实的例子。需求说:"显示用户当前的会员套餐。"

你脑子里想的肯定是:用户.套餐.名字,简单。

但真实数据库里是啥样?

  • 有的用户压根没开过会员
  • 有的开过又退了
  • 有的开过三四次,历史记录一堆
  • 有的是早期数据,套餐信息是空的
  • 还有几个大客户走的是私人定制,根本不在套餐表里

你要是只按"人人都有一个套餐"来写,上线第一天就给你表演一个白屏崩溃。

所以高手在写之前,会先去数据库里"扒一眼"真实数据长啥样,跑两条特别朴素的查询:

代码语言:javascript
复制
-- 看看会员状态到底有几种
SELECT 状态, COUNT(*) FROM 会员表 GROUP BY 状态;
-- 看看有多少用户连邮箱都是空的
SELECT COUNT(*) FROM 用户表 WHERE 邮箱 IS NULL;

这俩查询一点不高级,但它能让你提前知道:"哦,原来还有这种奇葩数据。"

划重点:别只为你"希望存在"的数据写代码,先看清"真实存在"的数据。本地测试数据都很乖,线上数据是个"什么妖魔鬼怪都有"的大杂烩。

5. 先想"会怎么出错",再想"正常怎么走"

新手写功能,脑子里只有一条路:用户操作 → 成功 → 完事。

高手不一样,他们很早就开始想:这玩意儿会怎么崩?

不是因为他们悲观,而是因为——线上环境的日常,本质就是在处理各种意外。

拿"用户申请退款"举例。正常流程很简单:点退款 → 系统调支付宝退钱 → 标记"已退款" → 发条短信通知。

但高手立马会问一串:"万一呢":

  • 万一支付宝那边钱已经退了,但回我们系统的时候网超时了,我们这边没标记成功,用户以为没退,又点一次——重复退款,公司亏钱,咋办?
  • 万一用户手抖连点了两下呢?
  • 万一这笔订单已经退过了呢?
  • 万一退款成功了,但短信没发出去呢?

你看,这些都不是钻牛角尖,它们直接决定了你这个功能会不会把公司的钱搞乱

前端也一样。一个"保存设置"的页面,不只是"点保存→弹个成功"。还得想:网卡了转半天圈圈怎么办?保存失败了提示啥?用户填了一半就关页面了怎么办?

当然也别走极端——不是每个犄角旮旯的意外都要处理。一个无关痛痒的小动画抖一下,和重复扣款比起来,根本不是一个量级。高手会挑那些"真出事会要命"的来重点防。

划重点:别只顾着把"成功的路"铺好,先想想哪条"出错的路"最致命。

6. 先搞清楚:这东西改了,会牵连到谁?

很多时候,写代码卡住了,根本不是代码难,而是 "这块归谁管"没搞清楚。

讲个真事儿。有个同事看到接口里有个字段 状态,觉得名字起得太笼统,想改成 账户状态,更清晰嘛。他在自己的前端项目里搜了一圈,没人用,就放心改了。

结果上线当晚就出事了。

为啥?因为这个字段,不止前端在用

代码语言:javascript
复制
        一个看起来"没人用"的字段
                  │
   ┌──────┬───────┼───────┬────────┐
   ▼      ▼       ▼       ▼        ▼
 安卓App  报表   数据看板  客服系统  合作方
                                  对接接口
   (这些地方全在偷偷用它,你前端搜不到而已)

他这一改,安卓 App 直接读不到数据,整个订单列表空白。

高手怕的不是写代码,是清楚一个改动的"爆炸范围"有多大。 所以动手前会先问:除了我,还有谁在用这个东西?我改了会不会连累别人?

划重点:动手前,先找到那些"依赖你这次改动"的人和系统,别让他们半夜被你的代码惊醒。

7. 先想好:我靠啥证明"这事真做成了"?

特别多人做完功能,你问他"测了吗",他说"我本地点了下,是好的"。

这远远不够。

"本地是好的"是新手最容易自我安慰的一句话。高手在动手之前,就想好了——用什么来证明它真的成了。

比如那个"双击重复支付"的 bug,高手会先把"验证标准"写下来:

代码语言:javascript
复制
要证明修好了,必须满足:
1. 把网络调慢,疯狂双击提交,后台只收到 1 个请求
2. 数据库里不会出现 2 条支付记录

有了这个标准,你才不会"自我感觉良好"地以为修好了,结果一上线又冒出来。

而且高手只测"会出事的地方",不会傻乎乎测每一行。怕重复扣款,就重点测"点两下会不会扣两次";怕越权,就重点测"普通用户能不能看到管理员的数据"。把力气花在刀刃上。

划重点:别用"看着没问题吧"来收尾,要在一开始就想清楚"拿什么证据能证明它没问题"。

8. 先做"最小但靠谱"的版本,别一上来就盖大楼

新手有个浪漫的毛病:第一版就想做到完美。

需求是"加个通知开关",他脑子里已经在设计:按类型分类、按渠道分类、管理员能批量改、还要加操作日志、还要预览……

结果一个礼拜过去了,开关还没上线。

高手会问:用户现在最低限度需要啥?答案可能就是一句话——"让用户能关掉那些烦人的营销推送,但验证码、安全提醒这种重要的不能关。"

做完这个,就够上线了。剩下那些花活,等真有人需要再说。

但注意,是"最小靠谱版",不是"最小版"。区别在哪?

  • ❌ 最小版:图快,把权限、错误处理全跳过了,看着能用,其实是个雷
  • ✅ 最小靠谱版:功能砍到最小,但该防的风险一个没漏

划重点:别上来就盖你能想象的最大那栋楼,先盖一个"不会塌、能住人"的小房子。

9. 先在脑子里"预演"一遍这次的改动

这个习惯听起来玄,但特别实用。

高手往往在动手前,就大概知道这个 PR 会长啥样:要改哪几个文件、哪些坚决不动、要不要动数据库、review 的人需要看懂啥。

为啥要预演?因为乱写一通,就会产出一个乱七八糟的 PR。

就像小李,从一个文件开工,看哪儿不顺眼就改哪儿,最后自己都说不清哪些改动是必须的。审代码的人翻着 28 个文件,一脸问号:"这行跟需求有啥关系?"

高手会先列个清单,哪怕特别简单:

代码语言:javascript
复制
这次要干的活:
1. 给导出加个 workspaceId 筛选参数
2. 接口加个对应的测试
3. 前端筛选界面 → 放下一个 PR,这次不做
4. 那个丑函数 → 这次不重构    ← 最关键的一条

你发现没,最后那条是在决定"不做什么"。 好的代码改动,往往体现在那份"克制"上——不夹带私货,不顺手乱改。

划重点:把你的改动当成"一份要交给别人看懂的东西",而不只是"我自己能跑就行的代码"。

10. 先问一句:万一搞砸了,撤得回来吗?

新手满脑子都是"怎么把它发上线"。高手还会多想一步:**"万一错了,怎么收场?"**

这是判断一个人成不成熟,最明显的信号。

因为有些错,撤起来很容易,有些错,撤都撤不回:

代码语言:javascript
复制
好撤  ←──────────────────────────────→  撤不回
前端改错个         接口字段改了,         后台任务群发了
按钮颜色           安卓App已经在用        一百万封错误邮件
(点一下回退)     (撤了App就崩)        (发出去就收不回了)

凡是涉及删数据、扣钱、改权限、群发消息的,高手都会提前想好退路。

比如要给数据库表加个新字段还要改老数据,高手不会"啪"一下全改了。他会分几步走,像换轮胎一样,一边保持车能开,一边慢慢换:

代码语言:javascript
复制
① 先加个新字段(先不用,老的照常跑)
② 新旧字段同时写
③ 把老数据慢慢搬到新字段
④ 确认没问题了,才切到读新字段
⑤ 下个版本再删掉老字段

看着是慢,但比"线上炸了,全组半夜爬起来救火"快多了。

划重点:别光想"怎么上线",要想"万一翻车了,怎么爬起来"。

说到底,这 10 件事是一回事

你回头看这 10 条,其实背后是同一句话:

代码不是工程的起点,而是工程的结果。

刚入行的时候,你靠"能把活干出来"就能混得不错:接需求、写代码、改 bug、收工。这很正常。

但你越往上走,会发现需求越来越模糊、系统越来越复杂、一个决定影响的人越来越多、犯错的代价越来越大。到那时候,光会写代码就不够了,你需要的是"动手之前的判断力"。

这也是为什么,有些人代码写得贼溜,却一直升不上去——他们能写,但不会"想":不澄清需求、不看数据、不防风险、不考虑别人。他们在等别人替他们想清楚,然后自己负责敲键盘。

这有用,但这不叫"扛事"。

真正能扛事的人,是你敢把一个又乱又险的问题丢给他,他能给你理出一条安全的路。有时候这条路是写代码,有时候是告诉你"你想的这个方案是错的",有时候只是在全组白忙活一个礼拜之前,问出那个让人有点不舒服、但救命的问题。

下次接需求,照这个清单走一遍

你不用一次全记住。下回接到活儿,动手前先花五分钟,问自己这 10 句话:

代码语言:javascript
复制
□ 1. 用户真正要解决的,是啥问题?
□ 2. 这事儿,项目里有没有现成写法?
□ 3. 这次改动,到哪儿为止?啥不该碰?
□ 4. 真实数据里,有没有啥奇葩情况会坑我?
□ 5. 最致命的那种"出错",是哪个?
□ 6. 我改了,会牵连到谁?
□ 7. 我靠啥证明它真做成了?
□ 8. 最小但靠谱的版本,长啥样?
□ 9. 这个 PR 大概会是啥样子?
□ 10. 万一搞砸了,撤得回来吗?

答案不用长,哪怕就一句话,也会改变你写代码的方式。

高手不是因为先想一想就变慢了,而是因为少返工,所以更快。 那几分钟的停顿,不是犹豫,是判断力——而判断力,才是让你的代码能在真实世界里活下来的东西。

看完这 10 条,我特别想问你一句: 在你的实际工作里,最容易被你跳过、最后又狠狠坑到你自己的,是哪一条? 我赌大多数人会选第 4 条(不看真实数据)和第 10 条(不想退路)——这俩最"看不见",平时偷懒最爽,上线翻车最惨 😂 评论区告诉我你的"翻车现场",最有共鸣的那个,我下篇专门展开聊聊怎么躲开它 👇

关注「前端达人」,咱们一起把代码写得像工程,而不是像开盲盒。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端达人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先说个反常识的结论
  • 1. 先搞懂:用户真正要解决的是啥?
  • 2. 先看看:这事儿是不是早有现成的写法?
  • 3. 先划清楚:这次改动,到哪儿为止?
  • 4. 先看真实数据,别在脑子里想象数据
  • 5. 先想"会怎么出错",再想"正常怎么走"
  • 6. 先搞清楚:这东西改了,会牵连到谁?
  • 7. 先想好:我靠啥证明"这事真做成了"?
  • 8. 先做"最小但靠谱"的版本,别一上来就盖大楼
  • 9. 先在脑子里"预演"一遍这次的改动
  • 10. 先问一句:万一搞砸了,撤得回来吗?
  • 说到底,这 10 件事是一回事
  • 下次接需求,照这个清单走一遍
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档