The course provides a survey of techniques and principles in the underlying design and imple- mentation of systems. The course focuses on symbolic computation and less on numerical examples from the calculus and number theory. Effective software engineers need to know efficient techniques that serve as building blocks in the design an implementation of software systems. Today, most systems require a collection of skills to provide an efficient implementation. Therefore this course enriches through broadening rather than acceleration. The programming language used has a sim- ple syntax and an intuitive semantic model, allowing a focus on concepts. Throughout, the focus is on understanding computational tools by building them, rather than covering many language featuresAims: