AI 无法编写比人工更好的代码
随着人工智能 (AI) 的不断发展,它正成为开发人员越来越受欢迎的工具。然而,虽然 GitHub Copilot 和 ChatGPT 等 AI 驱动的编码工具提供了便利和效率,但每个开发人员都应该牢记一个重要的事实:AI 无法编写比您更好的代码。
在本文中,我们将探讨为什么 AI 不能取代开发人员,为什么它仍然是一个非常有价值的助手,以及我们如何使用 AI 来增强我们的编码工作流程。从最近的研究中汲取灵感,包括 Apple 的 GSM-Symbolic:了解大型语言模型中数学推理的局限性,我们将深入探讨 AI 在复杂编码任务方面的技术局限性。
AI 在编码中的局限性:为什么 AI 不能取代开发人员
AI 在自动化软件开发的许多方面取得了重大进展。无论是生成样板代码、协助编写文档还是为常见错误提供解决方案,AI 都可以为开发人员节省时间和精力。但是,重要的是要了解 AI 还远非完美,无法处理开发人员可以做的所有事情。
AI 的主要问题之一是它无法通过复杂的问题进行推理。AI 工具可以轻松处理简单的任务,但当涉及需要了解项目特定背景的更复杂的问题时,人类开发人员仍然要优越得多。
之前使用过各种 AI 驱动的代码助手,例如 GitHub Copilot、Gemini Code Assist、Codeium 等。虽然这些工具对许多任务都很有用,但遇到过许多 AI 根本无法达到预期的情况。例如,当开发人员要求 AI 修复代码中的问题时,该问题通常会演变成更大的问题。调试 AI 生成的代码也比处理由了解项目细微差别的人编写的代码要困难得多。
当 AI 出错时,结果可能是灾难性的。AI 很难像人类一样从错误中吸取教训,往往没有考虑到更广泛的上下文,甚至没有考虑到代码库中最重要的最小细节。
此外,AI 工具的理解和推理能力仍然受到严重限制。虽然他们可以根据他们接受过培训的数据提供答案,但他们仍然缺乏处理复杂任务或创新的能力。这是许多开发人员没有意识到的事情,尤其是当他们希望 AI 像高级开发人员或创意合作伙伴一样行事时。
GSM 符号论文:强调 AI 推理的局限性
在《GSM-Symbolic:了解大型语言模型中数学推理的局限性》一文中,Apple 研究人员阐明了 AI 推理能力的缺点。他们表明,虽然 AI 模型可以处理模式并根据其训练数据提供答案,但它们仍然难以进行真正的推理。AI 不理解问题的上下文,它只是根据以前看到的模式进行预测。
该论文强调,尽管大型语言模型 (LLM) 取得了进步,但这些模型可能永远无法像人类那样实现真正的推理。例如,当给定简单的数学任务时,LLM 可能非常准确。但是,当对问题进行微小更改(例如,更改名称、数字或添加不相关的细节)时,模型的准确性会显著下降。
当我们考虑编码任务时尤其如此。AI 可以协助完成简单的任务,例如生成样板代码或为已知问题提供解决方案,但它难以处理需要理解、创新和上下文的复杂、多方面的任务,这些都是真正的开发人员每天面临的挑战。
GSM 符号论文的主要发现总结
该论文表明,LLM 依赖于模式识别而不是真正的推理。虽然 AI 已经取得了令人印象深刻的进步,但要达到人类开发人员的推理和解决问题的能力,还有很长的路要走。
对于需要细致入微推理的任务(例如调试复杂代码或设计新功能),AI 无法像人类一样推理,这使其成为不可靠的合作伙伴。它无法理解为什么根据项目的上下文,某些解决方案可能比其他解决方案效果更好。
AI 擅长解决结构化数据的可预测问题,但当涉及到需要创造力或复杂逻辑的任务时,它就会遇到困难。该论文表明,LLM 目前最适合查询信息和总结文档等任务,而不是处理需要创造力和上下文的复杂编码挑战。
如何在编码任务中有效地使用 AI
AI 对于开发人员来说仍然是一个非常有用的工具,但必须正确使用它以避免挫败感和错误。以下是有效使用 AI 的一些提示:
1、将 AI 视为助手,而不是替代品
AI 是一种可以支持您工作的工具,但它不能取代您作为开发人员带来的专业知识、创造力和解决问题的技能。始终将 AI 作为您指导的初级开发人员来对待,给予它明确的指示并纠正它的错误。
2、专注于小型、特定的任务
AI 对于处理小型的特定任务最有用。不要要求 IT 从头开始构建整个应用程序 — 将任务分解为可管理的部分,并寻求有关代码各个部分的帮助。
3、清晰提示 AI
AI 的好坏取决于它收到的提示。如果您没有提出正确的问题或提供必要的上下文,您将得到不准确或不相关的结果。您的请求要清晰具体。
4、使用 AI 执行重复性任务
AI 非常适合处理重复、耗时的任务,例如编写样板代码或检查简单的错误。将您的时间和精力节省到需要人情味的复杂、创造性的开发方面。
5、知道何时停止依赖 AI
如果 AI 正在努力解决问题,请不要一直推动它以期获得更好的结果。识别何时该自己接管任务或寻求其他人类开发人员的帮助。
在开发中使用 AI 时的常见陷阱以及如何避免这些陷阱
1、过分依赖 AI 来解决问题
一些开发人员,尤其是那些经验较少的开发人员,在没有真正了解问题的情况下转向 AI 来“修复”问题。这很危险,因为它不鼓励批判性思维或解决问题的能力。解决方案:使用 AI 作为学习工具,但始终尝试了解问题并自己解决问题。
2、期望 AI 编写完美的代码
AI 远非完美。它可能会犯错误、提供次优解决方案或生成难以维护的代码。解决方案:始终全面审查和测试 AI 生成的代码。这是一个起点,而不是最终解决方案。
3、未提供足够的上下文
AI 需要明确的说明和上下文才能提供准确的结果。解决方案:具体说明您的请求。如果 AI 不理解问题,它就无法提供有用的解决方案。
4、像对待高级开发人员一样对待 AI
AI 工具有时看起来无所不知,但它们仍然无法处理复杂的编码任务或提供创造性的解决方案。解决方案:像对待初级开发人员一样对待 AI,并指导它完成整个过程。
结论
AI 是一个强大的助手,但它不能取代人类开发人员的创造力、解决问题和推理能力。虽然 AI 可以帮助完成代码生成和错误修复等简单任务,但在理解复杂问题、处理上下文和做出创造性决策方面却存在不足。开发人员应该使用 AI 来增强他们的工作,而不是取代他们的技能。AI 应该被视为一种工具,帮助开发人员更高效地编写更好的代码,而不是像人类一样思考、推理或创新的东西。优秀软件开发的关键保持不变:成长、学习和创造力,这些领域 AI 还有很长的路要走。