CS3111 Principles of Programming Languages

This course is an introduction to the design, evaluation and implementation of programming languages. Imperative, functional, logic, and concurrent programming methodologies are investigated, with an emphasis on practical issues. Tradeoffs in choosing different programming languages for a given task are discussed and principles on which an objective assessment of programming language design can be made are presented.


CS2020 or Consent of Instructor.

Lecture Hours


Lab Hours


Course Learning Outcomes

After completing this course, students will be able to do the following:

  • Choose an appropriate programming language for a given application and explain why it is the best one.
  • Explain the difference between stack allocation and heap allocation.
  • Describe which types of program data should be allocated on the stack and which types of program data should be allocated on a heap.
  • Use higher-order operations, such as map and reduce, in functional programming.
  • Explain how inheritance is implemented in object-oriented programming.
  • Design programs that utilize concurrent threads.