The objective of this course is to teach computational STEM students the fundamental concepts of design and analysis of algorithms for modern computing systems, including network-based fine-grained parallel computers, shared-memory computers, general multi-core and multiple processor systems, GPU-based systems, clusters, grids and clouds. The first part of the course will focus on the introduction of these computational models, as well as the traditional von Neumann architecture, and methods of analysis. The second part of the course will focus on fundamental computational paradigms and their implementation on a variety of modern computational systems. Much of the analysis will be considered in terms of running time, size of data, number of processors/cores, and interconnection networks, to name a few. Asymptotic analysis will be used as a measure of these performance metrics and design options.