Wednesday 31 July 2013

Daily Fundamentals

Today's article may come across as a bit technical: this is not intentional, but is purely because technology and software development is my field of expertise and the source of my current life-style. The things I speak about can be applied to any aspect of life. You should always learn and practice the fundamentals. Every day. Get into mastery of a subject, rather than breeze through life on auto-pilot. While auto-pilot worked well for me when going through the split-up with my wife, it's not a good long-term strategy and I know if I carried on like an automaton, in a few years I'd be washed up and worthless in my career. When you follow a path in life, make sure you know more than just the path: learn the surrounding terrain, the weather patterns in the area you're walking in. Be the master of the path, not just another chump hired to lead a few college kids for the summer.

I've been a software developer for 16 years and every year I look back at what I did the year before and think "yuck" to myself. One part of me is quite excited that I can always be learning more and getting better at my chosen vocation. Another side of me feels that it is annoying that I am never a master at my profession.  I find myself getting tired of the constant churn in technology, especially in the Microsoft world. I know that things change and improvement must result in change, but often I look at the technology and see just another layer of crap on top of existing crap and wonder what it's all for. Frankly, I find myself tired of all this change and the constant need to be memorising somebody else's ideas to land the next contract. I believe the term that should be used for the way developers feel about all this new and exciting technology that is not so new or exciting, is "developer fatigue".

When you get pulled into the trap of seeing marketing as technology, you get tricked into burning all your energy learning the next greatest framework instead of practising fundamentals. What do I mean by daily fundamentals? I mean the kind of learning that is going to make you a great programmer rather than a great user of the next microsoft framework. Seriously, learning WPF and becoming an expert in the framework will be great short-term. You'll land contracts with great rates for the next 3-5 years. Maybe more if MS sticks to their ideas, but I doubt it. And after the boom, what do you have left? Five years of experience in a dead technology. So rather than deep diving into an abstract layer of technology, I advocate deep diving into the fundamentals of technology and understanding exactly how computers work, how graphics cards work, how shaders and shading languages work. Learn a new (programming) language every couple of years, and make sure you choose one to master that is commercially viable while you learn new languages, ideas and thought-patterns.

Learn how compilers work, computing theory, language theory, design patterns, algorithms, OpenGl (a really, really stable framework that's not going to just go away). Heck, I'm thinking of starting my own little framework using OpenGl as a layer of rendering widgets to cross-platform GUIs rather than relying on Microsoft and their stooges to provide me with WPF. I think c++ or java (nice and cross platform) with an underlying OpenGl library should do nicely, allowing the development of GUI applications that just work.