Is Parallel Programming Hard, and, if so, What can you do about it