This course discusses introductory and selected intermediate topics in MPI programming. We base this presentation on two simple examples and explain the MPI parallel development of them. The first example encompasses MPI initialization and simple point to point communication (which takes place between two processes). The second example includes introduction to collective communication calls (where all active processes are involved) and options for effective data communication strategies, such as derived data types and packing the data. Some ideas on more advanced MPI programming options are discussed in the end of the talk.