The topic of this course is the theory and practice of programming languages. We will be focused on the design principles and programming patterns of several programming languages from different programming paradigms. We will pay particular attention to the program techniques in functional programming, and why they are gaining greater importance in modern programming.