CSCI 3368 - Principles of Programming Languages

Fall 2004

Basic Information:

Meeting Time and Location: 3:35-4:50pm TR, HAS 340

Professor: Dr. Mark Lewis, office: HAS 201K, phone: 999-7022, e-mail: E-mail is the best way to reach me. I check it frequently and try to respond quickly.

Office Hours: 2:30-5:00 MF, 10:00-12:30 TR, or by appointment. I'm in my office a lot so you should free to drop by. If you are coming from lower campus you can always call or write a short e-mail to see if I'm in and available at that time. The Monday and Friday times will be "open lab" times where I will be in the lab.

Text: "Concepts of Programming Languages" Sixth Edition by Robert W. Sebesta

Course Description:

Catalog Version: An introductin the the syntax and semantics of programming languages. This will include a study of data structures and control structures, proof of programs, a comparison of functional and imperative programming languages, parameter passing, storage allocation schemes, and concurrent language features.

Lewis Version: At this point you know how to write programs in a number of languages. The purpose of this course is not to teach you how to program in a bunch of other languages. The purpose of this course is to show the the features that span across many languages to help you evaluate the strengths and weaknesses of different languages and to be more capable of learning new languages quickly in the future. I also consider it to be essential if you want to truly become a master of CS. Without this course, you will see some aspects of computer languages in the subset of languages you know, but you are unlikely to ever truly understand how things work and what the alternatives are. We begin the semester exploring why you should know more about programming languages and giving you some history on programming languages. After that we will look at the features that span across all languages in turn. We finish the semester looking specifically at functional and logic programming, two paradigms you are probably less familiar with.

This course will be run in a manner very different from what you are probably used to in CS. The primary difference is that you are expected to be very active in the lectures. Going along with this is the fact that you are expected to show up to class having done the reading so that you can actively participate in discussion. There will be lectures in the course, but they will be short and most of the class time will be dedicated to discussing the topics. You will arrive at class with "discussion seeds" on a piece of paper with your name on it. The quality of these "seeds" will go a long way to determining the class participation segment of your grade.

Evaluation: Your grade in this course will be decided four different components: assignments (25%), tests (20%), class participation (25%), and a final project (30%).

Assignments (25%): Along with each chapter, you will have to answer a number of questions from the text. These questions are due the class after we have finished the chapter. Of course, you also have to have read the new chapter for that day so procrastination will probably be painful here. I will not be assigning questions for you to do. Instead, each of you gets to pick 4 problems, either from the "Problems Set" or "Programming Exercises" sections at the end of the chapter. I'm borrowing this idea from Vadim in the math department where it seemed to work quite well. To make sure that not everyone does the same problems, points (10) will be subtracted if too many students (more than one third of the class) do any single problem. In addition, if you are the only student in the class to do a problem, you will receive bonus points (10) on that assignment. I grade everything on a 100 point scale.

You can work with your fellow classmates on problems. However, the work that you turn in must be your own. It needs to be your words that are on the page you hand to me. Working together too much though is likely to hurt you through originality penalties and lack of points.

Tests (20%): There will be two exams for this class, a midterm and a final. Each will count equally toward your final grade. I will hand out some sample questions before the exam so you have an idea of what to expect. The date of the midterm is listed on the schedule page. The final is at the normal time of 8:30am on 12/16.

Class Participation (25%): This section of your grade will come from how well you participated in each class. Obviously, you have to be present to participate. Each day at the beginning of class you will hand in a piece of paper with two questions about, or thoughts on the reading for the day. After a short lecture on the material, these will be used to help seed the discussion. Your grade for this will be calculated from 5 groupings of classes as noted on the lecture schedule. Each grouping includes 5 class days and I will give you a numeric value for each grouping. The average of all 5 groupings will determine your grade for this aspect of the class.

Final Project (30%): For this course you will do some substantive work in the area of programming languages. This work may be the development of your own language, a critical analysis/comparison of some existing languages, or active research into some other area related to the theory of programming languages. Topics will need to be approved by me. The schedule has a list of dates for when certain parts of this must be turned in.

There are four things the must be turned in during the semester for this project. The first is an idea for the project that I must approve. This should be in written form and provide enough detail for me to determine if it has a scope that is sufficient. Several weeks after this, you will present to me an outline of your project writeup. This should have the detail to illustrate everything that you are doing and will do for the project without all the prose in place. Shortly before the end of the semester you need to give me a draft of your project writeup. This will be a working draft, not a "final draft" that needs simple editing. This document should be at least half the length of your final project paper and will contain most of the ideas that you are putting in, but many of your final conclusions might be missing. The final project itself will be due during finals. This document must be at least 20 pages of double spaced 12 point Times font. Code can also be submitted as part of the paper, but the conversion ratio is 8:1 and it can count for no more than 8 pages of the final paper.



One, Two, Many - I wasn't going to put links for this class because there are too many languages to try to link to all of them. However, I think that this is significant in a different type of way. It is on how the natural language you use can impact your cognitive abilities. Personally, I believe in linguistic determinism. I think that is why fields have their own jargon. I think it also applies to programming languages. Knowing concepts and having terms for them allow you to think new thoughts and put ideas together in new ways.

Programming Language List - Carson sent this one to me. It's a pretty good list of languages. Not complete, but pretty good. I've written programs in at least three languages not on this list. If nothing else, the length of the list and that fact should drive home how many languages there are and how pointless it is to have a class try to teach you all programming languages. Teaching you the conceptual underpinnings of all the languages is far more useful.

The Great Computer Language Shootout - This does speed tests on a large number of languages.

History of programming languages