A developer should always be learning.
I find this statement (one which I thought up only moments ago, staring at a blank screen wondering what to write) quite profound for me, at this particular point in my career. I say this because over the past 12 or so months I feel like I have stopped learning (MCTS nonwithstanding). This is a mildly depressing realisation, one which I am trying to rectify. You see, in my current work environment I feel confident in saying I know the business quite well. People refer to me for advice (technical and otherwise in some cases), and I get a healthy level of respect from the client because of this. From a technical standpoint (in the context of the applications we support) I know our main system like the back of my hand (I still wish I could un-see some of things Ive seen), and the other systems we support at a decent level, and anything I dont know I can usually find out pretty quickly.
Unfortunately, this is something of a double edged sword.
You see, not only do I like learning things from a technical standpoint (like .Net, Sql etc), but I love learning the business. I want to know every single in and out of the system, and the potential impact a change can make (anticipating these sorts of things will save you many headaches, if not stomach ulcers) on every level from the code to the business process, all the way up the user. Since I work for a government department (through my employer), complex policy changes get me going like a toddler pumped full of red cordial, laced with red bull. Professionally of course.
Anyway, since I have been with this department (and employer) for over 4 years I have a very solid grasp on how things work, and as such Im not learning anything anymore. So not only am I not learning from a technical standpoint (as we still predominantly use .Net 2.0), but from a business standpoint there's nothing really to sink my teeth into (in saying this, we do have a very big project coming up, so that will help somewhat). So as a result of this, what has happened to me is the *worst *possible thing to happen to a developer.
I have stagnated.
When you stagnate, two very bad things happen. Firstly (and obviously), you stop gaining knowledge. The knowledge you do have, while useful, doesnt provide any real challenges and you therefore settle into a very subtle and sneaky routine otherwise known as a 'rut'. Secondly, and in my opinion this is far worse, you stagnate mentally. Meaning your capacity to learn, and the speed at which you learn is reduced. As a developer this is devastating, as the quicker you learn the quicker you are useful to the client. When you are given a brand spanking new piece of work, something thats not even closely related to what youve done before (or in a while), you look at it with a blank stare and think 'crap, how does this go /go again?'. While this is unavoidable sometimes, we as developers should be doing everything we can to keep our minds sharp.
Recently, I started delving into the world of IoC (Inversion of Control), and the principles that entails. To my (most likely flawed) understanding, IoC involves the separation of the dependencies between parts of your applications (usually between UI and Business Components, although I think it could apply across all layers). And boy, have I struggled with even the basics of this. Thankfully though, the longer I study this (and other things Ive stumbled across so far in my IoC journey), the more I understand. But more importantly, Im understanding new concepts and thought processes alot quicker too! So in learning IoC (which I am beginning to appreciate), not only am I increasing my knowledge, but Im helping keep my mind sharp and on the ball. Crisis averted!
A developer should never be bored.
Look, theres another! Im just flowing with these sorts of deep (cough) statements tonight. If you are bored, then you are doing something wrong. Not your boss, your client, or whoever else you are trying to blame, you. Much as it might be frustrating sometimes, the onus is on you to be finding new things to chew on. This doesnt have to be technical either, this could just as easily be Policy Documents, Use Cases or whatever. Anything that helps you keep that ability to learn functioning is pure gold. Failing that, browse StackOverflow (which I have also recently started to do in an effort to kill that nasty boredom), pick some topics of interest and start answering questions! Even if you get some questions wrong (which Im pretty sure I have... that reminds me I need to check that), you still learn from the correct answers other people provide. This also gives you a very good opportunity to sharpen your writing skills, something which I think tends to be underdeveloped in most software developers I see.
So long story short, dont ever stop learning, and dont ever get bored. If you are doing/being either of these things, you could be doing something wrong. Be proactive about it, and fix it before it bites you where it hurts!