Programming Languages

CSCI-GA.2110-001
Spring 2014

NOTE


Time and Location


Objectives

We will examine basic concepts underlying the design of modern general-purpose programming languages: types, control structures, abstraction mechanisms, inheritance, concurrency, garbage collection, constructs for programming in the large, etc. Implementation issues and data structures will be discussed. We will discuss a representative sample of languages across each of the imperative, functional, logical, and object-oriented language paradigms. Our main goal will be to focus on key features, ideas, contributions, and influences of each language we discuss in the course. We will also discuss the purpose and importance of language standards. Coming out of this course, you should be able to better understand the languages you already know, reason about the pros and cons of each, more easily learn and understand new languages, and have an appreciation and understanding of both the theoretical and practical underpinnings.

In general, studying even just one programming language to the level necessary to write useful, production quality software requires considerable practice and experience. One should therefore not undertake a 16 week course with any expectation of being able to master multiple new languages upon its completion. Although we will study many programming languages during this course, we will not focus on covering each language in its entirety, but rather focus on the aspects of each language that make it unique or conceptually interesting.

This is also not a software engineering course where you will build large programs in groups. Although we will touch upon certain topics that are relevant to compilers, this is also not a compilers course where we will deeply study the full process of translating input to executable code, although we will briefly discuss this process and offer somewhat more detailed treatment on lexical analysis and parsing.

There will be programming assignments in several languages across all major language paradigms. The languages are chosen because of the interest of their features, not necessarily because of their wide use. We will touch on Algol, Ada, C++, Java, Scheme, Prolog, ML and mention others.

Prerequisites

Undergraduate courses in data structures and algorithms or equivalent, as well as familiarity and programming experience in C, C++, Ada, Java, Pascal or a similar language. Students who are not enrolled in the computer science program or closely related program should discuss the suitability of this course with the instructor prior to enrolling.

Texts

Course Outline

Grading

There will be two tests: a midterm and a final. In addition, there will be a number of homework assignments. The weights will be:

There will be a number of paper and pencil assignments and programming assignments in various languages. In all cases, I will specify the compiler/interpreter to use, all of which will be freely available for download and will support all major OS/hardware platforms.

Assignments are expected to be turned in legibly (if written) and on time. A late penalty of 10 points per day applies to late homework.

If any homework due date falls on the day of a religious observance where you will not be attending class, please notify me well in advance to make alternate homework submission arrangements.

Learning is characterized not only by one's success in understanding the material, but one's failure in applying this understanding to real world problems. Students should be focused on ultimately learning the concepts, rather than getting everything right the first time. For this reason, each time graded homework assignments are returned, students will have an opportunity to recover a limited number of lost points by thoughtfully and meaningfully describing what led to failures on the homework assignments and what new understanding or insight consequently resulted from the experience. Cannot be used to recover late homework