AI 会取代码工码农吗

关于 AI 是否取代人类,取代某种职业,一直是一个热度很高的话题,是那些喜欢制造话题,吸引流量的媒体喜欢炒作的热点。我写过一期关于 AI 应用前景的文章,但比较笼统。接下来我准备写几期 AI 在一些具体行业的应用及其影响,并且用一个当下比较吸睛的标题格式《AI 会取代XXXX》。为了方便那些喜欢快餐式阅读的朋友,我一般会把结论放在前边,分析在后,有兴趣的朋友可以深入阅读。

今天,我们就以软件开发,程序员这个和 AI 最相关的行业开始:《AI 会取代程序员吗》

总体而言,AI 在编程领域的应用在急剧增加,带来了很多变化,主要作为辅助工具,提高工作效率和减少重复性劳动。但是全面取代程序员的情况,在5-6,甚至10-20年内不可能发生。

我们先来看看,在编程中 AI 已经被应用在那些方面。

最著名的,讨论最多的就是代码自动生成。AI 能够根据一些描述,或者在编程工作中的当前上下文,来生成代码片段。对于那些有精确描述或定义的问题,AI 会提供非常准确和高效的代码。这些工具可以显著提高程序员的效率,特别是在编写重复或常见算法的代码时。比较著名的产品有:

  • Github 的 Copilot
  • OpenAI 的 Codex
  • Amazon 的 CodeWhisper
  • Meta 的 CodeLlama

其次是自动化测试。生成式 AI 可以帮助开发人员和测试人员,根据代码快速和功能描述,自动生成测试用例,并运用到实际测试中。AI 生成的测试用例可以对代码完成 100% 的测试覆盖,极大的缩短编写测试的时间。

另外广泛使用 AI 的是代码质量分析,包括性能、错误、安全漏洞分析,静态和动态分析。代码质量分析是一个相当成熟的领域,过去主要的技术手段是规则或模式匹配。运用机器学习和神经网络技术,可以发现更复杂和深层的问题。我查了几个比较著名的供应商,他们都声称运用了 AI 技术,比如 Sonar、Synk、GitHub等。

上面三种应用,一和二使用了生成式 AI,第三更接近于机器学习,或 AI 在数据分析方面的应用。

在实际应用中,AI 有非常大的局限性。

一、AI 还无法完成需求理解和沟通。

我们经常开玩笑,程序员就是码工或码农。但实际上,程序员的大部分时间是在沟通,与团队成员,产品经理,运维工程师、客户沟通,了解市场要求,理解产品需求,知道产品规划,熟悉运行环境,细化并调整产品的各种细节甚至模块和架构。这些沟通是动态的,有时候是互相冲突的,需要根据具体情况进行取舍。这些沟通、理解、调整都需要程序员具有各种软技能,目前还没有什么 AI 模型能够模拟这些软技能。这方面的研究甚至都还没有好的指导和方向。

二、AI 没有理解复杂问题的理解力和解决这些问题的创造力。

在复杂系统和架构的沟通和代码的设计编写过程中,需要深刻的理解力和创造力,这些能力不局限于编程,涉及到了非常复杂的世界模型,目前仍然难以由 AI 比较全面的模拟。我在这里找不到合适的词汇,所以借用了世界模型这个术语。AI 擅长处理结构化、语义明确、重复性和规则明确的问题,但在处理不确定性和创新方面仍然有限。

第三、AI 的训练严重依赖训练数据,这导致两个问题:

首先,在新的领域,缺乏人类提供训练数据、包括有效指导,AI 模型无法达到最低的成熟度。有人可能用 AlphaGo 左右互博,学习围棋的过程来反驳我,需要说明一下,在运行规则确定,胜负判定明确的情况下,使用 GAN 等方式可以训练出非常棒的模型,但是说到底,这是一个规则封闭的系统,AI 只是比较聪明的穷举算法。但在一个开放系统,全新领域中,连“好”、“坏”都无法区别的情况下,那些奖励型训练方法都无法正常工作。

其次,“坏”的训练数据会导致坏的 AI 输出。即便是好的数据,目前也无法有效避免 AI 幻想,导致 AI 一本正经的胡说八道。

上面这三条使得 AI 无法全面取代程序员。实际上,我个人认为,AI 取代程序员远比 AI 取代其他工作难度要大很多。程序员是非常特殊的工作。他们实际上不仅需要编程能力,还需要对世界各个不同部分运作的理解力,然后才能设计编写出与之对应程序。如果 AI 可以替代程序员,基本就意味着 AI 可以替代任何人的工作。大家想想:如果AI 能够沟通、了解、收集各种实际需求,然后设计编写程序,并且通过质量检测和各种测试确保程序符合需求,并投入运行,那么几乎所有的工作,都可以让 AI 来设计自动化程序来完成。这实际上也是我个人的一个长期展望。

短期展望,在今后的5-10年中,AI 会进一步增强各种辅助功能,可以让程序员有更多的时间考虑高级功能模块、整体架构、创新、安全等更复杂、高级的方面,而把大量重复性的工作,比如编写已知算法,实现简单模块,把 UML 翻译到具体代码,执行质量检查、进行安全及性能测试等等工作都交给 AI 处理。另外还有可能发展出一套可以更精准,同时更人性化的描述方法,让 AI 能够处理一些沟通、需求收集、理解等方面的问题,使得 AI 能够部分承担起目前只能由程序员完成的工作。

在这个阶段,程序员的工作方式会发生改变。以下是我自己的一些分析,仅供参考:

  1. 首先熟练使用各种 AI 工具,进行辅助编程会变得非常流行,他们会极大的影响程序员的生产效率。
  2. 其次程序员的知识结构会发生变化,这种变化和搜索引擎带来的变化类似,程序员可以掌握更多的元知识,处理更复杂业务逻辑,而不需要记忆各种实现细节。这些都可以交给 AI 来完成。
  3. 会充分利用 AI,进行创造性工作的程序员会吃香,而那些只会和 AI 比赛写程序的就会被淘汰。
  4. AI 会影响整个程序员的就业市场:
    • AI 会创造了一些岗位
    • 由于效率提升,AI 会降低很大一部分就业需求
    • 考虑到各种行业对程序员的需求,整体的负面影响不是很大。
    • 我总是认为,程序员是最后失业的人类岗位。在和猛兽的赛跑中,你不需要也不可能跑得比猛兽快,只需要比其他人快即可。

长远来说我个人认为,只有当真正的 AGI,通用人工智能来临时,AI 才能比较全面的取代程序员;此外,为了让 AI 能够更好地理解真实世界的需求,和团队成员沟通,我认为具身智能也是必须的。根据人工智能的发展历史,我认为这是个漫长的过程。即便 AGI 来临,人类程序员依然是需要的,但那时他们的角色更像一个研究人员或者指导人员,负责研究和处理更加复杂,极度依赖人类联想、创造力的部分,并且指导 AI 来完成编程。

Category:

Related Posts