views:

566

answers:

8

A friend of mine was given a fairly cryptic assignment for a software design class, using a quote from Bruce Lee as the basis:

"Be like water making its way through cracks. Do not be assertive, but adjust to the object, and you shall find a way round or through it. If nothing within you stays rigid, outward things will disclose themselves.

Empty your mind, be formless. Shapeless, like water. If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot it becomes the teapot. Now, water can flow or it can crash. Be water my friend."

Explain how these quotes apply to good software design.

It could be a metaphor for elegant OO design where objects can assume many forms. Or he might be talking about designing software that conforms to the user and doesn't get in the way of the user experience. Or maybe he's just a rabid Bruce Lee fan and enjoys watching his students struggle to figure out what he's thinking.

Where do you think he's going with this?

+2  A: 

What about polymorphism? Call a function with one argument, it does one thing but, call the same function with two (or three, or four, etc.) arguments and it can do something else altogether.

Stephen
+7  A: 

Water renounces its own shape to fit what surrounds it. Good software must renounce its paradigms to fit the problems it must solve. This Bruce Lee quote is the opposite of Architecture Astronauts.

Ovidiu Pacurar
I agree. The relevance is, don't bring your patterns to the problem, but analyze the problem and let it shape your approach.
fenomas
+2  A: 

Good software design allows the flow of the programming to run unimpeeded.

You're designing software with one goal in mind: to write code. When you write the code, the goal is to forsee any problems during the design stage, and adjust to allow for re-use, and simple implementations. The more defined and elegent the interfaces between components is, the less work it will be during the implementation.

The final goal is to produce readable software that can be extended and improved. During design, try to imagine extensions to the software, and attempt to integrate them in your mind. If you find yourself swimming upstream and drowning, then you need to re-design, and allow the water to flow into the shape of your intentions.

Hope this helps =)

Kieveli
I disagree: You are not designing SW with the goal of writing code. The goal of design is to produce a program, writing code is only one step on that way. (Ok, it *is* the step that is the most fun).
Treb
+3  A: 

I think Generics fits the description.

Salamander2007
+10  A: 

Be Agile, Be Adaptive, Be Fluid.

Do not plan/code too much ahead which leads to rigidity. Do and be just in time.

Be ready to change your design/code/whatever as required by your stakeholders/end-users.

Ingenutrix
A: 

I can't believe no one said this, but the dude is obviously talking about the Waterfall approach to software.

MusiGenesis
Very funny! But most definitely wrong, so I can not upvote it :-(
Treb
A: 

k. I know most people here are looking at philosophies, or design concepts, and it probably that, but in case it's not here is some things that aim lower.

  • Prototype**less** functions.(polymorphic functions)
  • dynamic variables
J.J.
+1  A: 

Yawn, I'm so tired of software people using tacky pseudo eastern philosophy to tart up their design philosophy. Software dojo this, Shibumi that, The Zen of Foo, The Tao of Foo,

Not to mention most of the signatories of the agile manifesto being some of less agile looking human beings around ...

Enough already. Software is not martial arts.