Colorado State University Computer Science Department


Syllabus (under construction; subject to revisions)

CS 454: Principles of Programming Languages, Spring 2008


Instructor: Prof. Jim Bieman

Graduate Teaching Assistant: Adam Labadorf

Lecture: 2:00-3:15 Tuesday and Thursday, currently scheduled in University Services Center Room 110 (601 S. Howes).

Texts:

Reference Texts (optional):

Note on Computer Science Group I requirement:

CS 454 can be used to satisfy the Computer Science Group I.A requirement.

Course Description:

The languages that programmers use are constantly changing, and the popular languages of today will surely be replaced by new ones. The objective of this course is to provide students with a working knowledge of the basic principles underlying the design of all computer programming languages. Students completing this course should be able to quickly learn to effectively use new computer programming languages. In particluar, after taking this course students should be able to do the following:

Programming languages are the primary tools of the software professional. In addition to controlling computer hardware, languages serve as a communication medium between people. Software is often produced by a group of people and must be maintained by other professionals. Thus, programs must run efficiently and be expressive---they must be lucid descriptions of a problem solution.

Expect both problem-oriented assignments and assignments that require programming. Programming assignments will make use of the functional programming language Scheme, which is a dialect of Lisp. We will be defining semantic features of languages by writing language interpreters in Scheme.

There is also a research project designed to give students knowledge and experience in another new programming language. Students will select a topic related to programming languages, and conduct research on the topic. They will prepare a written report describing their findings, and also present their key results to the class.

Prerequisites:

CS253, CS301. Students are expected to have a background in designing and debugging computer programs, and should have a working knowledge of Java and C++. Students should have a good understanding of concepts from CS301. In particular, they should understand induction, and language syntax specifications.

Grading:

Final letter grades will be based on the relative distribution of total scores and not on any preset numerical scale.

Miscellaneous:

Homework is due at the start of class on the due date; or must be electronically checked in at the specified time. I will grant a 5 minute grace period. If you arrive after the grace period you will receive a grade of zero. Late assignments are not accepted; that includes assignments slipped under the professor's door after class has started. If you must miss class, you may submit your homework early. Any deadline extensions must be approved in advance, and must be for reasons which are unexpected and beyond your control, and which involve only a short extension.

Homeworks are to be individual assignments unless instructed otherwise. Limited collaboration is permitted on homework. This means that you may discuss the means and methods for solving problems, but you are not free to copy someone's assignment. The work that you turn in must be your own --- copying is not allowed for any assignments. Collaboration on quizzes or exams, using another student's work as your own, allowing another student to use your work as their own, is academic misconduct and is not tolerated. Academic misconduct also includes copying material found in another source, for example an article in a journal or found on the web, without proper citations and quotation marks. You are responsible for any announcements or handouts made in class. If you miss an exam you receive a score of zero. The department has a written policy regarding cheating, incompletes, and class attendance. This policy is described in the Student Information Sheet.

Quizzes will generally test knowledge of assigned readings, and will occur at the beginning of class. Expect approximately one quiz per week.

Topics (in approximate order, as time permits):

  1. Introduction.
  2. Syntax.
  3. Functional programming with Scheme.
  4. Inductive sets of data.
  5. Lambda calculus.
  6. Data abstraction.
  7. Interpreters and environments.
  8. Types.
  9. Objects, classes, and types.
  10. Continuation-passing interpreters.
  11. Other language paradigms: logic, APL, etc.


Last updated 4 January 2008