越是简单,机器学习工具就越“平民化”。与此同时,软件工程比以往任何时候都更加复杂。然而,这对软件工程师来说很好,但对机器学习(ML)专家来说却不是。是什么原因?其实这就是从机器学习到软件工程,从数据科学到数据分析的进程。机器学习工具变得越来越大众化谷歌希望每个人都可以访问训练机器学习模型,无论他们的技术知识如何。随着机器学习的民主化和云服务市场的增长,理解算法的价值在下降。很久以前,我们手工编写算法。稍后,Sklearn可以在几行代码中完成同样的工作。RawTensorFlow很难使用,Keras让它变得简单。如今,谷歌、微软和亚马逊都提供在云中选择、训练和调整模型的服务,然后在API后面立即提供模型。也许在不久的将来,人人都可以训练出人工智能。但由于复杂性较低,它只是经验丰富的软件工程师触手可及的另一种工具。语言的重要性不用多说,机器学习开发就集中在几门语言上。你知道COBOL(商业通用语言)吗?如果你这样做,你可能会找到一份终生工作。世界金融体系依赖于它。然而今天没有人再学习COBOL,大多数机器学习是用Python完成的,软件开发是用多种语言完成的。如果每个机器学习工程师都有使用Python的经验,那么您的竞争对手就是每个机器学习工程师。但从软件的角度来看,您只是在与一些使用相同技术的工程师竞争。我总是惊讶于多年前已经过时的高薪软件工程师(RubyonRails)工作的数量,但由于遗留问题,许多大公司如Shopify、Instacart、Kickstarter等,仍在使用它。您可以而且应该学习不止一种语言,这对于成为一名优秀的软件工程师至关重要。软件工程需要更多的技能我们总是希望软件工程师至少对各个方面都有一定的了解。QuickSketch后端工程师知道浏览器是如何工作的,前端工程师有一些数据库概念。两者都可以防止SQL注入等安全漏洞。对软件有全面的了解可以使转专业变得更容易,并有助于构建端到端的解决方案。广泛的技能组合使软件工程师能够更好地适应模棱两可的环境。随着需求的增长,软件工程师通常会转行到数据科学。但相反,数据科学家不太可能开发软件。随着人们开始将机器学习视为硬编码条件逻辑的替代方案,越来越多的软件工程师开始参与机器学习。成为一名称职的全栈开发人员需要数年时间实际上,优化数据库、构建API微服务和构建响应式前端几乎没有共同之处。它们可能由3种不同的语言实现,这些领域几乎没有自动化。相比之下,全栈机器学习工程师正在实施越来越强大的自动化机器学习技术(AutoML),我可以为此编写一个SOP(标准操作程序)并将训练分类器的任务留给实习生。软件工程技能的每一部分的自动化都需要时间。(通常)机器学习是对产品的补充,而不是产品本身少数公司将人工智能作为核心产品,而大多数公司将人工智能作为现有产品的补充。出版商可能会使用机器学习来推荐文章,但他们的核心产品是写作或出版平台。有趣的是,大多数公司将机器学习用于简单和相似的用例。这使得单个公司可以轻松地将上述用例作为软件即服务(SaaS)产品提供。然后,突然之间,初创公司不再需要在内部构建它了。这与极其复杂和自定义的基础设施问题形成对比,AmazonWebServices(AWS)上没有现成的解决方案可以在短时间内处理中型基础设施。基础设施变得异常复杂AmazonWebServices(AWS)已扩展到200多种不同的云服务。Heroku用于在云中运行应用程序的平台即服务(PaaS)方法不错,但价格昂贵。现在有了全新的云服务平台进行管理(网络、数据库、服务器),一个小的失误可能会造成很大的安全隐患。有一整个开发人员子集称为“云工程”,他们的任务是让软件在AWS、GCP或Azure上运行。在小公司中,构建基础设施的任务往往落在高级开发人员的肩上。任务很复杂,但也意味着宝贵的工作机会和难以复制的技能。前端开发在不断发展。当我开始做开发时,也可以用jQuery构建响应式前端。但是在公司转向Angular或者React不久之后,Angular升级到了Angular2(一个突然的变化),React将类组件转为函数式组件并添加了hooks。上述框架/库的工作方式完全不同。一些公司正在致力于基于模型自动生成前端。但我的同事们一致认为,我们离高质量的产品还有很长的路要走。软件开发很复杂,但这种复杂性意味着具有高度可雇用性的不可替代的技能。广泛的技能组合使人们能够端到端地解决现实世界中的问题。要建立一个普通人可以自己解决问题的社区,软件工程是一个很好的起点。机器学习将何去何从?它仍然有一席之地,但显然解决问题比训练模型更重要。
