Hacking <-> Brawling
Over-ritualized software development <-> Over-ritualized martial arts styles
The goal in martial arts study is to achieve a balance between brawling and a purely scientific fighting style. The goal in software process study is to achieve a balance between hacking and excessively formal development style.
Arguably, the goal in martial arts study is to make sure you are the last one standing, and the goal in software process study is to make sure that you are producing the best code you can as fast as you can. The balance in nothing more than a strategy to meet those goals. -- RobMandeville
There is something more to the following discussion than just MartialArtsAsSoftwareDevelopmentMetaphor
. Something more about learning any skill to a very high level. I'm not sure yet how to title that though. -- JasonYip
The Chinese call that Kung Fu.
Originally from XpMailingList
"Before I started martial arts, a punch was a punch and a kick was a kick. When I started martial arts, a punch was no longer a punch and a kick was no longer a kick. When I understood martial arts, a punch was a punch and a kick was a kick." -- BruceLee
Another thing that Bruce Lee talks about is how there needs to be a balance between the natural and the unnatural in martial arts. If you're purely natural, you're unscientific but if you're purely unnatural, you're a robot. The goal is to achieve a natural unnaturalness or an unnatural naturalness.
Which leads to the analogy...
In software development, if you're purely natural, you're hacking but if you're purely unnatural, well let's face it, you're doing PSP. The goal is to achieve a more disciplined form of hacking with concrete feedback OR achieve a more relaxed form of scientific development. -- JasonYip
Jason, I think you're on a great truth here, that we all need reminding of. When we learn a thing, it feels unnatural and awkward. Then one day we are just doing it and it feels so perfect and natural. Then one day we get careless and it doesn't work, and we don't know why.
There is this need for mindfulness, observation, of what we do, all at the same time with smooth natural execution, that's the real thing, the real mastery. For me, I have to be very calm, fearless, almost detached to perform at my best.
I'm sure this is about the Courage value - and about the need for management to make courage possible. And I feel strongly that the essence of "40 hour week" addresses this as well, providing an essential calm space in which to excel. -- RonJeffries
Wow, Ron. Your first paragraph above fits exactly with my experience as a young pianist. Carelessness is one cause of decline, and emotional stress is another. I believe that to wield our talents to our best, we are using circuitry that's all linked up to our feelings. To cut off the feelings altogether, we would lose the talent, and that's no good. But to ride out the minor emotional or other disturbances, we need a light-handed assist from the intellectual side. Let's call that discipline
. The thing about learning anything is that you usually exaggerate it while learning. Discipline is no exception, but exaggerated discipline is scary because it looks like it wants to kill creativity. I think this effect is a major reason why so many of us reject things like CMM and PSP, instead of embracing them, then learning to let go of all that's not actually needed. -- WaldenMathews
's "XP is hacking" rant:
"I have a little rant I do sometimes about how XP is just hacking. Well, first the customer tells you which two weeks to hack on first, but then it's just hacking. Well, the iteration plan breaks down the functionality into tasks, and during the breakdown you discuss a lot of analysis and design issues with the team, but then it's just hacking. Well, ..."
XP is the natural (hacking) balanced by the unnatural (XP practices) or the unnatural balanced by the natural. The point of view that is appropriate depends on whether you started from CowboyCoding
or the CapabilityMaturityModel
. -- JasonYip
Some time ago in CodeAndFix
project with a supposed be design. Always blaming that they didn't had any correct specifications from the customer.
I was trying to convince my fellow colleges to use XP in our failing project. One of them made a joke about XP, said that it was better called "QualityHacking?
". After some time, realized: "Xp is QualityHacking?
Negative sense: Ad hoc, just producing code, no design. But what the heck? The result is good and that' the only thing that matters. Nobody can argue that.
Positive sense: Hacker the ones who had made the internet possible who is creative, respectful and correct as in hacker ethics.
If the Martial Arts are a good metaphor for software development, then XP is drunken boxing. (Lurch around all over the place, hope nothing sticks to you, don't bother with a plan.)
Perhaps the *Marital* Arts are a better description, since in most organizations doing in-house development, you are 'married' to 'the business' or 'the users'.
After all, when the 'dirty deed' is done (ie project is finished), you still want to have a relationship with these people (ie still be employed). Unless you are a contractor or architect (one night stand? gigilo???)
Maybe as software developers we should buy the marketing people flowers and chocolates a bit more often (or maybe they are like the mother-in-law, not *technically* part of the process, but you need to live up to their expectations or things will be rough etc).
An extremely important aspect of martial arts is that the purpose of the years of hard training and study, is to leave the practitioner in a state in which their mind is both completely focused and empty when performing kata (predefined sets of movements) or kumite (sparring). The moment you engage your brain consciously (at these moments) you have lost.
One sees the same state in all forms of expertise whether it be playing the piano, 100m running or any other form of activity. -- ChanningWalton
I have to disagree. I, personally, see lots of visual stuff, both when I code and when I spar. Graphic representations of what I want to do. I don't hear little voices talking to me. I think that internal voice is the biggest toe-stubber. -- CHergerThomann
Not sure where "little voices talking" was parsed from. I don't think it's about not being conscious. I don't want to be completely in a MentalStateCalledFlow
. When I'm sparring, I'm having a conversation with another person and I am very conscious of him/her. I don't know what's going to happen nor how I will respond until the moment comes, which means that I have to be mindful and yet to execute naturally and confidently I can't be concerned about how to execute a particular technique. In its essence, I'd say that in martial arts, the opponent is your customer. It's not about what I want to do but rather what I do to respond to what the customer requests. -- JasonYip
The "little voices" were just one form of consciousness I thought of when I read the paragraph. I simply took some exception to the idea of making the brain empty. Untroubled, perhaps, but not empty. When I design, code or spar, I am very actively thinking about what is going on. It's just that I use graphics, not words. So I was making a trivial attempt to explore what kinds of mental activity might cause the stuttering of the flow. -- CHergerThomann
Hmmm...perhaps I have been misunderstood. I didn't mean empty and devoid of all thought. I guess I was trying to say what Jason put more elegantly above. -- ChanningWalton
Obviously we write our best code when completely focused on the task. I took up XP at the same time as I took up Zen Meditation. Zen requires absolute focus on your breathing, and then you can watch your mind at work. However, there is also the practice of "Mindfulness" when performing some activity. Much of Martial Art philosophy is based on Zen, so the connection can also be made with software development activities. Here is one of those famous Zen sayings that seems very appropriate, "When you do something, you should burn yourself completely, like a good bonfire, leaving no trace of yourself." I have tried this "Zen Coding" method and it works for me! :-) All it means in practice is to clear the mind of distraction and avoid having an agenda about the code being written. Just write code to solve the immediate problem. -- AlexHunt
In my experience as a competitive martial artist (mostly in sparring), I found that I could not actively use my brain to drive the "tactical" operations such as blocking, striking, etc because doing so would take too long. But my brain was fully involved in the "strategic" operations such as analyzing my opponent's weaknesses, trying to corner him, etc. I think the same approach is meaningful in software engineering. A good software engineer should be able to whip up a sorting algorithm with little thought. However, careful thought should be applied to developing the interface to the sorting module so that it is reusable and it fits in with a larger architecture.
Is there a reason why nobody yet considered martial arts simply as a way to get in touch with somebody else, and exploring opportunities and challenges together? Doing so gives you a chance to apply martial arts to communication between persons in general, or specifically between members of software teams or developers and customers. As a scrum master, I am hugely benefiting from my Tai Chi Chuan/Pushing Hands experience. -- Birger Lehmann