The document discusses the nature of programming languages. It introduces programming languages and their key abstractions including data abstraction and control abstraction. It covers different computational paradigms that programming languages can be based on, including the imperative, functional, logic, and object-oriented paradigms. Examples of programming languages that follow each paradigm are provided. The goal of the course is to study major principles and concepts of programming languages rather than specific languages.