知识点:软件工程 如果每个算法工程师都有 Python 的开发经验,那你就需要与所有算法工程师竞争。而在软件开发方面,你只需要与一部分使用同样技术栈的工程师竞争即可。 我常常会惊讶地看到很多高薪的 Ruby on Rails 开发的职位在招人。它在几年之前就已经过时了,但很多大公司(Shoptify、Instacart、Kickstarter 等等)由于历史原因还在使用它。 你肯定可以同时也必须学习多种语言,这是一名优秀的软件工程师的必备素质。
知识点:软件工程
如果每个算法工程师都有 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)的自动化前端。但是我的同事们一致认为,它离达到生产环境的要求还很远。
前端开发方面的技术能力需求,加上对"什么是像素级还原"的理解要求,都令人感到前端开发一时之间仍不可替代。
软件工程是复杂的,并且包含了各种各样的问题。这种复杂性有利于软件工程师的就业。
但更重要的是,这种完备的技术体系代表了能解决真实的、端到端的问题的能力。
要建立一个让普通人能解决自己所在领域问题的社会,软件工程就是一个不错的开端。
机器学习还有自己的一席之地吗?当然有。但是解决问题远比训练模型更重要。
去学习软件工程,做点东西,并且解决问题吧。
相关推荐链接: