I, and I'm sure others, always hear things like "you're different, you're an engineer." I've always took this to be a pretty silly thing to say, I don't really see engineers as any different than anyone else. Just because you're good at math doesn't mean you cook differently, right?

In the March issue of Computer magazine, Bob Colwell wrote an article comparing computer scientists and electrical engineers. In his analysis he hits on some interesting points describing what makes an engineer:

We take courses in system design, control theory, electronics, and fields and waves. But mostly what we're taught, subliminally, is how to think like an engineer.

Behind most of the classes an engineer encounters as an undergraduate is one overriding paradigm: the black box. A black box takes one or more inputs, performs some function on them, and produces one output.

It seems simple, but that fundamental idea has astonishing power. You can build and analyze all engineered systems -- and many natural systems, specifically excluding interpersonal relationships -- by applying this paradigm carefully and repetitively.

This talks about what is 'fundamental engineering' -- which is never taught, but is very important to understanding engineering. But, other fields that use this abstraction very effectively. Social scientists break groups of people into larger systems, systems that interact without looking at the individual factors. I think that economists do this regularly. I don't think that we can say that engineers are the only people that use abstraction as a professional method. Perhaps we use it more, but, engineering conversations are also different:

I was intrigued to observe that a group of 10 engineers sitting around a conference room table invariable had a subtle but apparent common mode: They all used the black-box abstraction implicitly and exclusively, as naturally as they used arithmetic or consumed diet Coke. Although these engineers came from different engineering schools, and their degrees ranged from a BS to an MS or a PhD, they implicitly accepted that any discussion would occur in one of two ways -- either at one horizontal abstraction layer of the design or explicitly across two or more layers. It was generally quite easy to infer which of those two modes was in play, and all 10 engineers had no difficulty following mode changes as they conversation evolved.

When thinking about this (and yes, I probably should have been paying attention to the technical discussion instead of daydreaming), it occurred to me that the first two years of my undergraduate EE training had sometimes seemed like a military boot camp. In fact, it was a boot camp. With the exception of social sciences, humanities, history, and phys. ed., all of our classes were done in exactly this way.

So, perhaps engineers are a little bit different in the end. Or, perhaps we're just waiting for everyone else to catch up <smile/>.

As far as the difference between hardware and software engineering, I've always described it like this:

The difficult problems in hardware are taking something that is innately parallel and making it serial. The difficult problems in software are taking something that is innately serial and making it parallel.

posted Apr 15, 2005 | permanent link