CSE 130: Programming Languages-Principles and Paradigms

Fall 1999


This course will be offered again in Spring 2002.

CSE 130 is a survey of the main features, fundamental concepts, and similarities and differences of the most important modern programming languages.  The principal languages considered are C, Java, Pascal, Ada, awk, and ML, but the focus is on programming languages in general, not on the details of specific languages.

CSE 130 is open to CSE majors only.  The Fall 1999 offering (section id 349174) has reached its maximum enrollment, but the course will be offered again in Spring 2000 and possibly in Winter 2000.

The instructor will sign "add cards" only for students who absolutely need to take CSE 130 in order to graduate in December 1999 or March 2000.  Any student in this situation must show proof, i.e. a "degree check" form and a transcript.

See here for the Winter 2001 version of CSE 130, taught by Dr. Bertram Ludascher.


Here is the first team project assignment, updated on October 13.

Here is the second team project assignment, and notes explaining iterative deepening.  The assignment is due on Friday November 5.  Assignments submitted on Monday November 7 will lose 10% of the maximum available, and each extra day late will lose another 5%.

Here is the third team project assignment.  The due date for this assignment has been extended to Monday, November 22.  The fourth project will be distributed on that day, and due on Wednesday, December 8, which is the day of the final lecture.

Here is the fourth team project assignment.

The final examination will be on Monday, December 13, from 7pm to 10.  Here are the midterm sample questions in Postscript.

Here are sample answers for the midterm, which was on Wednesday November 10.  (To display these documents, you will need Ghostview  for Unix or GSview for Windows.)  Here are the guidelines used for grading.


Name Email Telephone Office Hours Office Location
Charles Elkan  elkan@cs 534-8897 Mon, Wed 4pm to 5pm AP&M 4856
Renata Teixeira  teixeira@cs Mon 9am to 10am 
Fri 5pm to 6pm
AP&M 3349D
Maki Sugimoto  sugimoto@cs Tue 5pm to 6pm 
Wed 2pm to 3pm
AP&M 3349D
Mark A. Smith  masmith@cs Thursday 6pm to 7pm AP&M 3349D

If you are unable to attend office hours, feel free to send email to arrange an appointment.  Office hours will begin on Tuesday, October 5.

There is a web-based bulletin board for questions that would be of interest to other students also.


Lecture notes for each Monday and Wednesday class meeting will be published here on the class web page, which will be found at
 October 4 Programming language design objectives and history.
 October 6 Types: primitive, enumeration, composite, Cartesian products, mappings.
 October 11 Guidelines for writing reports; arrays and functions viewed as mappings.
 October 13 Functions as first-class values; tagged union and recursive types; intro to ML.
 October 18 Higher-order functions in ML, and mappings, unions and recursive types; abstract syntax. 
 October 20 Abstract syntax implemented in ML; uses of abstract syntax; expressions versus commands.
 October 25 Syntax for declarations, imperative versus functional PLs, bindings and environments.
 October 27 Nested block-structured scoping, static versus dynamic scoping.
 November 1 Disadvantages of dynamic scoping; variable lifetimes, persistent and static variables.
 November 3 Abstract data types: signatures, specifications, implementations, information-hiding, packages.
 November 8 Uses of updatable variables; objects, methods, and classes; inheritance and dynamic binding.
 November 15 Object identity; method overloading and dispatching; objects as higher-order functions; design criteria for exception-handling.
 November 17 Exceptions in Ada; masking errors vs revealing them; static vs dynamic type-checking, type equivalence.
 November 19 On growing a PL by Guy Steele; requirements analysis; name vs structural type-equivalence.
 November 22 Scripting languages in general and awk in particular.
 November 29 Expressions: function-calling, evaluation order for subexpressions, conditional expressions.
 December 1 Formal parameters versus actual argument expressions; call-by-value(-result), call by reference.
 December 6 Call-by-macro: definition and simulation by higher-order functions; threads, processes, Ada tasks.
 December 8 Tasks and entries in Ada, task types, lower-level and higher-level parallel programming.



We will use two textbooks.  The first is Elements of ML Programming: ML97 by Jeffrey D. Ullman and the second is Programming Languages: Concepts and Constructs (second edition) by Ravi Sethi.  (The links to Amazon here are for information only.  You are free to buy books anywhere and the course staff have no connection with any bookseller.  Both books should be available in the UCSD bookstore, and they can be purchased easily over the Internet.)

Both textbooks are "recommended" only, so purchasing them is not required.  However, you should be sure that you have easy access to both books throughout the course.  Do not rely on borrowing them from the library.  At a minimum, each project team of three students should possess at least one copy of each book.

The "required" text for CSE 130 is the instructor's online lecture notes.  To allow you to read ahead, here are full lecture notes from Spring 1998.  This quarter's lecture notes will be similar, but some material will be changed and some will be added.  Quite a few of the topics discussed in class will not be in either textbook, or will be explained differently.  Coming to lectures and taking notes carefully is important.

As the quarter progresses, it is your responsibility to locate relevant chapters of the textbooks and to study them.  Use the indexes of the books!  Examinations will be based mainly on the online lecture notes, but may ask questions that involve knowledge in the textbooks.


Lectures are on Mondays and Wednesdays from 6:50pm to 8:10pm in Center Hall, room 113.  The first lecture will be on Monday October 4, 1999. Lectures will start and end on time, so students should not arrive late.

Two section meetings are scheduled each week, one on Mondays and one on Fridays.  The Monday meeting is from 3:35pm to 4:25pm in Center Hall, room 212.  The Friday meeting is from 10:10am to 11am in Peterson Hall, room 103.

The first section meeting will be on Friday October 8.  Attendance at one of the two weekly section meetings is required.  The same material will be covered each Friday and the following Monday.  Therefore, if you miss a Friday meeting, you should attend the next Monday meeting.

The lecture on the Wednesday before Thanksgiving (November 24) has been rescheduled to the previous Friday (November 19), in the usual room (Center Hall 113) and at the usual time (6:50pm).  The last day of classes will be Wednesday, December 8.

There will be one midterm examination, on Wednesday November 10.  The final examination has been scheduled by the UCSD registrar on Monday, December 13, from 7pm to 10pm.

There will be four two-week team project assignments, which will be due on Fridays.  The due dates will be October 22, November 5, November 19, and December 3.  The first three project reports will be returned on Mondays, on November 1, November 15, November 29.  This schedule means that you will have time to learn from each graded project report before the next one is due.


The midterm exam and the final exam will be "closed-book." However for each exam you may use one double-sided sheet of notes in your own handwriting.  You may not use printed or typed notes, or notes written by someone else.

The midterm will count for 1/6 of your overall grade and the final for 1/3.  Each team project will count for 1/8 of your overall grade.  Your grade will therefore be based 1/2 on your individual work, as reflected in the exams, and 1/2 on your teamwork, as reflected in the project reports.

Grading will not be based on arbitrary numerical standards, nor will there be a fixed "curve." There is no fixed correspondence between letter grades and numerical scores on the assignments or on the exams.  You can evaluate your performance in the class by comparing your scores with the means and standard deviations, which will be announced.  However there is also no fixed correspondence between letter grades and standard deviations above or below the mean.  If all students do well in the absolute and compared to previous years, then all students will get a good grade.

You should not drop CSE 130 just because you are unhappy with the score that you receive on the midterm or on a project assignment.  Instead, you should make an appointment to discuss with the instructor or with a TA how you can do better on the final and on following projects.

The description of each team project will be distributed in class on a Wednesday.  Project reports will be due on the Friday that is two weeks and two days later, before 6pm.  Projects will be graded out of 20 points.  Reports submitted on the Monday after the due date will lose five points.  Each extra day late will lose another two points.

One person from each team should give the team's complete project report to Renata Teixeira during her Friday office hour, between 5pm and 6pm in AP&M room 3349D.  Late reports should be given to Ms. Cheyenne Gringeri-Brown in APM room 3151 during standard business hours.


Complete academic honesty is required.

For each project you must be part of a team of exactly three students. Each team must hand in a single project report.  For each project, the three members of a team will all receive the same score.  It is your responsibility to find good project partners.  You may stay with the same team for all projects, or switch after one project and before the next.  You may not switch halfway through a project.

Part of the purpose of the team projects is to help you develop your ability to work well with other people.  To help you learn from each project, each team should staple a single copy of this team self-evaluation form to each project report.  Your team should discuss the questions on this form before starting each project.  At the end of each project, you should write consensus answers to the questions on the form.

The first assignment will use C and Pascal, the second will use C and ML, the third will use C++ and Ada, and the last will use Java and awk. It is your responsibility to learn the details of how to use these languages for the assignments.  We will discuss the most important features and differences of these languages in class, and there will be introductory handouts.

UCSD labs with Unix workstations are available for you to use, in particular the uAPE lab in AP&M room B402.  All software for CSE 130 will be installed on the ieng9 Sun server.  You may do the assignments using other computers, but you should make sure that your programs compile and execute correctly on ieng9.  We will use some version of the turnin utility to check that your programs are correct.  There will be future instructions on this.

The UCSD Unix labs are overcrowded.  You are encouraged to install Linux or some other free version of Unix on a home computer and to use that for most of your software development.  Note that Linux runs well even on the oldest 75 MHz Pentium personal computer, and that you can have Linux and Windows on the same computer, so you do not need to buy a new computer in order to have Unix at home.  For help installing Linux, go to the Linux setup day organized by the UCSD student chapter of ACM, which is on Saturday October 9 at 11am in AP&M room 4301.


The single report submitted by each team should be well-organized and well-written.  Reports should be as long as necessary to be complete and easy to read, but they should be concise.  The maximum length permitted is ten pages, single-spaced.

Transcripts should show sample inputs and the corresponding correct outputs produced by your programs.  Under Unix, the tee command is useful for producing transcripts.

Your report and its appendices should be printed on standard 8.5 inch by 11 inch paper using a laser printer or a high-quality inkjet printer.  You should use text processing software such as Microsoft Word, which is available on UCSD Macintosh computers for free student use.  Each report and its appendices should be stapled together securely.  Reports assembled with paper clips or other insecure bindings will be rejected.  Do not use any plastic or cardboard binders or sleeves.


Organize your report clearly, with sections, subsections, and paragraphs.  Each section and subsection should have a title that is informative about what the section or subsection contains.

Use diagrams, charts, and tables when useful.  Always provide labels and legends.

Follow all the rules of good writing explained by Strunk and White (see below).

If you refer to sources such as the textbooks for the course, do not just give a general bibliography.  Instead, cite the sources you use in the body of your report at each location where a source is relevant.  Give full bibliographic information in a "List of References" at the end of the report, not in footnotes.

The main part of a report should not include raw printouts.  Instead, each report should have two appendices, which are not counted in the ten-page length limit.  The first appendix should be a printout of the programs written by your team for the assignment (i.e. listings), and the second appendix should be a printout of sample executions of your programs (i.e. a transcript).


If you are not confident that you know how to write good technical papers, then you should seek help and advice.  The CSE 130 instructor and teaching assistants are available to assist you.  However you should also use other resources.  In particular you should use the UCSD Office of Academic Support and Instructional Services for help with writing.  According to their web page:
"The Writing Center offers the UCSD community FREE one-to-one conferences on any kind of writing project ... Various workshops are offered, including ... essay writing ... The OASIS writing test assesses your strengths and weaknesses in writing and editing academic papers. ... Individual tutorial services are available to students whose first language is not English."
The OASIS Writing Center is located in Center Hall. Call 534-3760 to make an appointment.


The best book on the basics of good writing is The Elements of Style by William Strunk Jr. and E. B. White, Macmillan, New York, third edition, 1979. The full text of the 1918 edition is out of copyright and available online.

The following report contains everything that a computer scientist needs to know about technical writing. Although the report is protected by copyright law, it is available for viewing on the web.

Technical Writing for Computer Engineers and Computer Scientists by Kevin Karplus and Dan Scripture.

From the report: "This document contains course notes and exercises for a course in technical writing. The course is intended for third-year computer engineering majors, and emphasizes technical documentation directed to engineers, engineering managers, technical writers, and other specialized audiences. Exercises include job applications and résumés, memos, electronic correspondence, algorithm description, in-program documentation, naive-user documentation, survey articles, recommendation letters, proposal writing, document specification, progress reports, formal technical reports, and an oral presentation."
After you have mastered the mechanics of writing, the next challenge is to develop a sense of style.  The book Clear and Simple as the Truth: Writing Classic Prose by Francis-Noel Thomas and Mark Turner is a wonderful treatise on the topic of writing style.  Be sure to explore the authors' online guide to good writing.


Scripting: Higher Level Programming for the 21st Century by John K. Ousterhout, IEEE Computer, March 1998.

A complete manual for the Gnu version of the awk language.

Full implementations of the ML language are available free for Linux, Windows'95, and many other operating systems.

How to Write Unmaintainable Code by Roedy Green.

Last updated on December 20, 1999 by Charles Elkan,