为什么到2030年软件开发人员可能会过时

2020-10-19 23:20:06

1930年,约翰·梅纳德·凯恩斯(John Maynard Keynes)预测,到本世纪末,我们将拥有每周15小时的工作制。但到了2013年,这位伟大的经济学家显然搞错了。

欢迎来到人类学家大卫·格雷伯(David Graeber)创造的胡说八道的工作时代。自20世纪30年代以来,全新的产业如雨后春笋般涌现,这并不一定会给我们的生活增加太多价值。格雷伯可能会说软件开发领域的大多数工作都是胡说八道。

我不同意Graeber的观点,特别是在软件方面。但他确实触及了一个有趣的问题:随着越来越多的流程自动化,大多数工作在某种程度上都会过时。根据一项估计,大约45%的工作可以使用目前的技术实现自动化。随着时间的推移,他们很可能会这么做。

在软件开发中,无论如何事情都进展得相当快,你可以看到这是实时发生的:软件测试一成为热门话题,自动化工具就开始如雨后春笋般涌现。这只是软件的垃圾部分-迭代和耗时的部分-已经自动化的众多领域中的一个。

然而,这就回避了一个问题,开发人员是否正在通过构建自动化工具使自己变得过时。如果越来越多的智能机器可以自己编写代码,我们需要人类做什么呢?

软件开发人员本质上是构建者。他们构建逻辑链接、算法、程序、项目等等。关键是:他们创造了符合逻辑的东西。

然而,随着人工智能的兴起,我们看到了一种范式的转变。开发人员不再设计逻辑链接。取而代之的是,他们正在训练这些逻辑链接的启发式模型。

许多开发人员已经从构建逻辑转向构建思想。换句话说,越来越多的软件开发人员开始从事数据科学家的活动。

如果您曾经使用过IDE,那么您就会知道辅助软件开发是多么令人惊叹。一旦您习惯了自动完成或语义代码搜索等功能,您就不会想再没有它们了。

这是软件开发中自动化的第一个领域。当机器理解您试图实现的内容时,它们可以帮助您完成整个过程。

第二个领域是封闭系统领域。以社交媒体应用程序为例:它由许多相互链接的不同页面组成。然而,它是封闭的,因为它不是被设计成直接与另一个服务通信的。

尽管构建这样一个应用程序的技术变得越来越容易使用,但我们还不能说是真正的自动化。到目前为止,如果您想要创建动态页面、使用变量、应用安全规则或集成数据库,则需要能够编写代码。

第三个也是最后一个领域是集成系统领域。例如,银行的API就是这样一个系统,因为它是为与其他服务通信而构建的。然而,在这个时间点上,实现ATM集成、通信、世界模型、深度安全和复杂故障排除问题的自动化几乎是不可能的。

当被问及未来是否会被机器人取代时,人类工作者往往不这么认为。这适用于软件开发以及许多其他领域。

他们的主要原因很清楚:像创造力、同理心、协作或批判性思维这样的品质并不是计算机擅长的。

但通常情况下,这并不是完成一项工作的关键。即使是最复杂的项目也由许多可以自动化的小部件组成。DeepMind科学家理查德·S·萨顿(Richard S.Sutton)是这样说的:

研究人员试图利用他们对该领域的人类知识,但从长远来看,唯一重要的是利用计算。

别误会我的意思,人类的品质是令人惊叹的。但是,当涉及到常规任务时,我们一直高估了这些问题的重要性。例如,在很长一段时间里,甚至连研究人员都认为机器永远无法识别照片上的猫。

如今,一台机器可以一次对数十亿张照片进行分类,而且比人类更准确。虽然一台机器可能无法惊叹一只小猫的可爱,但它在处理未定义状态方面表现出色。这就是一张小猫的照片在机器眼中的样子:一种未定义的状态。

除了处理未定义的状态之外,计算机还可以比人类更高效地做另外两件事:第一,大规模地做事情。其次,研究新的流形。

我们都经历过计算机在一定规模上工作得有多好。例如,如果你让一台计算机打印200次(我太笨了),它会毫无怨言地这样做,并在不到几秒钟的时间内完成任务。问问人类,你需要等上几个小时才能把工作做完…。

流形基本上是指共享特定属性的空间子集的一种奇特的或数学的方式。例如,如果你拿一张纸,那就是三维空间中的二维流形。如果你把这张纸揉成一张或折成一个平面,它仍然是一个流形。

事实证明,计算机真的很擅长处理人类难以想象的多种多样的东西,例如,因为它们延伸到20个维度,或者有很多复杂的扭曲和边缘。由于许多日常问题,如人类语言或计算机代码,都可以表示为数学流形,因此在未来部署真正高效的产品的潜力很大。

似乎开发人员已经在使用大量的自动化了。但我们只是处在软件自动化的风口浪尖。到目前为止,集成系统的自动化几乎是不可能的。但其他领域已经实现了自动化。

首先,代码审查和调试可能很快就会成为过去。瑞士公司DeepCode正在开发一种自动识别漏洞的工具。谷歌旗下的DeepMind应用已经可以为现有代码推荐更优雅的解决方案。而且脸书的Aroma可以自己自动完成小程序。

更重要的是,机器推断代码相似性系统(简称MISIM)声称能够像Alexa或Siri理解人类语言一样理解计算机代码。这很令人兴奋,因为这样的系统可以让开发人员自动执行常见且耗时的任务,例如将代码推送到云中或实现合规性流程。

到目前为止,所有这些自动化都可以在小项目上发挥很大作用,但在更复杂的项目上却相当无用。例如,错误识别软件仍然返回许多误报,如果项目有非常新的目标,则自动完成不起作用。

由于MISIM出现的时间不长,这种自动化还没有定论。但是,您需要记住,这只是个开始,预计这些工具在未来会变得更加强大。

这些新自动化的一些早期应用可能包括跟踪人类活动。当然,这不是像间谍软件那样的意思;相反,安排工作人员的工作时间或为学生个性化课程等事情可以通过这种方式进行优化。

这本身就提供了巨大的经济机会,因为学生可以更快地学习重要的东西,工人们可以在碰巧更有生产力的时间服务。

如果MISIM像它承诺的那样好,它也可以用来重写遗留代码。例如,很多银行和政府软件都是用COBOL编写的,今天几乎没有教过这种语言。将此代码翻译成较新的语言将使其更易于维护。

所有这些新的应用都令人兴奋。但在它们的上方隐约可见一把巨大的达摩克利斯之剑:如果竞争对手在你流行之前就利用了这些自动化怎么办?如果他们让开发人员完全过时了怎么办?

这肯定是自动化世界里的两个流行词。尽管如此,它们仍然很重要。

如果您不在发布之前测试您的软件,您可能会影响用户体验或在以后遇到安全问题。经验表明,自动化测试涵盖了人类测试人员甚至没有想到的情况,尽管它们可能是至关重要的。

持续交付是一种做法,越来越多的企业团队正在采取这种做法,而且有很好的理由。如果你捆绑了很多功能,而只发布一个更新,比如说每三个月发布一次,那么在接下来的几个月里,你通常会花几个月的时间修复在这个过程中损坏的所有东西。这种工作方式不仅大大阻碍了快速开发,还影响了用户体验。

有很多用于测试的自动化软件,还有用于持续交付的版本控制(和许多其他框架)。在大多数情况下,购买这些自动化设备似乎比自己建造要好得多。毕竟,您的开发人员是用来构建新项目的,而不是让枯燥的任务自动化的。

如果你是一名经理,就把这些购买视为一种投资。通过这样做,您正在尽您所能地支持您的开发人员,因为您正在利用他们真正擅长的东西。

通常情况下,项目是在高层管理或接近研发团队的某个地方创建的,然后传递到开发团队--开发团队的任务就是将这个项目想法变成现实。

然而,由于不是每个项目经理都是经验丰富的软件工程师,所以项目的某些部分可能是开发团队可以实现的,而其他部分则是昂贵的或几乎不可能实现的。

这种做法在过去可能是合法的。但是,随着软件开发中许多单调的部分--是的,这些部分确实存在!--正在实现自动化,开发人员有机会变得越来越有创造力。

这是让开发人员离开的绝佳机会,也就是说,让他们参与项目的规划阶段。他们不仅知道什么可以实现,什么不能实现。凭借他们的创造力,他们可能会以一种先验无法想象的方式增加价值。

距离微软的萨蒂亚·纳德拉(Satya Nadella)宣布“每一项业务都将是一项软件业务”,已经过去了短短五年的时间。他是对的。

如果说当前的大流行教会了你什么的话,那就是如今生活中的很多事情和价值创造都发生在网上。

当我在学校的时候,喜欢电脑的人被认为是不爱交际的孩子、书呆子、极客、不讨人喜欢的生物,以及没有人类感情和激情的僵尸般的生物。我真希望我是夸大其词。

然而,进展的时间越长,人们就越能看到开发人员的另一面。编写代码的人不再被视为书呆子,而是可以构建很酷的东西的聪明人。

软件的自动化程度越高,其功能就越强大。从这个意义上说,您担心由于自动化而失去开发人员工作在很大程度上是没有根据的。

当然,十年后--甚至几个月后--你可能会做一些你现在无法想象的事情。但这并不意味着你的工作就会消失。相反,它将进行升级。

你真正需要克服的恐惧并不是你可能会丢掉工作。你需要摆脱的是对未知的恐惧。

开发人员们,你们不会被淘汰。你们只是不会再做书呆子了。相反,你们会成为领导者。

本文由Rhea Moutafis撰写,最初发表在“走向数据科学”上。你可以在这里读到。