CSCI C311 Programming Languages

 Objective

A programming language is the programmer's principle interface with the computer. More than just knowing how to program in a single language, programmers need to understand the different styles of programming promoted by different languages. In your professional life, you will be working with many different languages and styles at once. You will encounter many different languages over the course of your career. Understanding the variety of programming languages and the design tradeoffs between the different programming paradigms makes it much easier to master new languages quickly. Understanding the pragmatic aspects of programming languages also requires a basic knowledge of programming language translation and runtime features such as storage allocation.

 

Learning Outcomes

 

By the end of the semester, you should be able to complete the following tasks, among others: (it is approximate and is subject to change):

 

1.     Explain the stages of programming language interpretation and compilation

2.     Understand data and control abstractions of programming languages

3.      Use attribute grammars to describe the static semantics of small programming languages

4.      Describe dynamic semantics of small subsets of programming languages, e.g., expressions and control structures

5.   Compare different approaches to naming, storage bindings, typing, scope, and data types

6.     Analyze design dimensions of subprograms, including parameter passing methods, subprograms as parameters, and overload subprograms

7.      Evaluate modern, representative programming languages critically w.r.t. design concepts, design alternatives and trade-offs, and implementation considerations for scope, binding, data types, expressions, control structures

8.   Choose a suitable programming paradigm and language for a given problem or domain.