2020 年的今天,如果你是一名开发人员,那么你可能看到一些包含大量技能要求的职位招聘描述。以下面一份 Indeed 网站上的真实招聘要求为例,它列出的技能不少,甚至阅读期间都要中途休息一下。
职位描述:
有使用 Jenkins 和 Terraform 管理 AWS 基础架构的经验;
有 AWS 服务的相关经验(ECR、Lambda、SQS、CloudWatch、Route53);
用 Elixir、Python 和 Java 进行过实际编程;
熟悉支持工具(Docker、Git、Bash、AWS CLI);
具有通过 ETL 和 asynchronous pipelines 进行生产环境开发的经验;
熟悉关系型数据库(Postgres/RDS)和 nosql 数据库(DynamoDB);
具备积极参与设计复杂系统的能力;
熟悉生产环境网络运维者优先;
了解机器学习原理,拥有 NLP 经验,有 Kaggle 竞赛经验者优先;
有数据科学开发库(Scikit、NLTK、Gensim、TensorFlow、Keras)的经验。
你具备所有这些技能吗?
显而易见,这份工作是在寻找一个“多面手”,既是软件工程师、数据工程师,又是机器学习工程师和 DevOps 工程师。从某方面说,这个要求有点“荒谬”。
现在的软件工程师真需要掌握所有这些技能吗?说句实话,差不多。这其中的很多技术都只是第三方工具。如果你是一名软件工程师,那么你很可能在某些情况下用过这些技术或与之类似的技术。
在我看来,招聘经理认为你不能胜任工作,仅仅因为你用过 MySQL 但从未在 RDS 上使用过 MySQL,这非常荒谬。总而言之,幸好有 AWS、Docker、Nagios 等技术和服务,现在设计、开发、部署和监控软件的工作变得更简单。
所以,现在的软件工程师需要与时俱进,保证自己的技能不会落伍。以下是开发者应该在今年开始学习的五项技能。
1.云服务
不仅大企业在使用云服务,现在连小型企业都在用云。云服务不仅有助于减低企业整体运营成本,而且能帮助客户更高效地处理运维工作。
然而,随着这项新技术的出现,开发人员也需要学习相应的新技能。但是,要跟上这个领域的所有技术趋势,还要学会用各种方式来运行代码、存储数据和托管基础架构。这看起来是一件不可能的事。
很多时候,我们感觉自己终于摸清一个云服务,却发现有另一个云可以替代它,或者服务又添加了新功能。既然如此,我们至少应该了解哪些技术?
AWS、Azure 和 GCP:提到云服务,AWS 在美国拥有最大的市场份额,它可以说提供了最广泛的服务种类,从 IaaS、PaaS 和 SaaS 无所不包。它提供了 S3、RDS、Redshift和 DynamoDB 等数据存储服务,以及 EC2 和 Lamda 等计算服务。虽然 Auzre 和 GCP 仍然落后于 AWS,但是它们的使用量都在快速增长。这就意味着开发人员需要掌握更多技能。
2.容器化
在软件世界,熟悉容器变得非常重要。简而言之,容器将代码及其依赖项打包,以便可以在不同的环境中可靠、高效地运行。
容器化是指将一个应用程序与它需要的库、依赖关系和配置文件打包在一起,以便在多个计算环境中有效运行。
无论是本地环境还是云环境,都可以轻松地部署基于容器的应用程序。市面上有很多容器技术的代表,最突出的要数 Docker。如果你想了解更多关于 Docker 的信息和Kubernetes,你可以看看这个YouTube视频。
3.应用程序和服务器监控(Nagios)
对每套系统、每个网络和每一片基础设施进行监控,这是非常困难的,尤其考虑到现在的应用程序被用在许多不同类型的硬件上。
Nagios 监控是一种开源技术,它可以帮助监视 DevOps 中的应用程序和业务流程。Nagios 几乎可以监控一切,从 HTTP、SSH、SMTP、内存使用、微处理器负载到服务器等。只要你能说出来个类型,Nagios 就能进行监控。
在 2020 年,开发人员将需要使用Naigios这样的框架,以打造一个全天候的监控系统。这意味着我们需要熟悉像 Naigios 这样的工具,才能成为一名高效的开发人员。
4.Jenkins,Bamboo CI/CD
许多工程师新人可能不知道,一个没有 CI/CD 的世界是什么模样。但是,这并不是说很多传统的 deployment shops 不存在了。然而,使用 CI/CD 等辅助工具的趋势将持续增长。
很多公司都在研究或使用关于 CI 的第三方工具,其中有两个很好的例子就是 Jenkins 和 Bamboo。Jenkins 是一个开源工具,而 Bamboo 则是一个商业工具。
Bamboo 提供了很多功能,这些功能通常取决于你的预算,并且很容易与 Jira 和 Bitbucket 集成。但是,这三者的结合创建了一个可以帮你轻松部署代码,并提供检测代码中的错误等功能的 CI/CD 系统。
Jenkins 是一个持续集成(Continuous Integration)开源服务器,它具有编排和执行一系列操作的能力。Jenkins 可以在 JAVA 的帮助下执行,并具有监视项目和检测可能出现错误的能力。Jenkins 的检测率相当高,这也是其迅速普及的原因之一。关于这些工具的更多知识请参考此处。
5.数据库
作为一名开发人员,了解数据库和数据存储系统的各种选项是个人技能的一个重要组成部分。选择如何在后端支持应用程序的决策会显著影响性能和功能。
长期以来,大多数应用程序的数据库选项都局限在应用程序端的关系型数据库上。然而,随着服务器和计算机的存储能力和性能提升,现在已经出现很多新型的数据存储系统。
DynamoDB
例如,DynamoDB 是一个与标准 MySQL 实现非常不同的数据库。DynamoDB 使用它所称的属性、条目和表作为用户经常使用的核心部分。它允许开发者自由使用非结构化数据集,这种数据集并不总是需要相同的值。
此外,还有像 Hadoop/HDFS/Hbase 这样的技术栈,它们也允许更少的结构化和更分布式的数据存储。所有这些只会让开发人员的工具箱变得更加复杂。
传统 RDBMS
就算有这么多的新型数据系统,也并不意味着你可以忽略传统的 Mysql 和 SQL Server 等关系型数据库。使用 RDBMS 为应用程序设计数据层仍然是一种非常流行的方法。所以不要忘记提高 SQL 和数据建模技巧。
编程语言
作为一名程序员,你仍然需要知道如何编程!但是用哪些语言呢?
编程语言是开发人员赖以生存的基础。大多数开发人员在这个行业工作几年后就已经掌握多种编程语言。
如果你是新手,那么你可能需要研究 Python 和 Javascript。这两套语言在大多数工作中都被广泛使用。当然,这并不是说,像 Java 和 C++这样的语言已经没有自己的位置。
至于工作岗位的需求,你可以从下面图表中看到,需要 Python 和 Javascript 的工作岗位都在增加。
为什么选择 Python?
之所以每个人都倾向于 Python,是因为它既简单又很擅长处理大多数问题。现在,它已经不允许通过 C 或 C++进行调优,也不能作为原生 Web 语言。然而,它在各种事情上都处理的还不错。幸好 Google 在诸如 Tensorflow 库等方面的工作,Python 经常与人工智能、机器学习等最新技术相联系。
如果想快速编写一个网站,你可以很容易地使用 Django 和 Flask 来作为后端。这比试图配置一个 Spring 框架要容易得多。Python 很容易支持并行计算,这减少了组织数据的麻烦。而 Pydoop 是一个 Python 的集成库,可以让我们在 HDFS 集群的帮助下处理数据并表示出来。
随着更多支持 Jupyter 笔记本工具的开发,Python 在数据分析领域也占有一席之地。在我看来,Python 如此流行主要归于其多功能性。
无论你是数据科学家还是开发人员,你都能使用 Python 作为开发网站或机器学习建模的工具。针对你想学的东西,网上有很多的免费资料。例如,这里有一个很棒的YouTube播放列表。
React.js
React 怎么样?无疑,它让前端开发变得非常简单。例如,使用 DOM API 可能是一件痛苦的事情。不过,React 为开发人员提供了在虚拟浏览器上开发的能力。本质上,这个虚拟浏览器是开发者和真实浏览器间的联络器。
关于 React.js 的另一个著名概念是可重用组件。在 React 中,应用程序由所谓的组件构成。有许多不同种类的组件,目的都是创建可以很容易移植到应用程序中的代码片段。
最后,React 的单向数据流非常好用,因为组件不允许在 ReactJS 中更改,而且组件中的数据具有相同属性。当 ReactJS 监听从上游流出的数据时,组件会平稳运行并保持同步。这个特性实际上让 ReactJS 非常适合构建用户界面。
小结
说实话,软件开发领域,新技术不断出现,开发者要学习的东西越来越多。有时候,软件开发人员的职位描述看上去要一个人能干一个开发团队的活,从 DevOps、数据库管理到后台和前端开发,甚至无所不包。
英文原文:
5 Technical Skills Developers Need In 2020
评论