This course covers the fundamental concepts of different programming languages by discussing the design issues of the various language constructs, examining the design choices for this construction in some of the most common languages, and critically comparing language design alternatives. Specifically, the course covers – Programming Paradigm and Language Categories, Language Design & Evolutions, Syntax & Semantics, Lexical & Syntax analyzers, Names, Scopes & Bindings, Datatypes & Type checking, abstract data types, Statements & Expressions, Subprograms, Object-Oriented Programming, Concurrency, Exception Handling, Functional and Logic programming languages etc.