AI来编程,码农何去何从?
还记得软件风靡世界的时候吗?最近一个流行的观点是人工智能正在席卷所有种类的软件。过去,谷歌首席执行官桑德尔·皮帅谈到“自动编写自己的软件”有些人认为软件开发的工作只比创建重复的代码片段稍微复杂一点。现在,人工智能的快速发展可能会让软件工程师集体失业。
传统上,开发人员用一系列固定的规则编写软件。例如,如果出现A,则执行B操作。人类程序员指导机器,这是软件1.0的时代。然而,在软件2.0时代,人们认识到,基于深入学习研究的进展,我们可以构建一个神经网络来学习需要哪些指令或规则来实现期望的结果。安德雷·卡帕西和特斯拉的人工智能主管其他人都是2.0时代的支持者。他们的论点是,在未来,我们将不再需要自己编写代码。我们所需要做的就是找到数据并将其输入机器学习系统,然后一切都完成了。在这种情况下,软件工程师的角色将改为“数据主管”或“数据启用者”。
然而,软件工程不会很快消失。尽管软件工程师2.0和数据科学家2.0等新职业在不断发展,但人工智能技术反过来将提高软件1.0时代工人的能力。事实上,我们不确定软件工程是否会在不久的将来变得与今天完全不同。深度学习神经网络系统将帮助我们,但它不会完全取代我们。
机器学习将如何塑造软件开发?
这将是一个全新的世界,但我们不是生活在电视剧里。事实上,普通的智能办公助理已经可以安排一天并开始电话会议了。甚至一些人工智能支持的系统也可以为企业生成商标,并根据反馈自动改进商标。
今天,手机会自动检查拼写并提示下一个单词。类似的工具在编写代码时也会突出潜在的错误。例如,从事结对编程的人自然会期待软件2.0对他们工作方式的影响。考虑到机器学习和会话接口的进步,可以想象将来一台机器可以完成一半的配对编程任务。
多年来,我们一直使用自动化工具来节省编写模板代码的时间。现在,人工智能驱动的辅助工具越来越频繁地出现在更复杂的软件开发中。它们以增强的集成开发环境的形式出现,为人们推荐更好的代码组合。
人工智能的作用
让我们想象一个更高级的人工智能助手在未来将发挥的巨大作用。在编码时,你的人工智能还会通过分析来决定你正在编写的代码,并根据你的风格自动完成其余的代码。本质上,人工智能助手更像是得到你的指示,帮你完成剩下的工作。
人工智能助手将取得巨大成就的另一个领域是测试驱动开发。与人类的工作速度形成鲜明对比的是,机器同事可以快速执行数百万次迭代来找到正确的代码段来解决测试。有一个人工智能同事意味着测试和验证将由人工智能来完成。我们不需要同时编写测试和测试验证,因此节省了编码时间,给了我们更多的时间来理解和解决业务问题。
在未来,软件2.0甚至可以帮助指导测试驱动开发,提供测试建议,并给出自己的理由。让我们想象一下,营销人员来到开发团队,说他们想要一个或另一个功能。如果他们能以机器能够理解的方式表达他们想要的,机器就能自动选择必要的测试并为下一步提出建议。
加强,而不是取代
这提出了一个终极问题:机器会完全取代软件工程师吗?现实是我们只能达到90%以上的能力,这仍然意味着1%的失败和不可预测性。需要一个监控系统来确保编写的代码能够正常工作。也许软件工程师的新角色是监控代码并帮助机器学习系统达到接近100%的准确率。
既然我们已经概述了可以想象的好处,下一个问题就出现了:软件编程的哪些部分可以转移到深度学习2.0框架中,哪些部分应该保留在传统的1.0框架中?到目前为止,我们已经得出结论,这些深度学习神经网络在监督学习环境中表现良好。如果给他们提供训练数据和好与坏的例子,他们就能学会正确输出。
然而,这些系统的质量取决于训练数据的质量。正如我的一位同事指出的,改进模型的性能通常包括改进底层代码、部署环境和改进培训数据。事实上,一些机器学习系统如此优秀,以至于它们实际上被训练数据中的人类缺陷所延迟。
最后一个想法
我们需要设计神经网络来处理其他解决方案。软件开发的某些部分可以学得很好,而其他部分则不行。如果我们再看一下结对编程,有许多不同的方法通过与其他人共享控制权来解决这个问题。软件开发是一个与其他同事持续合作的过程。每一对新的工作伙伴都会带来不同的经验和解决问题的不同方法。组合越多,解决方案就越多。
在软件2.0中,我们有了一个新的人工智能合作伙伴来帮助开发人员更好地工作。我们期待一个更加动态的人机合作环境,这将带来越来越多的有效解决方案,这将使每个人受益。
推荐阅读