AI辅助编码最佳实践
完成我的第一个AI辅助编程项目后,我收集了一些关于如何正确使用AI编程助手的宝贵见解。我发现了某些个人最佳实践,这些实践将帮助我确保我交付的代码仍然是可靠代码交付的同时,仍提高我使用AI辅助的效率。

亲爱的开发人员:你的工作是安全的,而且实际上现在变得更好了!
几周前,我承担了一个构建端到端LLM应用程序的任务,并在我技术栈中新增了一个工具。我使用了一个专为软件工程师设计的AI驱动的代码编辑器,以使我们能够利用AI来协助代码生成。借助AI的帮助,我能够在一周内交付一个原本需要我数月才能完成的项目!但如果没有我,AI也无法完成它。
我注意到的是:如果没有编程知识,我就无法编写出正确的提示来生成有意义的代码或检测和修复它产生的错误。然而,由于我在软件工程方面的丰富背景以及对编码最佳实践的认识,我可以与AI助手一起迭代我的代码库,将AI作为协作工具,同时引导它交付工作和可靠的代码。
如今,AI辅助编码者使用GitHub Copilot、Cursor AI,甚至只是将代码复制粘贴到AI聊天机器人如ChatGPT中,来帮助他们生成代码。在我尝试AI辅助编码之前,我就是那个将代码片段复制粘贴到ChatGPT中以加快开发周期或调试问题的开发者。虽然这种方法确实加快了开发速度,但从长远来看并不有效,因为ChatGPT没有完全了解周围的代码库,或者深入了解我的项目计划。AI与你的代码库深度集成,使开发者可以使用自然语言提示更快地编写、重构和理解代码。
作为生成式语言模型,LLMs实际上在代码方面表现很好。为什么?因为代码是一种语言!因此,用于建模人类语言的LLMs的基础数学架构实际上也非常适合编码语言。然而,我发现它们在逻辑决策方面仍然不足,例如战略性地规划项目、调试和合理地构建存储库。这就是开发者发挥作用的地方,来引导它们。
“氛围编程” 和 “AI辅助编程” 之间存在差异。让我来解释一下。
👎 氛围编程 是一种新的软件开发方法,开发者不再手动输入代码,而是用自然语言描述最终产品,AI处理所有技术实现步骤。这不需要软件工程知识,如果目标是创建可运行或可靠的软件,我不推荐这种做法。
👍 AI辅助编程 是不同的,它超越了氛围编程。这是一种新的软件开发方法,程序员主要与LLMs互动以迭代方式生成代码。在这种情况下,开发者不仅关注实现的最终结果,还关注亲自指导实现。这是目前最好的方法,它需要基本的软件工程知识基础。
但成为优秀的AI开发者的学习曲线现在要短得多。有了AI辅助编程的IDE,任何人都可以成为一名优秀的开发者,并开始自己构建高质量和可靠的AI工具。只要你具备基本的软件工程最佳实践和核心AI概念的知识,就可以有效地进行AI辅助编程。你可以从大学课程或免费在线课程中获得这些知识。如果你想构建AI项目,我建议你在以下领域有所了解,并附上一些在线免费课程来帮助你入门。
此外,AI编程工具可以教你如何成为一个更好的开发者。我说你需要知道如何编程才能成为有效的AI辅助软件工程师,但我还想指出,这个工具可以用来启动并加速学习成为优秀软件工程师的过程。一旦你从上述课程和书籍或类似资源中获得了基础知识,你就可以开始使用AI辅助进行编程,并通过这个经验继续你的学习旅程。

图1: AI辅助编程工具Cursor了解你的整个代码库,因此你可以向它询问关于你的代码的问题。这有助于你了解它正在构建的内容并指导它,同时也使你能够从它的行为中学习。如果你问它为什么做出这样的设计决策,这可以成为一个教育工具和效率工具。

图2. 得到正确的详细提示有助于AI编程助手生成正确的代码。理解代码意味着我知道如何准确详细地谈论代码,并能写出最佳提示来生成代码
超越氛围编程的有效AI辅助编程的最佳实践
完成我的第一个AI辅助编程项目后,我收集了一些关于如何正确使用AI编程助手的宝贵见解。我发现了某些个人最佳实践,这些实践将帮助我确保我交付的代码仍然是可靠代码交付的同时,仍提高我使用AI辅助的效率。有正确和错误的方法来做这件事。让我来分解一下。
1、提示工程
使用像Cursor中的AI编程助手这样的工具,最大化其好处的最有效方法之一是掌握提示工程。我很快发现,我的提示越具体和详细,AI生成的代码就越好。
🔹 具体说明: 不要提出模糊的要求,比如“为X写一个函数”,我学会了精确地表达我想要什么:“写一个Python函数,它接收一个整数列表并返回仅偶数。” 如果第一次建议不太合适,我会通过添加更多上下文或提出后续问题来细化我的提示。AI代码生成依赖于清晰度;你提供的信息越多,它就越能有效地回应。
🔹 包含示例: 另一个有用的策略是在你的提示中包含代码示例、注释或文档字符串。添加这样的注释可以引导它实现或扩展你的想法。我经常先写下逻辑的注释或伪代码,然后让AI助手将其转换为功能代码。这种方法不仅提高了代码的可读性,还有助于确保AI的输出符合我的意图。
🔹 使用你的工程技能: 此外,使用真正的工程术语至关重要。无论你的专业是什么,了解你的技艺的语言将使你能够准确描述你的需求,并引导AI生成所需的输出。提示工程是一项技能;你越擅长用精确的技术术语和细节讨论你试图创建的内容,你就越能在与AI合作时取得成功。
2、配对编程心态
与AI编程助手一起工作的最佳方式是把它当作团队中的另一个开发者。当我进行来回的工作流程时,即让它生成代码,审查结果,并询问它设计选择的原因,然后根据需要调整提示或代码,最有效的工作会发生在这种情况下。这种协作方法使我和AI都发挥出了最佳水平。
我也养成了在不确定它的建议时向AI编程助手提问“为什么”的习惯。请求解释不仅帮助我学习,还让我能够发现错误或误解,或在问题出现之前识别类似的解决方案。我与编程助手的合作越多,我越意识到软件开发的未来依赖于人与AI之间的团队合作。
3、规划你的项目和代码库
我学到的最重要的一课是,在开始使用AI编码之前,有必要有一个计划。尽管可能很诱人直接打开你的AI工具并要求它通过描述最终产品来构建一个功能甚至整个应用程序,但这种方法可能导致彻底的混乱,以及一个你不理解且无法构建或维护的代码库。虽然AI很强大,但如果没有明确的想法来构建自己的代码结构,你可能会以一堆不相连的代码片段结束,这些片段在代码库成熟时无法整合。
所以在输入任何提示或生成任何代码之前,我花时间绘制出模块、数据流和每个组件的责任。这个蓝图指导了AI,使整个过程更加顺畅和高效。这种方法使你能控制架构,并确保每一块都符合你的整体计划。这也是我们仍然需要开发人员的原因。
🔍 小技巧:AI在解决微小、离散任务时效果最好。你需要首先设计问题。
4、迭代构建
迭代构建是任何成功的编码项目的关键,AI辅助项目也不例外。我很快了解到一次生成太多代码往往会引发混乱、错误和浪费时间。相反,我专注于逐步构建我的应用程序,验证每个部分后再进入下一步。
这种渐进的方法使早期发现问题变得容易,适应新需求,并保持干净的代码库。每次完成一小块内容后,我都会测试和审查它,然后再进行下一项任务。这种方法不仅简化了调试,还给了我进展和动力的感觉,以及在github中的良好检查点。
保持简单同样重要。你的提示或代码结构越复杂,AI就越有可能感到困惑或产生意外的结果。我发现通过专注于一个函数或模块,我可以引导AI生成符合我需求并遵循我实施计划愿景的高质量代码。如果我感到卡住了,我会进一步分解问题。
🔍 小技巧:开发者流程。使用o3-mini进行调试,使用gpt-4-turbo进行实时推理。

5、重构!重构!重构!
在使用AI助手为我的项目编码时,我经常暂停构建新功能,退一步重构现有的代码库。重构不仅仅是一种最佳实践;当与AI辅助代码一起工作时,它是必不可少的。在我的项目初期,一切都局限于一个主文件中,这很快就变得难以管理,呈现出一团乱麻。没有人喜欢乱码!所以我决定在项目完成前进行重构,将代码分解成逻辑模块,并在过程中进行清理。定期、周期性的清理有助于防止代码库变得过于复杂或杂乱,使其更容易维护。每次我添加一个新功能或修复一个错误时,我都会花一点时间寻找简化和组织代码的机会。这不仅使代码更易于处理,还使AI能够继续构建代码库时生成有用的建议。最终,一个结构良好的代码库是成功AI辅助开发的基础,重要的是,人类开发人员必须传达清晰的结构愿景,并确保AI生成的代码遵守这一愿景。这是AI辅助编程可以超越感觉编程的一个例子,并导致更好的软件产品。
如果你正在寻找构建干净可重用代码的指南,我非常喜欢Miguel的观点 这里。
与你的AI助手一起审查你的代码以确保整体质量也很重要。在一次重大重构之后,我让它评估我的代码并提供一份报告。这份反馈在设计代码库和保持其组织方式上非常有价值,这种方式是可维护的、易于调试的,并促进协作。
🏆 最终评估
评分:A+ 你的代码库展示了出色的软件工程实践:
- ✅ 业务逻辑零重复
- ✅ 优秀的模块化组织
- ✅ 清晰的关注点分离
- ✅ 整体一致的模式
- ✅ 中心化的实用程序被正确地使用在所有地方
- ✅ 干净的架构,具有逻辑模块边界
该结构已准备好投入生产并易于维护。你成功避免了常见的代码重复陷阱,并创建了一个组织良好、专业的代码库。做得很好!🎉
6、结束语
AI辅助编程不是要取代开发者;而是要增强我们。通过AI辅助编程,你可以更快地编码、学习更多,并比以往任何时候都更好地交付高质量的软件。真正的魔力发生在你,作为开发者,通过使用你的技能集并与AI协作来构建时。因此,软件工程的未来是协作和高效的,我对此感到兴奋!
如果你想成为一名有效的AI赋能工程师,开始学习,开始构建,如果你正确使用它,AI可以帮助你比你想象的更快地实现你的目标。
我很期待看到你构建的东西!🚀
原文链接:Best Practices I Learned for AI Assisted Coding
汇智网翻译整理,转载请标明出处
