Superprogrammers

By: J.D. Hildebrand

Abstract: Yes, some programmers are much more productive than others. What should we do with this information?

Superprogrammers

Of all the damaging ideas and bad practices that plague the software industry -- the beliefs that are responsible for the appalling statistics about how buggy software is, and how many projects are abandoned without ever being deployed -- I think the most pernicious must be the concept of the superprogrammer.

The notion comes to us from the accurate, common, undeniable observation that on any given project, some programmers are more productive than others. Not just more productive: much more productive. Studies by Boehm and others consistently show that our best programmers are 10 to 20 times more productive than the average.

We have come to rely on superprogrammers to help us meet impossible deadlines, to untangle complex problems, to track down resistant bugs. Programming's tall tales, myths, and legends are all about superprogrammers. We lionize them. They are at the top of the software business's caste system, and managers treat them as qualitatively different from the mere mortals who make up programming's hoi polloi. The existence of superprogrammers is integral to the software economy, an unquestioned part of the foundation that supports modern software development.

I think it is high time to question our belief in the value and importance of superprogrammers.

THE TROUBLE WITH SUPERPROGRAMMERS

I have three main complaints with our industry's reliance on superprogrammers.

First, talk of superprogrammers is destructive to other workers. Superprogrammers get privileges, benefits, and recognition. The achievements of regular and above-average programmers pass unrecognized. Instead, these hard workers are reminded, day in and day out, of all that they are not. Morale and motivation plummet as developers are presented with a fait accompli. "Too bad you weren't born with Jerry's talent. If you were a genius you could have a faster computer too." Everyone accepts the elitist notion that the gulf separating the mental gifts of superprogrammers from the mundane brainpower of mere mortals is too wide to cross.

Second, we lack longitudinal studies that would allow us to say that superprogrammers retain their gifts over time. My observations suggest that developers acquire superprogrammer talents for short periods -- perhaps just for a single project. I remember superprogrammers from the days of MS-DOS programming; some became leading developers on the Windows platform, while others found the transition leveled the playing field, and in the new ballgame they were average players. Superior performance comes and goes as developers encounter problems that fit the interiors of their skulls. Today's average programmer is tomorrow's superprogrammer, and vice-versa.

Finally, I think reliance on superprogrammers is a shortsighted management strategy that delivers short-term gains at best, at the cost of overall organizational development and widespread improvements in productivity. Instead of setting up systems to recruit superprogrammers and funnel the hardest problems to them, organizations should set up training programs and incentives that bring out the best performance in everyone. A 10 percent productivity improvement for the whole staff is better -- for deadlines, morale, and the work environment -- than finding and hiring a new superprogrammer. It's far better to set up a work environment that supports and encourages professional growth among every member of the staff.

I have seen average workers, given the appropriate encouragement, training, and resources, rise to unexpected levels of performance. They become more confident as their skills grow, and it is a joy to see their potential blossom. It is this process -- the nurturing of all staff members so they can do their best work and extend the limits of their competence -- that management is all about. In contrast, superprogrammer doctrine is corrosive to the spirit. For most workers, it emphasizes what they cannot do and the talents they lack, rather than reinforcing their strengths and establishing expectations about their growth.

BEING A SUPERPROGRAMMER

Programmers are not in general afflicted with excess modesty. If statistics say two programmers in 100 work at the superprogrammer level, that will not prevent fully 75 percent of developers from identifying themselves as superior. If self-confidence is a virtue, then software developers are among the world's most virtuous workers.

I don't count myself among programming's elite. I struggled hard to write applications for my clients, back when there was a population of users tolerant enough to accept me as a consultant. I always found that writing good software was hard work.

And yet...I remember occasional periods when I shifted into a hyperproductive mode, when I worked with something like a superprogrammer's skill. There were minutes, hours, days when I was able to decompose tricky problems effortlessly and quickly map them into properties, events, and methods. The world seemed transparent to me, and I was able to see through to the bones. For glorious hours at a time I was one with the computer. I could do no wrong. It is one of the most glorious, joyful feelings I know.

Jon Bentley, a Bell Labs researcher who deserves the title "superprogrammer" if anyone does, has told me that he experiences similar periods. On a day-in, day-out basis, Jon approaches programming problems with skill and knowledge that humble those of all but a handful of the world's programmers. Yet he too experiences "hack attacks" -- periods, typically late at night, when he is capable of wielding uncommon insights with uncommon speed and precision.

I think we all experience periods of performing like superprogrammers. We all have times when code flows effortlessly, when we write code that is better than we are ordinarily capable of writing.

Artists talk about periods of being "in the flow," of tapping into a muse's power and finding that they have access to creative powers far beyond their own. The phenomenon is not talked about as much in our business, but I'm convinced that it is just as real. I've been in the flow; I bet you have too.

Wouldn't it be something to create a software-development organization in which we spent less time lionizing superprogrammers and focused less on who was responsible for which schedule slippages...and concentrated instead on techniques for helping every member of the staff spend more time in the flow?

IN THE FLOW

I'm serious about this. I think we could make huge progress in making development a more repeatable, reliable, affordable process if we gave the notion of flow some formal recognition. What can we, as programmers and development managers, do to make "in the flow" periods more frequent -- commonplace, even? Could we even turn every programmer into a superprogrammer?

Of course we could. In fact, we're already working on this goal. Software development methodologies, RAD environments, development paradigms, individual tools...we spend a lot of time talking about the tasks they automate for programmers and the time they save, but what they really do is shift our awareness into new modes, give us new ways of thinking about programming problems. Eventually, by turning the problem over and around in our minds, we find an alignment that clicks. We understand the problem in a new way that trivializes it, makes the solution simple and obvious.

The secret truth of the software development industry is that all of our tools are really designed to alter programmers' minds and shift them into hypercreative, hyperaware, hyperproductive states.

Think about the tools you feel most comfortable using. Maybe it's Delphi, whose marriage of objects and components offers a privileged perspective for decomposing problems. Don't your favorite tools give you moments when inspiration and ultrafast thinking are the norm? Isn't that how they became your favorite tools?

So go ahead and read the spec sheets. Justify your tool choices and development methods according to whatever objective criteria are necessary to satisfy the pointy-haired managers who sign the purchase orders. But don't kid yourself. What you're looking for, ultimately, is technology that empowers you with breathtaking new perspectives that lay new worlds of programming prowess at your feet. You're looking to be in the groove as often and as long as possible.

In the end, that's what separates superprogrammers from mere mortals. And because we've all experienced it, we can all be superprogrammers. Why not?

J.D. Hildebrand is a former programmer and a mediocre jazz musician. He currently serves as content director of the Borland Developer Community.


Server Response from: SC3