I’m currently working on a series of small desktop utility programs – a time logger, decision assisting tool, etc.
Something I decided to do with each project is pick one new thing to implement, which requires me to learn a new skill. For example, find a way to have the program check if there is a newer version for the user to download.
I consider these to be programming etudes – just like what musicians use to improve their skills.
Each new thing I learn is something I can repeat in the following program. Over time, my skill with them will increase, and they’ll become part of my programming repertoire.
Coming from a large corporate development environment, we had a certain way to develop our programs. And part of that way included things we didn’t do.
For instance, at a company where I was writing web services and web sites, we never worried about having the programs check for updates. It just wasn’t allowed to have a program that could update itself. All changes had to be deployed by the network operations group, to keep the environment “stable and secure”.
So we (the developers) never worried about writing code to handle updates. In fact, with web services and web sites that were run from a single environment (well, a couple, if you include the failover servers), checking for an update, like many desktop programs do, was something that didn’t even enter our thoughts.
That gave us a very limited view on how to write applications.
That was fine for letting us improve our skills within a limited area – after repeating the same thing many times, you start to become better at it. However, to be a great programmer, you need to both improve the skills you have, and acquire new skills.
So that’s why I’m making sure to have a “new skill” objective for each of the programs I write from now on.
If you want to grow as a programmer, try doing the same. Otherwise, you may find yourself left behind, as the demands of the market shift away from what you’ve been doing.