The situation isn't quite as simple as you think...koneko wrote:it just make me sad though, to see more CPU power coming at us, and less smart programming. why would software developer bother with a better code when a 16-core is over the corner. . . .
For years, software developers had a "free ride". They were basically assured that as the speed of chips increased, their software would automatically run faster, and they wouldn't need to make significant changes to their code to benefit from these performance boosts.
However, the times, they are a' changin'. CPU clock speeds are not increasing at the rates that they did in the past. Instead, emphasis on SMP (multicore/multiprocessor, that is) architecture is dominating the market, and it's frankly a good thing, because eventually CPU chips will reach a physical limit of how much data they can move around anyways. Transistors can only be made so small, after all. The next logical step isn't to make faster chips, it's to make more intelligent chips that can harness the power of parallel communication... that's how the human brain works, after all... many millions of small, relatively slow processing units all working together in a neural network.
That being said, these architectural changes mean quite a great deal of work for software developers. In order to take advantage of multicore architecture, a program needs to be threaded, meaning that it spawns out several smaller sub-processes each in charge of doing different things. The rub is, when you have many dozens of threads, it's a real challenge to keep them from stepping on each others toes. To make matters worse, a software developer really has no idea how these threads will interact on a system once their software is running... it's up to the OS to decide how they will be scheduled, so finding bugs that occur between threads becomes a very difficult task.
So, devs have a few large problems that haven't really been fully addressed. First of all, there are no widely adopted, cross-platform threading solutions on the market. Each OS and programming language offers a wide variety to choose from, some offering better performance than others. I think that the larger problem is that many students are not properly trained in writing multiprocessor compatible code... this is often taught as an "advanced topic" in most programming classes, meaning that it is saved for the last week or so of the semester after everything else is said and done.
In the next five or so years, we will see a major shift in programming paradigms... multicore programming will no longer be seen as an "extra feature" of programs; instead, it will be implemented in almost all programs, and multicore programming will be given a much greater degree of attention in computer science education. This is the root cause of the lack of "smart programming", and I believe it can only be solved first by a greater degree of community consensus (ie, native support in more programming languages for threading) and then education.
Also, as long as I'm making random predictions, I'll bet you dollars-to-dimes that we will see 4-core laptops within 2 years, max.

Anyways, sorry to go on such a rant about this, but this topic has probably been the most debated and problematic thing I've had to deal with at work for the last year or so.
