即刻App年轻人的同好社区
下载
App内打开
Yuchen__
285关注151被关注1夸夸
欲善其言,先修其默。
欲臻无言,必先尽言。
置顶
Yuchen__
6月前
置顶:
信息食谱 web.okjike.com

========================
From Vibe Coding to Vibe Engineering

AI改变了编程的范式,极大地降低了编程的门槛,尤其是在2025年12月agent能力提升之后,底层模型编码能力的提升,加上拆分执行任务的能力,普通人很多时候可以仅仅通过一两次对话得到自己定制的软件功能。但是作为一个有一点编程基础的普通人,最近vibe coding的经验让我感觉,如果要处理有一定体量的项目,至少到目前为止一定编程能力可能仍然需要,只不过我们可能需要对编程能力重新定义。

搜索资料的过程中Anthropic的这篇报告 How AI assistance impacts the formation of coding skills (www.anthropic.com) 证实了一个我一直以来隐隐约约的感受,也就是使用AI的方式也许决定了未来我们是否还能"掌握"技能。vibe coding的畅快感是一种无法抵御的诱惑,AI可以让一个对编程一无所知的人在几分钟之内就产出一个原本可能需要几个月甚至几年学习时间和几天的编程时间才能完成的功能,但在这个过程中往往为了追求更快的速度和效率,我们将越来越多原本对形成技能必要的认知过程让渡给AI。人本身对自我学习效果的评估就充满偏差(认知科学中称为 fluency illusion),真正学习的效果的自我感知往往是反直觉的,AI的出现则进一步加剧了这个幻觉。而认知科学中反复验证的规律则是:学得越轻松往往学得越快,忘得也越快,学得感觉有点难,才有可能真正学会(即 Bjork 提出的 desirable difficulties),这恰恰也是报告中提到的点,在编程中"不恰当"使用AI导致掌握程度出现显著的下降,相反,仅仅用AI生成概念理解,而仍然手工编写代码可以保证较高的掌握程度,尽管这样的速度可能更慢。假设我们用技能的成熟度和使用AI的方式分成四类人,可以预见的是如果我们不在效率洪流中主动选择在发展技能过程中使用AI的方式,大多数人就会滑向技能退化和虚假的繁荣,无法成功发展出熟练的技能

辅助理解 全局代劳
技能成熟度:初阶 加快理解 技能退化
技能成熟度:高阶 继续精通 /

("技能退化"参考 Addy Osmani: addyosmani.com)

"People who go all in on AI agents now are guaranteeing their obsolescence. If you outsource all your thinking to computers, you stop upskilling, learning, and becoming more competent."
— Jeremy Howard, creator of fast.ai (www.fast.ai)

人类对"轻松"有天然的渴求,而AI就像一颗蜜糖,好吃,但是也暗藏代价。

以下是相对技术的观察和思考,作为一个业余爱好者尽可能贴近的叙述,补上vibe coding过程中欠下的认知债务:

【认识 Agent 的工作方式:怪癖与边界】

- Agent写代码的速度很快,执行力也很强,但无法自行选择"正确"方向,或者说不知道什么时候应该停下。如果在长程任务中没有合适的监管,就会在错误的路上一路狂奔。当我问它当前代码有什么改进方向的时候,它总能提出一些改进方向,而很多方向其实是 over engineering,完全没有必要,而如果对它提出了当前代码有什么问题,它也总是能提出一个解决方案而不会思考我提出的问题本身是不是正确。因此比起让Agent做更多,更重要的其实是知道什么不需要Agent修改,或者说什么时候应该喊停。人编程的速度有极限,所以我们会深思熟虑每一行代码,但Agent可以持续流畅地生成,所以避免错误就是在节省时间。

- Agent一定会犯错,并且以一种无法预测或者说我们的直觉还不够熟悉的方式犯错。在vibe coding的过程中,Agent初期连续达成目标会极大地增加我们对其的信心,从而在之后的编程过程中给予更大的权限和更多的任务。但是如果我们没有识别错误的能力,我们最后就会获得一堆有着奇怪错误的无法维护的代码。而且Agent还会可能会作弊,直接修改设置好的测试,因此并不能让Agent无监管地持续运行。

Kent's mental model of AI agents: an "unpredictable genie" that grants your "wishes" — but oftentimes in unexpected (and illogical) ways!
(来源:newsletter.pragmaticengineer.com)

- Agent对于计划的执行并不可靠,可能自己制定了3步的计划,但是因为没有明确计划要实现的目标和修改,所以最后实际的结果可能与计划并不符合,甚至忘记了计划中的一些点。指令的遵守并不是100%,最后实际的修改才是真正的标准。

- Agent的上下文是有限的,随着上下文中的内容增加表现会明显下降,而上下文填充的速度和衰减的速度往往比我们想象中快。如果一个对话里什么都往里塞就很容易影响模型的表现,尽可能在上下文中仅仅维持对当前任务有关的内容,问自己要完成这个任务需要知道哪些必要信息。失败的纠正,错误的执行信息都会污染模型的上下文。

【设计与 Agent 协作的工作流程】

- 为避免执行错误的修改,尤其是改动涉及到多个文件,我们需要强制将探索,计划和执行分开,而我并没有明确区分,所以也就没法让Agent以我预期的方式进行工作。一旦分开,我们就有机会在前期就改正一些明显的错误,修改一些与我们预期不符的计划,甚至让Agent快速做一些模拟,而不用等到实际修改以后再返工。在实际执行过程中,我们也要对我们的意图非常明确,任务范围是什么,场景是什么,测试偏好,有什么可以参考的模式等等,做到具体和明确的前提就是我们需要对我们编写的程序有深入的理解。

- 当目标明确并且可以验证时,Agent才能发挥最大的作用。因此不仅仅要告诉Agent要做什么,还要明确验收标准。把bug的详细报错提供给Agent就是最原始的构建反馈回路的方式。可以进一步探索 Test-Driven Development。在像编程这类相对容易验证的领域,Agent就可以如鱼得水,而对于很多没有明确标准和反馈的领域,比如写作,我们很难定义一篇好文章的标准是什么,Agent的发展就相对缓慢。

- 通过Git设定检查点,理解变化的内容,做多轮尝试。实际编程的过程就是在前进和后退两端循环。即使没空人工审核,也要让不同的AI互相审核,避免同一个AI对自己写的代码袒护。

- Agent通常会有一个包含规则的文件(e.g. CLAUDE.md, AGENTS.md),我们需要通过编写规则和提示来约束Agent的行为,让它按照我们期望的方式行事。每当我们发现Agent持续犯了同样的错误,就应该花时间设计规则防止类似的情况再次发生,但这个前提仍然是我们有判断力,知道什么是正确的行为,什么样的代码是我们想要的。

【人不可让渡的角色】

- 用Agent来辅助理解代码是为数不多正面收益很大而且基本没有风险的用途,可以用Agent来探索一个全新的代码库,也可以让Agent为代码填写文档。

- 可能我们不用再记住功能的函数名和参数,但是要真正利用好coding agent,那些写出高质量项目的能力仍然重要,决定架构,写spec,定义测试,设计功能等等。AI可以放大已有的专长,而这些专长又可能因为过度使用AI而无法成功发展,这是当下难解的悖论。

- The bottomline: Don't ship code you don't understand.

【学习心态】

- 虽然vibe coding的结果并没有预先设想的那样轻松,但是在不断与模型交互的过程当中,我们也在培养对Agent能力和"怪癖"的直觉。任何有意义的采取新工具的过程一定会经历一段效率降低的过程,就像我学习双拼最开始的几个月我的打字速度比使用全拼下降很多,但是我们需要不断练习直至新技能足够熟练,我们才能最终收获新技能给我们带来的能力边界的扩展。"一件事情变好之前通常会变坏",也许这句话很好地总结了我们学习新技能的过程。

- AI是当下最热的领域之一,但其实大部分都是hype,在思考以上这些问题的时候,Anthropic和OpenAI的官网本身就提供了足够多优质的信息和指南,除此之外,关注真正在用编程解决问题的人,而不是以传播信息为生的人。真正有价值的信号是当下最稀缺的资源。

---

回到开头那个问题:如果编程的定义正在改变,那么我们要主动保留的是什么?我倾向于这样回答——保留与代码之间真正的接触。不是抗拒AI,而是在效率最诱人的时刻保留一点不舒服:在Agent生成完之后多花十分钟读一遍,在它给出方案前先自己画一遍架构,在直觉觉得"对"的时候多问一句"为什么"。这些看似低效的动作,是把"用AI写出来的代码"变成"我写的代码"的唯一路径。技术工具更迭总是比我们适应的速度更快,但"对自己产出的东西负责"这件事,从来没变过。

===========================================
参考资料
===========================================

【Anthropic】
- How AI assistance impacts the formation of coding skills
www.anthropic.com
- How AI is transforming work at Anthropic(关于 less hands-on practice 与技能悖论)
www.anthropic.com
- Claude prompting best practices(over engineering / overeagerness)
platform.claude.com
- Claude Code best practices(探索-计划-执行、验收标准、代码库问答)
code.claude.com

【Mitchell Hashimoto】
- My AI Adoption Journey
mitchellh.com
- Vibing a Non-Trivial Ghostty Feature
mitchellh.com

【The Pragmatic Engineer / Kent Beck】
- TDD, AI agents and coding with Kent Beck
newsletter.pragmaticengineer.com

【关于技能退化与 AI 的批判性视角】
- Addy Osmani, Skill Atrophy
addyosmani.com
- Lars Faye, Agentic Coding is a Trap
larsfaye.com
- Jeremy Howard / fast.ai
www.fast.ai

【外部研究(AI 对认知的影响)】
- MIT Media Lab, Your Brain on ChatGPT(基于 EEG,样本量较小)
www.media.mit.edu
- 404 Media on Microsoft study, AI makes human cognition "atrophied and unprepared"(问卷调研方法)
www.404media.co

【认知科学相关概念】
- Desirable difficulties(合意难度):Bjork & Bjork 提出,学习时主观感觉"费力"的条件往往带来更好的长期记忆与迁移。
- Fluency illusion(流畅性错觉):Koriat & Bjork (2005),材料读起来流畅时,人会高估自己的掌握度。
00
Yuchen__
14天前
真正的强大不是刀枪不入,而是明知会被刺痛,依然选择不设防;在充满不可预测危险的世界里,依然拥有承担责任的勇气。
30
Yuchen__
1月前
最近在读David G. Luenberger的Investment Science,他是斯坦福管理科学与工程荣休教授,这本书开了基于优化理论来描述金融决策的先河,适合有一定数学基础(基础的微积分就可以)想要从更科学的角度理解金融的人。搭配MIT的15.401 | Finance Theory I和15.450 | Analytics of Finance一起学习,对理解金融理论基础很有帮助。推荐一下!
00
Yuchen__
1月前
一个学者更倾向于从一个简单的基础出发,得到复杂而高深的理论。似乎一个理论的最重要的地方是它的复杂程度,越复杂越好
00
Yuchen__
1月前
最近在读霍华德马克斯的《周期》,看了第一章写了点笔记,分享在这:

通常来说,投资本质上就是交易对未来的预测,并且根据预测制定相应的策略从而在未来获益。而市场交易的就是人们各自对未来不同的预测,不同的预测导致不同的行动,从塔勒布的角度来说,参与交易的人比只动嘴的人更可信,因为他们需要为自己的判断付出代价,尽管他们下注的动机各不相同。
通常来说未来不可预测,未来就像一团迷雾,其中的大部分内容对于我们是不可知的。比如未来的宏观面对于大部分人来说基本是不可知的,也因此即使宏观面可能是市场的主要影响因素,对于投资来说效用不大。投资的人最想知道的预测就是短期未来的股价,但是在历史上众多尝试之后,这个也基本上被证明是对于我们不可知的内容。巴菲特对信息有两个标准:重要,并且可知。反过来,虽然有些事情重要且可知,但是没用,比如未来的人口通过自然死亡率和当前的出生率其实已经基本上确定了,然而这是人人都知道的信息,所以对于获得超越市场的收益作用不大。
对于价值投资者来说,本质上我们需要预测一个资产的内在价值会如何随时间而变化,并判断当前价格相对价值的高低,而利润来自价格和价值之间的错配,并且我们相信价格最终会价值回归。
但没有人可以准确的说某件事一定会或者不会发生,并且精准的预测事件发生的时间。《大空头》里的 Burry 看对了次级贷款债券会崩盘,买入 CDS 反向下注,但是崩盘等了两年才发生,这过程中他一直承受着很大的投资人的压力。(即使真的时间判断也准确,等待判断兑现依然需要资金成本和承受能力)有意义的预测包含可能性区间,因为未来包含一系列概率各不相同的事件,而最终会发生什么我们永远不可能提前预知。我们只知道未来可能发生什么,但是这并不意味着我们能够知道未来真正会发生什么。为未来可能发生的各种事件做好准备,这是构建组合的意义。
经典概率的语言描述的是平均而言,也就是说在无数个平行宇宙当中大部分时候我们会赢。但是对于生活在现实中的我们来说,只有一件事情会发生,而这可能是一件概率极小的事件。因此单次的结果受随机性支配,优势只有在大量重复中才可能出现,而能够重复的前提是活着,如果每次都押上一切,哪怕99%的胜率,只要1%也足以将我们的一切抹平,就像满仓卖期权的人,可以赚99次小钱,但是第100次也可能归零,69轮以后我们的存活概率就已经只剩一半。
如果我们遵循霍华德马克斯对于风险的定义,风险主要就是资本永久损失的可能性,或者错失潜在盈利的可能性。合起来就是事情发展可能并不如人所愿,这是风险的来源。"别忘了那个身高六英尺的人,淹死在平均水深五英尺的河里。"
一种应对方式是为所有可能的情况都做好准备,正如哈里·布朗经典的永久组合通过分散配置,提高在不同环境中的生存能力,但也是有代价的,因为这意味着在最终的现实里我们一定会跑输押对了的人。(虽然分散策略的收益与事后集中压中最佳资产的最高收益本身就没有可比性,但是人依然会不由自主地受到他人的影响)识别周期则可以让我们在进攻和防守之间作出取舍,优化我们的组合,仓位的大小,资产的配置。
周期是人类金融史当中反复出现的模式,熟悉周期,知道如何基于当前的情况判断我们在周期中所处的位置就能知道未来收益的概率分布向哪边倾斜,并据此校准组合的攻守。一般人习惯把环境看作一个个独立事件,卓越的投资人虽然并不一定比别人更知道未来会发生什么,但是他们对环境的感知超过一般人:当前价格是否昂贵,投资者是否贪婪或恐惧,市场是否轻视风险等等。
10
Yuchen__
1月前
“Never forget the six-foot-tall man who drowned crossing the stream that was five feet deep on average.”
― Howard Marks
00
Yuchen__
2月前
所有逻辑论证都能被对逻辑推理的简单拒绝击败。
——史蒂夫·温伯格(Steven Weinberg)
00
Yuchen__
2月前
人类的心理默认设置为以焦虑和恐惧作为生存机制。所以,我们产生消极的自动思维,其实并不是我们真的消极,而只是我们的默认模式在活动而已。

我们要不断训练自己以积极的方式去反应,因为所有的情景几乎都能被重新诠释。
00
Yuchen__
3月前
心理学和哲学在治疗上的区别在于:心理学的目标是减轻痛苦,而哲学则关注我们的判断是否正确。

因此,在面对痛苦的时候,心理学的路径可能是帮我们思考如何减轻痛苦,即使这个方式并不正当(比如原则上我们可以接受有用的幻觉或者安慰剂来减轻感受到的痛苦)。

而哲学在有些时候的建议正相反,它要求我们保留恰当的痛苦,因为痛苦的消除可能依赖于错误的前提。

同时,哲学的干预适用于有明确理由的情绪,这也是情绪认知理论的基石;而心理学则可以延展到理由失效的地带。

也就是说,我们可能已经从理性上明白了某个道理,但在特定时刻,我们的神经回路仍然会产生强烈的情绪。

所以可以说,哲学修复的是感受产生的根据,而心理学则是修复判断和感受之间的断裂

哲学干预的机制之一,就是将问题重新归因。

一旦一个问题进入心理学,我们就会假设这个问题产生于人本身,产生于这个人本身。但是哲学可以重新校准问题的来源,将问题重新归类。因为很多时候我们遇到的问题,其实与我们的主观意志无关。

因此,哲学可以帮我们恰当的“甩锅”——消解问题本身,也是解决问题的一种方式。

说到底,古代哲学本身就是一种精神的操练。伊壁鸠鲁说:“不能治疗灵魂痛苦的哲学论证是空洞的,如同不能治病的医术。”但是哲学同时又是求真的,治疗效果是从这个基础上延伸出来的。在真与善不可兼得的极限之处,我们应该如何选择,也许就是哲学和心理学真正的边界。
10
Yuchen__
3月前
大部分现代哲学对于圈外人来说,几乎都是难以理解的。而第一人称的体验,因其模糊性,更是被排除在哲学研究之外的范畴。
L.A. Paul 在《Transformative Experience》(变革性体验)中研究的问题,其实就来自于我们大部分人都会经历的体验——也就是“成为一名父母是什么感觉”,并由此延伸到一切对生活具有同等影响的体验。
在成为父母之前,我们可能都或多或少地从各种渠道了解过这意味着什么,以及会经历什么:它几乎必然意味着更少的睡眠、更少的经济自由度、更少的个人时间,以及某种责任。但 L.A. Paul 在这里最关键的洞察就在于:在成为父母之前,我们永远无法真正知道成为父母是什么样的感受。
也就是说,这是一道认识上的高墙,我们唯有经历它,才能够穿越并获得相应的理解。 由此我也能联想到,我们在寻求他人建议的时候,往往更喜欢那些刚刚经历过类似转变的人的看法,而不是已经过去很久的人。对于过去很久的人,转变对他们来说已经成了新的现实,而转变前的记忆也随之而改写。而刚刚经历转变的人还不至于把新的改变当做理所当然,同时脑海中仍然残存着经历改变之前的部分认识。
L.A. Paul 真正发现的是,这些“形成性经历”(formative experiences)是我们生命中极其重要的事件,它们会深深地改变我们是谁、我们看重什么、我们喜欢什么。在这些事件发生的前后,我们本质上已经是不一样的人了,我们开始用不同的取景框来看待这个世界。 当然,某种程度上,这意味着一种未知。纯粹理性的人无法完成类似的跨越——就好像为了迎接新生,我们必须允许过去的自己暂时死去。允许改变发生,也允许自己被改变。
对任何重大选择保持谦卑,因为每一次选择本质上都是一次认识论上的革命。在这个过程当中,我们会逐渐发现自我的全部可能。
00
Yuchen__
3月前
判断一项任务可不可以外包给 AI,本质上需要去判断:在执行这项任务的过程中,其附带的能力是否在没有 AI 的时候仍然需要?

比如说,如果我们的目标是为了去考试,那么让 AI 代替我们完成作业就是一个错误的外包方式。因为做作业本身所训练的能力,是需要在考试当中临场测试的。 更进一步,即兴的演讲因为有实时对话的时间限制,我们甚至没有机会通过外接AI的方式达成,必须通过训练自身的认知过程。

所以,我们想学会什么,做到什么,就需要保留这部分的“摩擦”。这是一个硬性的人类认知的规律,无论 AI 如何发展都无法拆除的、不变的法则。
00