Over the last week I've been doing a lot of interviewing of potential candidates (yes, while I was sick -- but via the phone) for some of the open slots we've got with NuSoft in our Cincinnati office. The task has made me reflect on the journey I've been taking over the last couple years as I set out to get back into fun stuff like development instead of the QC, customer relations management, and project management roles I'd been in.
Several years ago I decided I wanted out of that line of work, but I had to take a hard look at my skillset and fess up that, well, it sucked. Furthermore, the environment I was in offered few opportunities for me to instigate a sea change in what I was doing and how the folks I worked with were doing their development. I knew I needed to start getting some facts and cases together, so I began exploring new things by doing a great amount of reading.
That reading led me to discover a wealth of new horizons, all of which were completely unknown in the environment I was working in. Test Driven Development? The guys I was working around weren't even writitng unit tests and had no clue what any of the xUnit frameworks were. (Nor were they overly interested.) Agile or lean development? I was in a horrid, process-bound environment that valued production of mountains of documentation more than production of solid code -- one of the hazards of having to deal with department of defense agencies.
All of this reading kicked me in the butt. I was letting others have far too much control over what I was able to do with my skills. You are the one who controls your life, and you have control over what you can do to better position yourself as you look around for an escape from the environment you're currently in.
Suggestion one: Your skills suck? Get reading (books). Do the folks around you not care about quality development? You're in a lousy place and you need to get yourself out of there, but you'll need to get yourself exposed to some critical works on writing good code like McConnell's Code Complete, Kernighan and Pike's Practice of Programming, and Maguire's Writing Solid Code.
One of the best guides I found was the career ladder at Steve McConnell's company Construx (registration required). This is an old version, but the works listed there are gold, absolute gold, and can get you pointed to many other works as well.
Don't leave off at writing solid code. Continue your reading by hitting some of the great works on methodologies: Beck's Extreme Programming, Subramaniam's Practices of an Agile Programmer, and Beck's Test Driven Development or Newkirk's version in the .NET world. Learn how to change your development practices, even if the folks around you can't or won't.
Suggestion two: Your skills suck? Get reading (blogs). You're already here so at least you know what a blog is. You're wasting time if you're not using an RSS reader/aggregator, so go look at something like Omea, Bloglines, or any of the other tools.
Use your time in blogs wisely. Think hard about forcing yourself to do an end-of-month purge of your blogroll: cut one or two every month, forcing yourself to keep only the cream.
Suggestion three: Your skills suck? Get involved. Find a user group in the technology you're interested in. You'll be surrounded by other folks who are passionate and interested in good software. You'll (hopefully) get great presentations tossed at you to spark your interest in learning even more.
No good user groups around you? Start one. I started the Dayton .NET Developers Group because I got tired of driving over to Columbus to hit the Central Ohio .NET group.
You need some additional motivation to keep increasing your skills? Run a User Group and stand in front of a group of folks once a month. There's no better motivation to boost your skills than the motivation to avoid showing your ass...
Suggestion four: Your skills suck? Get developing. You can't get your management team to buy off on moving to newer technologies? Well, they may not see the value proposition in that, and that's certainly their perogative. But you need something to cut your teeth on to help you boost your skills.
Go find a great open source project like MbUnit, NUnit, NAnt, TortoiseSVN, or any of the many other great tools around. Grab the source code and start digging through it. Learn how Really Smart Folks like Charlie Poole write code. Take the next step: join the development team and see if you can't start out helping knock off some low-hanging fruit. Can't do complex stuff? Maybe you can do smaller tasks that let the more experienced folks focus on that complex stuff.
You'll be learning, and you'll be boosting your resume with some good work.
Suggestion five: Your skills suck? Get writing (or presenting). I'm a firm believer in the adage that you don't really know something until you can teach it to someone else.
Start a blog. Write about some tech geeky thing that interests you. Write about how you're solving problems on the open source stuff you're helping develop. Write about what you're learning.
Write an article. I was lucky enough to hook up with James who invited me to start writing pieces for his VisualStudioHacks.com site. Find your own places to submit articles to. Code Project, O'Reilly's various sites, any number of other places. Who knows what will happen? Maybe you'll get lucky like I did and fall into a serious writing project.
Want to really learn the guts of something? Develop a 60 - 90 minute presentation around it, complete with good technical demonstrations. Give that at a User Group and answer the questions that pop up about your talk. Showing others requires you to have your stuff seriously together!
Suggestion six (the last!): Your skills suck? Get real. Take the long view, set priorities, and set goals.
My skillset dropped because my wife and I decided our priority was to have me home with my daughter instead of in an office cutting code ten hours a day while my wife travelled extensively for her job. That would have meant my daughter would have been in way too much daycare for our tastes. Because of that I had to take positions I wouldn't have otherwise. Some of them weren't exactly what I wanted to be doing, but I've found they've given me a great breadth of experience in everything from extensive writing to project management to estimation. I spent a lot of time in front of customers which has turned out to be invaluable.
Keep your priorities straight. Maybe life won't let you make a change right now, but you can certainly start building your foundation so that you'll be ready when life lets you.
Keep your goals set, and within reach. Dreams are great, but goals are what let you reach those dreams. Set goals for finishing books. Set goals for learning bits of technology. Set goals for certification tests. ("Hey Jim, how's that MCSD coming along?" Uh, we'll talk later.)
In Closing...
All this has been bouncing around in my head for quite some time; long before I started my new job. I hope I've managed to convey a few important bits and pieces in this post.
You've got to take matters into your own hands if you're going to break out of whatever rut you're currently in.
I'll turn off the Doctor Phil mode now...