This document contains lecture notes for a course on principles of programming languages. It covers topics related to functional programming including expressions, procedures, recursion, types, and evaluators. It also briefly introduces logic programming and imperative programming concepts. The notes were prepared by Mira Balaban for a class at Ben-Gurion University with help from several teaching assistants.