As a humanities graduate who didn’t begin to tinker with computers until 1999, I have been so awed by the achievements of those who built the software that now forms part of our daily reality that I seem to have absorbed the message conveyed by a pantheon of set-up wizards and druids, that programming is an arcane art indistinguishable from magic.
I started with Windows. I considered myself, at first, a user of software. Then as I grew in confidence and began to tweak applications more and more, I became the office geek: the guy you came to when you had a problem and didn’t want to deal with the patronising sarcasm of the help desk.
I was a fledgling power user, perhaps, but that’s still a user. I wanted to go further. Windows was this impenetrable black box and all I was doing was changing the stickers pasted to its exterior. The Magic Inside (TM) was still a mystery.
Switching to linux placed me at the base of a near-vertical learning curve that, after two years of use, has become a pleasant climb. GUI tools held my hand while everything was new. When I was ready, the command line showed me a glimpse of its power. From chaining commands to scripting seemed a natural progression and I began to taste the satisfaction of automating repetitive tasks. But I still felt like a user.
“I know how to write a bash script, how to pipe the output of one command line application into another and control the whole thing with loops and conditionals, but I don’t know how to program,” I thought a few months ago. And so I sat down and began to learn C++. While I’d belittled the shell scripts I’d written and used daily, I finally felt like I’d grown an honourary beard. Now this at last was real programming.
Learning about the C++ standard library, my first reaction is one of awe. That I can define something as a string and then, by virtue of having done so, find out how many characters it has without having to write an explicit routine to count them strikes me as beautiful. But then I feel doubt. Are not strings in C++, therefore, effectively microscopic applications? Is there any radical difference between tying together a series of command line apps like sed, cut and grep with a script and using the standard library when coding in C++?
When do I get my magician’s hat? Is what I am doing not in the end real programming? Do I have to wait until I’m writing my own code libraries or go closer to the metal still and write in assembly?
Or perhaps there never was any magic after all – just brilliantly engineered slight-of-hand.
This post was inspired by the question
“Doesn’t manipulating code fragments make you a programmer? Of a sort?”
in r0ml’s post Who is a Programmer.
I have since learned that it is poor etiquette to trackback to someone else’s post without providing an explicit link to it in your own. Mea culpa.