品味无法被自动补全
先做个实验。给你两段代码,都能跑,都通过了同样的测试,功能一模一样。可一个干了十年的老手扫一眼,就会指着其中一段说:这个好。你问他好在哪,他往往一时说不全,只憋出一句"就是感觉这个干净"。
这句"感觉"最容易被当成玄学,好像是天生的、说不清的、带点神秘的东西。这一章我想干的事,就是把这层神秘剥掉——告诉你那不是感觉,是一套长在身体里的快速判断;它从哪来、为什么 AI 给不了你、你怎么把它养出来。
先说清楚"品味"到底指什么
品味,在这本书里特指一件很具体的事:在没有标准答案的地方做取舍的能力。
有标准答案的地方不需要品味。1 加 1 等于几、这个字符串怎么反转、快排怎么写——这些有唯一正确解,查一下、背一下、让 AI 补全一下就完了。品味只在"怎么做都能对,但就是有高下"的地方才登场。变量叫什么名、这个函数拆成两个还是留成一个、错误在这里抛还是往上传、把复杂的部分藏在哪一层——这些没有裁判,没有编译器帮你判分,全靠人来拿主意。
所以品味不是"知道正确答案",而是"在没有正确答案时,知道哪个更好"。这两件事的区别,正是这一章的全部。
AI 的补全,本质是回归到平均
要理解 AI 为什么给不了你品味,得先看清它到底在干什么。
AI 写代码,靠的是自动补全——根据海量样本,预测"接下来最可能出现什么"。
它读过几千万个程序员写的代码。你打出一个函数开头,它就在心里算:在见过的所有类似开头之后,人们最常接着写什么?然后把那个"最常见的接下来"给你。它不是在思考什么对,它是在数什么多。
这件事有个逃不掉的后果:它给你的,永远是最常见、最不容易出错、最中庸的那个答案。用统计里的话说,这叫回归到平均——大量样本一平均,尖锐的、特殊的、极端的都被磨平了,剩下中间那一坨最普通的。(严格说,你可以调高它的「冒险系数」,让它偶尔蹦出非典型的写法;后期还会用人类反馈去调教它的偏好。但这些都只是让它离平均远一点点——骨子里,它依然是朝着「最像样的高频写法」在回归。)
就像你问一万个人早饭吃什么,把答案平均一下,得到的不是任何一个人真实的早饭,而是一个谁都不会真去吃的"平均早饭"。AI 给你的代码,很多时候就是这份平均早饭:哪儿都不难吃,但也说不上好。
而品味恰恰是反过来的东西。品味是知道什么时候该偏离平均——知道这个地方不能用最常见的写法,得为了某个具体的人、某个具体的将来,做一个"与众不同"的决定。AI 天生往中间走,品味天生知道何时该往边上走。这俩从根子上就是拧着的。
回到那两段代码
空谈没用,看具体的。假设我们要处理一批用户订单,两段代码都能跑。
第一段这么写:函数叫 process,里面一个变量叫 d,一层套一层的 if,把校验、算钱、扣库存、发通知全塞在一个八十行的函数里。它对,它跑得通,测试全绿。
第二段:函数叫 settleOrder(结算订单),里面的变量叫 order、remainingStock(剩余库存);校验被单独拎成一个 validate,算钱是一个 calculateTotal,主函数就短短几行,像一段目录,读一遍就知道整件事分几步。
老手为什么一眼选第二段?把他那句"感觉干净"拆开,其实是四件能说清的事:
- 命名:
settleOrder告诉你这函数是干嘛的,process等于没说。名字是写给读代码的人看的路标,好名字让人不用点进去就懂。 - 边界:库存不够怎么办、订单为空怎么办——好代码在显眼的地方把这些边角情况先处理掉,而不是等它半夜炸了才想起来。老手被这种边界坑过太多次,身体记得疼。
- 把复杂藏在哪:复杂消不掉,但能挪。第二段把每一坨复杂关进各自的小函数里,主函数只剩清爽的骨架。这叫把复杂藏对地方,让你每次只需要面对一小块。
- 半年后的感受:这是最要命的一条。半年后有个新人接手,或者就是你自己忘光了回来改。第一段那八十行会让他坐在屏幕前头皮发麻,改一处怕碰坏三处;第二段他扫一眼目录就知道该动哪。
看出来了吗?这四条没一条是关于"能不能跑"的。它们全是关于别人和未来的自己,读起来、改起来是什么感受。
好品味,是替未来的人做的体贴
这是我最想让你记住的一句话:好品味的本质,是替未来读这段代码的人(很可能就是你自己)做的体贴。
代码写完那一刻,能不能跑就定了。但代码会被读几百次、改几十次,绝大多数时间它是被人看、被人维护的。写得中庸、写得平均,机器一点不在乎——它不读代码的"感受"。在乎的是人。
而 AI 的补全,恰恰缺了这个"具体的人"。它不知道半年后是谁来接手、他赶不赶时间、这段代码在你们这套系统里是主干还是边角、你们团队约定俗成的规矩是什么。它只知道全世界的平均写法。体贴一定是针对具体对象的,而平均里没有具体的人——这就是它给不出品味的深层原因。
能跑,是写给机器的及格线。好读好改,是写给人的高下之分。AI 帮你稳稳踩过及格线,但那条高下之分的线,还得你自己来划。
为什么品味只能"长出来"
既然品味这么值钱,能不能像背知识点一样,一次性教给你、灌给你?
不能。这正是它稀缺的原因。
知识可以灌,因为知识是"是什么"。品味没法灌,因为它是"这么干将来会怎样"的预感,而这种预感只能靠反复见到真实后果长出来。
你把一个函数写得随随便便,当时爽了。三个月后你回来加需求,被自己埋的坑绊了个大跟头,改了一下午还没改对——就在那个下午,你身体里长出了一点点品味。下次再遇到类似的地方,你手会先停一下。你说不清为什么停,但你知道再往前是坑。这个"停一下",就是品味在工作。
所以品味的养料是两样东西:见过足够多的好(知道优雅长什么样,有了参照),和被足够多的烂坑过(知道代价疼在哪,有了敬畏)。这两样都得亲身经历,隔着屏幕看别人讲不算。就像你没法靠读游泳教程学会游泳,也没法靠读别人的品味获得品味——那套快速判断必须在你自己身上、被真实后果反复锤出来。
这里还有个反直觉的地方:AI 越好用,你越容易失去长品味的机会。因为长品味要靠踩坑,而 AI 帮你把常见的坑都先填了。这是好事,也是陷阱——你舒舒服服跳过了那些本该教育你的疼。所以在 AI 时代练品味,得刻意一点:别只满足于"它给的能跑",多问一句"如果是我,我会不会这么写、为什么",多去读那些公认写得好的代码,多在自己踩坑时停下来复盘,而不是让 AI 一键糊过去。
怎么判断自己有没有在长品味
给你几个能自查的抓手,都是可观察的,不玄:
- 看 AI 给你的代码,你能不能说出它哪里"平庸"、换你会怎么调,并说清为什么。只会说"看着还行"就是还没长出来。
- 你改自己半年前的代码时,是想骂人还是能顺畅接上。骂得越多,说明你这半年的品味涨得越快——你现在的眼光已经看得见当初看不见的糙。
- 你能不能对着两个都能跑的方案,讲清"我选这个,是因为将来在某某情况下它更不容易出事"。能把取舍讲成因果,品味就在成形。
说到底,写代码这件事被 AI 摊薄的,是"把想法变成能跑的代码"这一段——那一段越来越像平均早饭,谁都能端上来。没被摊薄、反而更值钱的,是"在都能跑的方案里挑出更好的那个"的那一下判断。前者是补全,后者是品味。补全会回归平均,品味负责偏离平均;补全服务机器的及格,品味服务人的将来。
这一下判断没有标准答案,所以没法自动补全;它只能靠你被真实的好与坏反复喂大,一点点长在身体里。慢,是它的代价,也是它的护城河。