The goal of this course is complementing students' knowledge with principles of implementation and developing software in a variety of programming paradigms such as imperative, functional, and declarative.