AI辅助编程实战
上QQ阅读APP看书,第一时间看更新

1.3.7 现代化支持

2011年,Marc Andreessen在《华尔街日报》上发表了颇具远见的卓识——“软件正在吞噬世界”。

作为一名杰出的企业家和风险投资家,Andreessen以敏锐的洞察力著称,他总能在技术的浪潮中捕捉到变革的脉搏,创造出一个又一个商业传奇。他的这篇文章无疑是技术史上的一个里程碑。

Andreessen强调,随着基础设施的日臻成熟,全球产业正站在一个变革的临界点。AWS等云平台的崛起与宽带互联网的普及,如同打开了潘多拉的盒子,彻底改变了行业的游戏规则。它们不仅打破了服务器成本和网络技术的传统壁垒,更为像Uber、Netflix及众多社交媒体平台这样的创新者提供了改写行业规则的舞台。

从Andreessen这篇深具洞察力的文章中,我们不难窥见,创新的车轮正在飞速转动,而它所带来的颠覆性力量,对大型企业来说尤为显著。许多传统巨头依然依赖于昂贵且僵化的传统系统,实现现代化转型无异于一场风险重重的博弈。企业的层级结构往往成为决策的绊脚石,庞大的体量则让变革之路更加崎岖。此外,员工可能难以与日新月异的技术创新保持同步。

IBM敏锐地将这一挑战作为契机,倾注大量资源研发出AI辅助编程工具。2023年10月,IBM正式推出Watsonx Code Assistant for Z,该系统能在大型机系统上将COBOL代码优雅地翻译成Java代码,并输出高质量的面向对象代码。

Watsonx.ai模型作为IBM的得意之作,具备对115种编程语言的深刻理解能力,背后依托的则是1.5万亿个token(分词)的强大支撑。该模型拥有约200亿个参数,无疑是当前代码开发领域的一颗璀璨明珠。

然而,将拥有数千亿行代码的COBOL系统迁移到现代语言绝非易事。像COBOL这种拥有几十年历史的编程语言,往往缺乏或几乎没有文档支持。若转换处理不当,后果将不堪设想。要知道,世界上大部分信用卡处理是通过大型机完成的。

遗憾的是,失败的迁移项目屡见不鲜。例如,加利福尼亚州机动车辆管理局就曾投入2.08亿美元[1],却在数年后不得不终止项目。


[1] 1美元约合7.26元人民币。——编辑注

大型机项目的高风险性质导致开发者薪酬普遍较高,但企业在招聘方面仍面临重重挑战。年轻的开发者往往接受的是现代编程语言的培训,对大型机开发持怀疑态度。同时,众多经验丰富的大型机开发者即将步入退休年龄。

IBM深知,要应对大型机开发的严峻挑战,AI的介入不可或缺。尽管传统的代码转换器或翻译器已存在多年,但它们往往只是简单地将COBOL的“面条式代码”转换为Java的“面条式代码”,并未带来实质性改进。因此,这些Java代码仍需要开发者做大量的润色工作,这也是许多项目步履维艰甚至失败的原因。

但IBM表示,通过运用生成式AI,他们能够显著提升项目成果,提升的效率甚至达到10倍。

其他公司也在积极把握现代化的机遇。GitHub的首席执行官Thomas Dohmke在其帖子中提到:“使用COBOL的主框架仍在运行是一个比我们想象的要严重得多的社会问题。”在接受《财富》杂志采访时,他表示,2023年他听到的关于COBOL的消息比过去30年都要多。他还透露,许多公司都在询问如何在迁移项目中使用GitHub Copilot。

ChatGPT也精通传统编程语言。表1-2列出了常见的传统编程语言。

表1-2 常见的传统编程语言

下面的例子展示了AI辅助编程对传统编程语言的帮助。假设需要处理以下代码片段。

    MODULE ComplexModule
      IMPLICIT NONE
      TYPE :: ComplexType
         REAL :: real, imag
      CONTAINS
         OPERATOR(+) (a, b) RESULT(c)
           TYPE(ComplexType), INTENT(IN) :: a, b
           TYPE(ComplexType) :: c
           c%real = a%real + b%real
           c%imag = a%imag + b%imag
         END OPERATOR
      END TYPE ComplexType
    END MODULE ComplexModule

你不知道这是什么编程语言,也不知道它是如何工作的。你通过代码不能直观地理解工作流程。

现在,你访问ChatGPT并输入以下内容。

提示:这段代码用什么编程语言编写的?有什么作用?另外,请解释它是如何工作的。

图1-5展示了来自ChatGPT的响应。

图1-5 ChatGPT对用传统编程语言编写的代码的解释

ChatGPT能够精确地辨识所提供的代码片段是用Fortran编程语言编写的。它不仅指出这段代码定义了一个名为ComplexModule的模块,还详尽地解释了该模块中的关键组成部分。具体来说,该模块包含一个名为ComplexType的派生类型,用于表示复数,还包含一个重载的加法运算符“+”,该运算符被设计为处理两个复数之间的加法运算。随后,ChatGPT对这段代码进行了逐步深入的解析。