Home | Lectures | Written Assignments | Programming Assignments | Exams | Cool

CS 4610 - Programming Languages

Should I Take This Course?

I think so! Programming languages is the topic of ultimate mastery. If you like spirited lectures, challenging-and-rewarding coding projects, and seeing how theory applies to the real world, this is a great course for you. Last year's CS 4610 teaching evaluations are available to help you decide. Read more below to see what the course is about.

Lectures and Details

Course Overview

CS 4610 will acquaint you with the fundamental concepts in the design and implementation of high-level programming languages. The course will stress underlying theoretical concepts as well as a significant, practical course project. Students will write Ruby, Python and Objective CAML code and gain experience with functional and object-oriented programming.

In this course you will build an interpreter for an object-oriented language. This involves stages of scanning, parsing, type-checking and evaluating code. You will understand concepts such as variable bindings, control flow, types, and method invocation.

This is not course on compiler construction; it will not cover generating machine code or low-level optimizations. Students interested in learning more about static code generation should take CS 471; the courses overlap in places (e.g., parsing) but are distinct.

The official university course objectives are also available.

Written Assignments

Most weeks there will be a written assignment covering material presented in lecture and the readings. The written assignments are to be completed individually. Written assignments will be graded on a simple 0-5 scale and will not be weighted heavily; the purpose of the assignments is to give you practice with the theoretical material of the course. Spending time on the written assignments pays off on the exams.

Written assignments are due by 2:00pm on the date in the course schedule. Print your name and University email address (e.g., wrw6y) on each page of your assignment. Assignments may be turned in either in class (before the lecture) or in the CS 4610 Homework Drop in the front hallway of Olsson. To ensure that we know where assignments are, use only these two locations to hand in assignments. Notably, putting an assignment under my office door or my faculty mailbox will result in that assignment being ignored. Please do not bring assignments to staff offices.

Project and Programming Assignments

The course project consists of five programming assignments. Taken together, the assignments form a complete interpreter of Cool, the Classroom Object-Oriented Language.

The project components are assigned in roughly increasing order of size and difficulty; proportionately more time is allotted for the later assignments. Later assignments will be weighted more heavily in the final grade. Programs will be evaluated for correctness, organization, and documentation.

Programming assignments may be done individually or in teams of two. The first programming assignment will be done individually, however. Teamwork imposes burdens of communication and coordination, but has the benefits of more thoughtful designs and cleaner programs. Team programming is also the norm in the professional world.

Students on a team are expected to participate equally in the effort and to be thoroughly familiar with all aspects of the joint work. Both members bear full responsibility for the completion of assignments. Partners turn in one solution for each programming assignment; each member receives the same grade for the assignment. If a partnership is not going well, the teaching assistants will help to negotiate new partnerships. Teams may not be dissolved in the middle of an assignment.

Programming assignments are due at 11:50pm on the date in the course schedule. Programming assignments will be turned in electronically; the exact method will be announced with the first assignment.

Examinations

There will be two midterm examinations and a final examination. The midterms will be held in class.

The exams are open-note (one page, front and back, prepared by you). The exams are not open-book. No electronic devices are allowed. No cellphones, PDAs, palmtops, laptops, etc.

No early, late or make-up exams will be given. Please plan accordingly.

Grading

It is impossible to pass the course without doing the programming assignments. The relative weight of the components of your grade will be approximately:

Written assignments 8%
Project Programming Assignment I 5%
Project Programming Assignment II 6%
Project Programming Assignment III       6%
Project Programming Assignment IV 10%
Project Programming Assignment V 10%
Midterm Examination I 15%
Midterm Examination II 15%
Final Examination 25%

The grades will follow a standard curve: once the final numerical grade has been computed according to the above formula, the average grade will be somewhere in the B range. Doing significantly better than the average will yield an A. Doing significantly worse than the average will yield a C, D or F.

We follow the Honor System. You should know that fairly sophisticated plagiarism detection software will be used on the programming assignments; cheating on an assignment or exam will result in a score of 0 for it.

Late Assignment and Regrade Policy

An assignment turned in h hours late has its point value reduced by h%. Thus if you turn in a programming assignment at 8am the next day (i.e., 8 hours late) your grade for that assignment will be multiplied by 0.92.

Regrades for exams, programming assignments, or written assignments must be received within one week of you receiving your score. All regrade requests should be made to the TA. When we regrade an assignment we will look over it very carefully for correctness: it is possible that after a regrade you will end up with fewer points than before the regrade. Regrades should be treated with caution and used only when the graders have made a clear mistake evaluating your work.

Optional References

You may find the following additional resources helpful: