peshkova - Fotolia
Ever notice that a lot of tech-heads are musicians? There's a lot of jamming and spinning going on in the techosphere. It makes sense, as music and software have something in common: It's all about working with abstract constructs. You can't touch software; you can only interact with it.
It's the same with music. There's no point in time in which a melody exists. A tune exists only in your memory, over time. Being able to identify and manipulate abstract constructs is the work of both musician and developer.
So, when someone asks me to name an important DevOps engineer skill, my usual answer is abstract thinking.
DevOps: a world of pure abstraction
For the most part, in DevOps, hardware has gone away. Most of us no longer install machines on racks in an air-cooled data center. Our work is to interact with Amazon Web Services, Microsoft Azure, Google Compute Engine or other providers to create VMs, containers and services in the cloud. These cloud entities become our application's environment. Any metal that exists is well-removed from our day-to day-experience. We work in a world of abstraction.
Still, the real world lingers on. We describe the abstracted world in terms of the attributes and behaviors that we encounter in the concrete, real world. For example, when configuring a VM, we still refer to memory as RAM. Processing is described as CPU. We talk about networking terms of addresses, ports and routing. We take the attributes we encounter in the real world and apply them to the concepts we imagine. Abstracting away the properties and behaviors of real-world things into an identifiable model allows us to manipulate imaginary things to concrete ends.
That's the good news.
DevOps engineer skills in action
The bad news is not all of us working in the cloud have the understanding of abstraction required to work creatively. Sure, we can set values in a configuration file that gets consumed by some sort of cloud-based technology down the pike. But how many of us really understand the underlying abstraction? There's a difference between manipulating a technology and understanding it. Many can drive a car; few can design one.
The ability to design is an essential DevOps engineer skill. Intrinsic to being able to design is thinking in the abstract. But, according to Jean Piaget's theory of cognitive development, we're not born with the ability to think abstractly; we develop it as we mature. It takes instruction, practice and perseverance.
How do we develop our ability to think abstractly? Engage in activities that require a high degree of abstract thinking, like making music.
How to improve abstract thinking
Again, many tech-heads, particularly software developers, are active musicians, and musicians have engaged in structured abstraction for centuries. What's a beat if not a way to structure time? What's a scale if not a way to organize pitches into a consistent, identifiable, extensible segmentation of sound? What's style but a way to define an overall framework to which a variety of musical constructs conform?
The songs of the Beatles are distinguishable from the symphonies of Beethoven, although each song and symphony is a unique pattern in its own right. Being able understand the common thread that runs through all Beatles songs and understand how it differs from the thread that unites Beethoven symphonies requires a very high degree of abstract thinking.
Studying and making music are not the only means to improve abstract thinking. Studying the paintings of the great artists offers a lot of opportunity to hone one's pattern-recognition abilities. Pattern recognition is an essential skill to have in terms of abstraction. For example, consider Picasso's Weeping Woman:
Have you ever seen such a weeping woman in real life? Of course not. And yet, the woman in the painting is recognizable. Understanding why the woman is recognizable involves using a good deal of abstract thinking.
What patterns did Picasso capture that map to the real world? How do we know the painting is not an abstraction of a gorilla? The exercise of consciously trying to identify the attributes Picasso is representing goes a long way to building an essential DevOps skill, or modeling real-world items such as a deployment process or an internet-of-things device.
Working with abstraction: Key to our future
Abstract thinkers have been around since the time prehistoric man first drew a picture of an animal on the wall of a cave. What's new now is the increased rate by which we're abstracting the real world into software entities that represent and control more of our day-to-day experiences. Software really is eating the world.
I am a big proponent of melding artistic and scientific sensibilities into a unified approach for working in tech. I like using music, painting and drama, particularly pantomime, as ways to improve one's abilities to abstract. However, studying these disciplines are not the only way. There's a lot to be learned by studying mathematics, architecture and, of course, software -- particularly around design patterns.
Working in the modern world requires more abstract thinking, not less. Those who demonstrate an advanced ability to think abstractly will control the world we are making.
As DevOps continues to grow, it's all the more important for those working in the field to have a highly developed abstract thinking ability, particularly now that automation and artificial intelligence will do more of the rote, repeatable work. Abstract thinking is an essential characteristic that defines what we are as human beings. AI isn't there yet.
Needless to say, there is little downside to continuously improving our ability to do abstract thinking. Our lifelong commitment to technical excellence demands that we do.