首页 » 99链接平台 » 但软件工程仍然很困难(学习机器软件工程开发变得)

但软件工程仍然很困难(学习机器软件工程开发变得)

南宫静远 2024-11-25 09:14:45 0

扫一扫用手机浏览

文章目录 [+]

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

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

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

本文由 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)的自动化前端。
但是我的同事们一致认为,它离达到生产环境的要求还很远。

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

结 语

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

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

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

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

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

原文链接:

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

关注我并转发此篇文章,私信我“领取资料”,即可免费获得InfoQ价值4999元迷你书!

标签:

相关文章