Prof. Cory Plock
* and before 5 pm by appt.
Recitation 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 the first several stages of compilation.
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.
This course has transitioned away from e-mail based mailing lists and is now using the web-based NYU Classes system exclusively for group-based discussion and course announcements.
This gives students more control over how they wish to receive and review discussion material. Note that any communication sent by the instructor via NYU Classes is considered official for the purpose of course-related announcements. This includes changes in the course syllabus, changes of homework deadlines, clarifications, etc. Students are encouraged and expected to closely monitor all communications from NYU Classes regarding the course.
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.
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..
Any form of academic dishonesty is considered cheating. This includes not just blatant forms of dishonesty such as looking at someone else's paper during an exam, but also answering homework questions with unauthorized assistance or using material from unauthorized sources to assist in answering specific questions. Willingly serving as an unauthorized source of information, such as providing exam or homework solutions to another student, is equally considered cheating and is subject to the same disciplinary action.
The general expectation is that homework assignments are to be completed on an individual basis, with no outside assistance. Students should assume that this is what applies unless the homework assignment explicitly states that collaboration or use of specific third-party sources is permitted. Even when it is permitted, students must cite any works on which they rely to formulate an answer, whether the reliance on such sources is direct (i.e. citing passages from the source verbatim) or indirect (i.e., using ideas or concepts from a source and modifying those ideas or concepts for use in answering a homework question).
All submissions, including homework and exam solutions, are subject to plagiarism detection. Penalties will apply to anyone caught cheating, regardless of whether or not the individual question is taking the course currently, or at some time in the future.
This course has a zero-tolerance policy on cheating. Don't dream of doing it in this course! 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, regardless of any grades earned prior to the point of the cheating.
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, see the professor or recitation leader, and seek assistance before it's too late.