对我来说,与初级程序员合作最困难的部分,无论是在开源领域还是在工作中,都是避免前提陷阱。这就是代码初稿中包含的基本假设不会受到质疑的地方,除非您已经花费了太长时间来改进实现。人工智能也是如此。
因为此刻的AI就像一个优秀的初级程序员。一个拥有有关语法和 API 的百科全书式知识,但也同样倾向于产生过于复杂、存在细微缺陷的解决方案。
您可以将此视为人工智能编程未来的看涨信号。当前的轨迹正在跟踪人类程序员的进步树,最终,就像最优秀的初级程序员一样,它将在代码美学、新问题推理和架构一致性的细节方面达到高级能力水平。我希望情况确实如此。
但这并没有改变这样一个事实:截至目前,我还没有看到我在过去一年中使用的任何人工智能模型在我非常熟悉的领域内生成了出色的代码。偶尔会有一丝曙光,就像有前途的初级程序员一样,但从整体上看,解决方案几乎总是需要大量的返工。
这就是前提陷阱响起的时候!
我在人工智能产生的 Ruby 和 JavaScript 代码中多次看到过这种情况,所以我怀疑这是一种语言相对于另一种语言的特殊情况。但引入不必要的依赖项、过于冗长的表示以及架构死胡同的倾向始终存在。
这是我从那些试图使用人工智能为他们编写整个系统的人那里听到的,而他们自己实际上并不是有能力的程序员。在短短几分钟内看到一个原型变得栩栩如生,这是一种令人难以置信的冲动,但实际上将其向前推进到可靠的工作往往会变成一种前进一步、后退两步的舞蹈。 (与 Upwork 上的许多故事一样,有些人可能会被一个勉强合格的初级程序员欺骗!)。
虽然这令人沮丧,但当您考虑用于教授这些模型的训练数据时,这是完全有道理的。层出不穷的基础在线教程、Stack Overflow 简化的答案,以及不幸的现实,即相当大一部分互联网编程内容是由盲人引导盲人制作的。
高级人类程序员都是从相同的信息饮食开始的,但最终通过使用专有代码库达到了更高水平的理解和掌握。教程式代码中不存在的所有权衡都会显现出来,并需要巧妙地权衡。
我认为,在当前范式下,这些模型的下一个重大飞跃可能不太可能发生,除非它们接触到大量专有的公司代码语料库。目前还不完全清楚这将如何发生。
因此,与此同时,作为一名高级程序员,你最好像对待初级程序员一样对待人工智能。如果您关心架构或实现的最终质量,那么要求它生成整个系统甚至子系统几乎不会节省您的时间。因为要验证已融入其路径中的假设,需要花费与自己完成工作一样多的时间来理解选择。
我仍然看好人工智能为我们所有人编写代码,但也对其当前的能力保持现实。还要警惕引诱包括我自己在内的更多高级程序员草率退出的危险,同时这会削弱我们继续学习的耐力,因为我们过于依赖人工智能为我们写作而不是教授如何写作。
但愿这件作品在短短几年内就会严重老化!