作为一名有20年编码经验的老兵和一家服务软件开发公司的首席执行官,我对早期预测认为GenAI最终会使大多数软件开发技能变得过时有着本能的怀疑。
虽然我仍然有些怀疑,但我在日常开发工作中使用GenAI的经历促使我开始更开放地思考我认为可能的事情。AI将以一些非常基本的方式改变软件开发,既有好处也有坏处。让我们先从积极面开始谈起。
结束重复性工作
开发者花费了大量时间在诸如语法和标点符号等细节上。这些大部分可以(也应该)消失。他们将不再翻阅手册或拼凑代码交换中的片段,而是描述一个期望的结果并获得格式完美的代码作为回应。大型语言模型(LLMs)还可以检查现有代码以发现打字错误、标点错误和其他让开发者烦恼的细节。
重新定义框架
像Spring、Express.js和Django这样的软件框架通过抽象掉软件开发的平凡方面,设置一致的指导方针并为常见功能提供预写代码,带来了巨大的生产力提升。生成式AI将通过创建样板代码、自动化重复任务和建议代码优化来增强它们的价值。AI还可以帮助将框架组件定制化到特定项目。
全能型开发者的崛起
许多开发者的专长是他们在特定语言上的专业知识。当机器可以吐出任何语言的代码时,Python或Ruby的熟练程度就不那么重要了。类似地,像测试和代码优化这样的专门后端技能将迅速转移到生成式AI模型上。最珍贵的技能将是机器不擅长的,如构建引人入胜的用户界面、将用户需求转化为规格和发明新的方式来支持客户。软件“诗人”,或者那些构想代码能实现什么的人,将成为焦点。
测试的革命
生成式AI是为软件测试而生的。开发者编写代码,而机器人可以创建任意多的测试脚本。最近的IDC调查发现,生成式AI最被广泛期待的两大好处是软件质量保证和安全测试。这将颠覆DevOps实践中的持续集成/部署,并使许多测试专家寻找新的工作方向。
加强版的公民开发
当前的低代码/无代码开发工具已经很不错了,生成式AI将使它们更上一层楼。尽管低/无代码具有自动化的优雅性,但它仍然需要人们在白板上拼凑工作流程,然后再提交给软件。将来,他们可以给模型一个手绘草图,描述期望的工作流程,并在几秒内得到必要的代码。
AI并不是万能的
尽管充满希望,生成式AI不应被视为灵丹妙药。考虑这些潜在的缺点。
过度测试的风险
因为模型可以快速生成测试,我们可能最终会有比需要的更多的测试。过度测试是软件开发中的一个常见问题,特别是在以团队生成的测试数量来衡量绩效的组织中。进行过多的重复
或不必要的测试会减缓项目进度,并在管道更上游产生瓶颈。当AI能够推荐何时移除测试时,我们将看到开发者的巨大解放——这种生成式AI的前景让我对未来感到兴奋。
技能退化
有句话常被错误地归功于比尔·盖茨:“我总是选择一个懒惰的人来做一项艰难的工作,因为他会找到一种简单的方法去做。”虽然这句话的出处不明,但情感是有效的。懒惰的人找到了避免艰苦工作的捷径。生成式AI对懒惰的开发者来说是一种诱惑。它可能导致产生臃肿、效率低下和性能不佳的代码。它可能扼杀使伟大的开发者如此有价值的创新。记住,生成式AI编写代码是基于现有的模式和数据。这可能限制了开发者的创新潜力,他们可能不会考虑更多超出常规的解决方案。
信任赤字
生成式AI的好坏取决于用来训练模型的数据质量。质量差的数据、训练的捷径和糟糕的提示工程可能导致AI生成的代码不符合质量标准、存在缺陷或无法完成任务。这可能导致组织对生成式AI的质量失去信心,并错过其许多好处。
现在的关键问题:AI会让软件开发者过时吗?
尽管一些引人注目的评论家这样建议,但历史上没有这样的先例。从高级语言到面向对象到框架的技术进步不断提高了开发者的生产力,但需求只增不减。生成式AI可能会对低端基础编码技能的市场产生影响,但更大的影响将是将整个行业提升到价值链中做得不是很好的事情:创新。记住,生成式AI模型是基于已知的内容训练的,而不是可能的内容。我不指望机器很快就能设计出革命性的用户界面或构想出一个Uber。
然而,开发者在他们的职业生涯中不会再看到这样的变革。与其像我最初那样对抗机器,不如顺应潮流。消除构建软件的大部分繁琐工作的前景应该让每个人都感到兴奋。某些功能可能消失的风险应该成为行动的动力。将业务需求转化为优雅且高性能的软件的高质量开发者将始终有很高的需求。使提升你的技能成为你的使命。