Software Craftsmanship and Staying Current

I’ve encountered the following question a few times both in and outside of the office:

“How do you keep up on the latest technology and practices?”

This is a question that means different things coming from different people.  The first angle is mechanical: it’s basically asking for directions.  How does learning things in this arena work?  Are there any secrets?  Technology spirit guides?  The emphasis is on “how.”

The second angle is motivational.  It’s a curiosity about what drives another person.  Why would you spend time doing that?  What drives you?  Are you crazy?  The emphasis is on “why.”

I thought it would be interesting to share a bit about “how” because I believe the “why” should be apparent, particularly if you are already here reading this blog.  The “why” is why there are craftsman in any field; because they have a connection with the objective value of the craft.  It is worth learning more and driving into deep for its own sake.

So, how does learning work for me?  It’s definitely not a secret technique.

Blogs

This is basically uni-directional discipleship.  It’s recognizing that you have a gap of growth in your life and that there are others who have crossed that gap and have wonderful things to impart to you.  They have no idea about you (usually) but you can follow their journey from afar.

Here are some of my absolute favorites:
  • Scott Hanselman – if you read only one technical blog, read this one.  The ratio of posts that have directly led to adopting and awesome new tool / practice / technique / mindset to total posts is amazingly high for me.
  • Jeff Atwood – less about code, and more around the meta of programming and hardware.  Makes you think while making you laugh.
  • Eric Lippert – if you’re ever feeling smugly intelligent, read this blog.  A super genius C# language designer who is both humble and humbling to read.  And his blog text is all purple, which is fun.

There are also two ways I tend to consume these blogs:

  • Google Reader – great for my primary use case of aggregating blogs and reading only unread entries.
  • Flipboard – a more beautiful way to browse any content and share it easily.
Flipboard

Podcasts

  • Hanselminutes – for the same reasons I enjoy his blog.
  • .NET Rocks! – Richard Campbell (who I have had the pleasure of seeing twice at TechEd) and Carl Franklin are two extremely entertaining technology experts who produce a prolific amount of material.  Even if I only listened to their podcast, which is full of excellent material, I’d have a hard time keeping up.

There are tons of ways to listen to podcasts, but I want to highlight one that I love, called Pocket Casts.  It’s a beautiful app that has some great podcast-specific features, and makes it much more pleasurable to manage lots of podcasts:

PocketCasts
Community
  • Conferences – See if you can go (or have your employer send you) to a technology conference.  They’re great for exposure both to new concepts and often the broader picture that stitches them together.  A few favorites I have been to are Microsoft’s TechEd, Richmond Code Camp and Innovate Virginia.
  • .NET User Groups – I try to encourage folks to get out and visit our local .NET user group here in Richmond.  It’s a great, easy, free way to get exposed to new concepts and meet some people using the same technology to solve different problems in the area.  Of course there are user groups for all sorts of things???I keep imagining I’ll drop in on the SQL Server or Ruby user groups in the area, but I’m not quite there yet.
Tumblr Architecture

Experience

Finally (and this is the most important part) work on fun projects!  Projects that engage you.  Any project you work on, seek to elevate it.  How can you make it easier to change in the future?  How can you make your codebase a joy to work in?  Can you help the developers who come after you be less depressed?  Is there a new pattern or practice you believe would help a project?  Try it out!  The only way to really learn the stuff you listen to is to apply it in your own life.