Describir: Patterns for Parallel Programming