Orphans Preferred

Contents

Personality Types

Personality Characteristics of Software Developers

Software Demographics

Programming Heros and Ball Hogs

Personality Characteristics of Great Designers

MBTI provides some insight into typical programmer personalities, but it isn't the final word. Many programmers aspire to be great designers. What are the personality characteristics of great designers? One study of designers in general (not just software developers) found that the most creative problem solvers seem to move easily between the S/N, T/F, and P/J distinctions. These individuals move back and forth between the holistic and sequential, the intuitive and logical, and the theoretical and specific; and they are able to look at problems from many different points of view. Leonardo da Vinci and Albert Einstein are examples of such great designers (although I don't believe they ever took the MBTI).

Great designers have a large set of standard patterns that they apply to each new problem. If the problem fits an existing pattern, the great designer can easily solve it using a familiar technique.

Great designers have mastery of the tools they use.

Great designers aren't afraid of complexity, and some of the best are drawn to it. But their goal is to make the seemingly complex simple. As Einstein said, everything should be made as simple as possible, but no simpler. The French writer and aircraft designer Antoine de Saint-Exupéry made much the same point when he said, "You know you have achieved perfection in design not when you have nothing more to add, but when you have nothing more to take away."

Great designers seek out criticism of their work. The feedback loop that criticism supports allows them to try out and discard many possible solutions.

Great designers usually have experience on failed projects and have made a point of learning from their failures. They experiment with alternatives. Their creativity often leads them to dead ends, but they discover and correct their mistakes quickly. They have the tenacity to continue trying options even after other designers have given up.

Great designers are not afraid of using brute force to solve a problem. Thomas Edison worked on the problem of designing a filament for an electric light bulb for nearly two years. An assistant once asked him how he could keep trying after failing so many times. Edison didn't understand the question. In his mind, he hadn't failed at all. He is supposed to have replied, "What failure? I know thousands of things that do not work."

Great designers must be creative to generate numerous candidate design solutions. A great deal of research on creativity has revealed some common themes. Creative people are curious, and their curiosity covers a wide range of interests. They have high energy. They are self-confident and independent enough to explore ideas that other people think are foolish. They value their own judgment. They are intellectually honest, which helps them differentiate what they really think from what the conventional wisdom says they should think.

Great designers have a restless desire to create -- to make things. That desire might be to create a building, an electronic circuit, or a computer program. They have a bias toward action. Great designers aren't satisfied merely to learn facts; they feel compelled to apply what they have learned to real-world situations. To the great designer, not applying knowledge is tantamount to not having obtained the knowledge in the first place.

Programmers live for the "aha" insights that produce breakthrough design solutions. I think this is one reason that software developers' affinity for Monty Python makes more sense than it might at first appear. Monty Python flouts social conventions using extremely unorthodox juxtapositions of elements of time and culture. The same independent, out-of-the-box thinking that gives rise to Monty Python's scripts can also give rise to the innovative technical design solutions that programmers strive for.

People outside software development might think of computer programming as dry and uncreative. People inside software development know that some of the most exciting projects of our times could not be accomplished without the contributions of highly creative individuals. Movie animation, the space program, computer games, medical technology-it's hard to find a leading-edge area that doesn't depend on the software developer's creativity. Software developers know that computer programming gives them a medium in which they can create something out of nothing, an experience that provides them with the same satisfaction that some individuals obtain from sculpting, painting, or writing. "Mind numbingly boring?" I don't think so.

Total and Absolute Commitment

The stereotype of the programmer working 12-16 hours at a time contains more than a grain of truth, however, and the Pony Express ad at the beginning of this chapter could almost describe some of today's software developers. To be an effective developer, you must be able to concentrate exclusively on the programming task. Such concentration exacts a penalty. While concentrating on a programming project, you lose track of time. One morning you look up, and it's 2:00 P.M.-you missed lunch. One Friday evening you look up, and it's 11:00 P.M.-you stood up your date or neglected to tell your spouse you were coming home late. One October you look up and realize that the summer is over and you missed it again because you spent the past three months concentrating on an interesting project. Work can exclude family, friends, and other social ties. Here is Pascal Zachary's description of programmer commitment on the Microsoft Windows NT project:

Work pervades their existence. Friends fade into the background. The ties of marriage fray or rip apart. Children are neglected or deferred. Hobbies wither. Computer code comes to mean everything. If private dreams are nursed at all, it is only to ease the pain of creating NT.

At the end of the Windows NT project, some developers left the company. Others were so burned out that they left the software field entirely. Recognizing this phenomenon, some experienced developers are reluctant to sign up for new projects because they know that they might once again expose themselves to lost evenings, spent weekends, and missed summers.

Developers can avoid this work pattern by adopting an engineering approach to software development. The average project spends 40-80 percent of its time correcting defects. Project teams following a software engineering approach don't create the defects in the first place, or they position themselves to eliminate the defects more quickly and easily. Eliminating 50 percent of the work is one quick way to reduce the work week from 80 hours to 40.

The commitment software developers' have to their projects as compared to their commitment to their companies is unusual. In my experience, no matter how much software developers dislike their companies, they rarely quit mid-project. Workers in other fields might say, "I hate my company. I'm going to wait until right in the middle of the project, then quit. That'll show them!" But software developers say, "I hate my company. I'm going to finish this project to show the company what they're losing, then I'll quit. That'll show them!"

Despite their lack of commitment to company, programmers do seem committed to their occupation. Many programmers feel more loyal to their colleagues at other companies than they do to their employers, and one consequence is that companies have difficulty enforcing nondisclosure agreements. I have observed that software developers routinely discuss confidential company material with colleagues who are not covered by nondisclosure agreements. In their judgment, the free exchange of information between developers is more important than any one specific company's need to protect its trade secrets. As an example of loyalty to colleagues over companies taken to the extreme, consider programmers in the Open Source movement, who advocate that all source code and related materials should be disclosed for the public good.

I think this loyalty to a project, tendency to work long hours, and high need for creativity are all related: once a programmer has visualized the software to be built, bringing the vision to life becomes paramount and the programmer feels tremendously unsettled until that can be done.

Programmers are willing to commit to something beyond themselves-to their teammates, to their projects, or to their colleagues industry-wide. This willingness to make strong occupational commitments bodes well for establishing a profession of software engineering, which can provide a constructive focus for occupational commitment.

________________________________________________________

Software Demographics