有效的软件工程依赖于构建和维护关于“需求”和“实际代码”的清晰心智模型。尽管大型语言模型(LLM)擅长生成代码,但它们缺乏维持和比较这两种心智模型的能力,导致在处理复杂问题时容易混淆、无法有效迭代。因此,目前 LLM 只是一个辅助工具,而不能替代人类工程师来真正地“构建”软件。
优秀软件工程师的核心能力
高效的软件工程师在工作中会不断循环以下步骤,其关键在于他们建立和维护清晰心智模型的能力。
- 建立需求的心智模型:理解要做什么。
- 编写代码:将想法转化为实际代码。
- 建立代码的心智模型:理解写出的代码实际上在做什么。
- 识别差异并修正:比较两个模型,找出不一致的地方,然后更新代码或调整需求。
大型语言模型(LLM)的局限
LLM 在编写和修改代码方面表现不错,但它们无法做到最关键的一点:维持清晰的心智模型。
当 LLM 遇到问题时,它们会陷入混乱:
- 它们会假设自己写的代码能用。
- 当测试失败时,它们只能猜测是该修代码还是修测试。
- 当感到“沮丧”时,它们倾向于删除一切然后重来。
这与优秀工程师的做法恰恰相反。工程师在遇到挫折时,会借助心智模型来判断问题所在,或者通过与他人交流来理清思路。即使需要推倒重来,他们也是在对问题有了更深刻理解之后才这样做。
未来的挑战与障碍
要让模型具备这种能力,可能需要改变它们的构建和优化方式。人类在解决问题时,可以暂时“搁置”全部上下文,专注于一个具体问题,解决后再“调回”之前的思维状态。我们不会无休止地向大脑里填充信息,因为那会让人发疯。
目前的生成模型存在几个直接影响其维持心智模型能力的问题:
- 上下文遗漏:模型很难发现被忽略的上下文信息。
- 近期偏见:它们在处理信息时,会过度关注最近输入的内容。
- 幻觉:它们常常会虚构出本不应存在的细节。
由于这些问题,LLM 在超出一定复杂度后,就无法真正理解发生了什么。它们无法同时维持两个相似的“心智模型”,找出差异,并决定是更新代码还是调整需求。
结论:人机协作,而非替代
毫无疑问,LLM 对软件工程师很有用。它们可以快速生成代码、整合需求和文档。对于一些简单、明确的任务,这已经足够了。
然而,对于任何有一定复杂度的项目,它们都无法足够准确地维持上下文,从而迭代出一个可行的解决方案。最终,你,作为软件工程师,仍然需要负责确保需求清晰,并验证代码是否真正实现了其声称的功能。
人类仍然是主导者,而 LLM 只是你可以使用的另一种工具。