This book is a text book that aims to teach students how to program heteroge- neous environments. The book starts with a very important discussion on how to pro- gram parallel systems and defines the concepts the students need to understand before starting to program any heterogeneous system. It als