Falacy 3 Programming can and should be egoless.
There once was the first software engineering best-selling book. It was called The Psychology of Computer Programming (Weinberg 1971). There was a peculiar idea contained among the many excellent ideas of that book. It was the idea that the task of programming should be egoless. Programmers, the author said, should not invest their ego in the product they were building. There was, of course, an excellent reason for the author to take that position. Too many programmers, this author was saying, get so ego-invested in their product that they lose all objectivity. They see error reports as personal attacks. They see review sessions as threats. They see any questioning of what they have accomplished as being counterproductive.
What's the alternative to an ego-invested programmer? A team-player programmer. The team player sees the software product as a team effort and a team achievement. Error reports and reviews and questions become team inputs to help improve the product, not threatening attacks to derail progress.
It's hard to argue, at first glance, with the notion of the egoless programmer. Certainly the defensive programmer, caught up in his or her ego, is not open to the changes that he or she inevitably must make to improve the product. But after further thought, this notion begins to unravel. It is all well and good to advocate egoless programming, but the fact of the matter is that human ego is a very natural thing, and it is difficult to find people who canor even shoulddivorce their ego from their work. Contemplate, for example, the notion of an egoless manager. That idea, of course, is preposterous! The ego of the typical manager is the driving force that makes him or her effective. We can no more divorce ego from the average programmer, I would assert, than we can or should divorce it from the average manager. We can strive, however, to keep that ego under control.
Even Jerry Weinberg, the author of The Psychology of Computer Programming (1971), has revisited the notion of egoless programming in recent years because he has realized that it is controversial. He still believes in what he was trying to say in 1971; he believes that those who oppose the notion are taking it all too literally. It is hard to disagree with the good things that can emerge from separating ego and the programmer. Team approaches, in the form of reviews and inspections and the once-lauded chief programmer teams and perhaps even Extreme Programming's pair programming, are generally seen by many as better than their alternatives. And programmers really do need to be open to critique; the fact that we cannot write error-free programs, hammered home so many times in this book, means that programmers will always have to face up to their technical foibles and frailties.
But still, there must be some middle ground here. One of the reasons Communism eventually failed is that it assumed that we could all accept the philosophy "from each according to his ability, to each according to his need." The assumption that we could all subjugate our needs to those of others is about as faulty as the assumption that we can subjugate our egos for the betterment of the team. A system that works will have to acknowledge fundamental human traits and work within the bounds they create. And ego is one of those traits.
Weinberg's book, listed in the following Reference section, is a classic book. Don't let my disagreement with the notion of "egoless" deter you from reading it and the many excellent subsequent books that Weinberg has written. (A Silver Anniversary edition of this book was republished by Dorset House in 1998.)
Weinberg, Gerald. 1971. The Psychology of Computer Programming. New York: Van Nostrand Reinhold.