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.
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.
The following is required:
The following books are recommended:
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.
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.