MIT研究人员详细阐述了一种新的软件模型提案,旨在帮助人类和AI代码生成器创建更好、更透明的应用程序,告别"感觉式编程"。
这一方法在MIT的Eagon Meng和Daniel Jackson撰写的论文《所见即所得:可读软件的结构模式》中得到详细阐述。他们指出了现代软件"不可读"的问题,缺乏"代码与观察行为之间的直接对应关系"。
现代软件往往"模块化不足",导致健壮编程的三个关键要求失效:增量性、完整性和透明度。
这些不仅仅是人类的缺陷。事实上,研究人员认为大语言模型的日益广泛使用"暴露了软件开发实践中的深层缺陷,可能需要重新评估以充分利用大语言模型的优势并减轻其缺陷"。
当大语言模型用于向现有代码库添加代码时,"很难控制修改哪些模块,并确保现有功能不被破坏"。此外,"程序员抱怨大语言模型编程助手推荐的补丁经常破坏先前生成的功能"。而"整体应用"构建器在达到"某些(未定义的)限制"之前往往无法扩展功能。
研究人员认为,大语言模型在保持完整性的同时无法进行增量工作,这最终可能限制其作用。
对于那些向构建大语言模型投入数十亿资金并承诺企业能够优化开发团队的科技巨头来说,这无疑是个遗憾。
但对于确实越来越依赖大语言模型的开发团队来说,这也是一个担忧。GitHub的最新数据显示,大语言模型的使用不仅无处不在,而且在使Type成为平台第一语言方面发挥了重要作用,部分原因是它与智能体辅助代码配合得更好。
具体来说,他们表示社交媒体应用中的概念可能包括"帖子"、"评论"、"好友"等。
同时,概念应该构建应用的底层实现。作者表示,这使它们类似于微服务,但没有那种可能导致"错综复杂连接网络"的依赖关系,比如调用或查询彼此状态的能力。但他们补充说,概念仍然可以依赖于较低级别的服务,如数据库或网络服务。
概念反过来将由应用层进行编排。这将避免"耦合...允许独立设计概念,然后再将其组合成应用程序"。
论文研究了一些现有的想法,最终确定了一种提议的细粒度同步方法,这些同步"像合同一样"准确说明概念应该如何交互。
Meng在MIT关于这项工作的帖子中说:"为什么我们不能像读书一样读代码?我们相信软件应该是可读的,并根据我们的理解来编写:我们希望概念映射到熟悉的现象,同步代表我们对它们结合时会发生什么的直觉。"
因为同步是明确和声明性的,所以可以被分析、验证,也可以由大语言模型生成。
在论文中,作者建议他们的方法意味着"基于大语言模型的工具可以提供比'感觉式编程'更多的功能,在感觉式编程中,结果是不可预测的,复杂性的限制很容易达到,每个新的编程步骤都有可能破坏以前的步骤"。
"分布式实现可能通过允许概念实例在不同服务器上运行来实现,同步作为保持服务器同步的机制,"论文补充道。
Jackson和Meng建议这种架构可能导致"经过充分测试的特定领域概念"的概念目录。
这些可以被人类和AI编码者使用。"你仍然必须处理功能交互的固有复杂性。但现在它是公开的,不再分散和模糊。"
这听起来是个好主意。只是遗憾的是,这将使感觉式编程变得多余,就在这个术语刚刚进入词典之时。
Q&A
Q1:什么是"感觉式编程"?为什么要摒弃它?
A:"感觉式编程"是指大语言模型编程中结果不可预测、复杂性限制容易达到、每个新编程步骤都可能破坏之前功能的编程方式。MIT研究人员认为这种方式缺乏透明度和可控性,因此提出了基于"概念"的新模型来替代。
Q2:MIT提出的新编程模型有什么特点?
A:新模型将系统分解为独立的"概念"模块,每个概念都是面向用户的功能单元,具有明确定义的目的。概念之间通过显式的"同步"机制进行交互,这些同步像合同一样明确规定概念应该如何互动,从而提高代码的可读性和可维护性。
Q3:这种新模型对大语言模型编程有什么好处?
A:新模型可以让基于大语言模型的工具提供更可预测的结果,避免复杂性限制问题,减少新代码破坏已有功能的风险。同时,显式的同步机制可以被大语言模型分析、验证和生成,提高AI编程的可靠性和透明度。