Harsh Anand Mehta
Section Leader Info
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.
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.
All registered students will be automatically added to the course mailing list approximately one week before class begins. The list will be updated approximately one week after the course begins. Students may also manually sign up or change preferences for the course mailing list at any time. Subscription to the course mailing list, as well as participation in mailing list discussion concerning course topics, is mandatory for all students enrolled in the course.
Please send all your questions to this list (not to the instructor) so that everyone can participate.
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
Yes, there are people who do this from time to time. Don't dream of doing it in this course! An act of cheating includes not only the cheater, but anyone supplying information to a cheater. The work you hand in must be your own unless specifically permitted to collaborate with others. Cheating on any exam or homework in this course (or enabling others to do so) will result in a failing grade for the entire course, no matter how well you were doing at the time. Please also read the department's policy here. Violations are taken very seriously; here is a quote from the link above:
"Disciplinary actions can vary in severity and can result in probation or termination from the graduate program."
If you find yourself falling behind, please see me before it's too late.