Programming Languages Logo

CS251 Course Information



Contact Information

Professor: Mark Sheldon
Office: SCI E126
Phone: x3062
E-mail: msheldon@wellesley.edu (“Mark Sheldon” in FirstClass)
Lectures: SCI E111, Mon./Wed./Thu. 9:50-11am
Office Hours: M/Th 1–2:30 and by appointment
Web Site: http://cs.wellesley.edu/~cs251
First Class: CS251-S06 Announcements, CS251-S06 Q&A
Tutor: Karyn Benson, drop-in hours TBA


Prerequisites

The official prerequisites for CS251 are CS230, Data Structures, and CS235, Theory. We will often use standard data structures (e.g. lists, trees, stacks, queues, etc.) and algorithms (e.g., sorting, searching, traversing) both as examples for exploring the expressiveness of various programming languages and as tools for implementing interpreters. Notions of computability will come up, especially in discussions of static program analysis, and previous functional programming experience in OCAML (or any ML) will be very valuable. We will also revisit many of the “big ideas” of CS111 and CS230 — e.g., abstraction, modularity, recursion, iteration, abstract data types — in the context of the programming languages we study.

Knowledge of some material from CS240, particularly assembly-level programming, will be helpful for some parts of the course. However, CS240 is not an official prerequisite, and we will review the CS240 material that you need to know for CS251.

An unofficial prerequisite for CS251 is the willingness to work hard. The concepts covered in the course are very deep, and the programming (especially when it comes to writing interpreters and translators) is intrinsically more challenging than the programming you've done in CS111 and CS230. Moreover, you will be doing a lot of programming in this course. You should expect to work about ten hours every week on your assignments for this course.


Reading Materials

Lecture Notes and Papers

The material presented in CS251 is not neatly covered in any textbook or collection of textbooks. Most of the material will be presented in lecture (take detailed notes!) and in supplementary handouts and code that I provide. I will also hand out a few technical papers that cover some of the material.

Textbooks

There is one required textbook in this course: Introduction to the Objective Caml Programming Language, by Jason Hickey. We will use this book to learn the programming language, which will be our main implementation language in the course. This book is available on-line from the CS251 home page and I will be handing out copies of it in class.

There are three other textbooks that are recommended (but not required) for the course:

The books mentioned about contain important examples of programming language dimensions and interpretation. Moreover, they cover programming in OCAML, Scheme, and Haskell, which will be the three main programming languages we use for coding this semester.

Because the three optional books are expensive, and they are not the chief source of information in the course, you are not required to purchase them. You can instead rely on copies in the Computer Science resource room (SCI 173) or copies on reserve in the Science Center Library.

Reserved Materials

Several books relevant to this course are either available in the Computer Science resource room (SCI 173) and/or on reserve in the Science Center Library. (Note: books in SCI 173 should only be used in 173 and the microfocus area.) They are listed below. I encourage you to become familiar with this collection and to consult it often.

Books on Programming Languages in General

Books on Particular Programming Languages or Paradigms

Other Resources:

The Science Center Library houses many relevant books other than those on reserve. An easy way to find out what's available is to consult the on-line library catalog. To do this, execute telnet library from a Linux shell and log in as user library.

The MIT Computer Science and Artificial Intelligence Laboratory (CSAIL) has an excellent computer science library (a.k.a. the “Reading Room”) on the 8th floor of the Stata Center (the new MIT building designed by Frank Gehry that looks as if it belongs in a Dr. Seuss story). This is an especially good place to find journals and technical reports. You can visit their on-line catalog at http://rr.csail.mit.edu/catalog/.

The Barker Engineering Library at MIT (on the 5th floor of building 10, under the big dome) houses an extensive collection of computer science books. You can visit their on-line catalog at http://library.mit.edu.

The ACM and IEEE digital libraries contain a wealth of computer science information, especially from journals and conference proceedings published by these organizations.


Course Web Pages, Directories, and Conferences

All handouts and various course-related links can be found at the CS251 web site: http://cs.wellesley.edu/~cs251

The CS251 course directory is located on cs.wellesley.edu in the directory /home/cs251. This directory contains material relevant to the class, and is where the problem set drop folders are located.

We will be using CVS to download problem set materials from cs.wellesley.edu (see the CVS Handout), so there is no reason to directly connect to cs.wellesley.edu for this purpose. However, in order to submit softcopies of your problem sets, you will need to use the Linux scp program to copy directories into the drop folders in /home/cs251/drop. Note that you can also copy files to/from cs.wellesley.edu using WinSCP on a PC or Fetch on a Mac.

There is also a CS251-SO5 conference in FirstClass with two subconferences:

You should plan on reading the CS251 conferences on a regular basis. It is strongly recommended that you add both subconferences to your FirstClass desktop


Homework

Problem Sets

There will be (almost) weekly problem sets during the semester. These will include pencil and paper problems and programming problems. Programs will range from simple programs to substantial interpreters and translators written in languages such as OCAML, Scheme, Haskell, Java, and C. Since the best way I know of understanding programming languages is by modifying interpreters and translators, many problems will be along these lines.

Many of the assignments will be challenging. Keep in mind that programming often consumes more time than you think it will. Start your assignments early! This will give you time to think about the problems and ask questions if you hit an impasse. Waiting until the last minute to begin an assignment is a recipe for disaster.

Problem sets will typically be due on Friday at 12:00 noon. You need to submit both a hard copy of your assignment (on paper) as well as a soft copy (on the CS server) of any programs (so that I may test them if necessary). Hardcopies should be slipped under my office door.

Most problem sets will be graded on a 100 point scale. I will strive to have problem sets graded as soon as possible. Solutions will be made available with the graded homework.

Collaboration Policy

Collaboration fosters a healthy and enjoyable educational environment. For this reason, I encourage you to talk with other students about the course and to form study groups.

Because the programming assignments in this course are particularly challenging, you will be allowed on any assignment to form a two-person team with a partner. The two team members can (in fact, must; see below) work closely together on the assignment and turn in a single hard- and soft-copy of the assignment for the team. The grade received on such a submission will be given to both team members.

This is a rather unusual collaboration policy, and it is only allowed subject to the following ground rules:

Unless otherwise instructed, teams are allowed to discuss the group problems (but never the indivdual problems) on problem sets with other teams and exchange ideas about how to solve them. However, there is a thin line between collaboration and plagiarizing the work of others. Therefore, I require that each (one-person or two-person) team must compose its own solution to each assignment. In particular, while you may discuss strategies for approaching the programming assignments with other teams and may receive debugging help from them, each team is required to write all of its own code. It is unacceptable (1) to write a program with another team and turn in two copies of the same program or (2) to copy code written by other teams.

In keeping with the standards of the scientific community, you must give credit where credit is due. If you make use of an idea that was developed by (or jointly with) others, please reference them appropriately in your work. E.g., if person X gets a key idea for solving a problem from person Y, person X's solution should begin with a note that says “I worked with Y on this problem” and should say “The main idea (due to Y) is ...” in the appropriate places. It is unacceptable for students to work together but not to acknowledge each other in their write-ups.

When working on homework problems, it is perfectly reasonable to use code from the textbooks and other materials handed out in class. It is also reasonable to consult public literature (books, articles, etc.) for hints, techniques, and even solutions. However, you must cite any sources that contribute to your solution. There is one extremely important exception to this policy: assignments and solutions from previous terms of CS251 are not considered to be part of the public literature. You must refrain from looking at any solutions to problem sets or exams from previous semesters of CS251. Consulting solutions from previous semesters of CS251 constitutes a violation of the Honor Code.

Late Homework Policy

I realize that it is not always possible to turn in problem sets on time. On the other hand, turning in one problem set late can make it more difficult to turn in the next problem set on time. I have decided on the following policy for this course this term:
All problem sets will be due at the later of the following two times: (1) the advertised due date and (2) the day on which the graded previous assignment is returned (if applicable).

This policy gives me a strong motivation to return graded assignments in a prompt fashion. A problem set can be turned in 24×n hours late if it is accompanied by n lateness coupons. If you work with a partner, each of you needs to attach one Lateness Coupon per person per day late.

Use these coupons wisely: you only get ten, and they are not transferable between students.

You may turn in late problem sets by slipping them under my office door. Of course, if I post solutions before you turn in a late problem set, you are bound by the Honor Code not to examine these solutions.

In extenuating circumstances (e.g., sickness, personal crisis, family problems), you may request an extension without penalty. Such extensions are more likely to be granted if they are made before the due date.

Problem Set Header Sheets

I would like to get a sense for how much time it takes you to do your CS251 problem sets. I use this information to design problem sets later in the semester, as well as for future semesters.

Please keep track of the time you spend on each problem of your problem sets, and include this information on the problem set header sheets that I will provide at the end of each problem set. (Two time columns will be provided for the case of students working together on an assignment.) Turn in this header sheet as the first page of your hardcopy submission. Assignments will typically have both group problems and individual problems; separate header sheets will be provided for group and individual problems.

Extra Credit

To make up for points lost on problem sets and exams, students often request extra credit problems. In order to give everyone the same opportunity, I will sometimes include extra credit problems on the problem sets. The extra credit problems will often be more difficult than the other problems, but they provide the opportunity to earn extra points toward your course grade. You should only attempt extra credit problems after completing the assigned problems.

Extra credit problems are entirely optional. Extra credit points will only be factored into course grades after I have partitioned the grade scale into letter grades. Thus, doing he extra credit problems may raise your course grade, but not doing extra credit problems will not lower your course grade.

For maximum flexibility, you may turn in extra credit problems at any time during the term (through the end of finals week). However, experience has shown that students who leave extra credit problems until the end of the term rarely turn them in. It is in your best interest to complete extra credit problems in a timely fashion. I will not hand out solutions to extra credit problems, but you are encouraged to discuss them with me in person.

Programming

We will be writing most programs in the following five programming languages. All except Java (which you already know) will be taught during the semester: The default place for you to work on your assignments will be at the CS Department's Linux workstations in the micro-Focus. Implementations of all five of the above languages are installed on them. Information about how to use these programming environments on these machines will be provided at relevant points during the semester. Documentation on these systems will be accessible from the CS251 web site.

In order to use the Linux workstations, you will need a Linux account. If you do not already have one, please let me know immediately.

There are many free implementations of the above languages that you can install on your personal computer, if you own one; see the documentation accessible from the CS251 home page for details. However, there are several reasons to prefer working on the Linux workstations:

Saving Work

Each CS251 student has a password-protected account on the CS Dept file server, cs.wellesley.edu (also known as puma). You will have a limited amount of space on this server to store your course-related files.

Although regular backups are made on cs, sometimes files are irretrievably lost. (In March 2004, a significant number of files were deleted from the CS department server by a hacker before they had been backed up.) For this reason, you should not depend on the department server as the only repository for your course files. You are also expected to keep backup copies of all your course work on (1) your FirstClass accounts and/or (2) removable disks (i.e., floppy disks and Zip disks).

Keep in mind that removable disks are a frail medium that you should handle carefully. Store and transport them in suitable protected containers. Do not subject them to temperature extremes, put them near magnetic fields, store them unprotected in your pockets, etc. Even if you handle floppy and zip disks carefully, they are still prone to failure. For this reason, you should also regularly back up your floppy or Zip disks!

Every time you insert a disk into a computer, you may be transmitting a computer virus! Viruses are nasty software fragments that can erase information on your computer or cause other malfunctioning. In order to reduce the spread of computer viruses, make sure that any personal computers you use have appropriate virus protection software installed.


Exams

There is only one exam this semester: a Final Exam during the regular final examination period.

Although there will no dedicated take-home exams, the individual problems (as opposed to group problems) on problem sets effectively count as take-home quizzes. Most problem sets will have an individual problem. Keep in mind that you may not collaborate with anyone on an individual problem.

Grades

The course grade will be computed as shown below:

Group problems on problem sets (total) 45%
Individual problems on problem sets (total) 40%
Final exam 10%
Class participation 5%

The default ranges for grades are expressed as a percentage of total points (excluding extra credit points):

A 93.33 – 100
A- 90 – 93.32
B+ 86.66 – 89.99
B 83.33 – 86.65
B- 80 – 83.32
C+ 76.66 – 79.99
C 73.33 – 76.65
C- 70 – 73.32
D 60 – 69.99
F below 60

I reserve the right to lower boundaries between grades, but I will not raise them. This means that I can grade on a curve, but only in your favor.

Keep in mind that this is a very challenging course in which a B is considered a good grade (not a slap in the face) and an A is an outstanding grade. In the past, the average grade in this course has tended to be in the B range.

The above information is intended to tell you how I grade. It is not intended to encourage a preoccupation with point accumulation. You should focus on learning the material; the grade will take care of itself.

Finding Help

If you have any questions at all about the class (whether big or small, whether on problem sets lectures, reading, or whatever) please contact me. That's what I'm here for!

The best time to see me is during my scheduled office hours (which are listed above). If these times are not convenient, we can set up an appointment at some other time. You can set up an appointment by talking with me in person, calling me on the phone, or sending me email. You can also ask questions by sending me email.

See a teaching assistant during drop-in hours (see above for their schedule). If you are having trouble with the course, you can request a one-on-one tutor from the Learning and Teaching Center (LTC). This service is confidential and free of charge; please take advantage of it if you would like some extra help! Contact me or LTC for more information about this service.

Finally, when looking for help, don't overlook your fellow students — not only those who have taken the course in the past, but your classmates as well. Your classmates are a valuable resource; make good use of them!


Students With Special Needs

If you have any disabillities (including “hidden” ones, like learning disabilities), I encourage you to meet with me so that we can discuss accomodations that may be helpful to you.