作者丨 RHEA MOUTAFIS

译者丨王者

策划丨褚杏娟

“我认为过去几十年的黄金时代已经过去了,那种当一名程序员就能找到工作的日子已经过去了。编程现在更像是会读书能写字。你必须具备这样的能力。”硅谷技术布道者 Tim O'Reilly 如此评价软件行业的未来。

伟大的经济学家凯恩斯在 90 多年前曾预言:到 20 世纪末,人类将每周工作 15 个小时。但在 2021 年的今天,人们不仅没有实现每周工作 15 个小时,甚至有时候一天就要工作 15 个小时。

按照著名人类学家大卫·格雷伯(David Graeber)“垃圾工作(Bullshit Job)”理论,大多数的软件开发工作可能会被认为是“垃圾工作”。(垃圾工作指那些虽然纷纷涌现但并不一定都能为生活带来太大价值的工作。)

无论你是否同意格雷伯的观点,他确实提出了一个值得思考的观点:随着越来越多的流程自动化,大多数工作会在某个时间点过时。

据估计,目前的技术就可以将 45% 的工作自动化。随着时间的推移,工作被完全自动化是非常有可能的。软件开发领域的技术更新很快,甚至当软件测试成为热门话题后,自动化工具便开始兴起,而这只是已经被自动化的众多领域之一,也就是所谓的“垃圾”的部分(迭代且耗时)。

那么,开发人员是否会被自己构建的自动化工具而把自己淘汰了呢?如果越来越多的机器可以自己编写代码,还需要人类做什么?

1 程序员的思维比逻辑更重要

软件开发人员的工作是构建逻辑链接、算法、程序、项目等,关键的是他们构建的是与逻辑相关的东西。随着人工智能的兴起,我们看到了范式的转变。开发人员不再设计逻辑链接,相反,他们基于这些逻辑链接训练模型。

很多开发人员已经从构建逻辑转变为建立思想。换句话说,越来越多的软件开发人员正在从事数据科学工作。

使用过 IDE 的人,肯定知道辅助软件开发可以达到怎样的惊人程度。一旦习惯了自动完成或语义代码搜索等功能,就很难离开它们了。这是软件开发自动化的第一层应用:当机器知道你要实现什么内容时,它们可以帮你完成整个过程。

第二层使用是封闭系统。比如一个社交 App 里包含很多不同但彼此相连的页面,但它仍是封闭的,因为它不能直接与其他服务发生通信。尽管开发此类 App 的技术越来越容易,但还不能说这是真正的自动化。到目前为止,如果要创建动态页面、使用变量、应用安全规则或集成数据库等,仍然需要写代码。

第三层应用是集成系统。银行的 API 就是这样的一个系统,因为它是为与其他服务通信而构建的。但目前,对 ATM 集成、通信、深度安全性和复杂的故障排除问题进行自动化几乎是不可能的。

自动化的三个应用层次。图片由作者提供,改编自 Emil Wallner 在 InfoQ 的演讲

2 人类做不到的很多事情,计算机做到了

人类不会认为自己会被机器人取代,这种想法同样适用于软件开发等领域。人们的理由很明确:创造力、同理心、协作或批判性思维等并不是计算机所擅长的。

通常,完成工作并不是最重要的。即使是最复杂的项目,也包含了很多可以被自动化的部分。DeepMind 的科学家 Richard S. Sutton 表示:

研究人员试图利用已经掌握的领域知识,但从长远来看,唯一重要的东西是利用计算的能力。

当然,人类的潜力无疑是惊人的。例如,很长一段时间以来,研究人员认为机器永远无法识别出照片里的猫。但如今,一台机器可以一次性对数十亿张照片进行分类,并且比人类的准确性更高。虽然机器可能无法像人类一样赞叹可爱的小猫,但它在处理未定义的状态方面确实非常出色。通过机器眼睛看到的小猫照片的能力即处理未定义的状态。

除了处理未定义状态外,还有两件事情,计算机比人类做更有效率:一个是规模,另一个是研究新流形。

我们知道,计算机可以大规模地处理任务。比如,如果你要求计算机 print("I am a stupid") 200 次,它会毫无抱怨地照做,并在不到一秒的时间内完成任务。而一个人要需要几个小时才能完成。

流形是指一种通过数学的方式来指代、共享某些属性的空间子集。例如,纸是三维空间中的二维流形。如果你将纸张弄皱或将其折叠成纸飞机,它仍然是流形。

事实证明,计算机更擅长流形工作。计算机可以延伸到二十个维度或具有很多复杂的纽结和边缘,而这对人类来说很难。由于很多日常问题(例如人类语言或计算机代码)都可以表示成数学流形,因此在未来,计算机的这项功能有很大的潜力可以变成真正高效的产品。

我们正在研究第一和第二区域,但几乎没有触及第三区域。图片由作者提供,改编自 Emil Wallner 在 InfoQ 的演讲

3 自动化工具威胁程序员工作?

开发人员似乎已经在使用很多自动化程序,但我们只是处于软件自动化的舆论风口。迄今为止,自动化集成系统几乎是不可能的,但其他领域已经在自动化。

代码评审和调试可能很快会成为过去。DeepCode 公司正在开发一种可以自动识别错误的工具,谷歌的 DeepMind 已经可以为现有代码推荐更优的解决方案,Facebook 的 Aroma 可以自动完成小型程序。

此外,机器推断代码相似性系统(简称 MISIM)声称能够以与 Alexa 或 Siri 类似的方式(即理解人类语言)来理解计算机代码。令人兴奋的是,这样的系统可以帮助开发人员自动化完成常见且耗时的任务,例如将代码推送到云端或实现合规性流程。

目前为止,所有这些自动化在小型项目上都运作良好,但在较复杂的项目上却毫无用处。例如,错误识别软件仍会出现很多误报,并且如果项目的目标跟以前有所变化,自动完成功能就无法正常工作。

由于 MISIM 出现的时间并不长,因此大家对于这种自动化仍然缺乏关注。但这只是开始,这些工具有望在将来变得更加强大。

这些自动化的某些早期应用还包括跟踪人类活动。当然,这并不意味着它们是间谍软件。相反,我们可以通过这个方式做一些优化,比如安排员工的工作时间或为学生定制课程等。

这本身就提供了巨大的经济机会,因为学生可以更快地学习重要的东西,而工人可以在具有更高工作效率的时间里提供服务。

如果 MISIM 像它承诺的那么好,它也可以被用来重写遗留代码。例如,很多银行和政府软件都是用 COBOL 开发的,而如今很少人懂这门语言,如果将这些代码转换为新语言的代码就更容易维护。

所有这些新应用都令人感到兴奋。但这也是一把双刃剑:如果你输给了这些自动化技术会怎样?如果开发人员因为它们而被淘汰了怎么办?

4 研发人员应尽早参与项目

这虽然是自动化领域的两个流行词,但不管怎样,它们很重要。

如果在产品发布之前没有对软件进行测试,就可能会损害用户体验或者在发布过程中遇到安全问题。经验表明,自动化测试会覆盖测试人员想不到的情况。

越来越多的团队正在采用持续交付。当产品捆绑了大量的特性,即使只发布一个更新,比如每三个月发布一次,通常也要花上几个月的时间来修复在这个过程中出现的问题。这种工作方式不仅极大地阻碍了快速开发,还损害了用户体验。

现在有很多用于测试的自动化软件,还有用于持续交付的版本控制系统及框架。在大多数情况下,为这些自动化工具买单似乎比自己构建它们更好。毕竟,公司雇佣开发人员是用来构建新项目的,而不是执行乏味的自动化任务。

管理人员可以把自动化测试软件当作一种投资,尽可能为开发人员提供支持,让开发人员做他们真正擅长的事情。

通常,项目是由高层或与研发相近的团队创建的,然后一直向下级传递直至开发团队,开发团队的任务就是实现这个项目。

但是,并非每个项目经理都是经验丰富的软件工程师,因此开发团队可能可以实现项目的某些部分,其他部分则可能成本很高或几乎不可能实现。

这种方法在过去可能是可行的,但随着软件开发中枯燥乏味的部分被自动化,开发人员有了越来越多的机会去做一些更有创造力的事情。

这是一个让开发人员有机会尽早参与项目计划阶段的绝佳机会。他们不仅知道哪些东西可以实现、哪些东西实现不了,同时凭借他们的创造力,还可能以无法想象的先验方式为公司带来价值。

五年前,微软首席执行官 Satya Nadella 曾宣称,“所有业务都将变成软件业务”。他是对的,不仅要让开发人员升级,软件的优先级也应该被提升。

疫情让我们更清楚的知道,大部分生活和价值创造都发生在网络上。软件为王,软件的自动化程度越高,这一点就越明显。

5 摆脱对未知的恐惧

很久之前,不夸张地说,喜欢电脑的人被认为是不合群的孩子、书呆子、极客、不讨人喜欢的生物,以及缺乏人类感情和激情的、像僵尸一样的生物。然而随着时间的推移,越来越多的人看到了开发者的另一面。程序员现在被视为能够开发出很酷产品的聪明人。

软件的自动化程度越高,开发人员的能力就越大。从这个意义上说,由于自动化而导致开发人员失去工作的担忧是没有根据的。

十年后,甚至几个月后,开发人员可能在做一些我们现在无法想象的事情,但这并不意味着开发人员的工作消失了。相反,开发者的工作升级了。

程序员真正需要克服的恐惧不是可能会失去工作,而是摆脱对未知的恐惧。

开发者们,你们不会被时代抛弃,也不会成为敲代码的机器。相反,你们将成为领导者。

原文链接:

https://thenextweb.com/syndication/2020/10/18/why-software-developers-might-be-obsolete-by-2030/

有道无术,术可成;有术无道,止于术

欢迎大家关注Java之道公众号

好文章,我在看❤️

程序员的“黄金时代”,死去又重来?相关推荐

  1. 【有三吐槽】程序员改BUG的六重境界,你,第几重了?

    文章首发于微信公众号<有三AI> [有三吐槽]程序员改BUG的六重境界,你,第几重了? 作为一个程序员,我们也有丰富多彩的bug人生啊,咱们又开新专栏了(实在是有感于最近大家问我的问题), ...

  2. 属于微型计算机主要性能指示,历年软考程序员考试历年真题重点题

    一.单选题 1.计算机中数据的表示形式是 A)八进制 B)十进制 C)二进制 D)十六进制 2.硬盘工作时应特别注意避免 A)噪声 B)震动 C)潮湿 D)日光 3.针式打印机术语中,24针是指 A) ...

  3. 高中毕业就想转行当 Coder,程序员的学历真的不重要么?

    作者 l 会点代码的大叔(CodeDaShu) 你的学历决定了我要不要了解你的能力,你的能力决定了我要不要否定你的学历. 相信大家在网上经常可以看到这样的说法:"高中毕业想入行程序员,有什么 ...

  4. 04 从中兴研发主管坠楼来看,什么是程序员的不能承受之重?

    今天出来一个新闻,中心程序员醉楼,这个事情一出来,就看到各个技术群在讨论.同时又扯到华为以前的32岁程序员裁员的事情,持续了好几天.看到报道,心里很不舒服.一个老实人,一个家庭就这么一下子没了. 哪个 ...

  5. 高级计算机程序员实操题,计算机软考《程序员》历年真题重点题总结及答案(1)...

    单选题1-20题节选 1.计算机中数据的表示形式是 A)八进制 B)十进制 C)二进制 D)十六进制 2.硬盘工作时应特别注意避免 A)噪声 B)震动 C)潮湿 D)日光 3.针式打印机术语中,24针 ...

  6. 程序员的灯下黑:重知识轻技术(转)

    为什么80%的码农都做不了架构师?>>>    程序员的灯下黑:重知识轻技术(转) 电视<雍正王朝>讲了这么一个故事:大将军年羹尧奉命到青海平叛,清军因路途遥远,军耗巨大 ...

  7. 做为一个程序员,真的要经历学历之痛?互联网企业有多么看重学历!

    学历成了当今社会一个衡量一个人能力的标准,未来只会越来越深入,有人说别老拿学历说事.确实,学历不代表能力,但是学历代表了一种持续毅力的代名词.今天就和 Tamic 我一起聊聊学历的话题. 作为 Top ...

  8. 程序员:你30岁前的职业规划是什么?未来的职业规划又是什么?

    职业规划是什么?, 职业规划是对职业生涯乃至人生进行持续的系统的计划的过程, 那么程序员的职业规划是怎么样的? 职业分类: 计算机科学发展到,程序员从事的人群很多,分工也不相同,从大的方面可以分为以下 ...

  9. 没学历,当程序员还有机会吗?

    记得之前看过一篇<上了社会你才会知道学历真的很重要>的文章引起热议. ▲张雪峰怼某公司老板现场过程 张雪峰怼某公司老板的场景,让人看了忍俊不禁.当看这段对话笑过后,也不得不想思考这样一个问 ...

最新文章

  1. Mysql 基本命令
  2. nyoj 55(优先队列)
  3. python数据类型转换原因_浅谈Python数据类型之间的转换
  4. imp oracle reschema_Oracle EXP和IMP用法和介绍
  5. Error-Project facet Java version 1.8 is not supported
  6. 组合数学 —— 组合数取模 —— 卢卡斯定理与扩展卢卡斯定理
  7. Excel--Solver安装和使用
  8. RabbitMQ 学习开发笔记
  9. 医学AI又一突破,微软开源生物医学NLP基准:BLURB
  10. git学习笔记-(11-git存储)
  11. 第6章 可编程并行通信接口8255A
  12. Java对AutoCad二次开发
  13. 椭圆检测 Arc Adjacency Matrix-Based Fast Ellipse Detection 代码和数据集使用教程
  14. Java快递配送管理系统
  15. idou老师教你学Istio: 如何用Istio实现K8S Egress流量管理
  16. 13种权重的计算方法
  17. html组态插件_组态 web组态 插件 编辑器 使用说明书
  18. 学历查询,邮件查询,身份证查询,聊天室查询,日期时间查询,列车飞机航班查询,等各种各类的查询网
  19. python智慧树判断题_智慧树_Python数据分析与数据可视化_判断题答案
  20. 广东省梅州市谷歌卫星地图下载

热门文章

  1. python解析.pyd文件
  2. 贪心算法 0-1背包c语言,贪心算法0-1背包问题(算法实验代码).pdf
  3. php的 datetime,PHP DateTime-修改参考
  4. 有一分数序列求前20项和答案c语言,用c语言求解:有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求这个数列的前20项之和....
  5. 前端基础-html-标题标签
  6. Linux系统编程15:进程控制之如何创建进程和写时拷贝技术
  7. Qt中对main.cpp的代码解释
  8. C++虚继承的实现原理、内存分布、作用
  9. 汇编语言:实验10 根据材料编程—3.数值显示,编程,将data段中的数据以十进制形式显示出来
  10. react-native Android release打包失败