伟大的经济学家凯恩斯在 90 多年前曾预言:到 20 世纪末,人类将每周工作 15 个小时。但在2021年的今天,人们不仅没有实现每周工作 15 个小时,甚至有时候一天就要工作 15 个小时。 按
伟大的经济学家凯恩斯在 90 多年前曾预言:到 20 世纪末,人类将每周工作 15 个小时。但在2021年的今天,人们不仅没有实现每周工作 15 个小时,甚至有时候一天就要工作 15 个小时。
按照著名人类学家大卫·格雷博的“垃圾工作”理论,大多数的软件开发工作可能会被认为是“垃圾工作”。(垃圾工作指的是那些虽然纷纷涌现但并不一定都能为生活带来太多价值的工作。)
无论是是否统一他的观点,他确实提出了一个值得思考的观点:随着越来越多的流程自动化,大多数工作会在某个时间点过时。
以现今的科技水平而言,目前的技术就可以将 45% 的工作自动化。随着时间的推移,工作呗完全自动化也不是一件不能实现的事情。软件开发领域的技术更新很快,甚至当软件测试成为热门话题后,自动化工具便开始兴起,而这只是已经被自动化的众多领域之一,也就是所谓的“垃圾”的部分(迭代且耗时)。
那么,开发人员那是否会被自己构建的自动化工具而把自己淘汰了呢?如果越来越多的机器可以自己编写代码,还需要人类做什么?
0 1
程序员的思维比逻辑更重要
软件开发人员的工作是构架逻辑链接、算法、程序、项目的,关键的是他们构建的是与逻辑相关的东西。随着人工智能的兴起,我们看到了范式的转变。开发人员不再设计逻辑链接,相反,他们给予这些逻辑链接训练模型。
很多开发人员已经从构建逻辑转变为建立思想。换句话说,越来越多的软件开发人员正在从事数据科学工作。
使用过 IDE 的人,肯定知道辅助软件开发可以达到怎样的惊人程度。一旦习惯了自动完成或语义代码搜索等功能,就很难离开它们了。这是软件开发自动化的第一层应用:当机器知道你要实现什么内容时,它们可以帮你完成整个过程。
第二层应用是封闭系统。比如一个社交 APP 里包含很多不同但彼此相连的页面,但它仍是封闭的,因为它不能直接与其他服务发生通信。尽管开发此类 APP 的技术越来越容易,但还不能说这是真正的自动化。到目前为止,如果要创建动态页面、使用变量、应用安全规则或集成数据库等,仍然需要写代码。
第三层应用是集成系统。银行的 API 就是这样的一个系统,因为它是与其他服务通信而构建的。但目前,对 ATM 集成、通信、深度完全性和复杂的故障排除问题进行自动化几乎是不可能的。
0 2
人类做不到的很多事情,计算机做到了
人类不会认为自己会被机器人取代,这种想法同样适用于软件开发等领域。人们的理由很明确:创造力、同理心、协作或批判性思维等并不是计算机所擅长的。
通常,完成工作并不是最重要的。即使是最复杂的项目,也包含了很多可以i被自动化的部分。研究人员试图利用已经掌握的领域知识,但从长远来看,唯一重要的东西是利用计算的能力。
当然,人类的潜力无疑是惊人的。例如,很长一段时间以来,研究人员认为机器永远无法识别出照片里的猫。但如今,一台机器可以一次性对数十亿张照片进行分类,并且比人类的准确性更高。虽然机器可能无法像人类一样赞叹可爱的小猫,但它在处理未定义的状态方面确实非常出色。通过机器眼睛看到的小猫照片的能力即处理未定义的状态。
除了处理未定义状态外,还有两件事情,计算机比人类做更有效率:一个是规模,另一个是研究新流形。
流形是指一种通过数学的方式来指代、共享某些属性的空间子集。例如,纸张是三维空间中的二维流形。如果你将纸张弄皱或者将其折叠成任何形状,它仍然是流形。
事实证明,计算机更擅长流形工作。计算机可以延伸到二十个维度或具有很多复杂的扭结和边缘,而这对人类来说很难。由于很多日常问题(例如人类语言或计算机代码)都可以表示成数学流形,因此在未来,计算机的这项功能有很大的潜力可以变成真正的高效产品。
0 3
自动化工具威胁程序员工作?
开发人员似乎已经在使用很多自动化程序,但我们只是出于软件自动化的舆论风口。迄今为止,自动化集成系统几乎是不可能的,但其他领域已经在自动化。
代码评审和调试可能很快会成为过去。DeepCode 公司正在开发一种可以自动识别错误的工具,谷歌的 DeepMind 已经可以为现有代码推荐更优的解决方法,Facebook 的 Aroma 可以自动完成小型程序。
此外,机器推断代码相似性系统声称能够理解计算机代码。令人兴奋的是,这样的系统可以帮助开发人员自动化完成常见且耗时的任务,例如将代码推送到云端或实现合规性流程。
目前为止,所有这些自动化在小型项目上都运作良好,但在较复杂的项目上却毫无用处。但这只是开始,这些工具有望在将来变得更加强大。这些自动化的某些早期应用还包括跟踪人类活动。当然,这并不意味着它们是间谍软件。相反,我们可以通过这个方式做一些优化,比如安排员工的工作时间或为学生定制课程等。
这本身就提供了巨大的经济机会,因为学生可以更快地学习重要的东西,而工人可以在具有更高工作效率的时间里提供服务。
0 4
研发人员应尽早参与项目
如果在产品发布之前没有对软件进行测试,就可能会损害用户体验或者在发布过程中遇到安全问题。经验表明,自动化测试会覆盖测试人员想不到的情况。
越来越多的团队正在采用持续交付。当产品捆绑了大量的特性,即使只发布一个更新,比如每三个月发布一次,通常也要花上几个月的时间来修复在这个过程中出现的问题。这种工作方式不仅极大地阻碍了快速开发,还损害了用户体验。
现在有很多用于测试的自动化软件,还有用于持续交付的版本控制系统及框架。在大多数情况下,为这些自动化工具买单似乎比自己构建它们更好。毕竟,公司雇佣开发人员是用来构建新项目的,而不是执行乏味的自动化任务。
管理人员可以把自动化测试软件当作一种投资,尽可能为开发人员提供支持,让开发人员做他们真正擅长的事情。
通常,项目是由高层或与研发相近的团队创建的,然后一直向下级传递直至开发团队,开发团队的任务就是实现这个项目。
但是,并非每个项目经理都是经验丰富的软件工程师,因此开发团队可能可以实现项目的某些部分,其他部分则可能成本很高或几乎不可能实现。
这种方法在过去可能是可行的,但随着软件开发中枯燥乏味的部分被自动化,开发人员有了越来越多的机会去做一些更有创造力的事情。
这是一个让开发人员有机会尽早参与项目计划阶段的绝佳机会。他们不仅知道哪些东西可以实现、哪些东西实现不了,同时凭借他们的创造力,还可能以无法想象的先验方式为公司带来价值。
0 5
摆脱对未知的恐惧
很久之前,不夸张地说,喜欢电脑的人被认为是不合群的孩子、书呆子、极客、不讨人喜欢的生物,以及缺乏人类感情和激情的、像僵尸一样的生物。然而随着时间的推移,越来越多的人看到了开发者的另一面。程序员现在被视为能够开发出很酷产品的聪明人。
软件的自动化程度越高,开发人员的能力就越大。从这个意义上说,由于自动化而导致开发人员失去工作的担忧是没有根据的。
十年后,甚至几个月后,开发人员可能在做一些我们现在无法想象的事情,但这并不意味着开发人员的工作消失了。相反,开发者的工作升级了。
程序员真正需要克服的恐惧不是可能会失去工作,而是摆脱对未知的恐惧。
开发者们,你们不会被时代抛弃,也不会成为敲代码的机器。相反,你们将成为领导者。
(责任编辑:中博IT教育)