机器学习变得越来越容易,但软件工程仍然很困难

2020 年 6 月 18 日

机器学习变得越来越容易,但软件工程仍然很困难

作者声明:本文是一篇评论文章,仅代表本人观点。我认为当世界上有更多的通才和实干者(不只是专家)来构建事物和解决问题时,这个世界会变得更好。


在过年的五年中,机器学习变得更容易了。与此同时,软件工程比以往任何时候都要复杂。


对于软件工程师而言,这是一件好事。但对于机器学习专家而言,这并不是好事。


这是机器学习向软件工程靠拢的进程,也是数据科学向数据分析靠拢的进程。


本文由 Chris 发表在 medium.com,经原作者授权由 InfoQ 中文站翻译并分享


机器学习工具正变得越来越易用


谷歌希望让所有人,无论技术背景如何,都能很容易掌握机器学习模型的训练方法。(参见:技术民主化


随着机器学习变得越来越容易使用,云服务的市场也在增长,而理解算法的意义也在下降。


曾经,我们需要人工实现算法。现在 Sklearn 使得同样的算法只需几行代码就能实现。


原本的 TensorFlow 很难使用,Keras 让它变得简单多了。


现在,谷歌、微软和亚马逊都提供选择模型、训练模型和调参的云服务,然后通过一个 API 就能立刻部署一个模型。


我们离人人皆可训练人工智能的时代还有一定的距离。但随着复杂性的降低,训练人工智能变成了熟练软件工程师知识体系中的一个新工具而已。


机器学习开发仅局限于几种语言


语言即是护城河。就这么简单。


你了解 COBOL 吗?如果你熟悉这个语言,你这辈子都不愁没有工作了。这个世界的金融体系都建立在这个语言之上。但现在已经不再有人学习 COBOL 了。


大部分的机器学习算法都是通过 Python 来实现的,而软件工程开发需要各式各样的语言。


来源:https://www.tiobe.com/tiobe-index/


如果每个算法工程师都有 Python 的开发经验,那你就需要与所有算法工程师竞争。而在软件开发方面,你只需要与一部分使用同样技术栈的工程师竞争即可。


我常常会惊讶地看到很多高薪的 Ruby on Rails 开发的职位在招人。它在几年之前就已经过时了,但很多大公司(Shoptify、Instacart、Kickstarter 等等)由于历史原因还在使用它。


你肯定可以同时也必须学习多种语言,这是一名优秀的软件工程师的必备素质。


软件开发囊括更多的知识技能


我们期待软件工程师对所有领域都至少有一点了解。


一个简易的图示


一位后端工程师也知道浏览器如何运作,一位前端工程师对数据库也有一定的了解。他们都能避开类似 SQL 注入的安全漏洞。


如果你拥有对于软件工程的整体理解,就更容易切换所专注的领域。这同时也让你具备构建端到端解决方案的能力。


广泛的知识技能体系使得软件工程师更适用于多样的可能性。随着市场需求的增长,经常有软件工程师转到数据科学领域。与之相反的是,数据科学家通常不会开发软件。


随着人们开始认为机器学习是硬编码的条件逻辑的替代方案,我们在将来会看到越来越多的软件工程师从事机器学习工作。


成为一名优秀的全栈工程师需要好几年


并且,成为一名优秀的全栈工程师需要掌握很多互不相干的技术。


优化数据库、构建 API 微服务以及建造一个响应式的前端,三者之间几乎没有共同之处。它们可能需要通过三种不同的语言来实现。


在这些领域,我们目前几乎没有看见任何自动化方案。


相比之下,全栈算法工程师正在和越来越强大的自动机器学习(AutoML)竞争。使用 AutoML 的情况下,我甚至可以写一个标准作业流程(SoP),然后把训练分类器的工作分配给实习生。


而软件工程中所有技术都被自动化,不再需要人力参与的那一天还远未到来。


机器学习为产品添砖加瓦,但机器学习本身大多不是产品


很少有公司把人工智能作为它们的核心产品,而是使用人工智能让现有产品更加完善。


Medium 也许使用机器学习来推荐文章,但是它的核心产品是文章写作与发布的平台。


有趣的是,大多数公司将机器学习应用在简单且相似的场景。这样一来就更容易出现为这种场景提供软件即服务(SaaS)产品的企业。然后突然之间,初创企业发现自己不用再费力开发自己的方案了。


相比之下,系统基础架构的问题是极度复杂而不通用的。AWS 上在不远的将来也不会有现成的解决方案可以处理 Medium 的基础架构。


基础架构正在变得异常复杂


AWS 已经膨胀到拥有超过 200 个不同的云服务了。


使用 Heroku 的产品即服务(PaaS)方案来运行应用是一个不错的方案,但它在产品规模扩大后就变得非常昂贵。


因此,我们现在需要管理一个全新的云技术栈(网络、数据库、服务器),其中一个小失误就能导致巨大的安全漏洞。


开发工作中的一部分是云技术开发。其工作是使得软件能在 AWS、GCP 或者 Azure 上运行。


在小型公司里,基础架构的工作往往由高级开发者来负责。


基础架构是一个复杂的东西,但它同时也意味着工作机会和难以被取代的技能。


前端开发正在不断发展


能跟上前端发展的步伐本身就是一个技能。


我刚开始从事开发时,使用 jQuery 来构建响应式的前端还不算太难。随后,大量公司开始使用 Angular 或者 React。Angular 推出了 Angular 2(伴随着巨大的改变)。React 从类转移到函数组件,并添加了 hooks 函数。


以上所有的框架或者库都以完全不同的方式运作。


也有一些公司正在构建基于原型(mockup)的自动化前端。但是我的同事们一致认为,它离达到生产环境的要求还很远。


前端开发方面的技术能力需求,加上对"什么是像素级还原"的理解要求,都令人感到前端开发一时之间仍不可替代。


结 语


软件工程是复杂的,并且包含了各种各样的问题。这种复杂性有利于软件工程师的就业。


但更重要的是,这种完备的技术体系代表了能解决真实的、端到端的问题的能力。


要建立一个让普通人能解决自己所在领域问题的社会,软件工程就是一个不错的开端。


机器学习还有自己的一席之地吗?当然有。但是解决问题远比训练模型更重要。


去学习软件工程,做点东西,并且解决问题吧。


原文链接:


https://towardsdatascience.com/machine-learning-is-getting-easier-software-engineering-is-still-hard-d4e8320bc046


2020 年 6 月 18 日 09:151721
用户头像
陈思 InfoQ编辑

发布了 555 篇内容, 共 189.7 次阅读, 收获喜欢 1064 次。

关注

评论

发布
暂无评论
发现更多内容

盘点2020 | 大龄程序员的进化(从自由职业者到讲师)

王磊

盘点2020

DDIA 读书笔记(7)分布式系统的问题

莫黎

读书笔记 分布式系统

互联网已经干得很好的事情,不应该是区块链干的

CECBC区块链专委会

区块链 互联网

如何守护数据安全? 这里有一份RDS灾备方案为你支招

京东智联云开发者

数据库 云数据库

13.3流处理计算:Flink,Storm,Spark Streaming

张荣召

13.1大数据计算引擎Spark(上)

张荣召

还在用ELK? 是时候了解一下轻量化日志服务Loki了

京东智联云开发者

DevOps 云原生 日志监控

权限系统的基本概念和架构

程序那些事

权限系统 程序那些事 SSO 权限架构 权限认证

第13周

袭望

13.9机器学习与神经网络

张荣召

13.8推荐引擎算法

张荣召

如何坚持做一件事情

熊斌

个人成长 七日更

第九周-总结

jizhi7

敏捷规划,让你做一个有计划的开发人

华为云开发者社区

敏捷 开发 规划

13.7分类聚类算法

张荣召

13.2大数据计算引擎Spark(下)

张荣召

英特尔下一代10nm Ice Lake处理器登陆腾讯云,星星海自研二路服务器内“芯”强大

intel001

第九周-作业

jizhi7

13.6网页排名算法PageRank

张荣召

如果云是水滴,Kubernetes就是水滴管理平台

华为云开发者社区

云计算 管理 k8s

13.5大数据分析与可视化

张荣召

13.4大数据基准测试工具HiBench

张荣召

我们为什么选择VUE来构建前端

力软.net/java开发平台

Vue 前端

DBA 的效率加速器——CloudQuery v1.3.0 上线!

CloudQuery社区

数据库 运维 开发 dba

13.10作业

张荣召

66把锁的门禁系统,告诉你区块链的特点

CECBC区块链专委会

区块链

学习总结-week13

张荣召

余额和核心信息数据安全分享

冬天的秘密

加密 防篡改 数据隐私

未来30年推动全球经济增长的主要动力是数据资产

CECBC区块链专委会

区块链 移动互联网

Docker

云淡风轻

灵魂一击!详解Java中的IO输入输出流

程序员小毕

Java 程序员 架构 io

机器学习变得越来越容易,但软件工程仍然很困难-InfoQ