I have been coding on and off on C and to a certain extent on C++ since my college days(2003), but I never had the opportunity to work with a hard core programming responsibility, which could have taught me "industrial grade coding" better and what is needed really for solving real life problems. To me it looks like I had been coding naive codes, like linked lists, binary trees, and Dijkstra and Kruskal's Algos all these years.

Additionally I feel my academic experience just taught me the language not how to solve real life problems.

So my question is:

* So how did you pick up the art of solving real life problems?
* Any way to shortcut the process?
* Is it only my education or in general everyone coding education sucked big time?
* How often do you have to learn "new things" to solve a problem in a better way. 

For example, though I have used delegates and events for simple windows programming, but my current problem will require a much more in depth knowledge of it, plus I have forgotten most of it. So its as good as new for me. I will have to learn threaded programming and multicore programming. So it gives me an impression-"heck then what did I learn really all these years?"