Yesterday, Jerry Fiddler (founder of Wind River ) spoke to the SDForum on "Envisioning the Connected World" . Jerry was in good form, and he took us on a wild ride through embedded computers, robotics, nanotechnology, genetic algorithms, bio-engineering, religion, the future of humanity and back to inter-connected embedded computers. If it seems like a stretch in these few words, it was astonishing how well it held together.
One interesting comment he made was that a big source of failure in embedded systems is with concurrency. I have had some experience with this and I am not surprised. One of the first thing you learn with programming is how to write for loops and thus how to think sequentially. Once you learn to think about programming sequentially it is hard to break the habit and think about programs in parallel.
Another problem is that in most programming languages, concurrency is tacked on as an afterthought, rather than being integrated into the language. Thus you get a rag-bag of tools, with little guidance as to how to use them rather than a properly thought out set of parallel programming constructs.