At the end of this course you should have a more thorough understanding of why certain programming language features provide more support for the production of reliable programs, while others are fraught with ambiguity or other problems. Since programming languages mediate between the programmer and the raw machine, we will also gain a deeper understanding of how programming languages are compiled, what actually happens when a program is executed on a computer, and how the programming language design affects these. As an example, by the end of the course, you should be able to understand why the new language Java is likely to replace C++ as the hot language of the future.
One of the more important features of this course is the introduction to new programming language paradigms (in particular, languages which support new ways of thinking about implementing algorithms). These include object-oriented (represented by Eiffel), functional (via ML), and logic programming (via PROLOG) languages. You will investigate both the new features themselves and the software engineering problems which spawned these developments. We also hope to have time to discuss features designed to support programming on parallel architectures.
This course will involve extensive reading on your part, both in the text and in outside sources. The segments of the course which introduce new programming language paradigms will also feature some relatively simple programming in languages representative of the functional, logic and object-oriented paradigms (ML, PROLOG, and Eiffel).
Problems involving analysis of programming language features will be assigned and due most weeks during the term. Homework will generally be due at the beginning of class on Tuesdays. Each student may use a maximum of two late days during the course of the semester (note that weekend days count). Once those late days are used up, late homework will not be accepted. There will be take-home midterm and final exams covering both lectures and readings. The midterm will be handed out during the first class after spring break. Student grades will be determined as follows: Midterm: 25%, Final Exam: 35%, Homework and programs: 40%.
Honor Code: Homework is expected to be the sole work of each student. Students may collaborate or receive help from each other on an occasional basis as long as all parties contributing are given explicit credit for their contributions to the homework. I will inform students if I believe they are collaborating too much. Uncredited collaborations will be considered a violation of the honor code and will be handled appropriately.