While the performance of supercomputers has increased dramatically during the last 15 years, programming models and programming languages have more or less remained constant. Two de facto standards, the Message Passing Interface (MPI) for programming distributed memory architectures and OpenMP for programming shared-memory architectures still dominate the field of computational science and engineering. As current supercomputers are constellations with symmetric multiprocessor nodes that are coupled by high-speed inter-connects such as Infiniband, hybrid versions OpenMP/MPI have been introduced. From the programmer’s point of view, this is rather complicated and the resulting software productivity is not at all comparable with corresponding practice of commercial software elsewhere. While today’s desktop computers are already parallel systems, this effect will be even more accentuated in the coming years. Extrapolation from the current TOP500 list tells us that a desktop or laptop computer will have more than 1000 processor elements in 10 years from now. Thus, in order to use computers efficiently, all programmers today have to address parallelism issues.