If you're a developer in 2020, then you have probably come across a job description with a cornucopia of technical skill requirements.
For example, let's look at this set of technical skills required from a real job description taken off Indeed.com.
You might need to take a break halfway through reading.
- Experience with Jenkins and Terraform managed AWS infrastructure.
- Experience with AWS services (ECR, Lambda, SQS, CloudWatch, Route53).
- Hands on programming with Elixir, Python and Java.
- Comfortable with support tools (Docker, Git, Bash, AWS CLI)
- Production experience with ETL and asynchronous pipelines.
- Experience with relational (Postgres/RDS) and nosql (DynamoDB) databases.
- Demonstrated ability to actively participate in the design of complex systems.
- Production network operations familiarity a plus.
- Understanding of ML principles and NLP experience, Kaggle competitions a plus.
- Experience with data science libraries (Scikit, NLTK, Gensim, TensorFlow, Keras).
So apparently this job is looking for a software engineer, data engineer, machine learning engineer, and DevOps engineer all in one.
In some ways, that is a little ridiculous.
Do software engineers really need all these skills these days?
Honestly, yeah, kind of.
But, also...kind of no.
The idea of an all-in-one engineer seems to continue to proliferate itself to every company.
Truth be told, many of these technologies are third-party tools, and if you are a software engineer you have probably interacted with either these or their counterparts in various situations.
Personally, the ridiculous part would be a hiring manager thinking you couldn't do a job because you had used MySQL but never MySQL on RDS.
But overall, these days thanks to technologies and services like AWS, Docker, Nagios, etc. Designing, developing, deploying and monitoring software has become much simpler.
So yeah, the 2020 software engineer does need to keep up their skills. Below are 5 skills developers should start learning this year.
This post includes affiliate links; I may receive compensation if you purchase products or services from the different links provided in this article.
Cloud services have gone from only being used by billion-dollar corporations to helping support small businesses (We have worked with several small businesses that utilize EC2, RDS, S3 and more).
Cloud services help in decreasing the overall operating cost, and it can help you in running your operations more effectively and efficiently.
However, with this new technology comes new skills a developer needs to learn. It can feel impossible to keep up with all the technologies and various ways you can run code, store data and managed infrastructure.
Many times it feels like we finally learn about one cloud service only to discover there is now another one to replace it or perhaps just new functionality that has been added.
With all that being said, what are the various technologies you should at least have a high level of knowledge of?
AWS, Azure, and GCP: Amazon Web Services (AWS) has the largest market in the US when it comes to cloud services. It also arguably offers the widest variety of services which include everything from laaS, PaaS and SaaS. It offers services like S3, RDS, Redshift, and DynamoDB for data storage, EC2, and Lamda for computing a hose of other services you can learn about here.
Azure and GCP are both quickly growing in usage, although still trailing behind AWS. But that just means more skills for developers to need to pick up.
If you want to learn more about these various cloud providers here are several courses that can help you get up to speed quickly. Many of which are free on Coursera.
Being familiar with containers has become important in the software world. A quick summary of what containers do is they pack up code along with its dependencies so it can be run reliably and efficiently over different environments.
Containerization refers to the bundling of an application along with the libraries, dependencies, and configuration files it needs to run it efficiently across multiple computing environments.
No matter whether the environment is a local or on the cloud, container-based applications can be deployed easily. There are many examples of container technology, but the most prominent currently is probably Docker. If you want to learn more about Docker and it's many technology layers that sit on top of it like Kubernetes then check out this youtube video.
It is difficult to monitor every system, network and piece of infrastructure especially in a modern world where applications are used on many different types of hardware.
Nagios monitoring is an open source technology that helps in monitoring the application and business process in DevOps culture. Nagios can pretty much monitor everything. HTTP, SSH, SMTP, memory usage, microprocessor load, servers. You name it, it can probably be set up to be monitored.
The developers in 2020, will need to work on frameworks like Naigios that can provide the monitoring system round the clock. This means you will probably need to be come familiar with tools like Naigios to be an effective developer.
Many newly minted engineers will never get to experience a world without CI/CD. It's not to say that more traditional deployment shops don't still exist out there.
However, the push to use tools to assist in CI/CD continues to grow.
Two example third-party tools that many companies are either looking into or use for the CI portion of work are Jenkins or Bamboo. Jenkins is an open source tool and Bamboo is a commercial tool.
Bamboo offers a host of features which is often only limited to your budget and integrates easily with Jira and Bitbucket(oh no...more technologies to learn). But the combination of all three create a CI/CD system that can help you easily deploy code, detect errors in said code, etc.
Jenkins is a CI (Continuous Integration) open source server, which has the capability to orchestrate and perform a chain of actions. Jenkins can be performed with the help of JAVA and has the ability to monitor the project and detect plausible errors. The rate of detection of Jenkins is quite high, which is one of the reasons for its rapid popularity. Take some time to learn some more about these tools!
As a developer knowing about the various options there are for databases and data storage systems is a crucial part of your skillset. Deciding how an application will be supported on the backend heavily impacts performance and functionality.
For the longest time, most applications were limited to relational databases on the application side. However, with increased storage and performance of servers and computers, a lot of new styles of data storage systems are now possible.
For example, DynamoDB is a very different style database than your standard MySQL instance. DynamoDB makes use of what it calls attributes, items, and tables as its core parts for users to often work with. Allowing developers the freedom to have unstructured data sets that don't always require the same values.
Besides that, there are tech stacks like Hadoop/HDFS/Hbase that also allow for less structured and more distributed storage of data. All of this only further complicates a developer's toolbox.
One great course to learn about DynamoDB is this combo class that teaches you both about DynamoDB and Lambda.
And just because there are so many new data systems doesn't mean you can ignore the traditional Mysql and SQL Server relational databases.
Using a RDBMS is still a very popular method of designing your data layer for applications. So don't forget to keep SQL and data modeling skills up.
But of course you still actually need to know how to program as a programmer! But which ones?
As a developer programming languages remain our bread and butter and most developers know multiple languages by the time they have worked in the industry for a few years.
The reason everyone gravitates towards python is that it is both easy and pretty good at handling most problems. Now it doesn't usually allow the fine-tuning of C or C++ nor is it a native web language. However, it does a good job of not really being terrible at anything
Python is often associated with recent technologies such as Artificial Intelligence and Machine Learning thanks to Google's work on libraries like Tensorflow.
If you want to program a website fast you can easily use Django, Flask and __ to act as your back end. Trust me, it is much easier than trying to configure a Spring Framework Site.
Parallel computing is easily supported by Python, which decreases the hassle of organizing the data. Pydoop is a library integrated by Python, where you can process the data and present it with the help of HDFS cluster.
Python is also finding a home in Data analysis as more tools supporting Jupyter notebook are developed.
Python's versatility is what makes it so popular.
Whether you are a data scientist or a developer, you can use Python as a tool to develop a website or a machine learning model.
Depending On what you're trying to learn, there are lots of great free courses, books, and cheat sheets to help you learn. For example, here is a great youtube playlist.
Ok, now what about React?
React.js has made front-end development "easy". For example, working with the DOM API can be a pain. However, React has provided developers the ability to developing on a virtual browser. This virtual browser then essentially acts as a liaison between the developer and the real browser.
Another concept React.js is known for is the idea of reusable components. In React, apps are built up of what are called components. There are many different kinds of components but the purpose is to create snippets of code that can be easily ported into your app.
Finally, the one-way data flow is great because components are not allowed to change in ReactJS and the data within the components have the same property.
Components operate smoothly and remain synchronized as ReactJS listen to the data, which is flowing from the upstream. This feature actually makes ReactJS more effective in terms of building the user interface.
To learn more here are is another free course at freeCodeCamp on Youtube.
Overall, the developer in 2020 has a lot of skills they have to maintain. Truth be told, most job descriptions for software developers these days seem to required an entire developer team in one person. Everything from DevOps, Database Management, Back and front-end development and honestly, everything else.
As you are looking for your next software job we wish you guys good luck! Keep up those skills.