超越70%:最大化AI辅助编码中人类贡献的30%
摘要
本文探讨了AI编码助手能够完成约70%的常规编码工作,但剩余30%的关键部分仍依赖人类技能。文章深入分析了AI在处理边缘情况、系统架构和代码正确性方面的局限,并为高级和初级开发者提供了在AI时代应重点培养的持久工程技能的实用指南。
核心概念及解读
70%问题:AI编码工具可完成约七成常规开发任务,但最后三成涉及边缘情况、架构优化和可维护性的关键工作仍需人类专业判断
偶然复杂性与本质复杂性:源自Fred Brooks的经典概念,AI擅长处理重复性机械性的偶然复杂性,而理解问题固有难度的本质复杂性仍需人类思维
系统设计与架构思维:涵盖组件交互、数据流动、可扩展性和安全性等全局考量,是AI无法自动替代的核心工程能力
最后一公里差距:AI生成的方案看似可行,但在边缘覆盖、性能优化和长期可维护性上往往存在缺陷,需要经验丰富的工程师介入完善
力量倍增器:AI作为开发者的生产力放大工具而非替代品,人类判断力和良好的软件工程实践在AI时代依然不可或缺
- 原文链接:Beyond the 70%: Maximizing the human 30% of AI-assisted coding
- 作者:Addy Osmani
- 日期:Mar 14, 2025
为何在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可以生成代码,但不会自动为复杂问题选择最佳架构。整体设计——组件如何交互、数据如何流动、如何确保可扩展性和安全性——是那需要人类洞察力的30%的一部分。高级开发者长期以来一直在磨练这项技能,初级开发者应积极培养。从模式和原则(例如,关注点分离、模块化)的角度思考——这些能引导AI生成的解决方案走向可维护性。记住,稳固的架构不会凭空出现;它需要经验丰富的人类掌控方向盘。
处理边缘情况与模糊性: 现实世界的软件充满了奇怪的场景和不断变化的需求。AI默认倾向于解决普遍情况。开发者需要不断追问“如果……会怎样?”并探查弱点。这里的持久技能是批判性思维和预见性——列举边缘情况、预测故障,并在代码或设计中解决它们。这可能意味着考虑空输入、网络中断、异常用户操作或与其他系统的集成。领域知识也起着作用:了解业务背景或用户环境将揭示通用AI根本不知道的边缘情况。经验丰富的工程师习惯性地考虑这些场景;初级开发者应练习系统地测试边界和质疑假设。
代码审查与质量保证: 随着AI编写大量代码,严格审查和测试这些代码的能力变得更加关键。“每个人都需要更加认真地对待测试和代码审查,” Steve Yegge强调说。像对待人类初级开发者的输出一样对待AI生成的代码——你是代码审查员,负责发现错误、安全漏洞或草率的实现。这意味着在单元测试、集成测试和调试方面拥有扎实的技能。编写好的测试是一项持久的技能,它迫使你理解规范并验证正确性。明智的做法是,在被证明之前,假设一切都无效。正如一位开发者指出,AI通常产生“功能正常但优化极差的代码”,直到你通过迭代改进来引导它。培养测试心态:验证每个关键逻辑路径,使用静态分析或linter,如果AI给出的代码不符合你的质量标准,不要回避重写。质量保证不是可以外包给AI的领域——这是人类勤勉闪耀的地方。
调试与问题解决能力: 当软件未按预期工作时,你需要真正的问题解决能力来诊断和修复它。AI可以辅助调试(例如,建议可能的原因),但它缺乏对你应用程序运行的具体上下文的真正理解。能够理清复杂错误——重现它、隔离原因、理解底层系统(操作系统、数据库、库)——是一项永恒的工程技能。这通常需要对基础知识(内存和状态如何工作、并发等)有扎实的掌握,初级开发者必须通过实践来学习。将AI用作助手(它可能会解释错误消息或建议修复方法),但不要盲目依赖它。在调试时有条不紊地排查问题并应用第一性原理的能力,使优秀的开发者脱颖而出。这也是一个反馈循环:调试AI编写的代码将教会你下次如何更好地提示AI或避免某些模式。
保持上下文与全局理解: 软件项目不仅仅是孤立的编码任务;它们存在于用户需求、时间表、遗留代码和团队流程的更大背景中。AI对你的项目历史或某些决策背后的理由没有天生的感知(除非你明确地将所有这些信息输入提示,这通常不切实际)。人类需要承载这些上下文。这里的持久技能是系统思维——理解系统中一部分的变化可能如何影响另一部分,软件如何服务于业务目标,以及所有活动部件如何连接。这种整体视角让你能够恰当地使用AI的输出。例如,如果AI建议了一个巧妙的捷径,但它与法规要求或公司惯例相悖,你会因为了解上下文而发现它。初级工程师应该主动了解他们项目的背景并阅读设计文档,这样他们就能培养出判断什么合适、什么不合适的判断力。
沟通与协作: 构建软件是一项团队运动。AI不会参加会议(谢天谢地)——人类仍然必须与其他人交谈以澄清需求、讨论权衡和协调工作。强大的沟通技巧一如既往地宝贵。高级开发者应利用他们解释复杂想法、指导他人和阐明愿景的能力。初级开发者应练习提出好问题并清晰地描述问题(对同事和对AI都是如此)。有趣的是,提示AI本身就是一种沟通形式;它要求你精确地表达你想要什么。这与核心工程技能重叠:需求分析。如果你能制定一个清晰的提示或规范,这意味着你已经彻底思考过问题。此外,分享知识、编写文档和审查他人代码是AI无法取代的协作技能。未来,随着开发者“与”AI合作,团队中的人际协作——确保解决正确的问题——仍然至关重要。一个新兴趋势是,开发者可能更专注于高层设计讨论(通常有AI作为参与者)和协调任务,本质上承担更多指挥者的角色。沟通和领导技能将使你在那个指挥者的位置上受益匪浅。
适应性与持续学习: 最后,一个元技能:学习新工具和适应变化的能力。AI辅助开发领域正在迅速发展。保持开放心态并学习如何有效使用新AI功能的高级工程师将保持领先——Tim O’Reilly建议,那些“渴望学习新技能”的开发者将从AI中获得最大的生产力提升。反过来,初级开发者应该投入深入学习基础知识,并对新技术保持好奇心。这种结合使你能够驾驭AI作为工具,而不会对其产生依赖。这是一个平衡行为:利用AI加速你的成长,但也要偶尔在没有它的情况下练习,以确保你没有跳过核心学习(一些开发者会定期进行“AI戒断”,以保持他们原始的编码技能敏锐)。简而言之,成为一个不断学习的工程师——这是任何时代都能保障职业生涯的技能。
这些技能构成了软件工程中的人类优势。它们之所以持久,是因为它们不会随着下一个框架或工具的变化而过期;相反,AI的崛起使它们更加突出。Simon Willison认为,AI辅助实际上使强大的编程技能更有价值,而不是更没价值,因为拥有专业知识的人可以更有效地利用这些工具。
强大的机器在不熟练的人手中可能是危险的或被浪费的,但在有能力的人手中则是变革性的。在AI时代,经验丰富的工程师就像一位拥有新的先进副驾驶的经验丰富的飞行员:旅程可以更快更远,但飞行员仍然必须驾驶穿越风暴并确保安全着陆。
高级开发者的优势:结合经验利用AI
对于高级工程师来说,AI编码工具的出现应被视为放大你影响力的机会——前提是你以正确的方式利用你的经验。高级开发者通常拥有深厚的领域知识、对可能出错之处的直觉,以及做出高层技术决策的能力。
这些优势是AI无法单独处理的那30%的一部分。以下是经验丰富的开发者可以最大化其价值的方法:
担当架构师和主编: 让AI处理代码的初稿,而你专注于架构解决方案,然后精炼AI的输出。在许多组织中,我们可能会看到一种转变,即团队只需要“高级员工”,他们“(a) 描述要完成的任务(即创建提示),以及(b) 审查结果工作的准确性和正确性”。拥抱这种模式。作为高级开发者,你可以将复杂的需求转化为有效的提示或规范给AI助手,然后用你批判性的眼光审查生成的每一行代码。你实际上是在与AI进行结对编程——它是快速打字员,但你是大脑。在审查期间保持高标准:确保代码符合你组织的质量、安全和性能基准。通过扮演架构师和编辑的角色,你可以防止“高昂的审查负担”压垮你。(一个警示:如果初级员工只是把原始的AI输出扔给你,要顶回去——建立一个流程,让他们必须先验证AI生成的工作,这样你就不是唯一的安全网。)
将AI作为大型项目的力量倍增器: 高级工程师通常负责推动大型项目或处理初级人员无法单独应对的棘手重构。AI可以通过处理大量机械性变更或在你的指导下探索替代方案来极大地加速这些工作。Steve Yegge引入了**面向聊天的编程(CHOP)**这个术语来描述这种工作方式——“通过迭代提示优化进行编码”,以AI作为协作者。利用CHOP在承担的任务上更具雄心。正如Simon Willison指出的,有了AI辅助,“降低了项目是否值得投入时间的门槛”,因为原本可能需要数天的工作可能在数小时内完成。因此,高级开发者可以尝试那些一直看起来遥不可及的“如果……岂不更好?”的项目。关键是保持主导思想:你决定追求哪些工具或方法,并将各个部分整合成一个有凝聚力的整体。你的经验使你能够筛选AI的建议——接受合适的,拒绝不合适的。
在AI时代指导并设定标准: 高级工程师的另一个关键角色是指导经验较少的团队成员有效使用AI,并传授永恒的最佳实践。你可能拥有来之不易的关于陷阱的知识,而初级人员可能看不到(内存泄漏、差一错误、并发危险等)。现在初级人员可能通过AI生成代码,教他们如何自我审查和测试这些代码非常重要。通过演示对AI贡献进行彻底测试来树立榜样,并鼓励一种不盲目信任机器输出的文化。一些组织(甚至律师事务所)已经制定了规则,如果有人使用AI,他们必须披露并自行验证结果——而不仅仅是假设高级人员会发现错误。高级人员应该在他们的团队中倡导这样的规范:欢迎AI,但必须勤勉。通过这种方式指导初级人员,你可以减轻一些监督负担,并帮助他们更快地掌握那30%的技能。
持续培养领域专长和预见性: 你广泛的经验和背景比以往任何时候都更加重要。高级开发者通常了解事物为何如此构建的历史知识或某个行业的运作方式。这种领域专长让你能够发现新手无法察觉的AI失误。继续投入深入理解问题领域——这可能意味着及时了解业务需求、用户反馈或影响软件的新法规。除非被告知,AI不会自动纳入这些考虑因素。当你将领域洞察力与AI的速度相结合时,你会得到最佳结果。此外,利用你的预见性来引导AI。例如,如果你知道一个快速修复方案会在未来带来维护痛苦,你可以指示AI实施更可持续的解决方案。高级人员应该相信他们多年来磨练出的直觉——如果一段代码“看起来不对劲”或好得令人难以置信,深入挖掘。十有八九,你的直觉发现了AI没有考虑到的问题。能够预见代码的二阶和三阶效应是高级工程师的标志;不要让AI的便利性削弱这种习惯。相反,将其应用于AI产生的任何东西。
利用软技能和领导力: 随着AI承担部分编码工作,高级开发者可以将更多精力投入到工程的人性化方面。这包括与利益相关者沟通、主持设计会议以及做出将技术与业务战略相结合的判断。Tim O’Reilly和其他人认为,随着死记硬背式的编码变得更容易,价值转向决定构建什么以及如何协调复杂系统。高级工程师通常是协调者和看到大局的人。挺身而出,担当起这个角色。主动编写架构路线图,评估采用哪些工具(AI或其他),或者为组织中的AI使用制定编码指南。这些是AI无法完成的任务——它们需要经验、人类的判断力,并且通常需要跨团队达成共识。通过增强你的领导力,你确保自己不仅仅是一个代码生成器(可以被另一个工具取代),而是在这个新时代指导团队的不可或缺的技术领袖。
简而言之,继续做经验丰富的开发者最擅长的事情:见树木,也见森林。
AI将帮助你砍伐更多的树木,但仍然需要有人决定砍伐哪些树木以及如何用木材建造稳固的房子。你的判断力、战略思维和指导现在更加关键。有效利用AI的高级开发者可以比不使用AI的开发者生产力高得多——但真正脱颖而出的将是那些运用自身人类优势来放大AI输出的人,而不仅仅是让AI自由发挥。
正如一位Reddit网友打趣道,“AI是一个编程力量倍增器”,它“极大地提高了高级程序员的生产力”。倍增效应是真实的,但被倍增的是你的专业知识。保持这份专业知识的敏锐性,并将其置于开发过程的核心。
在AI时代作为初级开发者成长
如果你是一名初级或经验较少的开发者,你可能会对AI感到既兴奋又焦虑。一方面,AI助手可以编写你可能不知道如何编写的代码,从而可能加速你的学习。另一方面,诸如“初级开发者的消亡”之类的头条新闻表明,入门级编码工作面临风险。
事实介于两者之间:AI正在改变早期职业生涯的体验,但初级开发者并未过时。然而,你确实需要积极主动地培养技能,以确保你贡献的价值超出了AI所能产生的。以下是如何投资自己以有效弥合那30%差距的方法:
学习基础知识——不要跳过“为什么”: 很容易依赖AI来回答每个问题(“如何在Python中做X?”),而从未真正吸收底层概念。抵制这种冲动。将AI用作导师,而不仅仅是答案自动售货机。例如,当AI给你一段代码时,问它为什么选择这种方法,或者让它逐行解释代码。确保你理解数据结构、算法、内存管理和并发等概念,而不是总是依赖AI。原因很简单:当AI的输出错误或不完整时,你需要自己的心智模型来识别和修复它。正如一位工程师指出,如果你“没有积极思考AI为什么生成某些代码,你实际上可能学得更少”,这会阻碍你的成长。所以花时间阅读文档,从头开始编写小程序,并巩固你的核心知识。这些基础知识是持久的;即使你周围的工具发生变化,它们也会为你服务。
在没有AI安全网的情况下练习解决问题和调试: 要建立真正的信心,有时你必须单飞。许多开发者提倡定期进行“无AI日”或以其他方式限制AI辅助。这确保你仍然可以用自己的技能解决问题,这对于避免技能萎缩很重要。你会发现这迫使你真正思考问题的逻辑,这反过来又让你更擅长使用AI(因为你可以更智能地指导它)。此外,每当你在AI生成的代码中遇到错误时,在要求AI修复之前,先自己动手调试。通过单步调试器或添加打印语句来查看问题所在,你会学到更多。将AI的建议视为提示,而非最终答案。随着时间的推移,处理任务中那些棘手的最后部分将培养你在AI难以处理的领域中的技能——这正是让你变得有价值的原因。
专注于测试和验证: 作为一名初级开发者,你能养成的最佳习惯之一是为你的代码编写测试。如果你使用AI生成代码,这一点尤其正确。当你从LLM获得一段代码时,不要假设它是正确的——挑战它。编写单元测试(或使用手动测试)来查看它是否真正处理了需求和边缘情况。这可以达到两个目的:(1)它能发现AI输出中的问题,(2)它训练你在信任实现之前思考预期行为。你甚至可以使用AI来帮助编写测试,但你来定义要测试什么。Steve Yegge关于认真对待测试和代码审查的建议适用于所有级别。如果你培养了仔细验证工作(无论是AI辅助还是非AI辅助)的声誉,高级同事会更信任你,你也会避免他们觉得你只是在“倾倒”可疑代码给他们的情景。实际上,开始将测试视为开发中不可或缺的一部分,而不是事后想法。学习如何使用测试框架,如何进行探索性手动测试,以及如何系统地重现错误。这些技能不仅让你在30%的工作中表现更好,它们还加速了你对代码真正工作原理的理解。记住:如果你发现了一个AI引入的错误,你刚刚做了AI做不到的事情——这就是附加价值。
培养对可维护性的眼光: 初级开发者通常专注于“让它工作”。但在AI时代,获得一个基本的可用版本很容易——AI可以做到。更难的部分(也是你应该关注的)是编写可读、可维护、整洁的代码。开始培养对良好代码结构和风格的眼光。将AI的输出与你所知的最佳实践进行比较;如果AI代码混乱或过于复杂,主动进行重构。例如,如果LLM给你一个做了太多事情的50行函数,你可以将其拆分成更小的函数。如果变量名不清晰,重命名它们。本质上,假装你是一个人类代码审查员(即使你是初级人员),像改进同伴编写的代码一样改进AI的代码。这将帮助你内化良好的设计原则。随着时间的推移,你会开始以产生更整洁代码的方式提示AI(因为你会指定你想要的风格)。软件的维护者(通常是几个月或几年后工作的团队)会感谢你,你将证明你不仅仅是在考虑“让它运行”——你在像工程师一样思考。保持可维护性正是在那由人类驱动的30%之内,所以从你职业生涯的开始就把它当作你的关注点。
(明智地)发展你的提示和工具使用技能: 不可否认,“提示工程”——有效与AI工具交互的技能——是有用的。作为初级开发者,你绝对应该学习如何向AI提问,如何给它适当的上下文,以及如何迭代提示以改进输出。这些是可以让你脱颖而出的新技能(许多经验丰富的开发者也仍在摸索中!)。然而,请记住,好的提示通常代表着对问题的深刻理解。如果你发现无法让AI做你想做的事,可能是因为你需要先澄清自己的理解。把它当作一个信号。一种策略是在要求AI实现之前,自己用简单的英语勾勒出解决方案。此外,尝试不同的AI工具(Copilot、Claude等)以了解它们的优缺点。你对这些助手越熟练,你的生产力就越高——但绝不要将其输出视为绝对可靠。把AI想象成一个超级强大的Stack Overflow:一个辅助工具,而不是权威。你甚至可以利用AI构建小型个人项目来挑战自己的极限(例如,“我能在AI的帮助下构建一个简单的Web应用吗?”)。这样做将教会你如何将AI集成到开发工作流程中,这是带入团队的一项很棒的技能。正如前面提到的,只需将其与不带安全网的工作时段相平衡。
寻求反馈和指导: 最后,一项能加速你成长的持久技能是寻求反馈并向他人学习的能力。如果你忽略AI的建议,它不会生气,但你的人类队友和导师对你的发展是无价的。不要犹豫去问高级开发者为什么他们更喜欢一种解决方案而不是另一种,特别是当它与AI建议的不同时。与更有经验的同事讨论设计决策和权衡——这些对话揭示了经验丰富的工程师是如何思考的,这对你来说是金子。在代码审查中,对关于你AI编写的代码的评论要格外 receptive。如果审查员指出“这个函数不是线程安全的”或“这种方法会有扩展性问题”,花时间去理解根本问题。这些正是AI可能遗漏而你想要学会发现的东西。随着时间的推移,你会建立一个需要考虑事项的心理检查清单。此外,寻找结对编程的机会(即使是远程的)。也许你可以与一位在其工作流程中使用AI的高级人员“结对”——你会观察到他们如何提示AI以及如何纠正它。对反馈持开放态度并积极寻求指导,将帮助你从做AI可以完成的任务,成熟到做只有人类才能完成的高价值任务。从某种意义上说,你是在尽可能高效地获取通常伴随经验而来的智慧。这让你不仅仅是房间里的另一个编码员——它让你成为团队渴望留下和提拔的那种工程师。
初级心态:从消费到创造
值得注意的是,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采取成长心态: 用它来提高生产力,但要致力于学习解决方案为何有效。将AI视为伙伴,而非拐杖,并定期挑战自己不依赖它来解决问题,以锻炼技能。
投资核心技能: 提升你设计系统、思考边缘情况、编写测试和深入调试的能力。这些是AI无法替代的长期职业技能。让代码质量和清晰度成为你每项任务的个人使命。
对于高级开发者: 利用你的经验来指导AI(通过良好的提示)并审查其输出。带头负责任地将AI整合到团队的工作流程中——制定使用标准并确保知识共享。利用AI节省的时间来处理更具雄心的项目并指导他人。
对于初级开发者: 专注于成为那种能够理解并改进AI生成代码的工程师。建立彻底细致的声誉——始终测试并仔细检查你的工作。从每个错误和反馈中学习。通过这样做,你将迅速进入仅靠AI无法完成的工作领域,从而提升你的价值。
保持适应性: 工具将不断发展。持续更新你的工具集和技能。但如果你拥有扎实的基础和协作的态度,你将能够驾驭任何技术浪潮。
AI辅助编码的时代已经到来,它正在使常规编码变得更快。这解放了我们开发者,让我们能够专注于软件创造中更困难、更有意义的方面。通过最大限度地关注那“最后的30%”——批判性思维、设计技巧、质量检查——我们不仅确保了自己的相关性,而且也交付了更好的软件。
归根结底,伟大的软件工程一直关乎解决问题,而不仅仅是编写代码。AI并没有改变这一点——它只是挑战我们将解决问题的能力提升到新的水平。拥抱这个挑战,你将在我们行业的新篇章中茁壮成长。
