Wednesday, June 29

Implementations Have Consequences

One of the blogs I read every day is Old New Thing, Raymond Chen's fascinating daily dive into the murky depths of Windows. Highly technical.

Today, he got a comment from another MS blogger: mgrier, who maintained the NT DLL loader for a couple years. That's the piece of operating-system code that manages the process by which the reusable parts of programs (Dynamic Link Libraries) are made available to executables, and to each other. One of his recent articles, part of a series on the internals of the NT DLL loader, had this quote in it:
I believe that this is not an implementation detail...

Wow. What an incredibly scary thing to say. Not just because it demonstrates that the Windows operating system is sufficiently complex that the very intelligent people maintaining it think about it abstractly enough that they hold beliefs about it, but also because he's making an important point about software here.

Every implementation decision you make matters to your design. Even things that, to the designer/architect/whoever-specced-out-the-thing-you're-working-on, seem like pure implementation details. At some point down the road, someone is going to care that you present your output as an ordered list because that's how it happened to come out. This is most important for applications that have other applications 'downstream' from them (i.e. their output is going to get fed into some other thing), but it's applicable for end user programmers too. (Especially since a lot of the output you think is being read by people is actually being read by machines.) So a truly conscientious programmer considers all these things, and thinks carefully about the consequences of each implementation decision that needs to be made. Or at least, they should.

I wonder if we do?

No comments: