Linguista

「博客Rosetta」超越70%:最大化AI辅助编码中人类贡献的30%

为何在AI辅助编码时代,持久的人类技能至关重要

本文是我之前文章“70%问题:关于AI辅助编码的残酷真相”的续篇

像Cursor、Cline、Copilot和WindSurf这样的AI编码助手已经改变了软件的构建方式,承担了大量的繁重工作和样板代码。然而,正如经验丰富的开发者和行业领袖所指出的那样,软件工程中仍有一部分关键工作,AI并不能很好地处理——大约是最后那“30%”,它区分了玩具方案和生产就绪系统。这个差距包含了困难的部分:理解复杂需求、构建可维护的系统、处理边缘情况以及确保代码正确性。换句话说,虽然AI可以生成代码,但它常常在工程方面遇到困难。

Tim O’Reilly在反思数十年的技术变革时提醒我们,每一次自动化的飞跃都改变了我们编程的方式,但并未改变我们为何需要熟练程序员的原因。我们面对的不是编程的终结,而是“我们所知的编程方式的终结”,这意味着开发者的角色正在演变,而非消失。

当今工程师面临的挑战是,拥抱AI的长处(最初的70%),同时加倍投入于完成剩余30%所需的持久技能和洞见。本文深入探讨专家见解,以识别哪些人类技能仍然至关重要。我们将探讨高级开发者应继续利用什么,以及初级开发者必须投入什么才能与AI并存发展。

目标是:为最大化那不可替代的30%的价值提供实用指南,并为各个级别的工程师提供可操作的建议。

70%问题:AI擅长什么(以及它在哪里挣扎)

基于AI的编码工具在某些任务上表现惊人。它们擅长生成样板代码、编写常规函数,并将项目推进到接近完成的状态。事实上,许多开发者发现AI助手可以实现一个覆盖大约70%需求的初始解决方案。

这通常是工作中直接、模式化的部分——那种遵循成熟路径或常见框架的代码。正如一位Hacker News评论者所观察到的,AI非常擅长处理软件的“偶然复杂性”(重复、机械性的东西),而“本质复杂性”——理解和管理问题固有的复杂性——仍然落在人类肩上。用Fred Brooks的经典术语来说,AI解决了开发的偶然困难,而非内在困难。

这些工具在哪里遇到困难?经验丰富的工程师一致报告存在“最后一公里”的差距。AI可以生成一个看似合理的解决方案,但最后的30%——覆盖边缘情况、优化架构、确保可维护性——“需要严肃的人类专业知识”。

例如,AI可能会给你一个在基本场景下技术上可行的函数,但除非明确告知,否则它不会自动考虑异常输入、竞态条件、性能约束或未来需求。AI可以带你走完大部分路程,但最后那关键的30%(边缘情况、保持可维护性以及稳固的架构)需要严肃的人类专业知识。

此外,AI有一个已知的倾向,即生成看似可信但错误的输出。它可能会引入微妙的错误或“幻觉”出不存在的函数和库。Steve Yegge诙谐地将当今的大型语言模型(LLMs)比作“效率极高但可能精神错乱的初级开发者”——速度惊人且充满热情,但“可能磕了致幻药”,容易编造出疯狂或根本行不通的方法。

用Yegge的来说,LLM可以喷涌出初看之下很完善的代码,然而如果一个经验不足的开发者天真地说“看起来不错!”并付诸实施,接下来的几周内就会引(酿)发(成)笑(灾)料(难)。AI并不真正理解问题;它只是将通常有意义的模式拼接在一起。只有人类才能辨别一个看似不错的解决方案是否隐藏着长期的隐患。Simon Willison在看到AI提出了一个极其巧妙的设计,但只有对问题有深刻理解的高级工程师才能识别其缺陷后,对此表示赞同。教训是:AI的自信远超其可靠性。

至关重要的是,当前的AI无法创建超越其训练数据的根本性新抽象或策略。它们不会为你发明新颖的算法或创新的架构——它们只是重新混合已知的东西。它们也不会为决策负责。正如一位工程师指出的,“AI的想法不会比其训练数据包含的更好。它们不对自己的工作负责。”

所有这一切意味着创造性和分析性思维——决定构建什么、如何构建以及为何构建——仍然牢牢掌握在人类手中。总而言之,AI是开发者的力量倍增器,处理重复性的70%工作,并在生产力上给我们带来“涡轮增压”​​。但它 不是可以替代人类判断的银弹。软件工程剩余的30%——困难的部分——仍然需要只有训练有素、思维缜密的开发者才能带来的技能。这些是需要关注的持久技能。正如一次讨论所言:“AI是一个强大的工具,但它不是万能药……人类的判断力和良好的软件工程实践仍然至关重要。”

依然重要的持久工程技能

要在AI增强的开发世界中茁壮成长,工程师应加倍投入那些AI尚无法(目前)复制的持久技能和实践。无论我们的工具变得多么先进,这些能力都将保持关键。尤其要着重加强以下方面:

这些技能构成了软件工程中的人类优势。它们之所以持久,是因为它们不会随着下一个框架或工具的变化而过期;相反,AI的崛起使它们更加突出。Simon Willison认为,AI辅助实际上使强大的编程技能更有价值,而不是更没价值,因为拥有专业知识的人可以更有效地利用这些工具。

强大的机器在不熟练的人手中可能是危险的或被浪费的,但在有能力的人手中则是变革性的。在AI时代,经验丰富的工程师就像一位拥有新的先进副驾驶的经验丰富的飞行员:旅程可以更快更远,但飞行员仍然必须驾驶穿越风暴并确保安全着陆。

高级开发者的优势:结合经验利用AI

对于高级工程师来说,AI编码工具的出现应被视为放大你影响力的机会——前提是你以正确的方式利用你的经验。高级开发者通常拥有深厚的领域知识、对可能出错之处的直觉,以及做出高层技术决策的能力。

这些优势是AI无法单独处理的那30%的一部分。以下是经验丰富的开发者可以最大化其价值的方法:

简而言之,继续做经验丰富的开发者最擅长的事情:见树木,也见森林。

AI将帮助你砍伐更多的树木,但仍然需要有人决定砍伐哪些树木以及如何用木材建造稳固的房子。你的判断力、战略思维和指导现在更加关键。有效利用AI的高级开发者可以比不使用AI的开发者生产力高得多——但真正脱颖而出的将是那些运用自身人类优势来放大AI输出的人,而不仅仅是让AI自由发挥。

正如一位Reddit网友打趣道,“AI是一个编程力量倍增器”,它“极大地提高了高级程序员的生产力”。倍增效应是真实的,但被倍增的是你的专业知识。保持这份专业知识的敏锐性,并将其置于开发过程的核心。

在AI时代作为初级开发者成长

如果你是一名初级或经验较少的开发者,你可能会对AI感到既兴奋又焦虑。一方面,AI助手可以编写你可能不知道如何编写的代码,从而可能加速你的学习。另一方面,诸如“初级开发者的消亡”之类的头条新闻表明,入门级编码工作面临风险。

事实介于两者之间:AI正在改变早期职业生涯的体验,但初级开发者并未过时。然而,你确实需要积极主动地培养技能,以确保你贡献的价值超出了AI所能产生的。以下是如何投资自己以有效弥合那30%差距的方法:

初级心态:从消费到创造

值得注意的是,AI时代初级开发者需要转变心态:从仅仅消费解决方案转向创造理解。过去,初级开发者可能要费力阅读文档,最终才能编写一个功能;现在AI可以将解决方案送到你面前。如果你只是消费它(复制粘贴然后继续),你并没有成长多少。

相反,将每个AI给出的解决方案作为一个学习案例。剖析它,试验它,并思考你可能如何自己得出这个方案。通过将AI输出视为交互式学习材料,而不是终结所有问题的答案,你确保了你——人类——在不断提升。这样,AI非但没有取代你的成长,反而加速了它。许多专家认为,虽然AI可能会减少对大量初级“码农”的需求,但它也提高了成为一名初级开发者的门槛。这个角色正在转变为能够有效与AI合作并快速提升价值链的人。如果你养成上述习惯,你将脱颖而出,成为那种不仅带来AI所能带来的东西(任何公司都可以通过订阅获得),而且带来洞察力、可靠性和持续改进的初级开发者——这些都是未来高级开发者的特质。

结论:拥抱变化,关注人类优势

软件工程一直是一个持续变化的领域——从汇编语言到高级编程,从本地服务器到云,现在又从手动编码到AI辅助开发。每一次飞跃都自动化了编程的某个方面,但每一次开发者都适应了,并找到了更多的事情可做。正如Tim O’Reilly指出的,过去的创新“几乎总是为开发者带来更多的工作、更多的增长、更多的机会”。AI的崛起也不例外。它非但没有让开发者变得无关紧要,反而正在重塑成功所需的技能组合。平凡的70%编码工作变得更容易;挑战性的30%成为我们价值中更大部分。

要最大化那人类贡献的30%,专注于永恒的工程技能:深入理解问题、设计简洁的解决方案、仔细审查代码质量、并考虑用户和上下文。那些将这些技能与AI工具结合起来的人将胜过那些只拥有其中之一的人。事实上,专家们正在形成的共识是,AI是为熟练者准备的工具。经验丰富的程序员从AI中获益更多,因为他们知道如何引导它,以及在它出错时该怎么做。有人说,“LLM是为高级用户准备的强力工具。” 这意味着我们每个人都有责任成为那样的“高级用户”——培养能够让我们有效运用这些新工具的专业知识。

最终,软件工程的技艺不仅仅是编写能工作的代码。它是关于编写工作良好的代码——在真实世界的环境中,随着时间的推移,以及在不断变化的需求下。今天的AI可以辅助编写代码,但它尚不能确保代码在所有这些维度上都工作良好。那是开发者的工作。

通过加倍投入上述技能,高级开发者可以继续领导和创新,初级开发者可以加速他们通往精通的旅程。AI将处理越来越多常规事务,但你的创造力、直觉和深思熟虑的工程设计将把那些原始输出转化为真正有价值的东西。AI是一个强大的工具,但关键在于我们如何使用它。 良好的工程实践、人类判断力和学习意愿将保持至关重要

在实践中,无论你是与一个“热情洋溢的初级”AI结对编程来编写函数,还是审查一个充满AI生成代码的差异对比,永远不要忘记运用你独特的人类视角。问问自己:这是否解决了正确的问题?其他人能否理解和维护这段代码?风险和边缘情况是什么?这些问题是你的责任。编程的未来确实会涉及更少地手动输入每个分号,更多地进行指导和策划——但它仍然需要有智慧、能正确行事的开发者掌舵。

可操作的建议:

AI辅助编码的时代已经到来,它正在使常规编码变得更快。这解放了我们开发者,让我们能够专注于软件创造中更困难、更有意义的方面。通过最大限度地关注那“最后的30%”——批判性思维、设计技巧、质量检查——我们不仅确保了自己的相关性,而且也交付了更好的软件。

归根结底,伟大的软件工程一直关乎解决问题,而不仅仅是编写代码。AI并没有改变这一点——它只是挑战我们将解决问题的能力提升到新的水平。拥抱这个挑战,你将在我们行业的新篇章中茁壮成长。