I'm a creative - I draw, paint, write music and write - that's my more obvious artistic output. But most of my art over the last 20 years has been something you wouldn't see directly. You'd definitely see the results of it, you'd absolutely see the effect of the art behind it, but you wouldn't see or have to appreciate the creativity and artwork that went into the production because it's essentially hidden. That's coding in a nutshell.
Often people consider coding/developing/programming (call it whatever you like) a means to an end, a technical trudge where you need to know the theory to achieve the end result, but that couldn't actually be further from the truth. As a painter needs to master their tools and mediums, so a coder needs to master theirs in order to get the best from them so that they allow the creative process to flow. Anybody can pick up a pencil and scribble a few doodles but to use that pencil to create something truly fantastic you need to practise, you need to learn and release your creativity through that process of learning so that the pencil is no longer thought about, it's not a block to creative, it's a conduit through which it can flow without blockage.
Even if you're not a coder the chances are that you've seen or heard of 'Hello World'. For decades it's been the go-to template, the first thing you're shown how to do when learning a programming language. That's coding's version of picking up a pencil and drawing your first doodle, if you like. It's the first stepping stone in the learning process. And, like a doodle with a pencil, anyone can do it.
But where does the creativity and art come in? Visual art has its own set of tools and mediums - pencil, charcoal, acrylic, digital, oil, watercolour etc. - that the artist uses to create the end result. And coding has the same - C, C++, Lua, Objective-C, Python etc. - all which have to be learnt in much the same way as you would learn to paint or draw. Like other art forms, there are basic skills that transfer to all the other mediums you might try. But there are core skills or abilities that cross over all art - imagination and creativity.
Essentially, that's what makes coding an art in the same way as painting or making music. You have the tools and the canvas ready and you know how to use the tools, but the results are due to the imagination and creativity you employ.
Some of the most satisfying moments I've had whilst being creative are things that other people would never see or appreciate directly. When you know that you've solved a problem or designed a particularly elegant framework that you can hang what people will actually see on, it's incredibly rewarding. There are times when I wish people could see just how I'd done something, as I've been so proud about it, but that's not what happens with coding (plus their eyes would glaze over and they'd start to dribble - understandably so).
Modern music production also shares a lot with coding in that, unlike painting where you see the brush strokes and the techniques employed, you don't have access to the production process, there's just the end result. A musician might employ some synth programming that they're really proud of but all you hear is the resultant sound, not the creative process that led to that sound.
So, coding isn't fundamentally about being technical (although some developers will get hung up on this, almost like doing things the hard way is a badge of honour - there's a whole blog post in that alone). It is fundamentally about being creative and imaginative. It is an art form in its own right but one you don't appreciate directly - you only appreciate the end results.
Next time you play a game and see something really impressive just take a moment to think about the programmers that made that happen - they're artists just as much as the designers, musicians and sound engineers that take the plaudits.