it's my opinion that today we unfortunately live in a world that requires some kind of harder problem solving skills from maybe 20% of the population. And I'm being very very generous.
So putting that percentage with the question in the title would give an answer similar to: "Because not every one can do it." DOH, right? I'd say you're wrong since everyone had a problem to solve at least once in a lifetime. So what's the problem? Why is it perceived as hard? Let's take a little trip through your past.
When you were just an infant, what was your biggest problem? Getting fed, changed and burped, right? You cried for a bit and your problem was solved by your caretakers. Then you got a little older and you added playtime to the list (hopefully you could do burping by yourself, and potty training was fully successful). You played with your toys in your little world and could do wonders there. Life was simple. Then you started going to school and all hell broke loose. you started puberty and thought everyone else is an idiot. School ended more or less painless and since this is not a blog about gardening or ballet but about technology and your reading it means you probably went to a science oriented university. Unfortunately 95% of primary and secondary schools and universities aren't driven towards problem solving but towards cramming information. After you finish that and come to work to realize you know nothing about anything in the real world. You get thrown into the harsh reality with stuff coming at you from all over the place all the time. Things just get more complex with more and more parts mixing in unbelievable ways.
And herein lies the beauty of engineering. Since the dawn of time engineering has been about solving problems and not everyone thinks like an engineer. If you remember what you've learned when playing with your Lego's :) or at school at a class called Systems Theory or something similar sounding (if you paid attention and wasn't too tired from previous nights activities :)) you can see the whole concept of problem solving in basically all areas of life comes down to one simple methodology:
Modular Design also know as Black Box Design.
Every single good technical principle today in every single piece of technology that has to work well relies on that simple methodology. Remember this sentence for the rest of your life:
Solutions to big problems are built from solutions to smaller problems.
To do this well you have to have two very important skill sets:
- An ability of Visualization
- A good understanding of the tools you work with
An ability of Visualization
Visualization is necessary because without it you simply can't split your one big problem into smaller parts. Good sense of visualization leads to better sense of abstraction. Abstraction simply means lessening the problem scope. So visualization and abstraction are tied into a continuous circular reference. You visualize a solution and split it into pieces/modules/black boxes. You essentially abstract it into smaller parts.
Like this Renault Clio V6 engine on the left. Smaller parts or modules only have to perform a single task. A single unit of work. If they don't, abstract them further. This gives the ability of module reuse which lessens costs and increases robustness which in turn increases fault tolerance and the lifetime of the final product. To achieve all this a single black box/module has to be deterministic. The output must always be the same for the same input. In other words the inner state of the module is time independent.
With visualization and abstraction comes a sense of beauty. Beauty is one of the the best ways to evaluate how good a solution is. A good solution is pleasing to the senses. It's symmetrical. It simply looks good. And of course it also works good. It's a simple law of nature. Good and beautiful things work better and thus prevail.
A good ability of Visualization means you can design things that will work well, look good and generally be optimal.
A redesign process when you abstract more, keeping the functionality is called refactoring. Consequently refactored solutions are generally better since they are more beautiful which is one of the best indicators of quality.
A good understanding of the tools you work with
Understanding your tools at disposal gives you the ability to develop a solution better, faster and more elegant. You have to know the abilities and limits of your tools. You must also be open to possibilities of new tools doing a better job than the old ones. Don't be afraid of the change. Change is good. But also don't try to solve everything just with a hammer or just with a needle. Combine them.
Pretty picture for easier visualization of abstraction of visualization of abstraction of ....
Let's not kid ourselves. Solving problems isn't a piece of cake. It takes time, patience, care for details, etc... So don't be overly bothered if you don't succeed on the first try. Practice makes perfect and we always have to learn new things.
But the first thing you have to do is:
KNOW AND DEFINE THE REAL PROBLEM!