|For novel ideas about building embedded systems (both hardware and firmware), join the 25,000+ engineers who subscribe to The Embedded Muse, a free biweekly newsletter. The Muse has no hype, no vendor PR. It takes just a few seconds (just enter your email, which is shared with absolutely no one) to subscribe.|
By Jack Ganssle
Some years ago I extracted the following snippet from a system:
JMP $+57 MOV R1, R2 ; move r1 to r2 ADD R1, 0D41
The developer didn't believe in labels so used PC-relative jumps. His commenting style hardly illuminated anything, and the use of magic numbers was rampant.
Sadly, these three lines were pretty representative of the entire system.
The programmer styled himself a superprogrammer and felt his skills, apparently honed over decades of code terrorism, transcended any taming attempt by the pointy-haired boss (me).
He wasn't a superprogrammer, at least in any sense I could determine. A heck of a smart guy, for sure. Articulate and always voluble about his own skills. But his code reeked. With enough work he could pretty much beat it into submission. But other, less dramatic, developers built much better code much faster.
Some imagine the superprogrammer as a beefy guy with a Harley-Davidson T-shirt stretched impossibly over a beer guy, ZZ Top beard flecked with gray, and an attitude that forces management to keep him away from customers.
In my experience those are the fringe element. Most of the truly gifted developers I've worked with don't have those negative characteristics. They're just very, very smart, adept with the tools of the trade, and are instinctively good at problem solving and structuring complex systems. Any "attitude" exhibits itself in strong biases about proper development strategies and a commitment to compromise neither elegance nor quality.
It seems that when we talk about distributions people immediately visualize the Bell curve. But I don't think a Gaussian distribution applies when it comes to engineers. Something more like a Raleigh curve probably better represents the distribution of skills. Below some IQ or competence there are no - or at least very few - engineers, suggesting that superprogrammers are more common than one might expect.
Of course, there is no definition of "superprogrammer." Like the judges have ruled on pornography, we know one when we work with one. But what do you think? Are superprogrammers common? Do you consider yourself one?