Information
Class Meetings | Mon + Wed 11:00am-12:15pm in CIWW 512 |
First Lecture | Jan 26, 2015 |
Last Lecture | May 11, 2015 |
Midterm Exam | March 11, 2015, 11:00am-12:15pm in CIWW 512 |
Final Exam | May 18, 2015, 10:00-11:50am in CIWW 512 |
Instructor | Thomas Wies |
Office | CIWW 407 |
Office Hours | Mon 3:00-4:00pm, or by appointment |
Teaching Assistant | Gaurav Murade |
Office Hours | Thu 5:00-6:00pm in CIWW 412. |
Overview
Computing professionals have to learn new programming languages all the time. This course teaches the fundamental principles of programming languages that enable you to learn new languages quickly and help you decide which one is best suited for a given task.
We will explore new ways of viewing computation and programs, and new ways of approaching algorithmic problems, making you better programmers overall. The topics covered in this course include recursion and induction, algebraic data types and pattern matching, higher-order functions, continuations and tail recursion, programming language syntax and semantics, type systems, and objects and classes. We will explore this material by building interpreters for programming languages of increasing complexity. The course will thus be accompanied by extensive programming projects. We will use the programming language Scala for these projects, which you will also learn in this course.
Prerequisites: Computer Systems Organization (CSCI-UA 201). Proficiency in programming languages such as Java is expected.
Course Material
Required Reading
- Essentials of Programming Languages, Third Edition by Daniel P. Friedman and Mitchell Wand, The MIT Press
Recommended Reading
- Programming in Scala, Second Edition by Martin Odersky, Lex Spoon and Bill Venners, Artima, 2010
- JavaScript: The Good Parts by Douglas Crockford, O'Reilly, 2008
Scala Resources
- Official Scala web site
- Scala Standard Library
- Scala IDE
- Scala testing framework
- Scala tutorial for Java programmers
JavaScript Resources
Syllabus
You can find the syllabus and class notes on the course's NYU classes page.
Mailing List
All course-related announcements will be sent to the course mailing list. You may also use this list to ask questions and discuss issues related to the course. If you have enrolled before the start of the term, you are automatically subscribed to the list. Otherwise, use the above link to subscribe manually.
Grading
Homework and projects (50%), midterm exam (20%), final exam (30%).
Academic Integrity
Please review the departmental academic integrity policy. In this course, you may discuss homework problems and assignments with other students, but the work you turn in must be your own. Do not copy another student's work. Also, you should consult the instructor before using materials or code other than that provided in class. Copying code or other work without giving appropriate acknowledgment is a serious offense with consequences ranging from no credit to potential expulsion.