加入网站会员,全站资源免费获取,每日稳定更新中!

人工智能还是软件工程好,人工智能和软件工程

人工智能在软件工程和商业产品开发中的应用与前景

编辑导读:

该文章讨论了人工智能在软件工程和商业产品开发中的应用。文章指出,人工智能在需求分析、软件设计和软件开发等方面的应用仍存在一定的局限性,需要进一步完善和发展。在商业层面,人工智能辅助决策可以帮助企业实现市场驱动的产品研发,并提高商业的决策质量。然而,人工智能在产品开发中仍然需要人的参与,而企业的差异化竞争力最终来源于人才。

    2016Google AlphaGo战胜两位世界围棋冠军带起了新的一轮人工智能热潮,后续几年随着人工智能落地场景扩大受挫,包括L4及以上自动驾驶迟迟未能商用,其已经进入了一个阶段性的低谷期。但是随着2022年底OpenAIChatGPT兴起,这类基于NLP(自然语言处理)的生成式人工智能突然火热起来,开始成为投资客、自媒体口中可以替代一切职业的全能AI  的确,随着算力和训练数据集的增加,在给定模型下AI的能力必然会越来越强。即使是普通人,也有熟读唐诗三百首,不会作诗也会吟的说法。但是人工智能本质上来讲是在统计学模型已经确定的情况下,利用大数据获取统计相关性公式中参数估计的方法,对于已知的确定规律需要利用已有的公式作为启发式规则,但是对于未知确定因果关系如果用相关性参数估计去推理,可能由于人工智能模型本身的匹配度不佳或者估算的精确性导致人工智能的生成内容和判决结果无法满足确定性的要求。  从上述分析来看,人工智能对那些模型单一、人类本身就无法进行精确判决的工作是非常合适的,反过来对结果需要进行精确判决、零误差容忍的工作在很长时间内是人工智能无法替代的。比如已经非常成熟的基于隐式马尔可夫链模型的语音识别,基于卷积算法+多层神经网络的图像识别。随着生成式AI的成熟,对于音乐、绘画艺术创作,必然是AI最容易替代的两个工作,这是由于这类艺术通过人的感官输入,通过激发下丘体分泌相应的激素来唤起人的共鸣,是一种非理性的、几乎完全生物性的过程,激励响应模型相对简单,而判决又是非精确的。这样AI就通过学习不同的图像形状、布局、颜色构成或声音不同频率、节拍和人的肾上腺素(紧张愤怒)、催产素(感动)、内啡肽(兴奋)等各种代表情感的生化激素的变化水平之间的关系,可以构建起一个艺术创作的框架,创造出比肩毕加索、梵高、贝多芬的绘画、音乐应该指日可待。而文学创作可能就会难一些,固定格式的诗歌、八股文不难,但是中长篇的文学作品就需要更多的训练数据集,在不留抄袭痕迹的情况下由AI独立完成创作难度还是比较大的。  而本文关心的是AI对于软件产品研发的帮助,考虑大到人类生产力的进步,小到一个企业的竞争力提升,都是一个不断用科技、工具替代、增强人工提升产出效率的过程。而软件研发自诞生以来是一个人力密集型工种,任何一个正经的软件产品研发类企业,其人工的成本都要占其总成本的50%以上,甚至更高。而软件研发到目前为止又几乎是一个完全取决于人主观思维和创造过程的一种职业,如何管理、度量、提升都是一个难题。虽然几十年来,业界发明了很多的软件工程和开发方法,比如CMMCMMI、敏捷方法、结对编程等等,应用的企业也如过江之鲫,但是除了养活了一大票的认证机构和咨询公司外,很少听说哪个公司的产品竞争力和其CMM/CMMI认证等级有正相关关系。

技术层面的软件工程

  按照维基百科的定义,软件工程为面向软件开发的一种系统化的工程方法(Software engineering is a systematic engineering approach to
software development),包括了需求分析、软件设计、软件开发、软件测试等过程;而工程的定义则是使用科学化的方法去建造机器或其它物品。进一步细化,科学是一种满足逻辑、实证的方法论,也就是说科学方法必须是满足逻辑的,可以用实验进行重复、证伪的。再将科学、工程的理念带入到最初的软件工程中,实际上软件工程的目标是要找到一种可重复的方法论体系去管理软件开发过程,通过确定的软件开发方法就可以得到确定的软件开发结果。但是正是由于软件开发主要是由人这个无法精确量化度量和控制的要素参与,才使得软件的工程化比任何一种过程都要困难,软件研发项目的失败率、延期率也比任何一种项目要高。一种朴素的想法就是在软件研发过程中尽可能减少人的参与,但这个可能吗?
  在软件开发应用AI之前,业界在软件工程领域采用了大量辅助设计、开发的工具,比如早期被IBM收购的Rational公司提供一系列基于UMLRUP的需求管理、设计、缺陷管理和测试工具,但这些工具多数是对过程管理方法论的反映,让组织和人可以采用结构化方法去管理软件开发过程,还是要靠人来实施,结果千差万别。同时业界也出现了不少对代码进行静态分析以期以更低成本发现代码缺陷的工具,包括早期在中兴华为普遍使用的pc-lint工具以及后来的klocwork软件。此外,国内在2008年前后开始普及敏捷开发方法,更加强调CI/CD和自动化测试,开始广泛使用CI/CD工具,这些对于软件产品的部分质量保证带来了相当大的提升。但是对于软件开发的技术性过程,包括需求分析、设计和开发这三个过程,都缺乏真正可以改善的工具,无法摆脱完全依赖于人的主观思维活动的情况。  要让机器或软件工具来替代这些过程,就必须要其产出物本身可以精确模型化、结构化表达;如果我们要实现开发过程的完全自动化,就要一个从需求设计开发测试验证的完全闭环自动化,意味着需求要能够用结构化的方式描述,从而工具可以用启发式规则和机器学习的模型库生成设计、代码和测试用例,再自动化执行测试用例验证对需求的满足度,需求软件代码的生成和测试用例的验证本身就是一个人工智能的GAN(生成式对抗网络)。代码在语法层面本身就是结构化的,比如我们基本上用ABNF去形式化表达一个语言语法,可以用AST表达语法解析的初步结果,这也是编译器可以检查代码语法错误、生成代码的前提;但是代码的语义层面的结构化表达就相对困难,纯软件逻辑层面的语义检查相对简单,这也是市面上大量静态检查工具存在的依据,但是图灵在1936年就证明了停机问题不存在通用的算法,这就意味着静态检查工具也不可能发现所有的软件缺陷问题;另外一层就是业务逻辑相关的语义,这个是软件语义本身无法表达的,必须要依赖于软件需求和设计的形式化表达和验证。而软件业务逻辑往往和真实世界千行百业的商业逻辑、政策和技术标准密切相关,很难有一个统一的模型。只有在非常狭窄的领域我们可以做到业务需求和逻辑的形式化表达,从而可以直接映射到软件的语义上,比如在80年代CCITT定义的用于电话呼叫处理的CHILL语言、2013年前后Barefoot提出的专门用于数据平面的P4语言,这些语言本身就将业务逻辑模型化,向上游反推也很容易进行业务逻辑的形式化表达,从而推动软件研发从需求到产品验证的闭环自动化。可惜的是现实世界能够简单模型化的软件产品少之又少,可能的前进路径是未来制定各种行业的信息化标准时都同步考虑标准本身的形式化表达,从而使得这些标准本身可以自动化实现,而软件产品则是由许多这样的模型化组件实现。  在软件开发层面引入AI,微软基于Github的代码仓库训练数据,推出了Copilot辅助开发人工智能系统,可以作为Visual StudioVS CodeJetBrains开发IDE的插件,支持PythonC++JavaJavaScriptGoC#等语言,可以实现函数级的代码自动补齐,github开发者对于Copilot生成代码的接受程度为26%,其中Python达到了40%,而Rust等相对冷门的语言就差了很多。这个结果和可以用于训练的代码量有关,也和语言本身的复杂度有关,越复杂的语法规则就需要越高的训练数据集合。从目前Copilot的表现来看,可以某种程度上提升软件开发的效率,但是离完全替代软件工程师写代码的目标还相距甚远,ChatGPT用于开发辅助估计短期内也不会有根本性差别。甚至最终即使AI可以完全可以完成一个软件产品代码的开发,也只是完成一个平庸的、可能也无法卖出去的产品,要想开发一个有竞争力的产品,其差异化竞争力部分必须要人参与。就像过去三十年的开源产业发展,降低了IT业公司的技术入门门槛,也导致了市场上充斥了大量用开源组件拼凑而成的没有什么竞争力的产品,真正有竞争力的产品依赖的是开源之外的能力。

商业层面的产品开发工程

  商业层面的软件工程不光包含软件本身开发的过程方法,更重要的是决定做什么产品的商业决策,前者决定如何正确的做事过程,后者决定做正确的事,或者说不单单是面向开发过程的软件工程,而是面向商业成功的产品研发工程。在绝大部分商业环境下,做正确的事和正确地做事同等重要、相辅相成,而在商业环境变革时期,选择比努力重要的多,方向错了,再努力也是浪费生命和金钱。  因此华为从上世纪90年代末引入IBM作为咨询顾问,全面推进IPD集成开发,其基本理论基础来源于美国PRTM公司的 PACE (Product and Cycle-time
Excellence)理论,而中兴也在2006年前后推进类似的HPPD开发模式,两者本质上是实现真正的市场驱动研发,强调先要做正确的事,做产品立项、需求排序时首先考虑商业逻辑是否成立、研发的结果也以市场的检验作为最终验证标准,把产品的市场决策和验证环节固化到产品研发过程中来,避免完全没有商业价值的产品研发决策。但是在电信设备制造领域,由于市场是一个由政策、专利壁垒所构建的一个围墙花园,IPDHPPD流程所起的作用相对有限;比如移动网络市场,产业化节奏基本由3GPP的标准化进程所确定,与IETF优选非专利方案不同,3GPP组织本身也鼓励参与者挖坑、预埋专利,导致非标准参与者进入该市场的IPR风险极高。而在2B的企业网和2C的手机终端、汽车电子领域,市场分析、产品定位和差异化竞争力定义对于产品成功往往起了决定性的作用,也是后期华为和中兴进一步拉开差距的原因之一。风险承担和激励机制、执行力是另外两个重要原因,在此不再赘述。
  很不幸的是,很多产品类公司组织上还是遵循传统的公司销售长周期标准产品的组织模式,将销售、研发、售后分离,没有重视真正的Marketing能力,缺乏从市场调研、市场定位、产品定位、产品定义、产品开发、产品上市、售后维护、退市的完整商业闭环和快速反应能力。对一个商业公司而言,更重要的是回答卖给什么客户、做什么产品,客户为什么买单这三个问题。而对于大公司而言,已经形成了固定的方法,有独立的市场研究团队不断研究客户和行业市场的现状和趋势,也有独立的预研团队研究行业的多个方向发展趋势,这些投入都是相对可控的,一旦技术可行性和商业可行性基本验证,商业必要性通过评审,则立刻调动大量资源进行商业化产品开发。对于初创公司而言这些问题往往依赖于公司创始人、核心团队的灵感闪现,但是往往也受制于自身的能力,无法变成一个可复制的、工程化过程。  不难看出,产品定义这个领域往往才是广大初创型企业需要人工智能进行辅助决策的领域,对于2C领域,可以通过消费者在互联网上的言论、搜索引擎、上市公司企业年报等渠道获取大量公开的数据进行模型的训练,从而给出有价值的商机决策。对于2B领域,由于使用者和采购决策者的分离是一种常态、需求往往在固有的合作伙伴中非公开传递,通过公开渠道获取的信息往往价值有限,这使得一些具有良好客户关系和生态价值的咨询公司仍然有价值,当然他们也需要使用AI智能技术来改善咨询报告的质量。另一方面,由于公有云服务供应商自身承载了客户的各类IT信息的流量,从这些信息流量中就可以挖掘获取比绝大多数咨询公司报告更有价值的信息。  从这些分析会看到在信息产业中掌握大量客户和市场数据优势的公司,加上人工技能辅助决策可以避免以往以人为主的决策过程中的一些主观偏见,从而可以获得足够的先发优势,大公司不作死就很难死。这一判断对众多的初创公司来说是一个极其不友好的未来,只要已有优势公司都理性决策,对于一个持续性创新的市场,初创小公司就没有任何机会,而初创公司唯一的机会就是抓住行业风向变化、技术变革时期无法根据既往数据决策的短暂时间窗,快速成长并树立自己的优势产品、市场地位。  以上分析都是基于企业多数时候都是能够理性决策的前提,就如同经济学分析都要基于消费者在统计学意义上是理性人,对于一个并非由基于规则的理性消费者构成的市场,经济学和并无差别。同样地,大多数优势企业走下坡路往往也并非是市场和技术导致,往往是企业治理结构不合理、管理层内斗造成。  另一方面,任何再先进的技术,一旦普及,那么对于企业而言就是一种门槛,而不能产生任何区别于其它企业的竞争力。无论何时何地,企业的差异化竞争力都是来源于人,只有不可精确测量、控制的人才是不同企业之间竞争力的差异化根本性的唯一来源。

总的来说,人工智能在软件工程和商业产品开发中具有广阔的应用前景。然而,人工智能的应用仍然需要与人的参与相结合,企业的差异化竞争力最终来源于人才。对于初创公司来说,抓住市场风向变化和技术变革时的机会至关重要,快速成长并树立自己的优势。

© 版权声明
THE END
喜欢就支持一下吧
点赞532 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容