Schools of Thought
Posted by Uncle Bob on 10/03/2007
In some sense we software developers are all too tolerant. We know there is no single “right” way to write software, and so we tolerate many different opinions and styles. In the industry at large, this is a good thing. But inside a project it’s chaos.
A project with 10 different developers cannot withstand 10 different styles of coding, 10 different architectural visions, 10 different philosophies of OO design, or 10 different software development methods. To prevent the chaos of anarchy, one style, one vision, one philosophy and one method must be adopted.
The problem is, we know that no one style, vision, philosophy, or method is “right”. This knowledge makes us timid. We tolerate other people’s styles and attitudes rather than insisting on a single style and vision for the project. We feel that we have no right to insist on one particular way of doing things, and so we adopt a politically correct viewpoint regarding software.
Politically correct projects are muddles. They find it difficult to get traction because the team members are all pulling in different directions. This muddling continues until someone puts a stake in the ground and says “We’re doing it this way”, and makes it stick by sheer force of will. Then the team moves on and makes progress.
Was his way right? The question is irrelevant. The stake in the ground provided focus. It eliminated the chaos of too much “rightness”, of too much political correctness.
There are many different schools of martial arts. Karate, Tai Kwon Do, Jiu Jitsu, Judo, etc. Which is right? Of course the question is absurd. Right and wrong are not adjectives that apply to individual martial arts. And yet, each martial art attracts dedicated adherents. The intensity of their devotion to their art is almost religious.
Students of Karate have no rational reason to prefer it to Tai Kwon Do. Indeed, the initial decision to study one vs the other was almost certainly arbitrary. Perhaps there was a Karate studio near their home. Perhaps a friend invited them to a session. Perhaps they saw something on TV, or in the paper. In most cases the initial decision was trivial.
But that’s where the triviality ends. From then on the new student gets immersed into a set of styles, disciplines, philosophies, and methods to the exclusion of all others. There is no political correctness at this level. Teachers tolerate no dissent from their teachings. It’s the Sen Sei’s way, or the highway. Within a dojo, there is a right and a wrong.
At a larger level, everyone knows that no one martial art is clearly better than all the others. There is no “right” school of martial art. And yet, students invest huge efforts into becoming masters of one particular arbitrary discipline.
Why would a student focus on one particular school of martial art to the exclusion of all others for years of his or her life? Simple. To become a master. You can’t become a master of all martial arts at the same time. You have to separate and focus. You have to dedicate yourself to one and learn it inside and out. You have to be politically incorrect. That’s how you gain mastery.
Once a degree of mastery is attained, it becomes beneficial to study other martial arts. A karate black belt will find it beneficial to study Jiu Jitsu, or Akido. The Judo black belt will gain insights into his own art by studying Karate. So, at the level of the master, political correctness and tolerance is re-established.
There are many diverse attitudes about software. For example there are many different kinds of agile methods. Indeed, there are methods that aren’t agile at all. There’s the American vs the European style of OO. There’s functional vs OO vs procedural programming. There are those who practice hungarian notation. There are those who practice test driven development. There are those who believe in C and C++ and those who believe in Ruby. None of these attitudes and preferences are right. None of them are wrong. But without some kind of organizing principle, like a dojo, or a Sen Sei, they are chaos.
There has been a lot of talk about certification lately. Companies need to know if the people they hire are good developers or not. The problem is, there is no standard of certification. There is no right or wrong, and so there’s little to certify. We can certify that someone took a particular course, or that they have certain knowledge of C++ or Java. We can measure someone’s ability to read a book, or write a dumb example program. What we cannot do is certify whether someone is a good developer or not, because we don’t have a definition of “good”.
The different schools of martial arts have solved this problem of certification quite effectively. No school will certify that their student is a master martial artist. But they will certify that they are a master of one particular discipline. You cannot be a general black-belt, but you can be a black-belt in one particular school of Karate.
The award of rank is not based on a casual test, or the taking of a two day course. It is based on months of exposure and participation in practice sessions. It is based on the teacher’s intimate knowledge of the student’s skill. What’s more the teacher’s right to convey rank is based on his teacher’s authority. Thus, there is a chain of trust from teacher to teacher.
I don’t know if a martial-arts ranking system could ever be established in software. The problems seem significant. For example, how would teachers gain the kind of prolonged access they’d need to bestow ranks on students?
However, I do think it’s possible for experienced practitioners to put a stake in the ground and establish a school of software discipline. In effect the practitioner says: “I’ve done it my way, and it worked for me. I’ll teach you my way, perhaps it will work for you.”
Such a school would be precise and exclusive. Students would adopt a certain coding style, a certain philosophy of design, a certain architectural vision, and a certain set of methods and practices. They would adhere to those certain teachings to the exclusion of all others until they mastered them.
Comments
Martin Vilcans 1 day later:
Good post. I agree with the need for someone to say “We’re doing itthis way”, but running a development company like a dojo would be difficult in the real world. For once, it would be very difficult to find good masters. I’ve been a professional software developer and engineer for 12 years, and an amateur for more than that, and it’s only during the last few years that I’ve grown confident to put a stake in the ground and say “this is important about architecture, this is how the code style should be, this is how the process works” etc. In most projects I feel pretty alone having any strong opinion of these subjects. Still, I feel that I’m far from being the wise master that they depict in the martial arts movies; the one that has an answer to any question and an opinion without any logical flaws or need for changes. So how do we find these masters? Where is the Mr Miyagi of software engineering? I certainly haven’t met him.
Out of curiousity: What do you mean with the American and the European style of OO?
Anthony Moralez 1 day later:
Five Days of Software Development with Style and Grace, put on by Ron Jeffries and Chet Hendrickson, this past June sounds like a step in the direction you’re proposing.
Peter Wood 1 day later:
From Robert Pirsig’s ‘Lila’:
‘Good is a noun. That was it. That was what Phaedrus had been looking for. That was the homer over the fence that ended the ballgame. Good as a noun rather than an adjective is all the Metaphysics of Quality is about. Of course, the ultimate Quality isn’t a noun or an adjective, but if you had to reduce the Metaphysics of Quality to one sentence, that would be it.’
Nigel Cheshire 1 day later:
I couldn’t agree more that leadership is needed to put the stake in the ground and adopt a common set of standards in any team. The problem is, the schools might take many years to develop to the same extent as they have in the martial arts.
It seems to me that, in the mean time, it’s the responsibility of the dev manager, or perhaps senior architect, to define the standards for a project. It may be that many of them, rather than trying to be politically correct, don’t have the self confidence to take that stand.
Michael Feathers about 16 hours later:
I don’t know much about dojos (I’m more of an ion pumper than an iron pumper), but it seems that there’s a difference between having a “school” of practice, i.e., this is the way that we fight, etc., and this is the way that we do it at our company to have a standard. The thing that bothers me about the former is that it could approach dogma if people are not too careful.
It seems that there’s a difference between adopting a common standard, with regret (because we all know that practice evolves) and codifying a school where particular elements of practice are, in some sense, enshrined. Look at the angst that the Scrum community had/continues to have over sprint length.
Nathan Henkel 12 days later:
@ Martin Vilcans,
I think the way you find the masters is by being one. Someone has to step up and say “This is how it should be done”-why not you? If no one challenges you, then at least there will be a cohesive vision centered around your philosophy. If someone does challenge you, you fight for what you believe is the right way, and the master(s) will emerge. On any given issue, one of you will prevail-either by convincing the challengers, or by winning the approval of the developers at large. The masters will be those who can both fight for their own ideas, and accept it with humility when another idea is accepted, and then fight for that idea.
The interesting thing is that you probably can’t become a master by trying to be one—that is, by trying to be the one whose ideas are accepted. If you go about it that way, you’ll be perceived as the sort who can’t ever admit it when he’s wrong. You can’t try to be one, you just have to start being one. The master fights for a clear vision of the way, the pretender fights to be perceived as a master.
Martin Vilcans 15 days later:
@Nathan: Well written! I agree.
Martin Vilcans 15 days later:
@Nathan: Well written! I agree.
psn card over 2 years later:
Hah,that was really funny. I even ordered an essay paper on it.These online essay writers made an excellent essay for me.
Criminal Records over 3 years later:
It seems to me that, in the mean time, it’s the responsibility of the dev manager, or perhaps senior architect, to define the standards for a project. It may be that many of them, rather than trying to be politically correct, don’t have the self confidence to take that stand