Some Thoughts on Software Development
Software development, in my opinion, is something of an extraordinary field. Relative to the rise of civilisation it's no more than a flash in the pan, but along with the advent and advancement of computers themselves, the discipline is progressing at so great a rate that we take many aspects of it for granted. In terms of human history, the technologies that have beseeched change upon this world in the last 200 years are nothing and yet they are everything.
A little over 70 years ago the digital computer didn't exist. Over 40 years ago a computer with a processing power several orders of magnitude less than I routinely carry in my pocket took man to the moon. I'm going to repeat that because it bears thinking about, especially for those of us who had the misfortune of not being in existence at the time these events transpired: a computer, with less computing power than the most basic of todays electronic devices, helped get man to the moon. That thing you look up and see at night? People actually walked and drove on that. I don't mean to labour the point but if you don't find that fact hugely inspiring then I don't know what could inspire you more, but please, let me know.
Armstrong taking his legendary step. Yes this image could be smaller, but it deserves better. Image from NASA.
The Things We Take For Granted
Tangential thoughts aside, the real point here is the fact that we are involved with a young, but rapidly changing industry, and it's an industry that also happens to be rapidly changing the world in which it is based. I started writing this article on a plane, somewhere above the northern part of Victoria, Australia, some considerable distance above the ground than is usually thought of as comfortable. Naturally, for we lack wings, a comfortable distance for us extends to mere centimetres above the the floor; yet we have become accustomed to the notion that the floor in question need not be the natural surface of our rock. We have also become accustomed to the fact that I started writing this on a tablet device up in the sky, and it doesn't seem the least bit strange: such is the march of progress.
Over the last couple of years I've used a few very high level APIs and environments: XNA on the XBox 360, Force.com in the cloud and Unity3D for more of my game development antics. It amazes me when I see people complaining that certain aspects of these environments are 'too hard'. With computers no longer acting like computers (I'm sure most peoples' grand parents wouldn't refer to an iPhone as a computer) it seems to be that people assume that development should consist no more than clicking buttons. Maybe those people are right and that is how it should be, and we are getting really close to that—development on Force.com is a great example of this—but we're not quite there yet. It seems to me that even when 'programming' consists of more mouse clicks than typing there will still be an art to it, and talent will be required to create elegant, robust solutions.
Programming Is A Skill And An Artform
I've never been a great one for remembering the names of methodologies and paradigms, for knowing the exact ins and outs of object orientated concepts (I tend to know them, but not using the 'proper' names) and if you tell me something is considered bad practice, I'll want to know why rather than just take it at face value. You may well disagree with me, but I honestly don't think all of that is really so important. There is undoubtedly an art to programming, and a skill involved which transcends technologies, platforms and time, one that can be refined and improved, but maybe not learned. Knowing a platform backwards is great, but don't let yourself be boxed in and think that is the one thing you can do; keep learning, experimenting, and hacking.
I'll never stop learning about code and neither will I stop learning about how to work with and manage other developers, but one thing I have noticed so far is that often (not always!) the best developers are the ones who truly love to write code. These are the guys (I use the term to be inclusive of women) who will strive to learn, improve, and practice, and do so without prompting and without doing it just to progress their career. I truly believe that if you want to see the greatest improvement in your own development skills, then you should make sure that you're in an environment where you're surrounded by such people.