It's kind of interesting to see so many people comment on "parellel programming" who have never programmed in their lives, but somehow feel qualified to comment on it with authority. How can you know if you're not a programmer.
It's equally strange that people think multi-threaded apps are a new things. It's not, even for the PC. Since the 286 and OS/2, programmers were writing threaded apps. Why with a uniprocessor? For one, there are good programming techniques with regard to the interface. You always want it responsive. Microsoft, naturally, doesn't do this well, because you get an hourglass. But, let's say you run a business App, and you need to do a search in database. Bad programmers would go get the data and make the person wait. Good ones would spin that off in a thread, and keep the interface active for the customer, even if to just tell them you're retrieving data and give a rough idea of where you are with it. Or, you can even let them do some work while they wait.
Also, sometimes programs are waiting for a hard disk. You don't want your processor stalled for that if there can be more work done. So, you spawn a thread for that, and do other work with the processor, if possible.
Also, there were multiprocessing systems for many, many years. This is nothing new.
But, the main thing is, it's not a universal solution. It's not just retraining, or putting more effort into it. Some things are actually SLOWER if you do them in parallel, because the over head of synchronization is damning. You also use more memory, which lowers cache hit rates, also lowering performance.
It's also not always about which is faster, it's which the user prefers. If I write a multi-threaded app that's slower than yours by 10%, but it keeps the user informed, and able to see what's going on, and they prefer it, then it's still a better way to do it. At the end of the day, you want the end user to be happy, and everything else is a means to that end. One time I even spawned a dialogue box that asked if the person wanted to play a quick game, if I knew the computer was going to be busy for a long period of time, and there wasn't much else to be done. It used up resources, but the users "felt" like it didn't take as long. The human element is always an important one. People much prefer to click on a button and have it say that you're running this or that, at the moment, than have their app freeze with an hourglass where they can't do anything. It's not that different, but people like it much better. They still feel in control of the computer, not the other way around.
So, stop hoping for the impossible. You'll see more optimizations, but it's not that programmers suck (although, honestly, most do), but there are very defined limits to what should be, and what shouldn't be parallelized.
Hardware companies are going this way because they're having a terribly difficult time increasing serial performance, which is much more universally useful. It's not because it's a better approach, it's just the more feasible one now because increasing serial performance is so difficult.