This class will cover theoretical foundations of features
found in modern programming languages.

Evolution
of programming languages

Syntax
and semantics representation,

Names, bindings and scope,

Data and Control,

Types and Type Systems,

Procedural Abstraction,

Concurrency,

Language
approaches such as imperative, object-oriented, functional logic based and scripting programming languages.

Course Outcomes

At the end of this course, students should

be able to read and use formal representations of programming language syntax.

understand, in a language independent way, basic programming language components
such as variables, types, expressions, scope and control flow and see the choices made
for these components by common languages.

have an understanding of runtime procedure/function control and data flow
implementation.

have a basic understanding of the major programming language paradigms
(imperative, OO, functional, logic), including relevant application domains, strengths and
weaknesses.

have an understanding of the fundamentals of concurrent programming and the language-level constructs that used in concurrent programming.

gain basic programming competence in several different types of programming
languages, facilitating transition to other current (and future) languages encountered
during their professional career.

Grading

Programming
Assignments (4 @ 10% each)

This
class will require you to write programs in several different programming
languages.

Homeworks (10%)

Exams: Exam 1 (15%), Exam 2 (15%) and Final (20%)

Policies:

Programming assignments are to be individual efforts, meaning no sharing of code or
discussion of problem solution allowed with anyone but me.

Late policy:

One day: 10% deduction

Two days: 30% deduction

Three days: 50% deduction

More than 3 days - no credit

You must turn in a working version of all programming assignments to pass the class (even if it receives no credit).