好的,ChatGPT刚刚调试了我的代码真的
好的,ChatGPT刚刚调试了代码
编程就像是一场持续不断的心理Jenga游戏:一行接着一行地堆叠代码,建立起希望足够稳固的代码之塔,不至于崩塌。
但它总会崩塌,因为代码在第一次运行时从来不会正常工作。因此,对于任何程序员来说,调试是一项关键技能,它是找出代码为什么无法运行或产生意外或不可取行为的艺术和科学。
此外:如何使用ChatGPT编写代码
特别报道
生成式AI与工程的交叉点
生成式AI的兴起为工程领域带来了巨大潜力。但也带来了挑战,因为企业和工程师们需要弄清楚AI对他们的角色、业务战略、数据、解决方案和产品开发的影响。将生成式AI融入软件开发的未来路线图是怎样的呢? ENBLE从各个角度解读。
这有点像是做侦探工作,找到线索,然后弄清楚这些线索试图告诉你什么。有时候,这非常令人沮丧,但同时也非常令人满足。
我经常进行调试。这不仅仅是因为代码在第一次运行时从来不会正常工作,还因为我使用调试来告诉我代码的运行情况,并在过程中进行调整。
但是,尽管良好的调试需要专门的技能,但它最终也只是编程。一旦你找出某段代码不起作用的原因,你就必须弄清楚如何编写一个能工作的替代方案。
真实世界的ChatGPT测试
本周,我正在为我维护的软件进行三个编码任务。其中两个是修复用户报告的错误,另一个是添加新功能的一段新代码。对我来说,这是真正的、例行公事的编程工作。它是我日常工作计划的一部分。
此外:ChatGPT是如何工作的?
我告诉你这一点,是因为到目前为止,我一直在使用测试代码测试ChatGPT。我构思了各种场景来测试ChatGPT的工作效果。这次不同,我试图完成真正的工作,并决定看看ChatGPT是否可以成为一个有用的工具来完成这项工作。
这是一种不同的看待ChatGPT的方式。测试场景往往有点牵强和简单化。而现实世界的编码实际上是从堆栈上取下另一个客户支持票,并解决导致用户体验不佳的问题。
因此,让我们看看这些任务,以及ChatGPT的表现如何。
重写正则表达式代码
在编码中,我们需要在文本中查找许多模式。为此,我们使用一种称为正则表达式的符号数学形式。我已经写了几十年的正则表达式,但我仍然不喜欢这样做。这是一项乏味、容易出错和晦涩的工作。
此外:我正在使用ChatGPT帮助我更快地修复代码,但代价是什么?
因此,当一个错误报告告诉我,我的代码的一部分只允许整数,而不允许美元和美分(换句话说,一些数字,可能后面跟着一个句点,然后如果有一个句点,后面再跟着两个数字),我知道我需要使用正则表达式编码。
由于我发现这个过程又乏味又烦人,所以我决定向ChatGPT寻求帮助。这是我问的:
这是AI非常精彩的回答(点击小方块放大):
我将ChatGPT的代码放入我的函数中,它起作用了。相比于抓耳挠腮花费的两到四个小时,这次只花了大约五分钟来构思问题并从ChatGPT获得答案。
重新格式化数组
接下来是对数组进行重新格式化。我喜欢编写数组代码,但这也是一项繁琐的任务。所以,我再次尝试了ChatGPT。这次的结果是完全失败的。
到我完成的时候,我可能给它提供了10个不同的提示。有些回复看起来很有希望,但当我尝试运行代码时,出现了错误。有些代码崩溃了,有些代码生成了错误代码。还有些代码运行了,但并没有达到我想要的效果。
大约一个小时后,我放弃了,回到了我平常的做法,通过查阅GitHub和StackExchange,看看是否有我想要做的事情的示例,然后编写我的代码。
另外:如何让ChatGPT提供来源和引用
到目前为止,ChatGPT的体验是一胜一败。但现在,我决定提出更大的挑战。
实际找到我的代码中的错误
好的,接下来的一部分很难解释。但想想这样一个事实,如果对你解释起来很困难(你大概是一个人类,而不是那50多个只是复制和转载我的工作到不可信的、垃圾的网站的机器人之一),那么对一个人工智能来说,解释起来更具挑战性。
另外:GPT-4是什么?这是你需要知道的一切
我正在编写新代码。我有一个接收两个参数的函数,以及一个调用语句,将两个参数发送给我的代码。函数是执行非常特定功能的小黑盒子,它们被从程序的其他地方运行的代码行调用(要求它们发挥魔力)。
我发现的问题是我一直收到一个错误消息。
另外:如何使用ChatGPT总结一本书、文章或研究论文
该消息中的关键部分是其中一处指出“1 passed”,而另一处指出“exactly 2 expected”。我查看了调用语句和函数定义,两个地方都有两个参数。
什么情况?
经过大约15分钟的深度挫败后,我决定将问题交给人工智能来看看是否可以帮助。所以,我写下了以下提示:
我向它展示了进行调用的代码行,展示了函数本身,以及处理程序,即从我的主程序的钩子中调度被调用函数的一小段代码。
几秒钟后,ChatGPT回答了这样的回复(点击小方块放大):
正如它建议的那样,我将add_filter()函数的第四个参数更新为2,然后它就正常工作了!
ChatGPT获取了代码片段,分析了这些片段,并给我提供了诊断。需要明确的是,为了做出它的建议,它需要理解WordPress如何处理钩子的内部工作原理(这就是add_filter函数所做的),以及该功能如何转化为调用和执行代码行的行为。
另外:我让ChatGPT编写了我需要的WordPress插件。它在不到5分钟的时间内完成了
我必须将这一成就视为令人难以置信的——毫无疑问是“生活在未来”的不可思议之处。
这一切意味着什么?
正如我之前提到的,调试是一部分艺术和一部分科学。大多数好的开发环境都包含强大的调试工具,可以让您查看程序运行时数据的流动情况,这在追踪错误时确实有所帮助。
但当你陷入困境时,往往很难获得帮助。这是因为即使是亲密的同事可能对您调试的代码的全部范围都不熟悉。我正在处理的程序由563个文件中的153,259行代码组成,就程序而言,这是一个小程序。
另外:这些专家正在竞相保护AI免受黑客攻击
所以,如果我想从同事那里获得帮助,我可能不得不构建一个几乎与我发送给ChatGPT的请求完全相同的请求。
但是有一点需要考虑:我记得包含处理程序行,尽管我没有意识到错误就在那里。作为一个测试,我还尝试让ChatGPT在一个没有包含处理程序行的提示中诊断我的问题,但它无法帮助我。因此,在2023年,ChatGPT对调试的能力有非常明确的限制。
另外:尝试的最佳AI聊天机器人
基本上,你必须知道如何以正确的方式提出正确的问题,而且这些问题需要足够简洁,以便ChatGPT能够在一个查询中处理整个问题。这需要实际的编程知识和经验。
AI辅助调试的潜在成本
请记住,AI并不能替代所有其他调试工具。您仍需要逐行调试代码,检查变量值,并了解代码的工作原理。我发现ChatGPT可以帮助确定需要关注的区域,并提供一些简单的代码块。在某种程度上,它很像使用编码模板,只是您不必预先构建这些模板以将它们合并到您的代码中。它是一个助手,但不是替代编码的工具。
另外:AI能编写代码吗?只能迈出初步的步伐
我能自己修复这个错误吗?当然可以。我从来没有遇到过无法解决的错误。但是,不管它需要花费两个小时还是两天(外加披萨、粗话和大量的咖啡因),同时还要忍受许多中断,这我不知道。但是ChatGPT只用了几分钟就修复了它,为我节省了无数的时间和沮丧。
ENBLE的Tiernan Ray最近发表了一篇引人入胜的文章,引用了德克萨斯理工大学的一项研究,显示AI在编码方面的性能仍然非常不可靠。请记住这一点,因为如果AI在编写复杂代码方面存在困难,那么在调试复杂代码方面就会更加困难。
大多数程序员都有一系列的调试工具可供选择,并根据他们目前尝试诊断的问题选择要使用的工具。毫无疑问,AI工具可以添加到这个工具箱中。但是要小心过度使用它们。因为AI本质上是一个黑盒,您无法看到AI达到结论的过程。因此,您实际上无法检查它的工作。
这可能造成巨大的成本。对于传统的调试任务,程序员始终能够准确地看到正在合并到代码中的更改。即使这些更改不总是有效,程序员也肯定知道为何尝试这些更改。但是当依赖基于AI的调试时,即使只是部分地依赖,程序员与代码之间的距离也会更远,这使得最终的工作产品更难以维护。如果AI生成的代码存在问题,修复它所需的成本和时间可能远远大于如果一个人类编码人员通过手工完成整个任务。
正如我在上面的例子中所示,AI编码工具可以帮助解决问题(至少三次中的两次)。但它们并不总是有效,并且绝不能依赖它们来替代真正的理解。忘记这一点可能是代价高昂的。
展望(可能是反乌托邦式的)未来
我看到了一个非常有趣的未来,那时我们将能够将ChatGPT的所有15.3万行代码输入其中,并要求它告诉我们应该修复什么。微软(拥有GitHub)已经发布了一个名为Copilot的公共测试版,用于帮助程序员构建代码。微软还在OpenAI(ChatGPT的制造商)上投资了数十亿美元。
虽然该服务可能仅限于微软自己的开发环境,但我可以想象一个未来,AI可以访问GitHub中的所有代码,因此也可以访问您在GitHub上发布的任何项目的代码。
另外:我让ChatGPT写一集《星际迷航》的短剧,它居然成功了
从我提供的代码中,ChatGPT能够很好地识别出错误,我确实可以看到未来程序员只需简单地询问ChatGPT(或一个微软品牌的等效产品)来查找和修复整个项目中的错误。
接下来,我将把这个对话带到一个非常黑暗的地方。
想象一下,您可以要求ChatGPT查看您在GitHub上的某个项目的存储库,并找到并修复错误。一种方法是它将每个发现的错误呈现给您以供批准,以便您进行修复。
但是,如果您让ChatGPT仅仅修复错误,并且不再自己查看所有代码,那会怎么样呢?它会在您的代码中嵌入一些不好的东西吗?
另外:Bard vs. ChatGPT:Bard能帮助您编写代码吗?
还有,如果一个极其能干的人工智能能够访问几乎所有GitHub代码库中的世界代码,那会怎么样呢?它会在所有代码中隐藏什么?如果它能访问我们所有的代码,那么这个AI能对世界基础设施造成什么邪恶的影响呢?
让我们来玩一个简单的思维游戏。假设这个AI被赋予了阿西莫夫的第一条规则作为关键指示。那就是“机器人不得伤害人类,也不能通过不采取行动使人类受到伤害”。它难道不能决定我们所有的基础设施都在对我们造成伤害吗?通过访问我们所有的代码,它可以简单地决定通过插入后门来拯救我们,这些后门允许它关闭电网、使飞机失效和造成交通拥堵。
我完全意识到上面的情景是夸张和危言耸听的。但这也是可能的。毕竟,尽管程序员会查看他们在GitHub上的代码,但不可能有人能够查看所有代码中的所有行。
另外:如何使用ChatGPT编写Excel公式
至于我,我会尽量不去过多思考这个问题。我不想在接下来的几年里一直以胎儿的姿势蜷缩在地板上。相反,我会偶尔使用ChatGPT帮助我编写和调试一些小程序,低调行事,并希望未来的人工智能在努力“不允许人类受到伤害”的过程中不会杀死我们所有人。
您是否觉得ChatGPT能够调试代码有帮助还是可怕?您认为人工智能会在我们睡觉时谋杀我们,还是您认为我们将睁大眼睛看着我们的末日?还是像我一样,不想过多思考因为这会让你头疼?在下方的评论中与我交流。只要您还可以。
您可以在社交媒体上关注我的日常项目更新。一定要在Twitter上关注我,账号是@DavidGewirtz,在Facebook上关注我,链接是Facebook.com/DavidGewirtz,在Instagram上关注我,链接是Instagram.com/DavidGewirtz,在YouTube上关注我,链接是YouTube.com/DavidGewirtzTV。