This course will introduce fundamental concepts and paradigms underlying the design of modern programming languages. For concreteness, we study the details of an object-oriented language (e.g. Java, C#, C++), a functional language (e.g., Scheme), and get introduced to multiparadigm languages (e.g., Python, Scala). The overall goal is to enable comparison and evaluation of existing languages. The programming assignments will largely be coded in Java and in Racket (formerly, Scheme), and optionally in Python or Scala.
The course load includes programming assignments worth 30 points, a midterm worth 40 points and a final worth 40 points. Normally, the graduate version of the course will have additional programming problems and additional/different problems on the exams.
The exams will be closed notes and closed book. No cheat sheets will be allowed in the exam. Instead, the exam will provide helpful information and code snippets from the text book or course notes that are deemed necessary for answering questions.
The students are prohibited from using any computer (e.g., laptop), calculator, or cell phone during the exam. These devices must be turned off and kept away during exams.
The letter grades will be assigned using the following scale: A[90-100], B[80-90), C[70-80), D[60-70), and F[0-60). However, I reserve the right to adjust the scale somewhat to utilize the gaps in the distribution. "Sharing/reuse" of solutions to assignment problems is strictly prohibited. Any academic impropriety on assigments (which includes sharing/reuse of solutions to assignment problems), or during exams (which includes copying from other students, or accessing resources using electronic devices which are prohibited) will have a minimum penalty of an 'F' grade, plus additional disciplinary action for unethical behavior. See http://www.wright.edu/students/judicial/integrity.html for details.
Attendance Policy
All registered students are expected to attend all lectures. In case a student is absent from a lecture due to unavoidable circumstances, the student is still responsible for the material covered in the class, as it is typically available from the course web-page well in advance. Furthermore, the student is expected to find out about in-class announcements from their colleagues/instructor.
| Topic | |
|---|---|
| Class 1 | Evolution of Programming Languages |
| Class 2 | Syntax Specification : Grammars |
| Class 3 | Object-Oriented Programming |
| Class 4 |
(continue) |
| Class 5 | Symbolic Data; List Processing |
| Class 6 | Styles : Functional vs Procedural |
| Class 7 | Recursive Definitions (Examples) |
| Class 8 | Abstraction : Higher Order Functions |
| Class 9 | Scoping; Closures |
| Class 10 | Java Design Goals |
| Class 11 | Types, Values, Variables |
| Class 12 |
Arrays; Classes |
| Class 13 | Midterm
(March 12 April 9, 9:30am-10:50am) |
| Class 14 | Inheritance; Polymorphism |
| Class 15 | Interfaces; Packages; Strings |
| Class 16 | Exceptions |
| Class 17 | Threads |
| Class 18 |
(continue) |
| Class 19 | (Scripting vs Systems PL) |
| Class 20 |
Multiparadigm Languages: Python |
| Class
21 |
Multiparadigm Languages: Scala |
| Class 22 |
Polymorphic Types : SML |
| Class 23 | Logic Programming |
| Class 24 | SCHEME INTERPRETER (2/3 classes) |
| Class 25 | Code (scm/txt) |
| Class 26 | Hand Written Slides (83M pdf) (43M pdf) |
| Class 27 |
Specifying a Language : COOL |
| Class * | Parameter Passing Mechanisms |
| Class * | Implementing Subprograms |
|
Final (April 28, 8am-10am) |