The goal of this research is to make massively-parallel computers easy to program. This means that the natural users of these machines; scientists and engineers working on large-scale, state-of-the-art research, as exemplified by the Grand Challenge Problems routinely exploit these computers as a research tool. The problem of programming massively-parallel computers is attacked from three directions: (1) collaborating with computer architects on shared-memory architectures that facilitate programming and compilation, (2) developing new parallel languages that permit more natural expression of parallel algo-rithms and the techniques to implement them, and (3) building performance evaluation and debugging tools to help programmers to understand and increase their program's performance and correctness.