我们生活在一个超现实的时刻。如果你没有使用AI(GitHub Copilot, Gemini, ChatGPT)来编写至少一些你的模板代码,你已经落后了。
但依赖于一个模型,无论多么强大,已经揭示了关于发展的新的、残酷的真相。
以下是我通过艰难的方式学到的五个“秘密”——这些教训定义了优秀工程师和优秀提示工程师之间的区别。
🛑 秘密 #1: 错误信息才是真正的产物。 AI 在生成看起来正确的代码方面非常出色。但当代码崩溃的那一刻,对工程质量的真正考验就开始了。
人工智能问题:生成模型优先考虑平滑、功能性和外观的代码。它们不优先考虑调试性。它们生成的错误通常是通用的、与上下文无关的,并且会引导你进行徒劳的追踪。
来之不易的秘密:在复杂的系统中,你编写的最有价值的代码不是成功的路径——而是错误处理程序。设计你的代码、日志和异常,以便当某些东西失败时,错误消息能给下一个开发者(未来的你,或一名SRE)提供他们所需的确切上下文:
失败发生在哪里。
输入状态是什么。
为什么系统认为它失败了。
氛围检查:良好的氛围编码意味着你的代码调试起来非常容易,你几乎不需要使用调试器。
🤯 Secret #2: Never Trust the First Output from Your Prompt. AI输出的代码在统计上是合理的。这是一个解决方案的捷径,而不是正确性或安全性的保证。
来之不易的秘密:人工智能的真正价值在于它是支架,而不是完成。每次我使用第一个由人工智能生成的代码块而没有修改时,它都会引入一个微妙的错误——资源泄漏、不安全的依赖或慢查询——这比我自己写代码需要更长时间来追踪。
氛围策略:使用AI生成三种不同的方法(例如,“用函数式风格写这个”,“现在用循环写这个”,“现在用特定库写这个”)。然后,手动合成最佳、最安全和最符合编程习惯的部分,形成最终的人工审查代码块。这迫使你运用批判性思维,这是AI无法自动化替代的技能。
秘密 #3:直到你能移除它,你才真正理解它。 复杂性是可扩展性和可维护性的隐形杀手。在人工智能时代,我们比以往更快地获得复杂的代码。
来之不易的秘密:当我真正理解一个模块、一个依赖关系或一个设计模式的那一刻,我意识到我可以删除或简化其中的大部分内容而不失去功能。
氛围编码原则:好的氛围编码是减法。如果一个AI建议使用一个50行的工具函数,你的任务是检查是否可以用10行的原生语言特性来实现相同的结果。尽量减少代码库的表面积——更少的代码行意味着更少的可能隐藏错误的行。
🔗 秘密 #4: 依赖就是债务。 使用像 "使用库 Y 为 X 生成解决方案" 这样的 AI 提示是很有诱惑力的。你得到了即时代码,但你刚刚接受了巨大的、未列出的负债。
来之不易的秘密:每一个外部依赖(一个库,一个框架,一个第三方API)都是不安全的技术债务。你信任一个外部团队为你维护安全、版本化和兼容性,永远如此。
氛围策略:在运行npm install或pip install之前,问自己:“这个功能是否如此复杂,以至于依赖项的维护成本低于编写50行简单原生代码的成本?”通常,答案是否。选择简单且经过广泛测试的依赖项,并对其他依赖项进行彻底审查。
✨ 秘籍 #5:重视上下文胜过聪明才智。每次。 人工智能很聪明。它可以编写复杂、抽象和高度优化的代码片段。
来之不易的秘密:在调试严重的生产故障时,从来没有人会说,“哇,那个lambda函数真聪明!”他们只会问,“为什么这么难读?”
氛围原则:上下文清晰胜于一切。代码必须清楚地传达技术实现背后的业务意图。如果你的代码需要15行抽象逻辑来节省2毫秒,你做出了一个糟糕的权衡。选择下一任人类开发者能立即理解的代码,即使在纸上感觉稍微“不那么优化”。
你在从AI生成的代码块中发现的最大错误是什么?或者你在编写代码时遵循的非技术性“原则”是什么?