: We begin with the notion of an algorithm, and we describe the cycle from problem statement to algorithmic solution to working code. We consider numerous examples that illustrate fundamental principles of algorithm design. In order to implement our algorithms, we introduce the functional programming language Haskell. Additionally, we explore the theoretical, technological, and organizational principles of computer systems. Topics covered include the binary representation of information in a computer, Boolean functions and their implementation as circuits, the design principles of CPUs, and the von-Neumann-architecture. Prerequisites: We recommend that participants of this class attend the Brückenkurs Mathematical Foundations of Computer Science and Bioinformatics.