在过去五年里,机器学习变得越来越易于掌握,工具也日益“平民化”。然而,与此同时,软件工程变得更为复杂。这给软件工程师带来了更多的机遇,但对于机器学习(ML)专家而言却未必如此。
机器学习工具正愈加“平民化”
谷歌致力于让每个人都能接触并训练机器学习模型,不论其技术水平如何。随着机器学习的普及,云服务市场不断增长,而对算法的理解价值却相对下降。早期,我们手动编写算法;后来,Scikit-learn(简称Sklearn)能在几行代码中实现相同的功能。最初的TensorFlow较为复杂,但Keras简化了这一过程。现在,像谷歌、微软和亚马逊这样的公司提供了云端的服务,可以方便地选择、训练和调整模型,并立即通过API提供这些模型。
未来,人人都可能具备训练人工智能的能力,但这只是软件工程师手中的另一项工具而已。
机器学习发展集中于几种语言
语言的选择至关重要。你是否听说过COBOL(一种面向商业的编程语言)?尽管这种语言在金融领域依然重要,但现在几乎无人学习它。相比之下,大多数机器学习任务都是用Python完成的,而软件开发则涉及多种编程语言。
如果每个机器学习工程师都精通Python,那么你的竞争对手将遍布全球。但在软件工程领域,你只需与其他使用相同技术的工程师竞争。因此,掌握多种编程语言对于成为优秀的软件工程师至关重要。
软件工程需要更多技能
软件工程师往往需要具备广泛的知识。例如,后端工程师需要了解浏览器的工作原理,而前端工程师也需要了解数据库的一些基础知识。两者都需要具备防止SQL注入等安全漏洞的能力。拥有整体视角有助于工程师更容易地转换领域,并帮助构建端到端的解决方案。
广泛的技能组合使软件工程师更能适应不断变化的环境。随着需求的增长,软件工程师经常转向数据科学领域。然而,数据科学家通常不具备开发软件所需的技能。随着越来越多的人将机器学习视为硬编码逻辑的替代品,更多软件工程师开始涉足机器学习领域。
成为有竞争力的全栈开发者需要多年积累
实际上,优化数据库、构建API微服务以及创建响应式前端之间并没有太多共通之处。这些任务可能涉及不同的编程语言,而且很少有自动化工具能解决这些问题。相比之下,全栈机器学习工程师可以利用自动机器学习技术(AutoML)来简化工作。尽管如此,软件工程中的各种技能自动化还需要时间。
机器学习通常是产品的补充而非产品本身
大多数公司将人工智能作为其核心产品的补充,而不是产品本身。媒体可能会使用机器学习进行文章推荐,但其主要业务仍然是写作或出版平台。有趣的是,许多公司将机器学习用于简单的、重复性的工作。这使得这些用例可以轻松地转化为软件及服务(SaaS)产品。而复杂的基础设施问题则不同,例如,亚马逊网络服务(AWS)上并没有快速解决Medium基础架构问题的现成方案。
基础设施正变得异常复杂
亚马逊云服务(AWS)已经推出了200多种不同的云服务。Heroku提供的平台即服务(PaaS)方法虽然很好,但成本较高。现在出现了新的云服务平台来管理网络、数据库和服务器,但一个小错误可能导致严重的安全隐患。
“云工程”是一个完整的开发子集,负责确保软件在AWS、GCP或Azure上运行。在小公司中,建设基础设施的任务通常落在高级开发人员身上。这项任务既复杂又充满挑战,但也意味着宝贵的就业机会和难以复制的技能。
前端开发持续发展
当我刚开始从事开发工作时,可以使用jQuery构建响应式前端。但很快,许多公司转向了Angular或React。Angular经历了从Angular到Angular2的突变,React也从类组件转向了函数组件,并引入了Hooks。这些框架/库的工作方式各不相同。
一些公司试图通过模型自动生成前端,但我的同事们认为,要达到高质量的产品还有一段路要走。
软件开发是一项复杂的工作,但这种复杂性意味着不可替代的技能,这对就业非常有利。广泛的技能组合使人们能够端到端地解决问题。为了构建一个能够帮助普通人解决问题的社区,软件工程是一个不错的选择。
机器学习仍然有其位置,但解决问题比训练模型更为重要。
留言点赞关注
我们共同分享AI学习与发展的干货。