开发是迭代地创造出新的、有用的事物。
当我们想到开发时,通常会联想到新产品开发。这与生产单个产品的制造业不同;新产品开发涉及创建产品的设计规范或模具。
因此,通过新产品开发创建的蓝图或模具,可以在工厂中重复使用,以制造大量相同的单个产品。
开发也有其他用途,例如开发个人能力或发展社会和国家。这些并非仅仅意味着个人所拥有之物的增加,而是指能够重复利用所开发的能力并从中受益。
虽然个人和社会的经济实力可能会因经济状况而波动,但所开发的能力从根本上说是永久性的。
即使能力有所下降,那也被认为是衰退,而非经济繁荣的上下波动。
除此之外,还有技术和知识的开发。与个人或特定社会的能力不同,这些具有易于共享的特点。
在这些开发的成果——产品、能力、知识和技术中,有些可以促进后续的开发。
通过开发这些有用的产出,开发的范围得以拓宽,效率和质量也随之提升。
AI驱动的软件开发
通常,开发需要大量的时间和精力。特别是随着社会进步和各种事物变得更加复杂,创造新事物变得更加困难。
然而,随着生成式AI的出现,这种情况正在改变。目前,得益于生成式AI强大的编程能力,软件开发正在经历剧烈的变革。
在这种背景下,一个以生成式AI为基础的自主代理作为软件工程师,成为软件开发核心的未来愿景,已经逐渐变为现实。
我们目前正处于一个过渡阶段。虽然我们不能完全将开发委托给生成式AI,但巧妙地利用生成式AI可以有力地推动软件开发。
这被称为AI驱动的软件开发。
开发型开发
当生成式AI提高软件开发效率时,它不仅能简化最终目标软件的开发,还能简化辅助开发本身的软件开发。
如前所述,有助于开发的产出能拓宽开发范围,并帮助提高效率和质量。此外,如果有效创建,它们可以在其他开发项目中重复使用。
因此,在软件开发过程中开发辅助开发的软件,可以提高整体效率,并且这些资产可以用于未来的开发。
传统上,开发此类辅助软件是常见的做法,但它本身需要开发时间和精力,因此需要仔细考虑并集中执行。
通过利用生成式AI,可以快速创建简单的软件来自动化想到的小任务。如果任务涉及清晰的处理,生成式AI几乎可以无误地准确生成程序。
因此,在软件开发过程中开发辅助开发的软件比以前更容易了。
深入思考这一点,一种开发风格便会浮现:在开发过程中不断创建有用的开发工具,从而改变开发方法本身。
我们将此称为“开发型开发”。
要实践开发型开发,需要养成客观审视自身软件开发的习惯,思考哪些部分可以由软件处理,哪些部分只能由人类处理,同时还需要开发此类辅助软件的技能。
此外,生成式AI可以融入到这些软件工具中。通过将其嵌入软件内部,与生成式AI代理不同,处理范围可以在一定程度上缩小,并且可以定义处理路径。
虽然AI代理可以通过提示实现类似的结果,但嵌入生成式AI的软件可以通过结合程序和提示,更容易地提高准确性。
如果能够实践这种开发型开发,与第一个项目相比,第二个项目将在质量和成本上都显示出改进。此外,随着后续项目——第三个、第四个等等——的不断进行,改进将持续累积。
这与仅仅使用生成式AI开发软件完全不同。随着时间的推移,仅掌握生成式AI工具的团队与实践开发型开发的团队之间将出现显著差距。
重构驱动测试
有一种概念叫做测试驱动开发(TDD),即首先根据规范设计测试,然后开发软件以通过这些测试。
起初,我也认为通过利用生成式AI,可以轻松开发用于自动化测试的测试程序,从而使TDD变得可行。
然而,随着我开始实践开发型开发,我逐渐认为在实施之前考虑测试并非总是最适合的方法。
特别是对于像Web应用程序这样涉及主观方面(如可用性和视觉设计),需要直接交互的软件,我意识到实际运行和交互软件的优先级高于详细的测试。
这是因为如果在交互后出现UI/UX层面的显著不满意,则可能需要更改框架、基本架构、数据模型或用例等基础部分。
在我当前的个人软件开发项目中,我注意到了功能灵活性和性能方面的问题,最终更换了两个不同的框架。
我还不得不完全审查某些区域的处理,因为内存使用效率低下。
正是在这些重构时刻,测试才首次成为一个有意识的考虑。
如果这处于开发的早期阶段,或者功能和规范无论如何都会发生重大变化,那么测试可能是不必要的。
然而,如果开发已经相当深入,并且有许多项目需要检查,那么测试将是必要的,以确认重构没有引入功能缺陷或遗漏。
因此,当开发进展到一定程度并需要重构时,创建测试程序的方法并非不妥。
此时,关键不是为所有代码创建测试,而是专注于测试未来不太可能发生变化、已经成熟的部分,而将那些仍在变化中的部分留作没有自动化测试。
这可以称之为重构驱动测试。
结论
生成式AI正在极大地改变软件开发。
在之前的一篇文章中,我曾写到超越传统全栈工程师,成为一个能够结合各种领域、基础设施和执行环境来开发系统的“全方位工程师”的重要性。
我还写过一篇文章,提出我们正在进入一个“体验与行为中心开发”的时代,其重点不是使规范与实现保持一致,而是通过软件行为来提升用户体验。
开发型开发和重构驱动测试,正是通往这些软件开发新境界的关键。