The Message Passing Interface (MPI) was developed over eighteen years ago and continues to be the preferred programming model for scientific computing. Contributing to that success was a combination of forward-looking features, precise definition, and judgment based on the experience of developers, vendors and users. Today, MPI continues to adapt to the changing needs of parallel programming, with MPI-3 introducing enhancements for collective and one-sided communication, multi-threaded programming, support of performance tools for MPI programming, etc. However, MPI faces many challenges as the nature of parallel computing changes more radically than at any time in the history of MPI. This talk will touch on some of the less obvious but important reasons for MPI success, discuss some of the challenges that MPI faces, and makes suggestions for future directions in MPI and parallel programming language research.