Monday, October 8, 2007

Experience and Abstraction

I had one of those light-bulb-over-the-head moments today. I was waiting for my computer to compile the changes I had made to our project so I could test them out so I picked up the book I am currently reading. Yes, it takes that long to compile... on the computer they gave me at work at least. I've opted for a more technical manuscript this time so the book is Pro WCF and the topic I was reading covered the three approaches to setting up and using the new Windows Communication Foundation: attributes, configuration and programability. At one point, the authors were compelled to point out that the list of types was also the order of precedence. Attributes are included in the code and are set first. Any configuration defined in the configuration files is then applied. And last, any changes to the set up made in code happened last. To which I replied, "Duh." And then the light bulb went on.

Before I describe the futuristic fuel that powers said light bulb, there's some more background you need. I recently read an article by Joel Spolsky. The article talks about the different abstraction layers of software these days. When one of those bottom layers blows up, developers are forced to code around it. It helps a lot if the developer doing the work spent a few years working with that lower layer before it was conveniently paved over. That way, they don't need to go looking for the cause, they just know what the problem is and how to fix it.

I always understood this from an intellectual level, but I never really thought I had that much depth in my coding experience. In truth I probably still don't. I've only been doing this programming thing for coming up on seven years now. But I got a taste of what it means to really have some experience. Oh, lets go ahead and put a capital E on that: Experience. I realized that not everyone working with .NET really understands what attributes are. Even those that do probably don't understand how they really work. If they don't know how attributes work, they probably won't know how they connect to configuration values or changes made pragmatically in code. The authors of the book went out of their way to explain this to everyone because they realized not everyone has enough experience to know this.

So what fuels that light bulb? A couple of things really. First, I learned that I have a bit more software development Experience then the average Joe out there. That's nice and comforting even if it is a bit conceited. But it does help to get the job done faster once in a while. Second, I learned another reason why I need to keep my audience in mind all the time when writing. Fine all you regular bloggers and technical writers that already knew that can rub it in my face... Go ahead... Are you done yet? That's too bad. I'm moving on. Maybe I already knew both of those things on some level or another, but just like it makes coding WCF easier when you already know how some of the basics of .NET fit together, I think I'll be able to communicate a bit more effectively after living through this little revelation of mine.