作者:Written by David Gewirtz, Senior Contributing Editor Nov. 18, 2024 at 5:00 a.m. PT
在过去一年左右的时间里,我一直在尝试使用 ChatGPT 来帮助提高我的编程输出。什么时候ChatGPT 帮助我发现了一个令人不安的错误,我意识到人工智能中有一些有价值的东西。
与我交谈过的许多人都认为人工智能是一个神奇的精灵,它可以通过一个单一的、勉强形成的愿望来实现整个程序或应用程序。这是一个更好的类比:人工智能是一种强大的工具。当然,您可以使用老式锯来锯木头,但台锯的速度要快得多。这两种工具都不能制造家具。他们只是简单地帮助你做家具。请记住,人工智能不会为您编写代码。它将帮助您编写代码。
尽管我无法客观地告诉您 ChatGPT 对我的帮助有多大,但我相当确信它使我的编程输出翻了一番。换句话说,通过使用 ChatGPT 作为我的工具包的一部分,我的工作量增加了一倍。
我主要使用 ChatGPT Plus,而不是免费版本的 ChatGPT。最初,这是因为 Plus 中的 GPT-4 模型比免费版本中的 GPT-3.5 模型更擅长编码。但现在两者都支持 GPT-4o 模型的某些变体,因此它们的编码功能是相同的。然而,在要求您等待一段时间之前,免费版本只会收到这么多查询,而且我发现这会打断我的编程流程。所以,我使用 20 美元/月的 Plus 版本。
回想我所有的项目,我意识到我可以分享一些关于如何充分利用人工智能编程合作伙伴的切实建议。干得好。
人工智能不能很好地处理复杂的指令集,特别是如果你希望它本质上进行产品设计的话。但它非常擅长解析和处理小型且定义明确的指令集。
与同事之间来回发送电子邮件的节奏不同,每次交互可能会间隔几个小时,而是想象一下您在 Slack 聊天中,每次交互要小得多,但间隔几秒钟。
从一个简单的作业开始,正确编写后,逐个元素地添加更多内容。我只需剪切并粘贴之前的提示,添加和删除提示的一些部分,因为我得到了适合我正在寻找的内容的代码块。
永远不要假设代码会正常工作。将其修补到您的项目中并查看其性能如何。
要进行更深入的测试,请立即进入调试器并逐步浏览 AI 生成的代码。观察变量及其作用。请记住,只要您检查每个语句和行是否正常运行,就可以让它为您编写代码片段。
许多编码工具供应商都在他们的工具中推销集成人工智能的想法。除此之外,这使他们能够向你推销人工智能功能。然而,我更喜欢使用 ChatGPT 作为完全独立于我的开发环境的工具进行编码。我不希望人工智能能够进入我的主要编码环境并改变其中的内容。
您不必总是使用人工智能为您生成的所有内容。就像你可能会去的那样堆栈溢出查找代码示例,然后选择要复制的行,您可以对 AI 生成的代码执行相同的操作。
人工智能大型语言模型使用训练数据或在网络上找到的数据。这意味着他们通常对您独特的应用程序或业务逻辑一无所知。因此,请避免尝试让人工智能编写任何需要这种知识水平的内容。那是你的工作。
我给了 ChatGPT 一个 HTML 页面的片段,并要求它添加一个功能来扩展文本块。它给了我 HTML、JS 和 CSS。后来我要求它提供一个额外的 CSS 选择器,然后要求它证明其工作的合理性,于是它向我解释了为什么它这样做。所有这些都有效,因为我给它启动的示例帮助它理解了上下文。
我发现人工智能代码的最大好处是当我用它来编写使用常识、流行库和常规实践的代码块时。人工智能将无法编写您独特的业务逻辑。但是,如果您要求它为来自库和 API 的功能编写代码,它将为您节省大量时间。
即使您需要的东西可能只生成一两行响应,也可以像使用任何研究工具一样使用人工智能,只要它可以节省您的时间。
当然,这只有在测试生成的代码时才有效。我发现人工智能经常会输出不完整或无功能的代码。告诉它什么不起作用,也许还可以提出澄清建议。然后要求它写一些新的东西。通常是这样,并且修改后的代码有时比原始代码更好。
了解两种不同的语言模型如何解释同一代码块通常很有趣。正如我们所见,并非所有语言模型都能很好地工作,但他们的结果可能具有启发性。您甚至可以让一个 ChatGPT 会话检查另一个 ChatGPT 会话的结果。
CSS 选择器是编码人员用来定义网页上的元素以进行样式设置或其他操作的表达式。它们很快就会变得复杂和神秘。我经常复制一段 HTML 并要求为该 HTML 的给定片段提供选择器。它可以节省大量时间,但请记住,您通常必须进行迭代,告诉人工智能前几个选择器不起作用,直到它生成一个起作用的选择器为止。
正则表达式是最常用于解析文本的符号数学序列。我不喜欢编写它们,就像我不喜欢编写 CSS 选择器一样。人工智能非常擅长编写正则表达式,尽管您肯定需要测试它们。
我使用一个名为图案用于测试我的生成的正则表达式Mac工作室。但人工智能也可以提供帮助。我经常向 AI 的单独实例提供由 ChatGPT 生成的正则表达式。然后我问那个单独的实例,“这是做什么的?”如果我得到符合我想要该功能执行的功能的描述,我就会更有信心人工智能会完成我想要的功能。
与 CSS 选择器和正则表达式一样,复杂的循环数学可能很乏味且容易出错。这是人工智能的理想应用。指定提示时,不要告诉 AI 循环中的内容。只需让它编写适当的循环包装元素,然后在工作后编写业务逻辑即可。
我经常将代码块,尤其是由人工智能生成的正则表达式,提供给人工智能。了解人工智能认为代码有什么问题非常有启发性,通常会突出显示代码未测试的错误条件。然后,当然,要求人工智能重新生成代码,修复它发现的错误。
同样,我喜欢向人工智能提供代码块并询问它“这是做什么的?”即使对于我自己的代码来说,它通常也很有启发性。但最大的好处是当我正在处理别人编写的代码时。将函数或块提供给人工智能可以节省大量对原始代码进行逆向工程的时间。
有时,人工智能根本无法完成这项工作。我发现,如果你尝试让它重写代码超过两到三次,你就已经到了无可挽回的地步。如果您确实想要人工智能生成的代码,请从全新的、重新措辞的提示开始,看看您会从中得到什么。有时,您只需要自己去做。
人工智能从变量和函数名称中获取意图并编写更好的代码。例如,将变量名称指定为 $order_date 有助于告诉 AI 您正在处理订单和日期值。它比像 $od 这样的东西要好得多。更好的是,从命名良好的变量名称生成的代码通常也更具可读性,因为它知道对其创建的其他变量使用更具描述性的名称。
人工智能通常会在其编写的代码之前和之后生成一些关于每个提示的注释。其中可能有一些宝石可以帮助您了解人工智能做了什么或者它如何解决问题。有时,人工智能还会向您指出其他可能有用的库或函数。
从项目中获取各种代码来说明您需要什么,告诉 ChatGPT 阅读它们,然后询问您想要什么。我需要在扩展区域中建立输入字段的排除,然后我回去询问。不到一分钟后,我就得到了自己编写的代码,而这些代码本来需要我 10 分钟到一个小时才能编写。
我有一个用旧版本 PHP 编写的 PHP 模块,该模块使用了现已弃用的语言功能。为了更新代码,我将已弃用的代码段粘贴到 ChatGPT 中,并要求它告诉我如何重写它以与最新的 PHP 版本兼容。确实如此,而且有效。
我很乐意学习新的编程语言,但我发现,如果我需要用我不擅长的语言进行编码,人工智能会非常有帮助。我只是问它如何编写我想要的内容,并指定语言。假设我想知道如何在 Python 中执行 case 语句,而我一直在 Perl 中执行这些操作。只需询问“比较用 Perl 和 Python 编写 case 语句”或“如何在 Python 和 PHP 中连接字符串”。您将得到很好的比较,这使得编写不熟悉的代码变得更加容易。
这是一个额外的提示。与您的公司核实生成的代码的法律问题。如果您不确定从哪里开始,阅读我关于人工智能和代码所有权的文章。如果您使用我与您分享的技巧,您将永远不会使用人工智能来编写独特的业务逻辑或使您的代码独一无二的核心。因此,您可能能够保留该代码的版权,这应该构成您独特价值的关键要素。
我编写的代码供公司内部使用或开源代码,因此当涉及人工智能生成的代码片段时,我并不太关心所有权问题。
您使用过人工智能来帮助编写代码吗?您有什么建议可以添加到我上面的列表中吗?请在下面的评论中告诉我们。
您可以在社交媒体上关注我的日常项目更新。请务必订阅我的每周更新时事通讯,并在 Twitter/X 上关注我:@大卫格维茨,在 Facebook 上Facebook.com/DavidGewirtz,在 Instagram 上Instagram.com/DavidGewirtz,以及 YouTube 上的YouTube.com/DavidGewirtzTV。.