关于软件/代码生成的思考

  摘要

  代码不仅仅是一个产品,同时也是通往通用人工智能的路径。

  作者:宿文

  一、智能代码生成的优势

  1、软件应用的实现方式主要是代码

  信息革命后,软件应用将每种业务行为映射到二进制世界的载体,进而实现可表达、可优化的数字化目的。

  软件应用的实现方式主要是代码。发展至今,全球已经有近 1 亿程序员,中国近 1000 万程序员。

  随着机器学习和人工智能技术的不断进步,智能代码生成正成为业界关注的新焦点。基于大规模训练的软件代码生成模型,不仅可以自动编写高质量代码,还可以完成各种复杂的软件开发任务,极大地提高了软件开发的效率和生产力。

  这些都在深刻的影响着软件产业。作为越来越重要的生产资料,软件产业经常临着需求与供给的不平衡,未来通过代码生成的方式,或可以解决软件消费的需求。

  随着代码生成的日臻成熟,企业会更加聚焦于业务自身的迭代。

  当下,全球 AGI 的能力在解决代码生成的能力天花板是明显存在的。

  根据统计数据看,代码生成的准确率在 30%-40% 之间,所以产品形态多是以代码补齐功能为主的 copilot,也有不少 agent 产品涌现。

  实现代码生成的 autopilot,端到端生成软件和应用,是代码生成更加广阔的方向。

  在更长线的未来,“代码不仅仅是一个产品,同时也是通往通用人工智能的路径”。

  2、智能代码生成的优势

  与传统的代码编写方式相比,智能代码生成具有以下突出优势:

  智能自动编码

  代码大模型通过深度学习的方式,能够理解代码的语义和结构,并根据输入的需求自动生成高质量的代码。用户只需简单描述需求,模型就能快速生成符合要求的代码,大大减轻了编码工作量。

  跨语言支持

  先进的代码大模型已经实现跨编程语言的代码生成能力,开发者可以使用自然语言描述需求,模型就能自动生成对应的代码,而不局限于特定的编程语言,这极大地提高了软件开发的灵活性和适应性。

  代码优化与重构

  代码大模型不仅能生成新的代码,还可以对现有代码进行优化和重构,提高代码的可读性、可维护性和效率。这对于代码质量把控和技术债务管理非常有帮助。

  自动化软件开发

  结合更多的 AI 技术与产品,代码大模型可以实现软件开发的全自动化,从需求分析、设计、编码到测试部署,整个软件生命周期都可以由 AI 系统自主完成,这将大大提高软件交付的速度和质量。

  二、智能代码生成对软件产业的影响

  1、智能代码生成的终局:更加聚焦的专业化服务+自动化交付的软件生成平台

  大模型代码生成能力对于软件产业的影响,市面上的讨论虽然集中体现在对 SaaS 领域的影响,但实际当中更应该从全景来看。

  概括来说,代码生成的终局有望将软件业态改造成两类——更加聚焦的专业化服务和自动化交付的软件生成平台。

  我们将从几个方面来拆解:

  软件业态的三个分类:专业化服务、大众化标准产品、企业解决方案

  在麦肯锡 1999 年出版的《Secrets of Software Success》一书中,对于软件业态的三个分类依然经典:专业化服务、大众化标准产品、企业解决方案。

  • 专业化服务限于边际成本难以优化具备高度的分散特征,几无规模化;

  • 以各类工具软件为代表的大众化标准产品则往往呈现出充分市场竞争下的头部效应,面临的冲击主要来自斜刺里杀出的新品类或者云化技术形态的变革;

  • 企业解决方案则往往是非标软件平台与专业化服务的融合,以 SAP、Saleforce、用友、金蝶国内外软件等为代表,经过几十年的发展体量不小。

  当下,海外 SaaS 大部分属于第二类,并通过客户成功的多手段增强服务。国内众多的软件企业,特别是大多数 SaaS 初创企业,业务发展往往属于第三类,重售前、重方案、重交付且重运营,本质上属于软件服务业。

  2、为什么是专业服务?中国的软件采购消费的本质是业务代码,而非产品

  为什么第一类专业服务在未来受益最大,甚至是成为终局?

  这是有 2 点决定的:

  • 中国的软件采购消费的本质是业务代码,而非产品。

  • 当编程的成本趋近于0,个性化的数字化需求或能得到满足。

  欧美市场诞生了很多或大而美、或小而美的 SaaS 软件企业,产品的标准化、收费方式、部署方式等均形成了中国软件从业者与投资人艳羡的生态。

  回看过去 10-20 年,在中国为软件付费的大甲方主要是政府(G端)与大B端,而大B端则主要由国央企与少量头部的民营企业构成。这也造成了中国 SaaS 行业普遍不赚钱。

  背后的主要原因则是:中国的 SaaS 消费本质是消费代码,而非产品。

  简单来说,实际运营中,从选型期、实施期到验收期,再到维保期,软件业态的信息链条长,服务占比居高不下。

  具体来看:

  • 甲方需求迭代:甲方的需求由于自身业务的差异性导致五花八门,呈现出大量的长尾、非标定制需求,且随着业务的发展,软件的供给匹配一定是滞后的,即便有 PaaS 平台可以满足 80% 的业务需求,但剩余的 20% 却消耗了 80% 的交付成本。

  • 甲方组织:甲方的数字化需求发布者是七嘴八舌的,应用软件往往伴随着流程梳理与再造,也是软件服务企业的必然特征,软件开发裹挟着大量的咨询服务,软件的用户必然会在交付过程中提出各类需求。由于供需双方在数字化经验和专业度上的欠缺,很多用户和客户只有见到最终交付的软件才知道如何重提或者修改需求,让软件的交付返工问题异常突出,长链条的收尾直接导致项目利润的消耗和难堪的回款数据。

  • 甲方付费:大多数具备付费意愿和能力的客户往往是预算制,付款并非严格按照软件交付的实质推进。更加窘迫的事实是软件需求侧验收阶段的“不讲武德”,修改、增加需求属于常规操作,否则不确收、不回款,造成了大量软件企业普遍困扰的交付长、确收少、应收多等现场。究其根源,又涉及甲方在选型过程中的成本驱动或商务驱动的非专业选型,私有化部署带来的软件维护难度大,乙方软件技术功底差、过度承诺等问题,以及政府/国央企在验收或打款后的归责制。

  中国市场对于软件的消费量是客观存在且巨量的,但我们看到的是是消费代码定制,可以称之为消费代码。

  当编程的成本趋近于0,个性化的数字化需求或能得到满足。

  3、当编程的成本趋近于0,改变软件供给侧三大核心要素,个性化的数字化需求或能得到满足

  当前,软件/代码消费的目的——业务需求的数字化转译,自身就伴随着非标、定制、长尾的特征,而且业务需求是发展和增长的,个性化会持续涌现。由于供给端的不足,需求端要么对解决方案做出让步即接受尽可能标准化的模式,要么在预算有限的情况下不停地重复造失败的轮子,让供给端的生存生态更差。

  代码生成的应用领域,在很长一段时间内都聚焦在软件服务业,旨在将软件与服务区隔,让软件的实现变成自动化的端到端代码生成,成为标准化的工具;服务环节将变得越来越专业化。

  代码生成的终局有望将软件业态改造成两类——更加聚焦的专业化服务和自动化交付的软件生成平台。

  实现从需求 PRD 走向软件工程的自动化,主要是因为改变的是软件供给侧的三大核心要素 QCD(质量 Quality、成本 Cost、效率 Delivery)三大瓶颈,最终实现软件消费的普适与平权。

  代码生成与软件供给的三要素

  全球近 1 亿程序员,中国近 1000 万程序员,在软件产业占据的人力成本达万亿美元级别,其中高质量的编程人力占比较低,同时面对软件消费的巨大市场又没法即时且高效的响应,呈现出供需的严重不平衡。

  • 效率:常见的软件交付过程除了需求梳理阶段的咨询服务,后续的开发周期与上线后的需求增改删周期都是以周和月为考量的,软件企业的边际成本会不降反升。在代码生成的终局里,与业务场景强绑定的专业咨询服务依然存在,但后续的软件需求交付可以变成分钟/小时级,给软件行业带来巨大的效率红利。

  • 质量:PC/移动互联网围绕 cloud-native、big data、algorithm 催化出来的很多优质的 infra 能力,但在软件产业优质的技术供给是极其稀缺的,代码生成可以让各类高阶技术能力的应用门槛大幅度降低,实现技术普惠,改造软件行业的基建。

  成本:在很多软件品类的交付中,都有比例客观的软件服务成本,常见的收费方式是“人·天”模式,代码生成可以让软件工程的交付边际成本趋近于代码生成所需的算力成本,让信息技术变成基础设施而非上层建筑。

  三、智能代码生成的关键能力与现状

  1、智能代码生成的关键能力

  代码大模型通过深度学习的方式,能够理解代码的语义和结构,并根据输入的需求自动生成高质量的代码。具体来说,代码大模型具有以下关键能力:

  语义理解

  代码大模型能够理解代码中蕴含的语义信息,包括函数、变量、控制流等各个层面的意义。这使得模型可以根据实际需求生成符合业务逻辑的代码。

  结构感知

  模型不仅能理解代码的语义,还能感知代码的结构特点,如面向对象的类结构、模块化的设计等。这样可以确保生成的代码具有良好的可读性和可维护性。

  上下文建模

  代码大模型拥有强大的上下文建模能力,能够根据输入的需求描述,结合代码的上下文信息生成合适的代码片段。这种上下文感知有助于确保代码的连贯性和适用性。

  多样性生成

  代码大模型不仅可以生成单一的代码解决方案,还能生成多样化的代码备选方案,为开发者提供更多的选择。这有利于探索更优的编码实现。

  面向对象建模

  代码大模型能够识别面向对象编程中的类、对象、继承、多态等概念,并根据这些结构特点生成符合面向对象设计原则的代码。这确保了生成代码的可复用性和可扩展性。

  模块化设计

  模型可以感知软件系统的模块化设计,理解不同模块之间的依赖关系和接口契约。这样可以确保生成的代码能够很好地融入现有的软件架构,实现良好的模块化拆分。

  设计模式识别

  代码大模型能够识别常见的软件设计模式,如单例模式、工厂模式、观察者模式等。它可以根据实际需求自动应用合适的设计模式,生成高质量、可复用的代码结构。

  2、当前代码生成的 2 种模式

  目前,代码生成领域的产品解决方案主要包括两类:基于现有 AGI 的 Agent vs 基于专用模型的端到端解决方案。

  大多数的参与者属于前一类,产品形态多是以代码补齐功能为主的插件形式为主,几乎所有的主流的 LLM 公司都会提供代码能力产品,也有不少独立的 agent 产品涌现,代表性公司为 Github Copilot、Cursor、August、Cognition 等。根据统计数据看,代码生成的准确率在 30%-40% 之间。

  实现代码生成的“autopilot”,端到端生成软件和应用,是代码生成更加终局的技术方向。此类解决方案的在于解决 AGI 在代码精准生成方向的模型底层技术卡点,基于 transformer,自研更为先进的模型架构,让大模型的商业化场景走向低容错率的场景,代表性公司为 Poolside、Magic、AIGCode。