Linguista

编码作为手艺:回归旧式健身房

2025年4月22日

近期,Shopify的CEO Tobi Lütke分享了他对AI在编码中作用的看法,指出“主动自觉地使用AI现已成为Shopify的基本要求”。他信息的核心要点是,AI正在彻底改变我们的工作方式,每个人都应该搭上这班列车,否则就有被甩下的风险。我稍微转述了一下,但大致如此——请查看原文以了解完整的背景和内容。

这触动了我,但并非他所期望的那种方式。在与Elm工程师同行的Slack对话中,我发现自己输入了以下内容:

时间点很有趣。我刚切换回vim,就是为了进一步远离AI对我编码的干扰。我上次关于AI的演讲副标题是“自动化无聊的部分”(灵感来自那本经典的Python书籍),对我来说,AI就是干这个的。

然而,编码并非无聊的部分,它是我的手艺,我想享受它并保持敏锐。当然,如果你手头只有LLM(大语言模型),用它来提问和讨论话题是可以的。但“主动自觉地使用AI”听起来像是我不希望出现在我名下的诊断结果。

如果人们不再经历那种偶尔的僵局——咬紧牙关、审视问题、哭泣、散步、祈祷和呐喊,直到豁然开朗(并且你学到了东西!),我会称之为严重的倒退,而非进步。

我对这次交流以及前辈们的其他评论反思得越多,就越意识到它关联到一些更深层次的东西,关乎我们与技术和手艺的关系。是时候谈谈回归旧式健身房了。

洛奇·巴尔博亚原则 (The Rocky Balboa Principle)

在电影《洛奇3》中,有一个关键时刻,米奇(Mickey)质问洛奇(Rocky)是如何失去锐气的:“你过去像超人一样,但最糟糕的事情发生在了一个拳手身上:你变得文明(安逸)了!”

米奇的解决方案?“我们离开这儿,回那个旧健身房去!”

这一幕一直留在我心中,因为它捕捉到了关于精通技艺和技能发展的一些深刻道理。“旧健身房”代表了真实成长发生的原始、必要条件。它不舒适,不豪华,但真正的锤炼在那里完成。

在编码的语境下,我们的“旧式健身房”是我们直接与问题、算法和架构搏斗,而没有AI为我们生成解决方案这个缓冲垫的心智空间。

AI作为工具,而非替代品

首先明确一点:我并非反对AI。事实上,我发现它极其有用——用于处理那些无聊的部分。

AI擅长:

但是编程的核心——思考、设计、架构决策——这些是我希望作为我的手艺加以珍视的部分。这些是我希望通过在旧式健身房训练来保持强壮的肌肉。

认知挣扎的价值 (The Value of Cognitive Struggle)

与难题搏斗的过程有其不可替代的价值。当你卡住时,完全卡住时,你可能会:

那个“啊哈!”的时刻会重塑你的大脑。它创建了神经通路,让你永久性地在你所做的事情上变得更强。这就是编码界的肌肉记忆,也是我们作为工程师成长的方式。

当我们将这种挣扎外包给AI时,我们就剥夺了我们自身的这些成长机会。我们得到了解决方案却不理解其所以然。我们得到了代码却没有手艺的沉淀。

AI可以生成代码,但它(目前)还不能理解那些使系统随着时间推移真正可维护和适应性强的细致入微的决策。它不会像拥有深厚经验和来之不易知识的人那样,用心和考量去设计你的领域层(domain layer)。并且重申:它是否在特定任务上成功不应是你唯一关心的,如果你在乎你的手艺——你是否学到了东西也应该重要!

需要明确的是,早在LLM成为焦点之前,人们就已经在“逃避挣扎™”(Avoiding The Struggle™)了。StackOverflow、Google,甚至坐在旁边办公桌的同事,如果滥用,都可能成为剥夺你有效学习的绝佳工具。但是,AI工具这种直面而来、持续可用且范围巨大的特性,其影响要广泛和巨大得多——这就是我特别提出它的原因。

主动自觉使用 vs. 有意识协作 (Reflexive Usage vs. Intentional Collaboration)

“主动自觉地使用AI”(Reflexive AI usage)这个短语引发了我最强烈的反应。“主动自觉”(Reflexive)暗示着不假思索、自动化的依赖。它意味着不仅委托任务,还委托了判断力本身。

我所提倡的,是有意识地与AI协作:

这种方法保留了你作为手艺人的自主性,同时仍然利用了AI能带来的效率。

旧式健身房锻炼计划 (The Old Gym Workout Plan)

那么,在2025年,“回归旧式健身房”对于编码来说意味着什么?这是我的方法:

  1. 设定AI使用界限:明确你何时会使用它,何时不会。我用它来查阅文档、获取解释和偶尔生成样板代码——很少用于核心算法或架构。而且我不用AI驱动的自动补全!
  2. 练习手动编码:定期在没有任何AI辅助的情况下解决问题。像Advent of Code、LeetCode这样的网站,或者甚至从零开始实现一些小工具,都能保持这些“肌肉”强壮。(AI不是唯一的问题——我特别针对你们这些“万事皆用现成npm包”的瘾君子们,以及你们这些“没有花哨IDE就迷失”的可怜人!)
  3. 理解你使用的每一行代码:如果AI为你生成了代码,不要只是粘贴进来。研究它。理解它。重构它。让它成为你自己的东西。永远,永远不要只是接受copilot / cursor的Tab建议然后继续!
  4. 拥抱挣扎:卡住时,抵制住立即询问AI的冲动。给自己时间去解决问题。挣扎之处即是成长之处。
  5. 深入学习基础知识:对算法、数据结构和设计模式的扎实掌握,使你能够批判性地评估AI生成的解决方案。与其让AI给出答案,不如(如果需要的话)与它讨论,并要求它提供相关的(人类编写的!)资源以供深入学习。

寻找平衡 (Finding the Balance)

这并非要拒绝进步或成为一个编码纯粹主义者。而是关于在一个日益自动化的手艺中保持人的要素。

就像厨师可能会使用食物处理器来处理繁琐的准备工作,但绝不会梦想将食谱开发和风味平衡这些创造性方面自动化一样,我们应该利用AI做它擅长的事情,同时保留那些给我们带来乐趣和成长的编码部分。

结论

在一个推动“主动自觉地使用AI”的世界里,我倡导的是不同的东西:一种深思熟虑的、有意识的与AI协作,从而保留编码作为一门手艺的精髓。

像洛奇一样,我们有时需要离开舒适、文明(安逸)的环境,回归旧式健身房——那个通过挣扎、坚持和专注的练习来实现真正成长的地方。

因为编码不仅仅关乎产出。它是成为更好的问题解决者、更好的思考者和更好的工程师的旅程。而有些旅程是无法外包的,即使是给最先进的AI。

让我们用AI自动化无聊的部分,但将手艺掌握在自己手中。

“重要的不是你能出多重的拳,而是你能承受多重的打击并继续前进。” – 洛奇·巴尔博亚 (Rocky Balboa)