A Design Methodology for Parallel Programming