Tuesday, October 7, 2008

Keeping Your Skills Up-To-Date

How do you keep current on the latest skills when you are not exposed to it in your day to day work? I suggest you get good books on new technologies and read them at work or home when you can. If you don’t have much free time you could read a chapter during lunch or other breaks.

It’s important that you keep up on new skills even if your job has you working on the same things every day. In fact, learning new things is especially important if you work with the same technologies every day, as your job won’t provide you with much learning opportunity.

To illustrate, let me recount my own story (Warning! Old fogey nostalgia alert!). Over the years I’ve had to learn a new set of skills and technologies every few years. The progression went something like this:
  1. BASIC: This was ‘classic’ BASIC, not the ‘Visual’ kind, and certainly not VB.Net. This was how I learned to program back in my high school days, tinkering on an Atari 800. There was also a bit of 6502 Assembler thrown in for fun.
  2. Pascal: I learned this in my first college programming class, using Sun UNIX workstations. Some old timers still remember when Turbo Pascal was the hottest language around for PC development.
  3. C: I learned this in on the job, in fact in my first job out of school, reading Kernighan & Ritchie. We were still using Sun UNIX boxes at work.
  4. Windows (3.x) development: Around 1990 I taught myself this using the original Petzold book, the bible of Windows programming. Back then we still had to worry about programs fitting into 64K in the small/tiny/medium memory models.
  5. C++: In the early to mid 90’s I taught myself this language using books like Stroustrup’s ARM (not the best learning material, BTW).
  6. Win32 API, MFC, Sockets, SQL, VB: I learned these standard tools for desktop & client-server development during the mid 90’s.
  7. COM/OLE, STL, ATL – Thick books taught me these highlights(?) of traditional OO design and programming in the late ‘90s.
  8. C# / .NET, ASP.NET, HTML, CSS, JavaScript – Re-tooling my skills for the web and .NET after 2001.
  9. XML/XHTML, AJAX, WCF – The latest and greatest .NET stuff circa 2007. Also learning Java EE5 on the side.
I would consider each of these to be distinct generations (or epochs) of technologies. That means that I’ve gone through nine or so different generations of skills, and I’m most likely not done yet. In a few years I might have to learn a whole new set of technologies; perhaps it will be LAMP or Ruby on Rails, or it could be a new set of technologies that have yet to be invented.

The point here is that you need to constantly update your skills every few years as they will inevitably become outdated over time. Hence as a software engineer you can never really afford to stop learning, unless you want to exclude yourself from the jobs that demand the most current skills.

2 comments:

Anonymous said...

The problem is, companies demand actual work experience in those technologies. If you pick up a book and learn it on your own time that means nothing to them.

RandomManager said...

That's quite possible, but in my own experience that generally has not come up. I've been grilled on the technology details many times, but not on where or how I learned them.