that's not so true for multi-threaded problems. newbies are likely to create bugs that only show up under heavy load and are nearly impossible to recreate and debug. it was enough to scare me away from multi-threaded programming for many years.
now i know that the solution is extreme discipline. don't share objects between threads, create locks sparingly, have threads communicate with each other only through queues or other well-defined interfaces, etc.
but my knowledge of the subject is pretty old-skule. every now and then i read something about memory barriers, lock-free programming methods, and so on, that make me think other people might have a better way.
Essentially, in Professor Vishkin's model the program alternates between parallel and serial mode as needed. Under the hood, it is determined what processors handle what threads etc.
Have a look at: http://www.umiacs.umd.edu/~vishkin/XMT/index.shtml.
Parallel will be to serial, what the car was to the horse.
"Given that Erlang programs are naturally written in a concurrent manner, most programs require no modification at all to take advantage of SMP."
With some work on its string handling and "talking to the rest of the world" stuff, Erlang could be really awesome.
There are a number of Common Lisp implementations that support MP, often on only some target OSes, and there are a number that don't. To my knowledge, (I'm not a Python hacker!) vanilla Python doesn't support MP, whereas I suspect that JPython and IronPython support the MP infrastructure that their underlying VMs provide.
Software written for green threads may often fail mysteriously on OS thread implementations. Likewise, green-threaded software may need explicit scheduling, which code written for OS threads will generally not be doing.