top of a school bus with blue skies overhead
PHOTO: Element5 Digital

We in IT like to think of technology as something that changes rapidly. It’s easy to look back over the arc of a career and think “my, are things different from when I started.” In truth, technology doesn’t change much over a short period of time. Instead, it changes slowly until it emerges into mainstream consciousness. Mobile devices, for example, didn’t happen overnight because Apple released the iPhone. They were the result of technology advancing slowly starting in the late 1980s until the smartphone became viable as a consumer good.

Modern IT is like that as well. The vast majority of IT systems today are based on technology from the early 2000s or earlier, such as Java, middleware and Virtual Machines (VM). New technology and methodologies, however, have been percolating for years or decades, and are now bubbling up to the surface.

Given my profession as an industry analyst, I’m often asked by developers what new skills they should learning. This is my list.

4 Skills for Developers in 2019

1. Microservices Architectures

A microservices architecture uses small pieces of limited-purpose code to create systems. It’s like using Lego bricks to build a fire house — small units of reusable functionality are brought together to create the final product.

Microservices architectures have the advantages of resiliency (one failure affects only one tiny function) and the ability to update and evolve code independent of other features. This also eliminates the need to have massive builds and disruptive deploys.

Related Article: Microservices Architecture: One Big Cluster or Lots of Little Ones?

2. Containers

Containers are an operating system construct. Unlike virtual machines, which are a piece of software that runs an emulated hardware environment, containers are a form of virtualization defined by operating system level process and resource isolation. Containers provide higher capacity utilization than a VM, don’t require an entire OS stack, and are especially useful for creating microservices architectures. Containers were popularized by Docker, CoreOs and others.

Most container architecture is governed by open source projects that are managed by the Cloud Native Computing Foundation including the container runtime (RunC) and dominant container orchestrator, Kubernetes. Kubernetes is quickly becoming the base for the next gen container-based microservices-oriented platform.

3. Modern Languages

There are more computer languages than ever before. All the dominant languages from the past 20 or so years are still in heavy usage, especially Java, C++, and C# for enterprise backend systems and PHP for web systems. That said, a number of newer languages have gained in popularity. Below are some of the languages that have a lot of traction of late.

Python — Python has been around for 30 years but has more recently exploded in popularity. Part of the reason for the interest is its inherent data structures, including key:value structures called dictionaries, are highly efficient for processing large amounts of data quickly. This has made it a language of choice for data analytics and AI.

Go/Golang — Go a.k.a Golang excels at run-time efficiency and high-performance networking. It is the language that Kubernetes is written in. Developers like the ease with which applications can be written in Golang.

Rust — Developed by the Mozilla Foundation, Rust is designed like other curly bracket languages such as C++ and Java but with high performance and extreme memory safety. It is the language, going forward, that is used to build the Firefox browser.

Node.js — Node.js is not a language per se. It is actually a server-side implementation of JavaScript, with extensions to support back-end services. Node.js has become popular because it leverages the well-known JavaScript language skills that many web programmers already have.    

Related Article: Developer Collaboration Tools Beyond Slack

4. Project Management

Most developers can learn new languages, especially when they are based on well understood paradigms like curly bracket languages. Learning new ways to work, though, is a different story. After years of doing things in certain ways, changing those ways and the habits that come with them can be devilishly difficult. 

Two important development paradigms are quickly becoming ubiquitous: Agile and DevOps. Neither is technology but both benefit from a technology boost. With Agile, development is broken into small teams which make decisions independently and are self-governing (in theory at least). It is iterative, with features evolving over time. This is in contrast to waterfall which assumes all features are well known at the beginning of development. In the most popular implementation of Agile, called Scrum, development is timeboxed, or cut into small swift sprints. The pace and rhythm of Agile and Scrum can be difficult to adapt to for some developers. It can also place strains on the business as close involvement between various corporate functions and the development team is necessary to keep the process moving.

DevOps, on the other hand, never strays outside IT. DevOps is a portmanteau of Development and Operations and captures the unified approach to development, release and management of production code. It encapsulates both an organization — a unified multidisciplinary team — and a workflow, where code moves from development to operations and into production. A developer can be part of both an Agile Scrum team and a DevOps team.

For modern developers, a clear understanding of both Agile and DevOps are necessary skills since they will likely become part of one or both types of team.

There are, of course, many other technologies that one might learn such as AI, or specific application frameworks like React. They represent specific technology choices. On the whole, skills that matter most are broader than that. Choice of languages, new architectures, and updated ways of doing work set a better base from which to explore other types of skills that will be beneficial to one’s career. Represented here are a few of the more prevalent ones, and arguably the more important ones. They are the start, not the endpoint for obtaining the skills of the modern developer.