This course is an introduction to the principles of programming languages. It is aimed at making the student familiar with the general concepts common to all programming languages to facilitate learning new languages.  Language paradigms (i.e., logic, functional, procedural, object-oriented) are compared and implementation strategies are discussed.

The course introduces students to some fundamental concepts in programming language design and implementation. It is intended for students who already have some experience with computer programming.

The primary goal of this course is to enable students to learn the universal concepts which exist in one form or another in all programming languages; the principles around which programming languages are created; the various constructs and their respective comparisons so as students can choose suitable programming language for solving a particular problem.

 The final goal is to allow students who complete this course  to have a good feel for the elements of style and aesthetics of programming and a good command of the significant procedures or techniques for controlling complexity in programming.