Learning Outcomes for Programming Languages


Student will show mastery of the concepts of the study of comparative programmaing languages through the application of the basic principles illustrated below.  The student will demonstarte this work through the production of programs in one or more  modern programming languages and through the writing of papers that also show this mastery.

Detailed learning outcomes are listed below (and are included on the detailed course schedule)..  These are subject to refinement during the course of the semester,
*****************************
Become familiar with declarative and imperative  paradigms, and be able to classify most popular languages according to the applicable paradigm. Cite reasons for studying comparative programming languages.

Trace the ancestry of currently used languages. Recognize the features contributed to current languages by older languages and become familiar with the developers of significant languages and paradigms.

Produce BNF grammars for expressions showing associativity and precedence, drawing of parse trees given grammars.  Be able to apply this technique to a variety of language constructs

Define tools for describing semantics: operational, axiomatic and denotational.  

Be able to find the weakest precondition for assignment statements, logical pretest loops through use of loop invariant.

Describe role of syntax analyzers.  Distinguish recursive descent parsers (LL) from shift reduce parsers(LR).

Be able to apply simple list operations and trace recursive algorithms in  both Scheme and LISP.  Contrast these languages to  other functional languages such as Haskell or ML.

Discuss fundamental semantic issues of variables, and binding times

Be able to define and distinguish characteristics and implementation issues surrounding user-defined types, arrays, records, etc.

Be able to discuss elements of Object-oriented languages, recognize them in several languages and apply them in at least one language..

Be able to describe precedence, evaluation order, associativity, complex assignment statements in a variety of languages.
Be able to discuss, distiguish and select  control mechanisms for selection and repetition, including implementation issues.

 Be able to distinguish  between procedures and functions, flat files, parameter passing techniques--call be reference, call by value, call by value result, and call by name.

Be able to trace linkage with static scoped languages and dynamic scoped languages.    Be able to discuss and apply the notion of  activation records, techniques for implementation and control threads. 

Be able to discuss the characteristics and implementation issues surrounding user-defined types, arrays, records, etc.

Be able to discuss the characteristics of Concurrency. and use them in at least two languages.

Discussion of built in features for exception handling and be able to apply them in at least two languages.

Implement a sample program modeled from the reading , run it and show your output.

Be able to discuss the characteristics of logic Programming languages (on you own) and trace a simple Prolog program.