到 2030 年,软件开发人员可能会被淘汰
共 4974字,需浏览 10分钟
·
2021-02-01 19:42
编者按:软件正在蚕食世界。软件正在渗透到虚拟和现实世界的一切——甚至包括软件世界本身。是的,越来越多的软件工作正在被自动化,自动化测试、自动化编程。着不仅让人担心,软件到头来会不会蚕食掉软件开发者的岗位呢?从某种意义上来说,是的。但从另一种意义来说,不是。且看看Rhea Moutafis的分析。原文发表在Medium上,标题是Software developers might be obsolete by 2030。
软件开发是狗屁工作吗?我不这么认为。
划重点:
随着越来越多的流程被自动化,软件开发的很多工作大概会变成狗屁工作
软件自动化的三个层面:1)辅助软件开发 2)封闭系统的自动化 3)集成系统的自动化
人类的确有很多机器不擅长的特质,但是软件开发不是光靠这些
计算机很擅长流形的处理和规模化
“从长远来看,唯一重要的是对计算的利用”
软件开发人员这个职业在很长一段时间内依然令人兴奋
开发者要向管理的方向转移,从极客变成领袖
将来所有的企业都会变成软件企业,需要把软件放在优先的位置
1930年,约翰·梅德·凯恩斯(John Maynard Keynes)曾做出预测,到那个世纪末,我们每周将只需要工作15小时。但是时间一直拖到了2013年,结果证明这位伟大的经济学家显然搞错了。
欢迎来到狗屁工作(Bullshit Jobs)时代,这个词是人类学家大卫·格雷伯(David Graeber)(编者注:《狗屁工作》的作者)的发明。自1930年代以来,全新的产业如同雨后春笋般地出现,但那些行业未必能为我们的生活增添太多的价值。Graeber大概会把软件开发里面大多数的工作称为狗屁工作。
我不同意格雷伯的想法,尤其是在软件方面。但是他确实提出了一个有趣的观点:随着越来越多的流程被自动化,大多数工作到了一定时候也许都会被淘汰。根据一项估计,利用当前技术可以让45%的工作自动化。而随着时间的流逝,情况也许会是这样的。
在发展日新月异的软件开发行业,你可以亲眼目睹这种情况:一旦软件测试成为热门话题后,自动化工具便开始兴起。而这只是众多领域的其中一员——我是指软件当中那些狗屁工作,那些重复性的耗时的工作都会被自动化掉。
不过,这会引出一个问题,那就是开发人员开发自动化工具是不是自掘坟墓,把自己给淘汰掉了。如果越来越多的机器可以自己编写代码的话,那还需要人类干什么?
从设计逻辑到设计思想
软件开发人员本质上是建设者。他们开发逻辑链接,算法,程序,项目等。关键是:他们开发具有逻辑性的东西。
不过,随着人工智能的兴起,我们看到了范式正在转移。开发人员不再设计逻辑链接。相反,他们正在根据这些逻辑链接的启发去训练模型。
许多开发人员已经从构建逻辑转变为开发思想。换句话说,越来越多的软件开发人员正在从事数据科学家的活动。
自动化的三个层面
如果你曾经用过IDE的话,你应该知道辅助软件开发已经发展到什么程度。一旦用惯了自动补充完成或语义代码搜索之类的功能,你就再也离不开这些。
这是软件开发自动化进军的第一个领域。当机器知道了你想实现的目标时,它们就可以帮助你完成相关过程。
第二个领域是封闭系统。不妨想想社交媒体app是什么样的:里面包含了众多彼此链接在一起的不同页面。但是,由于在设计上它不能直接跟其他的服务通信,所以属于封闭系统。
尽管用于开发此类app的技术变得越来越易于使用,但我们还不能说实现了真正的自动化。到目前为止,如果想要创建动态页面,使用变量,应用安全规则或集成数据库,你还是需要编码。
第三个,也是最后一个领域是集成系统。比方说,银行API就是这样的系统,因为它是为了跟其他的服务通信而开发的。不过,目前想实现自动化的ATM集成、通信、对世界建模、深度安全性以及进行复杂的故障排除几乎是不可能的。
随着时间的推移,这三个领域都取得了不同程度的发展。如今,前两个领域已实现了自动化,不过第三个领域还没有实现自动化。
随着时间的推移,这三个领域都取得了不同程度的发展。如今,前两个领域已实现了自动化,不过第三个领域还没有实现自动化。
自动化的三个领域。软件开发这条路坎坷不平,未来何时到来真的无从知晓。
计算机眼里的世界
在被问到将来自己会不会被机器人所取代时,人类的打工人通常不会这么认为。这一点同样适用于软件开发等许多其他领域。
他们的理由很明确:创造力,同理心,协作,或者批判性思维,这些特质不是计算机的擅长。
但是对于把工作完成来说,这些东西通常不是关键。哪怕是最复杂的项目,也会包含有很多可以自动化的一小部分。就像DeepMind科学家理查德·S·萨顿(Richard S. Sutton)所说那样:
“研究人员寻求利用自身掌握的本领域的人类知识,但是从长远来看,唯一重要的是对计算的利用。”
不要误会我的意思。人的素质还是非常出色的。但是,就常规任务而言,我们一直高估了这些问题的重要性。比方说,很长一段时间以来,甚至连研究人员都认为机器永远也没法识别出照片上面的那些猫。
现如今,一台机器可以一次性地对数十亿张照片进行分类,并且准确性比人类还要高。虽然机器也许欣赏不了小猫的可爱,但它在处理未定义状态方面非常出色。这是的,就是机器眼中小猫照片的状态:未定义的状态。
向新流形和规模化迈进
除了处理未定义状态以外,还有两件事情计算机执行要比人类更高效:首先是规模化的处理。其次是对新颖流形的处理。
我们都体会过计算机规模处理的效果如何。比方说,如果你要求计算机执行 print(” I am so stupid”) 200次,它会毫无怨言地把你的抱怨打印200次,而且不到一秒钟就能把这件事儿干完。如果你让人去办,你需要等几个小时才能完成……
流形基本上代指的是分享一组特定属性的空间子集(局部具有欧几里得空间性质的空间),是一种用数学表示的复杂形式。比方说,如果你拿出一张纸,那它就是在三维空间里面的二维流形。如果把纸张弄皱,或者把它折叠到平面上,它仍然是流形。
事实证明,计算机确实很擅长处理人类难以可视化的流形,比方说,因为它们可以延伸到20维,或具有大量复杂的弯折和边。由于很多的日常问题(比方说人类的语言或计算机代码)都可以用数学流形表示,所以未来有很大的潜力可以部署真正有效的产品。
新颖流形与可伸缩性的图示。自动化的区域位于左下角。
关于计算机可伸缩性以及对新颖流形的探索我们目前所处的位置。我们目前正在研究区域一和区域二,但区域三几乎还没有触及。
现状目前的进展
似乎开发人员已经在运用了很多的自动化。不过这只是因为我们正好处于软件自动化的风口浪尖而已。到目前为止,对集成系统进行自动化几乎是不可能的。但是其他领域已经在自动化。
一方面,代码评审和调试可能很快就会变成过去的遗迹。瑞士公司DeepCode正在开发一种用于自动识别错误的工具。Google的DeepMind已经可以针对原有代码推荐更优雅的解决方案。Facebook的Aroma可以自行自动完成小型的程序。
此外,机器推断代码相似性系统(Machine Inferred Code Similarity System,简称MISIM)据说可以像Alexa或Siri能理解人类语言那样去理解计算机代码。有一点令人兴奋,那就是这样的系统可以让开发人员把常见且耗时的任务自动化掉,比方说把代码推送到云端或者实施合规性流程。
令人兴奋的曙光
到目前为止,所有这些自动化在用到小型项目上的时候都可以很好地工作,但在面对较复杂的项目时却基本不管用。比方说,错误识别软件仍然会返回很多的误报,而且如果项目有一个非常新颖的目标的话,自动完成功能就不起作用了。
由于MISIM出现的时间还不长,所以对这种自动化下定论还为时尚早。不过,需要牢记的是,这只是开始,而且这些工具有望在将来变得越来越强大。
即将推出的应用
这些新型的自动化会有一批早期应用。其中可能包括对人类活动的跟踪。当然,这并不意味着那就是间谍软件。相反,类似安排工人的工作时间或者给学生定制课程之类的事情可以通过这种方式来予以优化。
这本身就是一个巨大的经济机会,因为学生可以更快地学习到重要的东西,而工人可以在他们正好更有效率的时间干活。
如果MISIM的表现就像它的承诺一样好的话,那也可以用来重写遗留代码。比方说,很多银行和政府软件都是用COBOL编写的,这种股东语言学校今天几乎已经不教了。把这些代码转换成更新的语言也会让维护变得更加容易。
软件开发人员这个职业在很长一段时间内依然令人兴奋。
开发人员和公司如何才能立于不败之地
所有这些新应用的确令人兴奋。但在它们的头上,一把达摩克利斯之剑正在铸就:如果竞争对手在你赶上前就利用了这些自动化技术的话,该怎么办?如果它们导致开发人员变得完全过时了,又该怎么办?
要对持续交付和自动化测试进行投资
这无疑是自动化世界里面的两个热词。但是不管怎样,这两个东西仍然很重要。
如果你不对软件进行测试就发布出去的话,可能会损害用户体验,或者在将来遇到安全问题。经验表明,自动化测试能够涵盖测试人员甚至都没有想到但是却可能非常关键的用例。
也有越来越多的团队加入到持续交付的实践,这是有充分的理由的。当你捆绑了很多的功能,而却要每三个月才发布一次更新的话,在接下来的几个月的时间往往就得用来修复在此过程中出现的所有问题。这种做法不仅阻碍了软件的快速开发,而且还损害了用户体验。
测试有大量的自动化软件,而持续交付有版本控制(以及众多的其他框架)。在大多数情况下,购买这些自动化解决方案似乎要比自己开发更好些。毕竟,你的开发人员招进来是要开发新项目的,不是把无聊的任务自动化掉。
如果你是经理,要把买这些东西当作是一笔投资。这样以来,你就可以为开发人员提供最好的支持,因为你可以让他们发挥自己真正擅长的东西。
向左移:让开发者参与到每一个项目的早期阶段
项目一般是高层或者接近研发团队的某个地方创建,然后再层层传递到开发团队的,到了这个时候开发团队采取负责把这个项目的想法变成现实。
但是,由于并不是每一位项目经理都是经验丰富的软件工程师,所以项目一部分可能是由开发团队实施,而有的要么是成本太高,要么就是几乎不可能由自己实现的。
在过去,这种做法有它的合理性。但是,鉴于软件开发大量单调乏味的部分被自动化,开发人员将有机会变得越来越有创造性。
这是一个让开发者抽身出去的极好机会,那就是让他们参与到项目的计划阶段。这不仅是因为他们知道哪些可以实现,哪些不能。而且凭借他们的创造力,他们可能会以你想象不到的方式为项目增加价值。
把软件放在首位
现在距里微软的萨蒂亚·纳德拉(Satya Nadella)宣布“每一家企业都会变成软件企业”已经过去了五年。结果证明,他是对的。
开发人员不仅应该向管理的方向左倾。软件的优先地位也应该提升。
如果说当前的这场疫情能让你学到些什么的话,那就是现在很多的生活以及价值创造都发生在网上。
软件为王。但自相矛盾的是,自动化的程度越高,这一点就越明显。
自动化让软件极客变成领袖。
总结:极客正在变成领袖
我上学那时候,喜欢计算机的人王婉被认为是不善交际的孩子,是书呆子,怪胎,跟大家不一样的生物,是缺乏人类情感和激情的,像僵尸一样的动物。其实真希望我这是在夸大其词。
不过,时间越久,就会有越多的人看到开发人员的另一面。写代码的不再被看作是书呆子,而是可以做出很酷的东西的聪明人。
自动化程度越高,软件的获得的权力就越大。从这个意义上来说,你对开发者由于自动化而失去工作的担心是没有根据的。
当然,在十年之内——甚至在几个月内——你也许就要做你现在甚至无法想象的事情了。但这并不意味着你的工作将会消失。不会的,相反,它会升级。
你真正需要克服的恐惧并不是你可能会失业。你需要摆脱的是对未知的恐惧。
开发者们,你不会被淘汰。你只是再也不会是书呆子了。相反,你会成为领导者。
版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!