On Programming: Lateral vs. Vertical Thinking
This is an issue that I personally deal with almost every day: How developers approach a programming problem from the standpoint of THINKING.
I bring this up because recently a co-developer asked for my help with overriding a base class property in an RSS library, and it turned out that the version of the library he was using was, more or less, defunct. Yet this individual doggedly continued to try various ways to override a base class property of type Image that returned a string, and wanted to try to coerce this in some way (programmatically) to return a different type without having to disturb the base class library. This was ostensibly because the base type was already baked into a production application that used it, and he now wanted to be able to modify it without changing the base class library.
Sound familiar?
We, as programmers ("Developers", if you prefer) -- are paid to THINK. The way we think has, in great part, a deterministic influence on what we produce -- how innovative it may be, how well - suited to the problem domain, and how effective and profitable our efforts may be to the end user. That end user might be your boss, or your company, the customer, or the general visitor from the Internet, as the case may be.
Many programmers simply have not learned how to THINK. Thinking is a science, and it can be learned through study of the right materials. Comprehensive thinking is simply NOT something that you are born with. You actually have to study and learn correct thinking strategies.
Vertical Thinking
Americans have a great propensity to use only vertical thinking techniques -- or logical / critical thinking. You could characterize vertical thinking as continuing to dig a deeper hole to try to get under a fence. It's tunnel-vision, characterized by a somewhat rigid, resisting change "this is how we solve problems" development process.
Lateral Thinking
Lateral Thinking is:
- seeking to solve problems by apparently illogical means
- a process and willingness to look at things in a different way
- a relatively new type of thinking that complements analytical and critical thinking
- a fast, effective tool used to help individuals, companies and teams solve tough problems and create new ideas, new products, new processes and new services.
- a term that is used interchangeably with creativity
Lateral Thinking, a technique pioneered by Dr. Edward De Bono, is a way of thinking that seeks a solution to an intractable problem through unorthodox methods or elements that would normally be ignored by logical thinking.Edward de Bono divides thinking into two methods. He calls one 'vertical thinking' that is, using the processes of logic, the traditional-historical method. He calls the other 'lateral thinking', which involves disrupting an apparent sequence and arriving at the solution from another angle.
When you are faced with fast-changing trends, fierce competition, and the need to work miracles despite tight budgets, you need Lateral Thinking. I began studying and practicing lateral thinking techniques over 20 years ago, and I continue to find myself going "back to the Master's teaching" on a regular basis. Over 20 years ago, I once checked out from a library (and never returned) one of Dr. De Bono's first books, the dog-eared copy of which remains in my library.
I'm not going to launch into a dissertation on why you should study Dr. De Bono's (and others') Lateral thinking techniques -- you can find plenty of good material, including audio books by De Bono and others, quite easily.
However, I will say this: Lateral Thinking techniques are proven to result in innovative new concepts in business and software development, and if you are not familiar with them, you owe it to yourself to devote some study to learn about the techniques.
A good place to start is De Bono's "Six Thinking Hats", which is available on audiobook (mp3) and in print.
So, putting on my Green Thinking Hat, I suggest we need to spend more time studying how to creatively come up with ideas for this solution.
a technique that works particularly well for me when faced with something complex, is to force my self to come up with 2 or 3 different solutions, that usually leads me to think of even more solutions, which finally get me to what I consider the best
ReplyDeletea big problem with developers is when they get in to the "is not possible" mindset, at that point, they're screwed
One technique we’ve been fortunate enough to be exposed to within our organisation is NLP (Neuro-Linquistic Programming). There are some really helpful processes within there (such as “chunking up”) which help you to analyse problems from different perspectives.
ReplyDeleteAnother argument on the topic is around how self-empowered individuals are to consider all the alternative solutions to a problem. Recently I’ve seen a particular large outsourcing vendor argue that their coders are there to produce work “on spec” and the type of lateral thinking you’ve mentioned falls outside of their responsibility. Bad approach, no doubt, but an interesting observation on the issue.
Yup. Paragraph 2 is a perfect example of -gasp- vertical thinking!
ReplyDeleteHere are some things that work well for me. First, ask questions. Analyze your problem by looking at it and asking what you're trying to accomplish, how it's being done now, what are the core principles behind the problem, etc. Next, use abstraction to find points of similarity between your problem and other problem/solution combinations in programming, or the "real world". Often analogy is an appropriate tool for this. Finally, jot all your ideas down on paper -- all of them, not just your "good ones". When you're finished, looking back through your list can often spawn new ideas, or help you filter out the solutions that really matter.
ReplyDeleteWhy don't you return the book that you "borrowed" from the library (even though it was 20 years ago)? Or better yet, why not buy the library a new copy? If you've gotten so much value from the book that it was worthy of stealing, it's time that you pay back the favor. Not everybody has access to your blog (or UnBlog)!
ReplyDeleteThanks!
Heh. I didn't steal the book, I just forgot to return it. Last year, I donated a whole computer and monitor to the library system.
ReplyDeleteIt's probably a good thing that not everybody has access to my UnBlog.