上个月,我让Claude帮我撸了一个客户后台。十分钟后,漂亮的React组件摆在我面前,API结构清晰,登录验证在我本地跑得飞快。那一刻我差点以为自己是哈利波特。
两天后,我们把这玩意儿给真实用户用,灾难现场就上演了:API在并发下直接跪了,登录令牌一半时间在用户操作中间就过期,数据库查询在我测试数据只有10条时还很快,真数据一上来,30秒都查不出来。
代码美得像艺术品。用?也能用——勉强算是。但本质上,这就是定时炸弹,我只能怪自己。需要建筑师的时候,我却只找了个瓦匠。
看起来像摩天大楼,没人敢住
想象一下建一栋摩天大楼。你得有两波人:
建筑师和结构工程师负责设计。他们要琢磨承重墙放哪,电线水管怎么绕,什么材料能抗住高空风,地震来了楼会不会晃歪。还得考虑消防通道、电梯井,甚至人怎么进出都要细细盘算。画一大堆图纸,标一堆标准。
施工队才是真正搬砖的。他们会搅拌混凝土、焊钢筋、装玻璃窗。只要给他们详细蓝图,“这儿用几号钢筋,间距6英寸,混凝土48小时别动”,他们就能盖出结实安全的楼。
有意思的是,施工队也懂点门道:知道钢筋混凝土才牢靠,承重墙不能乱打洞,材料遇热会膨胀。虽然不会算具体受力,但知道哪些事千万不能做。
所以,理论上,如果你让施工队不用图纸直接干,他们也能盖出个楼来:墙能立起来,水电能接,屋顶也有。
能撑一阵。
但真有人住进去,地震来了,着火了,你才发现——电路乱成一锅粥,水压上不去,消防门找不到,风一吹楼就晃。外表像楼,其实不结实、不安全、没法住,是个“高价装修的危楼”。
你真的需要工程师和建筑师。
我们把两份工混成了一份
回到软件圈。其实我们也有两种角色,但现在大家已经傻傻分不清。
软件工程师应该主导系统设计,琢磨扩展性、可靠性、安全性、可维护性。定规范、立规矩,想各种情况:一万用户同时访问会咋样?部分功能挂了怎么办?数据一致性怎么保证?凌晨3点出bug怎么排查?这些人给出“蓝图”,决定你的代码到底能不能上线、能不能扛住大场面。
程序员则负责写代码。他们擅长语法、算法、设计模式,能把需求转成具体实现。只要有好规范和架构,他们能写出高质量、维护方便的代码。
但问题来了:工程师也得写代码啊!不会写代码的建筑师,设计出来的楼根本站不住。同理,不懂代码运行原理的软件工程师,也架不住“代码打脸”。
于是,两份工混成了一份:大多数公司说“我们招软件工程师”,其实是招“设计+实现一肩挑”的全能型选手。大家脑袋里画蓝图,手上撸代码。这么搞了好多年,竟然还行。
欢迎AI程序员闪亮登场
现在,大语言模型(LLM)能写代码了。我的感受是:LLM是顶级程序员,但完全不是工程师。
LLM像那位啥都能盖的施工大哥,你说“给我做个Todo List”,它立马给你写好。代码优雅,结构清晰,变量名感人,跑起来贼顺溜。
但工程的部分全没了:
- 不考虑负载:用内存数组存Todo,测着快,用户一多直接爆炸
- 没处理异常:数据库断了咋办?代码八成直接挂
- 安全感人:有登录验证,但防不住常见攻击,SQL注入一查一个准
- 性能盲点:每次都遍历所有用户的todo?等着内存爆炸吧
- 运维无视:日志、监控几乎没有,出事了只能靠烧香
代码看起来像模像样,规范也全对,理想情况下能跑。但一旦遇到真实世界的幺蛾子——并发、网络断、奇葩输入、恶意攻击——它就跟那座没人敢住的摩天楼一样,外表光鲜,里头一团糟。
这事儿到底意味着啥
以前我觉得“工程师”和“程序员”的区分纯粹是咬文嚼字。现在我明白了,这区别比你想的要命。
你让LLM“写个认证系统”,其实就是让施工队“盖个楼”,却没给任何要求。比如:
- 楼里住几千人还是一户人家?
- 抗不抗地震、火灾?
- 消防标准咋定?
- 水电怎么布?
- 预算多少?
LLM肯定给你盖出来点啥,样子还挺唬人,但根本不靠谱。因为,没人做“工程师”的活。
举个我司Empath Legal的真实例子。我们帮律师做陪审团筛选工具。我要是让LLM来:“写个API,分析陪审员问卷,给出洞察。”
LLM能写出能用的东西:
- 解析问卷
- 调用LLM分析文本
- 格式化结果返回
- 代码结构合理
但它绝对不会主动考虑这些:
业务需求
- 问卷50多页,律师要30秒内出结果
- 用户是律师,一切都得有出处,不能瞎编
- 分析结果必须有确定性,法庭上要靠得住
- 按用量计费,得严格追踪消耗
技术护栏
- 问卷得按章节分块,不能随便拆
- 得有流式输出,不能让律师30秒看个空白
- 需要缓存,防止重复分析白烧钱
- LLM API偶尔抽风,异常要兜底
- 全链路审计,合规要查
系统设计
- 用同步还是异步?(异步,30秒要求)
- LLM中途挂了怎么办?(幂等重试)
- LLM供应商限流咋办?(排队+背压)
- 数据一致性怎么保证?(部分完成咋处理)
LLM能写“通路”,但如果我不自己做工程设计、梳理约束、定架构,那代码上线一秒钟就翻车。
新的分工时代
这不是说LLM不行——它们太厉害了。但我们得搞清楚它们在干啥。
LLM是超级程序员:给定明确需求和约束,能写出一手好代码。会用模式,能优化,能调试,能写文档。
人类要做工程师:理解业务,设计系统,搭好护栏,预判边界和异常。要问:“我们到底要解决什么?会出啥乱子?怎么扩展?”
想开点:繁琐的底层活可以丢给AI,我们只用搞定“人性化需求、系统设计、架构取舍”这些有趣的活儿。
但前提是:你得先做工程师的活。如果只是“LLM,给我造个X”,不给上下文、不提约束、不画蓝图,出来的就是只可远观的危楼。
跟AI编程工具打交道的正确姿势
我的经验:
烂提示:
“给我写个SaaS的支付系统”
优质提示:
“写个支付系统,满足这些需求:
- 支持按积分计费(用户买积分,功能扣积分)
- 必须安全处理并发扣除(两次API不能都扣成功,积分只够一次)
- 需要账单审计,方便对账
- 支付渠道挂了要优雅降级(走缓存积分,记录日志后续补算)
- 性能要求:每次扣积分延迟<50ms
数据库用PostgreSQL行级锁扣积分。操作需幂等,重试不重复扣。全链路日志方便排查。”
第二种提示才是“工程师干的活”:
- 业务模型(积分制)
- 核心约束(并发安全)
- 合规要求(审计)
- 可靠性(故障降级)
- 性能指标(延迟)
- 技术方案(PostgreSQL行锁)
- 运维考虑(可排查)
这样,LLM才能写出上线无压力的代码,因为你给了它“蓝图”。
一点扎心的真相
很多老开发,其实早就习惯了“脑中设计+手上实现”一条龙。每次写代码,都是先做工程师,再做程序员,帽子换得飞快。
但有了LLM,编程部分AI包了。你如果不认真做工程师的活,只会下“魔法提示”,最后得到的,是个只在demo里能用、真环境就翻车的项目。
扎心的是:很多自称工程师的,其实只是程序员。代码写得贼溜,但从没真正搞过系统设计,要么一直在实现别人的架构,要么项目本身太小没啥复杂度。
在LLM时代,这个区别终于变得重要了。单纯的写代码技能正在被AI取代。真正有价值的是“工程思维”:理解需求,设计架构,权衡取舍,预判故障。
该怎么进化你自己
如果你正在学编程,不要只学语法和框架。学会像工程师一样思考:
- 写完功能,问问:“一千个人同时用会咋样?”
- 写代码前,先想:“都有啥可能出错?每种情况该怎么兜底?”
- 研究真实系统设计,不要只看教科书里的小例子
- 学会写别人能看懂、能实现的详细需求说明
- 不光要会“怎么做”,更要懂“为什么这么做”
如果你已经在开发岗位,注意分清自己干的是哪一头。只是对着规范写功能?那你就是程序员,未来LLM会把这工作抢走。赶紧加强工程能力:系统设计、需求分析、架构思维。
如果你在面试招人,别再考“能不能写FizzBuzz”,改问“设计个URL短链系统,能扛1000请求/秒,故障咋办?”写代码的活儿越来越自动化了,剩下的全靠脑子。
最后的笑点
说个小秘密:这篇文章,其实是我和Claude合写的。不是我不会写,而是Claude作为“写作程序员”比我还专业。我给它核心思路、写作架构、风格要求(要有建筑比喻、要举案例),它写得比我快还顺。
Claude写了优美的段落。但那些最关键的决定——讲什么、怎么安排、用什么例子、读者能不能get到——全是“工程师”我来定的。
未来的软件开发,不会是“全自动无人区”。而是人类做擅长的事——理解复杂需求,做取舍,设计健壮系统;AI做擅长的事——把规范变成精美、可靠的代码。
但前提是:你得记得自己是工程师。否则,盖出来的,还是那种没人敢住的高楼。
这种故事,咱都不想再听第二遍吧。
你用AI编程工具踩过什么坑?你发现自己开始更多地思考工程问题,还是还停留在“写个X就行”?欢迎留言分享——翻车现场往往比成功故事更有料!
(本文由人类原创,部分内容参考AI协助优化。)
