这是一篇评论文章。 它也有偏见。 我认为,如果有更多的通才和创造者(而不是专家)来构建事物和解决问题,那么世界将会是一个更好的地方。
在过去的五年中,机器学习变得更加容易。 同时,软件工程比以往更加复杂。
对于软件工程师来说,这是一件了不起的事情。 但不适用于机器学习专家。
这是ML向软件工程和数据科学向数据分析的发展。
机器学习工具正变得越来越平易近人
随着ML的发展,云服务的市场也在增长,理解算法的价值也在下降。
从前,我们对算法进行了手工编码。 然后,Sklearn允许在几行代码中执行相同的操作。
原始的TensorFlow很难使用。 Keras让一切变得简单。
Google,Microsoft和Amazon现在都提供服务以选择,训练和调整云中的模型,然后立即在API后面提供模型。
任何人都可以训练AI,这将需要一段时间。 但是随着复杂性的降低,它成为了经验丰富的软件工程师的另一种工具。
机器学习开发集中在几种语言中
语言是护城河。 句号
你知道COBOL吗? 如果是,那么您就可以终生工作。 世界的金融体系取决于它。 没人再学习COBOL。
大多数机器学习都是用Python实现的,而软件开发则分布在多种语言中。
> https://www.tiobe.com/tiobe-index/
如果每个ML工程师都有Python的经验,那么您将与每个ML工程师竞争。 在软件方面,您只能与使用相同技术的部分工程师竞争。
我总是惊讶地看到很多高薪的Ruby on Rails工作。 它在几年前就已经过时了,但是由于遗留原因,许多大型公司(Shopify,Instacart,Kickstarter等)都坚持使用它。
您绝对可以并且应该学习多种语言。 成为一名优秀的软件工程师取决于此。
软件工程包含更大范围的技能
我们希望软件工程师至少对一切都有一定的了解。
> A quick sketch
后端工程师仍然知道浏览器的工作方式。 前端工程师具有一些数据库概念。 两者都可以防止SQL注入之类的安全漏洞。
对软件有全面的了解,可以更轻松地更改专业。 它还使您能够构建端到端解决方案。
广泛的技能组使软件工程师更适合模棱两可的环境。 随着需求的增长,软件工程师通常会转向数据科学。 相反,数据科学家开发软件的可能性较小。
随着人们开始将其视为硬编码的条件逻辑的替代方案,我们将看到更多从事ML的软件工程师。
成为有能力的全栈开发人员需要多年
并包含许多离散技能。
从字面上看,优化数据库,构建API微服务和构建响应前端的共同点是零。 它们可能以3种不同的语言实现。
在这些领域,我们几乎看不到任何自动化。
与此形成鲜明对比的是,全栈ML工程师现在正在完成功能日益强大的AutoML,为此我可以编写SOP,并将培训分类器的工作委托给实习生。
尚需时日,软件工程技能套件中的所有组件都将不存在。
机器学习不是产品而是产品的补充(通常)
少数公司将AI作为其核心产品,但大多数公司使用AI来补充现有产品。
媒介可以使用机器学习来获得文章推荐,但核心产品是写作/发布平台。
有趣的是,大多数公司都将ML用于简单和相似的用例。 这使单个公司可以轻松地将上述用例作为SaaS产品提供。 然后突然之间,初创公司不再需要在内部进行构建。
基础设施变得异常复杂
AWS已扩展到200多种不同的云服务中。
Heroku在云中运行应用程序的PaaS方法很棒。 但是在任何规模上都变得过分昂贵。
因此,现在我们有了一个全新的云堆栈来管理(网络,数据库,服务器),其中一小笔便会打开巨大的安全漏洞。
有一个称为"云工程"的整个开发子集,其工作是使软件在AWS,GCP或Azure上运行。
在较小的公司中,基础设施通常落在高级开发人员的腿上。
这是复杂的东西。 但这也意味着工作和难以复制的技能。
前端开发在不断发展
独自掌握前端开发是一项技能。
当我开始开发时,可以使用jQuery构建响应式前端。 然后公司搬到了Angular或React。 Angular变为Angular 2(具有重大更改)。 React从类转移到功能组件,并添加了挂钩。
以上所有框架/库都以根本不同的方式工作。
有几家公司致力于基于模型自动生成前端。 但是同事们的共识是,他们离生产质量还有很长的路要走。
前端开发的技术能力,加上对像素完美的感知,暂时令人惊讶。
结论
软件开发是复杂的,并且包含各种各样的问题。 这种复杂性有利于就业。
但更重要的是,广泛的技能组赋予了端到端解决实际问题的能力。
要建立一个使普通人有权解决自己社区中的问题的社会,软件工程是一个不错的起点。
机器学习有地方吗? 绝对。 但是解决问题比训练模型还重要
学习软件工程。 做东西。 解决问题。