[UMN logo]

CSCI 5106: Programming Languages
Spring 2006


Exam Dates and Times

Midterm Exam: March 7, 2006, 2:30 -- 3:45 p.m.

Final Exam: May 11, 2006, 8:00 -- 10:00. a.m.


News Flash: Online discussion using HyperNews

New Information:

      5/10/2006

      5/9/2006

      5/8/2006

      5/5/2006

      1/16/2006


Table of Contents


Contact Information


Course Prerequisites

The formal prerequisite for this course is CSCI 4011 or the "consent of the instructor." The really essential prerequisites for this course are the prerequisites for CSCI 4011, i.e. CSCI 1902 and (indirectly again) CSCI 1901. In particular, you must have seen at least a couple of programming languages before this course and you should have enjoyed programming in them: this course requires you to think abstractly about programming and programming languages and you need to be mentally prepared for such a task. In addition, you will need to be able to think about formal structures (like programming languages) and to think about these logically. CSCI 4011 would prepare you for this, but perhaps other courses might have done this as well.


Course Text

The required text is Programming Languages: Concepts and Constructs (Second Edition), Ravi Sethi, ISBN 0-201-59065-4.

You will be reading a few research/expository papers during the term. These should be available in the form of a bulk pack from the bookstore before the start of the term. You should try to get the bulk pack as soon as possible: the first homework requires you to read a couple of papers in this pack.

Finally, there is an optional text: Elements of ML Programming, J.D. Ullman, ISBN 0-13-790387-1. This book is useful if you want to learn more about ML and, thereby, about functional programming languages in general. This book will not be available at the bookstore, but you can order it electronically from many places.

When purchasing the text, you may want to look around on the Web to be sure that you are paying a reasonable price. A couple of places that you might try are http://www.dealtime.com and http://www.bookpool.com. (If you have found specific other places with better prices on the books for this course, let me know and I will add a link here.)


Course Description and Objectives

This course will provide an introduction to the area of programming languages. The focus will be on conceptual issues. Aspects relating to the structure, usability and implementation of a variety of programming languages and paradigms will be studied. Much of this material will be presented in the form of case studies of existing programming languages such as Pascal, C, C++, Java, ML, Scheme, Haskell and Prolog. Some programming in each of these languages will be needed in order to clearly understand the issues that we will study. However, the eventual purpose of the course is not to learn to program in a variety of different languages. Rather, the objective is to obtain a general understanding of the idea of a programming language; such an understanding might be useful at a later stage in quickly assimilating information about any new language that is encountered and in making judgements about its implementability and usefulness for specific programming tasks. Also, while you will not necessarily be ready at the end of this course to design or implement new programming languages, you should be adequately prepared for advanced courses that address these aspects.


Outline of Topics

The intention is, roughly, to cover the material in the first five parts of the text. Here is a list of topics I plan to cover: The text is a little superficial in its coverage of some important topics and so we will supplement it through lecture material and research papers. Also, going the other way, the syllabus indicated above is a little ambitious and time constraints may not permit us to cover all the topics in the mentioned parts of the text; quite likely, concurrency will not be discussed.


Required Work and Grading

You will be responsible for having read and understood all the material in the parts of the text described earlier, even if they are touched only briefly or not at all in the lectures.

Lectures will often cover material not directly available from the book. You will be responsible for this material as well. I may sometimes provide supplementary written material or papers, but I cannot do this all the time. Attending lectures and keeping abreast of discussions is therefore very important. Students who have not done this have had difficulty with the course in the past.

Half the grade for the course will be determined by homework assignments and the other half by exams. Assignments will be given roughly every other week. Homework must be turned in on the due date before the start of class. Late homeworks will, in general, not be accepted. While each homework will contribute a specific amount to the final grade, you are expected to turn in all of them to obtain a passing grade in the course.

There will be two exams, a mid term and a final. The mid term is scheduled for March 7, 2006 and the final for 8:00-10:00 a.m. May 11, 2006. The midterm will account for 40% of the exam grade (i.e. 20% of the overall grade) and the final will account for 60% of the exam grade (i.e. 30% of the overall grade).

Issues such as presentation elegance, clarity and conciseness of expression and the insights offered will be taken into account in grading. The Web page for homeworks discusses these points in more detail and also explains matters of protocol.

You are encouraged to participate in discussions, both in class and over HyperNews. While no specific role is assigned to this in grade determination, it could have an intangible effect, such as in settling borderline cases.

And a word about collaboration and outside help. Insofar as this serves in improving your understanding of the course material, it is actually encouraged. However, you are expected to do all the work that counts towards your grade completely independently.

This course will expect most of you to learn new things. In particular, you will encounter new languages and new ways of thinking about programs. Moreover, the focus will be on things that have a long term impact on your understanding. Thus, we will not really be discussing how to program in Java, C++ or some other language but, rather, how to think about programs and the devices available in these and other languages. You may feel diffident at times doing this---all of us have an initial desire to stay with familiar things---but it can be very rewarding in the end. Also, you should know that the TA and the instructor will give you needed assistance so long as you also make the effort.


Academic Honesty

At the outset, I encourage all of you to discuss material in the course with each other. Using HyperNews is a great way to do this. Discussions of this sort benefit everyone: it can clear up bottlenecks in understanding and explaining things to others also sharpens your own understanding.

This being said, I expect the work that each of you turn in for a grade to be representative of your independent thinking. You may discuss assignments with each other to the extent that this clarifies your understanding of what is being asked, but this discussion must stop before it gets anywhere near the details of a solution. If you need help at this point, you should seek this from me or the teaching assistant and we can decide what is and is not appropriate. In a similar vein, it is not acceptable to simply reproduce solutions to problems that you obtain from someone outside of class.

There will be penalties for breaches of this policy, ranging from no credit for the work in question to a failing grade in the course. On a more personal note, this kind of dishonesty interferes seriously with your own ability to learn and so there is no benefit to it in the long run.


Last modified: May 10, 2006 by gopalan atsign cs.umn.edu