CSE 130 Homepage
Principles of Programming Languages
Winter 2005


A summary of the class is now available.

Extra office hours are Tuesday and Thursday 4 to 4:30.

The Registrar's office scheduled the final for Friday, 18 March, from 3 to 6 pm. in Center 214, the same room in which the lectures are given. You will be responsible for all material in the readings and class notes, excluding only material clearly marked as optional. Be sure to re-read the notes, as they may have been updated since you last read them. The final exam will likely include more than one third on logic and functional programming. Here is an online copy.

The midterm was given Tuesday, 15 February; it covered up to (and including) Chapter 5 of Sethi. An answer for question 8 is available. The mean was 72.6, with standard deviation 15.2 and median 75.5.

There is a discussion board for this class. We hope you will find it useful. To post messages, you will need to register for an account.

Here is a link to the previous version of this class, which you may find useful for exams, etc., though this year differs in some ways.

Prerequesites for this class are CSE 100, CSE 20, CSE 12, and one of the basic programming courses. If you are not familiar with the discrete mathematics in CSE 20, you should drop the course, or else learn the material (which is likely to be very difficult if you don't already know it); one good textbook is Discrete Mathematics with Applications, by Susanna Epp (Brooks/Cole 1999 or 2004). Some of this material is essential for certain parts of the class.

Please do not ask the TAs, grader, or professor for help doing your homework; this is not fair to other students. Of course, it is acceptable - indeed, it is encouraged! - to ask questions about the content of the course, which may include topics related to homework problems. And naturally you can ask about bugs in the homework questions (we really want to know if there are any). Also please check the website before asking administrative questions; many answers will already be here.

Past classes have seen some homework answers with strongly overlapping content. In this class, a grade of zero will be assigned for such answers, and there will be more drastic consequences for repeat offenders. You can talk with other students about how to approach homework problems, but you are not allowed to work together on solutions. See the Integrity of Scholarship Agreement, by Scott Baden, and UCSD's official policies on Plagariasm; see also the most recent amended policy (sorry, it's in MS Word). You are expected to abide by these rules; failure to do so can have very serious consequences.


Some general features, history and comparison of programming languages. Abstract and concrete syntax; induction. Types and modules; type systems and module systems. Functional programming and polymorphism; logic programming and Prolog. If time permits, the course will conclude with a brief discussion of internet languages like HTML, JavaScript, Perl, XML, OWL.

Click here for an outline of the class.

In addition to the usual topics, this course will include some formal methods and a little on social and historical aspects. We consider what languages are, how they are used, what they mean, and how and why they differ; this is not a class on programming, nor even on programming languages as such; it is a class on principles of programming languages.

TuTh 3:30 - 4:50 pm, Center 214
ID 518399, Section A00
Discussion Wednesday 3:00 - 3:50 pm, Center 113
Instructor office hours are right after class, in APM 3131.


The following is required:

You should bring this book to class, because I will not always copy material that is in it onto the board during lectures.

The following books are recommended:

The required book should be available at the UCSD Bookstore, and the other books should be on reserve at the Science and Engineering Library. (You can likely buy these books more easily and even cheaply from amazon.com or some other online bookseller). Stansifer is close to the spirit of this course. Pratt and Zelkowitz are good on the connection between languages and machines. McLennan is particularly good for background information on syntactic and historical issues. In addition, the following may be of interest:
Additional Information
  1. Reading assignments
  2. Homework assignments
  3. Class notes
You may need to reload pages frequently, because sometimes they are updated frequently!

If you write, or find on the web, a Java applet that I actually use to illustrate some aspect of the class, you will get extra credit towards the homework, the amount depending on the difficulty and value of the code.

Grades will be based on 50% for the final, 25% for the homework, and 25% for the midterm (subject to modification as I get to know the class better).

The class TAs are Yang Yang (office hours: Monday 2:00-3:00 PM in EBU1 6307B) and Neil McCurdy (office hours: Thursday 1:00 - 2:00 PM, in EUB1 6307A).

If you find bugs in the lecture notes or the textbook, please send me email, because I want to include a comprehensive bug list in the class notes.

Other Resources

Supplemental material showing how Java could have be integrated with Sethi's book, by Abigail Gray.

A pdf poster of the history of programming languages, on the O'Reilly site.

A very detailed (perhaps too detailed, and also not always accurate) graphical history of programming languages, by Eric Levenez, who also has other interesting resources on his website.

An applet to help visulalize and manipulate BNF.

An applet for regualar expression pattern matching.

A graphical depiction of depth first search, including code to implement the applet.

Standard ML of New Jersey is available on ACS machines such as ieng9.ucsd.edu; to update your environment to access sml, type prep smlnj, and then to actually run it, just type sml. For graduate students, version 110.0.6 of sml is available on CSE Unix machines at /net/cs/class/development/elkan/cse230/sml-110/bin/sml, which you can either define as an alias for sml, or else you can add the path for its directory to the PATH variable of your environment; however, this may not work from all machines, and may not work for undergraduates. If none of this works for you, you can download the latest version of ML (version 110.0.7) over the web from www.smlnj.org/software.html or cm.bell-labs.com/cm/cs/what/smlnj; another alternative is the OCAML variant of ML.

Sun workstation Binary for BinProlog 4.00 is at prolog/bp on this website, as well as at /net/cs/class/wi99/cse230/prolog/bp and /net/cat/disk1/prolog/bp. Some basic notes on using BinProlog 4.00 are at binpro.html. GNU Prolog for Linux is available at http://pauillac.inria.fr/~diaz/gnu-prolog. If anyone knows a free Prolog for Windows, please let us know about it.

To my course page
Maintained by Joseph Goguen
© 2000 - 2005 Joseph Goguen
Last modified: Sun Mar 20 21:20:43 PST 2005