CS 313 Programming Languages Spring 2017

Course Information

Course Homepage:
go/cs313 or http://www.cs.middlebury.edu/~schar/courses/cs313-s17

Time and Place:
MWF 11:15-12:05 in MBH 632

Daniel Scharstein
640A McCardell Bicentennial Hall
schar middlebury.edu

Office Hours:
MW 1:30-2:30pm, TR 11am-noon,
and by appointment

Lab Assistant:
Ruben Gilbert (go/ruben)
rgilbert@middlebury.edu, 443-5915

Textbook (optional but recommended):
Programming Languages: Concepts and Constructs, 2nd ed.
Ravi Sethi, Addison Wesley, 1996

Additional reading:
I will provide links to online reading, and might supply a few additional
textbooks in the lab. Several other programming language textbooks
can be found in the library in the vicinity of number QA76.73.

Course Description

The goal of this course is to systematically explore concepts and features of programming languages. We will focus on four major programming paradigms: procedural, object-oriented, functional, and logic programming languages. Along the way you will get a taste of several languages, including Pascal, C, Python, Ruby, Smalltalk, ML, Scheme, Prolog, and a few others, depending on student interest. It turns out that all of these are theoretically equivalent in computing power, but in practice each lends itself best to performing certain kinds of tasks. By taking this course, you will expand your practical knowledge of computer science, and also gain new insights into concepts already familiar to you.
Prerequisites: CS 202; knowledge of Java.


The following is a tentative schedule of topics to be covered in this course. Readings refer to the text by Sethi.

Week     Date     Topic Reading
1 2/13-15 Intro, History, Grammars Ch 1, 2
2-3 2/20-3/3 Procedural programming
Data types, parameter passing,
scope, procedure activation
(C, Pascal, Python)
Ch 4, 5
4-5 3/6-3/17 Object-oriented programming
Class structure, information hiding, inheritance
(Smalltalk, Ruby)
Ch 6, 7
6 3/20-24 Review, Midterm, Spring break  
7-9 4/3-4/21 Functional programming
Recursion vs. iteration, higher order functions,     
lambda expressions, procedure evaluation
(Scheme, ML)
Ch 8, 9, 10
10-11 4/24-5/5 Logic Programming
Unification, prolog execution model,
rule order and goal order
Ch 11
12 5/8-15 Advanced topics

Assignments, Exams, and Grading

There will be weekly homeworks, consisting of programming assignments and/or written assignments. Usually, homeworks will be posted on Wednesdays, and will be due the following Wednesday at 11:15am. Late work will not be accepted. However, each student is allotted two 24-hour extensions to use for any homework assignment during the term. No more than one extension may be taken per homework. If you have not completed an assignment, you should still turn in whatever you have for partial credit. In extenuating circumstances (e.g., sickness, personal crisis, family problems, religious holidays), you may request an additional extension. Such extensions are more likely to be granted if the request is made before the due date.

There will also be several quizzes to test assigned reading and the material covered the previous class, usually one quiz every 1-2 weeks at the beginning of class. The lowest quiz score will be dropped when computing your final grade. Missed quizzes cannot be made up.

Your final grade will be based on homeworks (40%), quizzes (10%), a midterm exam (20%), and a final exam (30%). The midterm exam is scheduled for Wednesday, 3/22, 7-9pm. The final exam is scheduled for Friday, 5/19, 7-10pm. Both exams will be open book, open notes.

Collaboration Policy and Honor Code

You are encouraged to talk with other students about the course, form study groups, and to help each other.

Unless otherwise instructed, feel free to discuss problem sets with other students and exchange ideas about how to solve them. However, there is a thin line between collaboration and plagiarizing the work of others. Therefore, it is required that you must compose your own solution to each assignment. In particular, while you may discuss strategies for approaching the programming assignments with your classmates and may receive debugging help from them, you are required to write all of your own code. It is unacceptable (1) to write a program together and turn in two copies of the same program or (2) to copy code written by your classmates. This implies that you should never have in your possession a copy of all or part of another student's work. It is your own responsibility to protect your work from unauthorized access.

If a programming assignment is designated a group project, then the above rules apply to a group. That is, you are allowed to collaborate on the assignment with your partners, but work with others is restricted as discussed above. All exams, of course, must be entirely your own work and you may not collaborate with anyone.

When working on homework problems, it is perfectly reasonable to consult public literature (online sources, books, articles, etc.) for hints and techniques. However, you must reference any sources that contribute to your solution. It is also OK to borrow code from the textbook, from materials discussed in class, and from other sources as long as you give proper credit. Assignments and solutions from previous terms are not considered to be part of the "public" literature, and consulting problem set solutions from previous terms constitutes a violation of the Honor Code.

If you are uncertain how the Honor Code applies to a particular assignment, please ask me. The Department of Computer Science takes the Honor Code seriously. Violations are easy to identify and will be dealt with promptly.

ADA information

Students with documented disabilities who may need accommodations in this class (e.g., extra time on exams) are encouraged to contact me as early as possible to ensure that such accommodations are implemented in a timely fashion. Assistance is available to eligible students through the ADA Office. Please contact Jodi Litchfield, the ADA Coordinator, at litchfie@middlebury.edu or 802-443-5936 for more information. All discussions will remain confidential.