Sunday, October 17, 2010

I'll Pass On The Black Box

As others have pointed out over the past few days, I sometimes tend to drill deep into details (check the last blog post for a great example). They're right, but I have good cause for the drilling. It's because I don't buy into the black box.

What's the black box? It's the idea that you can successfully work with a technology without understanding it. It's a conscious decision to shield those people building and using technology from the "complexities" of the technology they're using.

I'm not a fan of the black box concept. In fact, I'm pretty insistent on building up my own knowledge and the knowledge of those around me in regards to the technologies we use. One example: My children all started to drive cars in their teens. Before allowing them to drive, I insisted that they learn the basic technology of a car. Check and add oil, change the air filter, inspect the battery posts, change the tires...that sort of thing. Because they're much more likely to be good and independent drivers if they know how the car works, especially when the steam starts to come out from under the hood on a hot summer night miles from civilization. None of my kids drove until they passed my test.

My personal opinion here: most failures with technology-related projects are rooted in a lack of fundamental knowledge about the technology used. I see it constantly and you probably do too.

Another example: think about how often we talk about protecting developers from the complexities of the database. Really? I'm thinking I want the developers to be experts on the database, so that it can be leveraged to build great solutions.

I feel the same way about Integrated Development Environments (IDEs). Love the efficiency of the IDE concept, but now we're in danger of creating a generation of developers who only know IDEs. Such developers will eventually run into something they're unable to solve; they'll have to find an "expert" who can work outside the IDE. To build great solutions, we must understand the detailed technology behind the IDE.

The bottom line: I think you have to understand the technology you're using before you can use it well. So I'll pass on the black box myself. How about you?


BitterSuburbian said...

I agree totally. I like to know everything about a technology I use. It sort of parallels the old school new school idea of doing everything through a GUI. I still try to make sure I can do things on the command line. You seem to learn more about it that way.

Joel Garry said...

It depends on the value of "work with."

If you are a race car driver, you must understand physics and suspension geometry and be able to elucidate issues about those to others. A temperature gauge actually gives you relevant information.

If you are a soccer mom, do you really need to be able to tell the mechanic when you've had the oil changed? No, you need to understand basic driving functions, the (literal) black box is just magic. Even mechanics don't often understand the box, they just read out error codes and follow a script. They develop myths without proper causality ("you need to clean the intake manifold"). Do you really expect them to develop tools to evaluate how clean the intake manifold is? Be able to reprogram the eprom from scratch? There are simply too many variables beyond fuel and air these days.

Do you really need to understand the technology under the IDE? Shouldn't the IDE really have the instrumentation so you don't have to do that?

We don't need to protect developers from the complexity of the database. We don't need to make the developers understand all the intricacies of the database. We need to inculcate the developers with basic concepts to deal with the database, and make the database tell the developers what is going on, right or wrong.

I agree philosophically though, it should be simple and documented how to dig deep. But the fact is, it isn't. And even where it is (like linux source), I think it is too much to expect everyone to know everything, just because it is there. I think that is a fallacy of open source, in fact.

word: jissiv

fteter said...

@BitterSuburbian: Yup - exactly.

@Joel Garry: Actually lost an engine once because my soccer mom wife didn't know when the oil was last changed...that's why I started the thing with the kids.

So far as the technology under the IDE? My thinking is that, sooner or later, a developer will run into something the IDE can't do. Maybe better IDEs will eliminate that problem in the future, but until then...

From my perspective, it really comes down to the idea that the more you know about the technology you're using the better you can leverage that technology.

ian said...

It is really amazing following someone having A GREAT BLOG!

fteter said...

@ian: you're far too kind...thanks!