Managing change

You might as well get used to it. in all likelihood, the pace of technology change will probably not slow within your lifetime. Whether it's new devices, new delivery platforms, or the new coding paradigms and operating system tools to control them, it makes no sense to assume your current skills are going to be enough to stay afloat. At some point, you're going to need some new tools.
To get a handle on the problem, it's probably a good idea to start by asking yourself two questions:
I'll try to help you answer those questions in this introductory chapter. The rest of the book will focus on addressing other problems: section one (chapters 2-4) will explore some powerful learning methodologies you can use, section two (chapters 5-6) will introduce you to some powerful learning tools that you could adopt, and section three (appendices 1-3) is meant to expose you to the basics of some core infrastructure tools like Linux and AWS administration and TCP/IP networking.
Ready to go?

Why your career needs future proofing

So then, just "how exposed are you to technology-influenced disruption"? Well that depends on what you do for a living. Here are some general thoughts:
The bottom line is that the things you learned in school or during that three-month stretch between jobs five years back won't keep you going indefinitely. You're going to have to crack open the books eventually. You might as well invest a bit of time up front to make sure that when you do it, you do it right.

What you should be learning

Don't expect me to tell you what you should be learning. That's your business. But I can offer a few thoughts that, assuming you're still undecided, should help you figure it out for yourself.
First of all, make a point of keeping an eye on IT trends. What compute platforms appear to be growing more popular? Where are the IT giants like Amazon and Google investing their big bucks? Which programming languages show growing demand among published online job ads?
An excellent tool for researching trends is Google Trends. Figure 1.1 below shows a search comparing worldwide search patterns for Kubernetes (the open source container administration system) and vSphere (VMware's virtualization platform) over the last five years. As you can clearly see, vSphere isn't going anywhere anytime soon, but interest growth in Kubernetes is definitely sustained. Scrolling down through the page will also show you interest by region.
A sample Google Trends search comparing interest over time in two popular virtualization platforms

A sample Google Trends search comparing interest over time in two popular virtualization platforms

Accurately assessing trends, however, can be tricky. Thousands of people might express some desire to learn about a new programming language, for instance, but that doesn't mean that companies are about to start investing in projects built on it. No career benefits for you. And we've all seen technologies whose sudden meteoric rise in popularity is followed just as suddenly by a steep fall.
To do this right, you'll also need to regularly follow at least one technology news feed like Ars Technica, Tech Crunch, or (my favorite) ZDNet. It also won't hurt to stay up to date with events in the worlds of politics, business, and economics - each of which can have a significant impact on the kinds of ventures that organizations might undertake.
Some time back, I was offered a job with a large and well established technology company. The fact that I was familiar with the history behind the technology in question (and with the fact that that particular company had arrived very late to the party) made my decision to turn down the offer easier. It was equally obvious that investing time learning their tools made little sense. Being informed helps.
Whenever possible, try to incorporate big tent technologies into your learning. By "big tent" I mean the larger environments within which applications and IT services are run. And by "larger environments" I mean platforms like Linux (which currently dominates the enterprise and web server markets), Amazon Web Services (AWS - which currently dominates the cloud computing market), and Android (which currently - as of May, 2017 - accounts for more than two billion monthly active mobile devices).
Why are big tent technologies so important? Because those are the places where things happen. If you have a solid understanding of how they work, you'll be far more effective at whatever it is you're trying to accomplish.
Avoid getting trapped inside silos. AWS is a terrific place to build infrastructure for secure and highly reliable services, but two or three years from now? Who knows...once upon a time IBM's lock on the PC and business server market also appeared unassailable.
Similarly, strive to at least understand the underlying design and structure of one or two programming languages besides the one you use for most of your work. Java and Python are both great today...but what would your career prospects look like if you only knew how to code in COBOL?
You don't want your narrow knowledge to trap you on a sinking ship. On the other hand, of course, if you spread yourself too thin and fail to truly master at least one area, then you'll have no ship at all. And I should at least note that, years after the official "death" of a technology (like COBOL), some experts will still receive desperate calls from companies needing fixes for copies running it on their legacy systems.
Balance. Everything is balance.
To add some more value to this chapter, I'm going to briefly describe some of those big tent technologies and why you might want to learn a bit more about them.

Cloud computing

Cloud computing is the provision of on-demand (meaning self-service) compute, memory, and storage resources remotely over a network. A lot of the cost-effectiveness of the cloud model is the result of the fact that usage charges are calculated and billed in very small increments (often in fractions of a penny).
This makes it possible to launch risky projects because there's no need to purchase, build, and house all the expensive hardware you'd need to properly support traditional IT stacks. Instead, you effectively "rent" just enough equipment to handle changing demand on your site and pay only for what you actually end up using. As shown in figure 1.2, properly configured, your cloud resources will automatically "scale" up and down according to demand, resulting in minimal wastage and, often, significant cost savings.
Elastic systems can dynamically add or remove resources to meet changing demand

Elastic systems can dynamically add or remove resources to meet changing demand

Microsoft (Azure), Google (Google Cloud Platform), and even Alibaba (Alibaba Cloud) offer robust cloud services, but Amazon's AWS (Amazon Web Services) remains absolutely dominant, both in terms of market share and the sheer range of services they provide.
Given how quickly enterprise, government, and organizational deployments are being migrated to cloud platforms of one flavor or another, it's only a matter of time before you're asked to participate. You won't want to look stupid, right?

Web development

Crafting good code and reliable, secure infrastructure is something to be proud of. But don't get all snobby about it and forget that, more often than not, you'll also need to expose your service to the customers/clients who will use it. That will usually mean building some kind of web interface through which your product can be attractively displayed and consumed.
Getting that done will require working through a few layers of web development. Just in case you're not yet familiar with how all that works, here are some of the tools you'll need to know:


Most applications generate data, and data - especially when it comes in large volumes - must be properly organized and maintained if it's going to be useful.
A relational database (like MySQL, MariaDB, or Amazon's Aurora) organizes data into tables made up of columns and rows. The Structured Query Language (SQL) is a standardized syntax for managing data on relational databases. A database engine (like MariaDB) is software for managing relational database data and exposing it to administrators and automated processes using SQL syntax.
For applications that must quickly process updates but don't require a high level of data consistency (for instance, online gaming applications), you might prefer a NoSQL database engine like MongoDB or Amazon's DynamoDB.
But either way, being comfortable working with data can make you far more effective - and popular - as a developer or admin.

Big data

Think about this:
Cumulatively, they're producing unimaginable volumes of data. Who's going to read it all? How can it be put to use? Data analysts, data engineers, and machine learning specialists, that's who. If your background overlaps one of those areas, and a project you're working on interfaces with large data streams, consider adding a related technology like R, MongoDB, or MapReduce to your portfolio.


Containers are extremely lightweight virtual servers that, rather than running as full operating systems, share the underlying kernel of their host OS. Containers can be defined using plain-text scripts, created and launched in seconds, and easily and reliably shared across networks. Figure 1.3 illustrates the basic container model.
Containers live on physical host servers, sharing host resources by way of a specially modified OS kernel

Containers live on physical host servers, sharing host resources by way of a specially modified OS kernel

Docker is currently the best known container technology out there and is largely responsible for a revolution in application delivery. Networked services are now delivered through swarms of disposable "immutable and ephemeral" servers whose behavior is tightly scripted and integrated through software front-ends like Kubernetes or Docker's own Docker Swarm Mode.
Because of the particular ways they live and die, containerized applications will often need special handling at the coding stage, so the more familiar you are with Docker structure, the faster you'll be up and running in a container world.


People can't seem to stop talking about cryptocurrencies like Bitcoin these days. But within the IT world, most of the big action is probably going to happen around blockchains - the underlying technology that makes Bitcoin work.
A blockchain, represented below by figure 1.4, is a distributed string (or "chain") of records used to validate transactions. The idea is that maintaining a reliable and incorruptible public "ledger" of transactions can greatly improve the way many businesses function. And those businesses will need plenty of developers and administrators to create and manage the new infrastructure. Why not join in?
The step-by-step representation of a blockchain transaction

The step-by-step representation of a blockchain transaction

Security and Encryption

Everyone's infrastructure is vulnerable to attack. From teenagers and their smart phones to massive corporate data center campuses: if there aren't multiple layers of protection in place, expect service disruptions. To be honest, even if there are multiple layers of protection, there will still be service disruptions, just fewer.
Someone's got to design, test, and implement security protocols and encryption algorithms. And someone's got to build firewalls and convince people to use proper passwords and multi-factor authentication. These are jobs that every organization needs done, and that need isn't disappearing any time soon.


DevOps isn't a technology per se - it's actually more of a process - but it's popular enough throughout the programming world these days to justify your attention.
DevOps (formed from the words "Development" and "Operations") promotes collaboration between a project's development, Quality Assurance (QA), and IT teams that's designed to facilitate faster time-to-deployment and software update cycles, and to allow greater levels of process automation.
Often the true benefits of automation come through the use of continuous delivery tools like Ansible or Amazon's AWS CodeDeploy. Being able to simply plug new or updated code into a kind of virtual assembly line with all the underlying infrastructure and compatibility details invisibly taken care of can speed things up, improve quality, and reduce errors. Figure 1.5 shows the cycle of a typical DevOps workflow.
The continuously repeating DevOps cycle

The continuously repeating DevOps cycle

If you think you'll ever join an organization that uses DevOps methodologies, you'll want to be familiar with the basic process and philosophy so you can hit the ground running.