前一阵子一位朋友转给我一句话,说某家AI芯片巨头的大佬在开发者大会上讲:编程以前是只有少数人掌握的本事,现在不过是“打字”而已。朋友问我,你写了12年代码,这句话到底扎不扎心?我说,扎心谈不上,但确实值得掰开来聊一聊。作为一个每天都在跟需求评审、接口文档、线上告警打交道的普通业务程序员,我没做过芯片,也没参与过大型模型训练。那句“编程只是打字”,在我听来更像是一句站在山顶的人对山脚人群说的话。不是说他没有道理,而是他的坐标系,跟我完全不同。
1. 先别急着反驳,那句“编程只是打字”是在什么场合说的
1.1 这句话的真实语境,其实是一句商业叙事
那位大佬说出这句话的场合,印象中是自家的开发者大会。不是某场闭门技术交流会,也不是对一群资深架构师的内部演讲。开发者大会是什么地方?是给开发者、合作伙伴、投资人展示生态的舞台。在这个舞台上说“编程门槛降低了、人人都会用AI写代码”,真正想传递的信息不是“程序员要失业了”,而是“我们的AI工具很强,连打字这种程度的事都能替你完成,快来用吧”。
我在看直播的时候,第一反应其实不是愤怒,而是觉得这句话很聪明。它把“编程”这个让多数人望而生畏的概念,一下子降维成了一个日常动作:打字。这会让台下那些非技术背景的嘉宾感到很亲切,也会让投资者觉得生态即将爆发。这是一句经过设计的商业叙事,不是严谨的技术定义。用我们行话说,它在做的是“心智占领”,而不是“技术白皮书”。
1.2 标题党为什么总爱把这句话单独拎出来
问题出在传播环节。整场演讲里有大量关于AI编程助手的演示,还有对未来开发方式的畅想。但当媒体把“编程只是打字”单独摘出来做成标题时,情绪就完全变味了。程序员看到的是自己的专业被轻蔑,非程序员看到的是“我好像也能干这行了”。同一条新闻,两种解读,天差地别。
我自己第一次刷到这条消息时,心里也不是滋味,毕竟写代码是我吃饭的手艺。但冷静下来想一想,如果把这句话放回原语境,它更多是在鼓励普通人尝试编程,而不是在否定程序员的价值。真正让我不舒服的,其实是后来网上铺天盖地的“程序员要被取代了”的衍生解读。那句话本身只是导火索,常年存在的行业焦虑才是火药桶。现在很多讨论都是在用情绪代替事实,我觉得有必要从一个一线干了12年的人的角度,把这件事拆开说清楚。
2. 说这话的人和写代码的人,根本不站在同一层
2.1 真实编程的一天,一半时间在“考古”
以我最近接手的一个历史模块为例。那个模块是四年前另一批同事写的,文档缺失,注释稀稀拉拉,唯一的线索是提交记录里那些语焉不详的commit message。我需要给它加一个新功能,结果花了整整一个下午在“考古”:翻各个版本的改动记录,对比接口返回值的差异,甚至去查当时的一份Excel需求文档,才搞清楚某个字段为什么被写死。真正新增的代码,加起来不到二十行。
类似的场景在我12年里反复出现:线上突然告警,一个订单金额差了一分钱。我花两小时翻日志、查促销规则、复现操作路径,最后发现是某个优惠券的边界条件没处理好。修复代码就五行。如果用“打字量”来衡量,这两天我几乎等于白干。但正是这两小时的“不产出”,才保证了系统的正确性。这就是真实编程里最日常的部分,它和打字几乎没有关系。
2.2 “打字”只是最后落地的那一公里
我在很多场合都说过,编程的绝大多数时间并不是发生在键盘上,而是发生在脑子里。拿修水管来打比方:一个水管工接到报修电话,他不会一到现场就疯狂拧扳手。他要先判断漏水点在哪里,水压有多大,是管材老化还是接头松动,甚至要评估改造方案的成本。拧扳手这个动作可能只占整个维修过程的百分之十,但所有人都管他叫水管工,没人叫他扳手操作员。
代码也是一样。需求方告诉你的通常是“这里不太对”“这个功能下周要上线”,他不会告诉你问题出在哪一行、方案该用什么数据结构。把这些模糊信息转化成明确的技术方案,本质上是一个分析、判断和取舍的过程。只有当一切都想明白了,最后的“打字”才顺理成章。所以那位CEO说“编程只是打字”,等于用最后一步定义了整个过程,这个偏差非常典型。
2.3 一个12年程序员最想纠正的偏差
“会打字”和“会编程”之间的差距,约等于“会握方向盘”和“会开车”。新手拿到驾照都会打方向盘,但遇到暴雨天气、突发爆胎、窄路会车时,方向盘只是一个结果,真正的功夫在预判和反应。编程也一样,AI工具确实让“打方向盘”变得越来越容易,但遇到依赖冲突、编译环境不一致、老系统迁移这类问题时,经验的价值就立刻显现了。
我带过不少新人,最明显的感觉是:他们用AI生成代码的速度一点都不慢,慢的是出问题之后的处理。AI生成了一段看似合理的代码,但放到生产环境里,遇到高并发、脏数据、时区差异,瞬间就露馅。能写出代码只是入门,能判断代码在真实运行环境里会不会出问题,这才是一个程序员的核心竞争力。而这个判断力,恰恰是“打字”两个字完全没覆盖的部分。
3. 编程真正值钱的地方:决策密度,不是字符产量
3.1 一个登录注册模块,背后藏着几十个决定
外行看程序员写一个用户注册模块,觉得无非是接收参数、写进数据库、返回成功。但稍微有经验的人都知道,这里面全是决策:密码用什么哈希算法,需不需要加盐,验证码怎么防绕过,要不要限制登录频率,session存在Redis还是本地内存,日志里怎么脱敏用户信息,第三方登录的回调地址怎么处理,多设备同时登录是踢掉旧的还是都保留。
每一个选择背后都是权衡。用简单方案可能上线快,但安全性差;用复杂方案安全了,但维护成本高。AI可以在一分钟之内给你生成三套不同风格的实现,但它不会告诉你,以你团队现在的运维能力,应该选哪一套。更关键的是,一旦线上因为这串代码出了安全事故,被追责的是签字上线的人,不是生成代码的AI。这种责任属性决定了,最终拍板的必须是人。
3.2 AI擅长的和人类擅长的,根本不是一回事
我自己做了一个简单的对照,越看越觉得两边分得很清楚:
| 维度 | AI擅长 | 人类程序员擅长 |
|---|---|---|
| 已知模式 | 样板代码、语法转换、模板套用 | 识别模式是否适用于当前场景 |
| 处理未知 | 无法处理没有见过的问题 | 从模糊描述中提炼需求本质 |
| 方案取舍 | 给出多个候选,但不排序 | 结合成本、风险、团队能力做决策 |
| 承担责任 | 不承担 | 对线上结果负全责 |
| 沟通协作 | 生成文本 | 和非技术同事对齐预期 |
这个对照我用了很久,每次觉得“AI是不是要取代程序员”时,就把它翻出来看一遍。AI本质上是把“已知”做得更快,而程序员的真正价值是从“未知”里找出路。公司付你薪水,买的不是你打字的速度,而是你面对一个从没遇到过的问题时,能给出一个大概率正确的方向。这部分能力,短期之内很难被训练成模型参数。
3.3 我让AI帮我写代码半年后的真实感受
过去半年我确实大量使用AI写代码,主要是内部工具和数据看板类项目。最直观的变化是,以前写一个PDF解析脚本要对照文档查API,现在让AI先生成框架,我再改改边界条件,效率确实翻倍了。但我也付出了新的代价:我需要更认真地review每一段AI输出,像审核一个新入职同事的代码一样。
有一次我让AI生成一个促销活动的倒计时逻辑,它默认用了服务器本地时间。当时测试环境刚好是UTC时区,而我们的业务时间全部以北京时间为准,结果活动在晚上八点上线,用户端却显示下午三点开始。那一次如果不是同事多看了两眼,月底的活动数据会全部错位。从这之后我养成了一个习惯:AI给的代码,我要么亲手跑一遍边界用例,要么要求自己先解释清楚逻辑。打字是变少了,但每行代码都多了一道“要不要采纳”的判断题。
4. AI确实让一部分活变轻了,但也让另一部分变重了
4.1 哪些活儿真的变轻松了
我盘点了一下,以下几类工作确实因为AI而明显变轻松:样板代码,比如增删改查接口、基础配置;一次性脚本,比如数据清洗、日志分析、文件格式转换;单元测试的铺量,AI可以快速生成大量测试用例骨架;技术调研的起步,让AI先整理方案,我再判断方向。这些事以前占据了我大概三成的时间,现在这个比例降到了不到两成。
这是好消息,而且我不觉得这件事有什么好悲观的。工具本来就应该替人做重复劳动,就像计算机取代了算盘,没有人会为算盘失业而悲伤。程序员的关注点正在被迫前移,从“怎么实现”向“为什么做”“该不该做”“做成什么样”移动。这个前移对个人能力的要求其实更高了,因为它逼着你理解业务、理解用户,而不是躲在技术细节的舒适区里。
4.2 一个差点酿成线上事故的AI代码
继续讲案例。有一次我需要为一个老系统写一个定时任务,用来同步两个数据源之间的用户积分。AI生成的主干逻辑看起来非常整洁,循环、分批、幂等标记都写清楚了。但我在review时注意到一个细节:它把“用户积分变更时间”当成了幂等判断依据,而这个字段在老系统里经常因为人工修正而乱掉。如果按它的逻辑跑,某些用户会被重复扣分。
这个案例特别能说明问题:AI写的代码在“语法层面”几乎完美,但它不了解老系统里那些历史遗留的脏数据。代码写得好不好,很多时候不取决于代码本身,而取决于它对运行环境的假设是否成立。AI只能根据你给的prompt做推测,你如果不把脏数据、人工修正、历史迁移这些上下文喂给它,它就会用最干净的假设去写最危险的逻辑。这恰恰是判断力最值钱的地方。
4.3 判断力成了新的稀缺资源
以前行业里稀缺的是“会写代码的人”,因为有大量系统等着建设,只要能把功能堆出来就算人才。现在AI把“堆代码”这个环节压缩得越来越便宜,真正的稀缺变成了“知道该写什么、该用什么方式写、写到什么程度可以收手”的判断力。判断力听起来很玄,但它确实可以训练。
比如我面试新人时,现在很少考察对方背了多少API,更多是抛一个模糊问题:某个搜索框需要支持模糊匹配,但数据量有几千万,你怎么设计?我更想听的是对方会不会先问数据源是什么、更新频率多高、要不要实时索引,而不是张口就来一套搜索引擎方案。能不能把模糊需求一步步拆成清晰约束,这是我在意的东西。这也是为什么我认为“编程只是打字”这句话特别片面——它把最值钱的那个环节,当成不存在了。
5. 12年老程序员给新人的几句实在话
5.1 要学的不是编程语言,而是拆问题的能力
总有人问我,现在学Python还是Java,是不是该转行。我的回答一般都不是你想听的:语言不重要,拆问题的能力才重要。一个功能模块从需求到上线,编程语言只是最后一层的表达工具。真正难的是把“用户想要什么”翻译成“系统需要做什么”,再把“系统需要做什么”拆成“先做A、再做B、最后做C”。
新人最实用的练习方法,我建议是拿到任何需求时,先别急着打开编辑器,先写一个200字以内的实现思路,用大白话讲清楚你要做什么、怎么做、可能出现什么风险。如果连这200字都写不顺,说明还没想清楚,写代码只是把混乱变成更大的混乱。我写了这么多年,最值钱的技能反而是写文档、画流程图、跟产品经理对需求。这些都是拆问题能力的延伸。
5.2 提问能力比背诵API值钱多了
AI时代一个很反直觉的变化是,“会提问”变成了硬技能。喂给模型一段高质量prompt,和随便抛一句话,得到的代码质量天差地别。能把业务背景、边界条件、期望产出、约束条件说清楚的人,AI给他生成的方案明显更可靠。而这一切的前提,是你自己真的理解那个问题。
这份能力在人和人协作时同样重要。绝大多数会议上,技术讨论低效的根源不是大家不懂技术,而是没人抽象出真正的目标。你问“这个接口到底要解决什么问题”,比立刻讨论“用什么框架”更能推进讨论。我见过很多成长快的新人,共性是提问极其精准。先把问题描述到不需要对方反问你三次,再动手去问AI或者同事,效率会高出一大截。
5.3 工具越强,越要给自己列一份“不做清单”
最后分享一个我自己的土办法。AI工具越来越强之后,我给自己列了一份“不做清单”:涉及资金计算、权限校验、用户隐私、核心链路稳定性的代码,绝不盲信AI生成的结果,一定亲手写、亲手验、亲手review。倒不是说AI一定不行,而是这类代码出错的代价太大,我不能用一个可能不知道生产环境细节的黑盒来背书。
我记得很清楚,有一次为了方便,让AI生成了一段导出用户数据的代码,逻辑没问题,但它默认把手机号明文导出了。因为我在prompt里没有提到脱敏要求,它当然不会主动处理。这段代码如果被直接拿去跑,就是一次数据安全事故。工具越强,你越要有意识地控制哪些事可以交给它、哪些事必须自己来。就像老司机开车,辅助驾驶再方便,暴雨天你也得抓紧方向盘。
写代码写到第12年,我的体会其实越来越简单:编程很大程度上是“想清楚”的功夫,打字只是把想清楚的东西倒出来。工具再能打字,也代替不了你头脑里那套关于取舍、边界和责任的判断。哪怕有一天AI能把整个项目一口气写出来,决定“我们到底该不该做这个项目”的人,依然需要一个能判断风险的程序员去担当。那个决定,始终得有人来担。