I just found an article on Lifehacker about Creative Thinking processes. There are many processes that promise to generate creativity in the form of ideas and solve problems. The most basic of which is (I suppose) brainstorming, but there are complex methods like Triz.

The 4 stage Creative Thinking process described is quite simple. You immerse yourself in the context of the area (or problem space). Then you leave it and relax. Ideas will then flow to you!

This process is sound – when writing software, I found that working on a problem to the point you cant get further (Step 1 – immersion) followed by a trip to the coffee machine, a walk or trip to the loo (Step 2 – Incubation) usually leads to Step 3 Illumination. The third step invariably occurs at inopportune moments like the middle of a lunch break, middle of the night, etc. The issue being that there is a big gap before being able to implement the idea at step 4 (Verification).

I believe the subconscious is at work here – this is why thing usually occur to us when resting. Many people follow the process without realising it – they work on something to the point of frustration, then take a break and the work out how to solve it. Unfortunately, again in software, there is an a side-effect of this process that I would refer to as the “recursive re-factoring effect”.

For the uninitiated,  Re-factoring is a process where code written to a design is re-written to take advantage of a better design usually as part of an iterative object-oriented development.

recursion

recursion (Photo credit: Sidereal)

A recursion is structured programming technique whereby a piece of code refers to itself. To avoid an endless (or bottomless) recursion, there must be an end.

Following the problem solving process described, a software engineer can work on a problem, and perhaps after taking a break, return to solve it in a non-optimal way. After another break, he realises that there is a better way to solve the problem and goes on tinkering in this way indefinitely.

The pseudo code here may not be a perfect implementation of the algorithm, but you get the drift. Its been a while since I actually wrote any code:

function SolveProblem( Problem p; ){
  while ( !frustrated ){
    solution_context = WorkOnProblem( p );
  }
  inspired_solution = TakeBreak( solution_context ) ;  //implementation stage - go for recursion!
  SolveProblem( ImplementSolution( inspired_solution, p ) ) ;
}

As can be seen this is effectively and endless recursion as there is no way out. The engineer goes on solving an infinite series of problems which require further and further optimisation. This is where engineers and developers get accused of “gold plating” by the project managers and there is a guard around the recursion like this:

if ( Time&&Budget&&CommonSense ){
  SolveProblem( ImplementSolution( inspired_solution, p ) ) ; 
}
Advertisements
Comments
  1. […] Aikido. Sometimes a break from something can help to reinforce understanding. See my post on creative problem solving. In the engineering world, this can lead to gold plating and wastes of time, effort and money. My […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s