This document provides an overview of object-oriented programming (OOP) principles and core languages. It discusses key OOP concepts like inheritance, abstraction, encapsulation, and polymorphism. It also covers lower-level topics such as the difference between reference and value types, boxing and unboxing, reflection, generics, and serialization. The document recommends several books and resources for further reading on OOP design patterns and best practices like SOLID principles. It concludes by assigning students to refactor their code using the OOP techniques learned in the course.