作者声明:本文是一篇评论文章,仅代表本人观点。我认为当世界上有更多的通才和实干者(不只是专家)来构建事物和解决问题时,这个世界会变得更好。
在过年的五年中,机器学习变得更容易了。与此同时,软件工程比以往任何时候都要复杂。
对于软件工程师而言,这是一件好事。但对于机器学习专家而言,这并不是好事。
这是机器学习向软件工程靠拢的进程,也是数据科学向数据分析靠拢的进程。
本文由Chris发表在medium.com,经原作者授权由InfoQ中文站翻译并分享
谷歌希望让所有人,无论技术背景如何,都能很容易掌握机器学习模型的训练方法。(参见:技术民主化)
随着机器学习变得越来越容易使用,云服务的市场也在增长,而理解算法的意义也在下降。
曾经,我们需要人工实现算法。现在Sklearn使得同样的算法只需几行代码就能实现。
原本的TensorFlow很难使用,Keras让它变得简单多了。
现在,谷歌、微软和亚马逊都提供选择模型、训练模型和调参的云服务,然后通过一个API就能立刻部署一个模型。
我们离人人皆可训练人工智能的时代还有一定的距离。但随着复杂性的降低,训练人工智能变成了熟练软件工程师知识体系中的一个新工具而已。
语言即是护城河。就这么简单。
你了解COBOL吗?如果你熟悉这个语言,你这辈子都不愁没有工作了。这个世界的金融体系都建立在这个语言之上。但现在已经不再有人学习COBOL了。
大部分的机器学习算法都是通过Python来实现的,而软件工程开发需要各式各样的语言。
如果每个算法工程师都有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)的自动化前端。但是我的同事们一致认为,它离达到生产环境的要求还很远。
前端开发方面的技术能力需求,加上对"什么是像素级还原"的理解要求,都令人感到前端开发一时之间仍不可替代。
软件工程是复杂的,并且包含了各种各样的问题。这种复杂性有利于软件工程师的就业。
但更重要的是,这种完备的技术体系代表了能解决真实的、端到端的问题的能力。
要建立一个让普通人能解决自己所在领域问题的社会,软件工程就是一个不错的开端。
机器学习还有自己的一席之地吗?当然有。但是解决问题远比训练模型更重要。
去学习软件工程,做点东西,并且解决问题吧。
原文链接:
领取专属 10元无门槛券
私享最新 技术干货