WINTER QUARTER 2000 -- Information and Computer Science -- UC Irvine

ICS 141 Course Reference

Instructor: David G. Kay, 408E Computer Science ((949) 824-5072;

Course goals: The universe of programming languages is much broader than C++ and Java, nor are those languages the best ones to use in every programming situation. In this course we will explore a broad range of approaches to programming, the technical principles and characteristics of different programming languages, and the issues that programming language designers must consider (which will prepare you for ICS 142, which covers compilers).

Prerequisite courses and concepts: We expect each student to have completed the prerequisite courses, ICS 23 and ICS 51, and to understand the basics of symbolic logic (propositional and predicate calculus, from a course like Math 6B). We also expect you to have these basic computing skills: Searching and browsing the Web, reading and sending Email, downloading files, and viewing and printing PDF (Adobe Acrobat) documents.

Meeting place and times: Lecture meets Tuesdays and Thursdays from 11:00 to 12:20 in PSCB 120. Our teaching assistants, Linda Giang ( and Amanda Hui ( will be available in the third-floor lab (CS 364) as follows: Mondays 8:00 to 9:50 (Amanda), 10:00 to 11:50 (Linda), and 2:00 to 3:00 (Linda); Tuesdays 2:00 to 3:00 (Amanda); Thursdays 5:00 to 6:00 (Amanda); Fridays 2:00 to 4:00 (Linda). Linda will lead the discussion section, which meets Fridays from 10:00 to 10:50 in Social Science Lab 128.

Office hours: I will be in or near my office during these scheduled hours, during which course-related matters will have first priority: Tuesdays from 3:00 to 4:00 and Thursdays from 1:00 to 3:00. Of course emergencies may come up, but I will try to give advance notice of any change. If I'm not immersed in something else, I'll be glad to answer short questions whenever I'm in my office, so feel free to drop by any time. I'll also be happy to make appointments for other times during the week.

Questions and announcements: You can usually get a response to your course-related questions within a few hours (perhaps a bit longer on the weekends) by sending electronic mail to the ID This goes to both the TAs and the instructor, so whoever reads it first can respond. If you need to reach one of us individually, our individual IDs appear above.

We may also send course announcements by Email to the official course mailing list, so you should check your Email regularly. Note that this mailing list goes to the Email address that the registrar has for you (your UCInet ID). If you prefer to read your Email on another account, you should set your UCInet account to forward your Email to your preferred account; you can do this on the web at

This course has a home page at (which you can reach more mnemonically from, the instructor's home page); holds an archive of official course Email; and a course Note Board for student-to-student discussions is available at We don't use a news group for this course.

Labs and lab hours: For your computer-based work in this class, you may use the ICS open lab in CS 364. The machines there are available on a first-come, first-served basis. The lab is open most of the time; for details about hours and other policies, see Note in particular that all ICS labs are closed on university holidays.

Most of our work will use Windows NT but some may use Unix; if you're not familiar with Unix, you may wish to consult OAC's Unix guide,

Textbook: Concepts of Programming Languages, 4th edition, by Robert W. Sebesta. You can download PDF or PowerPoint slides for each chapter from

Course structure:
Homework assignments, some in the lab and some with pencil and paper (30% of the course grade)
One midterm, given in lecture on Thursday, February 10 (30%)
One final exam, on Tuesday, March 21, from 10:30 a.m. to 12:30 p.m. (40%)
One optional programming languages web page, details of which are available below. Students' pages from Fall 1999 are at .

We will determine final grades neither on a formal curve (with equal numbers of As and Fs, Bs and Ds, and so on) nor on a fixed, straight scale. We will guarantee that overall scores over 90% will receive an A- or better, scores over 80% a B- or better, and scores over 70% a C or better, but the actual cutoffs may be lower.

The homeworks should give you experience applying and understanding the concepts of the course. The ultimate answer is just how you know you've done it correctly; what's more important is the process you follow to get the answer, because that's where the learning takes place. We expect that you will work with the TA and each other (within reason; see below) to gain that understanding. We expect everyone to have the right answers and know how they reached them, so we expect most homework scores to be high (so long as the assignments are completed thoroughly and carefully).

We expect you to help your classmates with the mechanics of the new and unfamiliar programming languages and environments you'll be using. Discussions among students about language features and course concepts are not only permitted, they are expected. To avoid running afoul of the department's policies on academic honesty, however, you should be careful not to copy anybody else's work (either on paper or electronically). If you cannot produce the correct results yourself without a copy of someone else's answers, you don't understand the concepts well enough to get a satisfactory score on the exams.

What you must do this week to get started in ICS 141:
-- If you do not have a UCInet ID (an account on the EA system for Email), get one. See
-- If you do not have an ICS account for access to Windows NT and Unix, get one. See
-- Give a snapshot of yourself (with your name written on the back) to your TA. This will help us learn your names quickly. (This is not just for fun--it's a course requirement.) Also turn in your signed Questionnaire to your TA in discussion section.

Good advice and helpful hints:

Check your electronic mail regularly; this is an official channel for course announcements.

Make every effort to attend the lectures; we will make important announcements and sometimes cover material that isn't found in the textbook. It's not fair to ask the TAs simply to repeat lecture material you missed, though of course they will answer questions about it.

Attend your discussion section, too; assignments will be distributed, discussed, and collected there, exams will be reviewed there, and you can ask more questions there than you can in lecture. Discussion section is where you will get advice and information specific to the assignments; missing your section is like doing the assignments with both hands tied behind your back. Don't hesitate to ask your TA to cover things that will help you.

Always keep your own copy of each assignment, both on diskette and on paper; if an assignment should get lost in the shuffle (or if a file server in the lab should crash, which has happened), we'll expect you to be able to supply a replacement easily.

If you find yourself having trouble or getting behind, speak with your TA or the instructor. But never take the shortcut of copying someone else's work and turning it in; the consequences can be far worse than just a low score on a lab assignment. The ICS department takes academic honesty very seriously; for a more complete discussion, see the ICS departmental web page covering academic honesty issues:

Students usually receive grades of B or better when they follow this advice; nearly everyone who receives lower grades doesn't.

Approximate course outline:
Week Date Topic Chapters in Sebesta
1. 11 January Introduction to the study of programming languages 1
  13 January Historical development of high-level languages 2
2. 18 January Programming paradigms
  20 January Scheme and functional programming 14
3. 25 January More on functional programming
  27 January Describing syntax and semantics 3
4. 1 February Names, type checking, and scope 4
  3 February Data types 5
5. 8 February Expressions and assignment 6
  10 February Midterm exam
6. 15 February Prolog and logic programming 15
  17 February More on logic programming
7. 22 February Control structures 7
  24 February Subprograms 8
8. 29 February Implementing subprograms 9
  2 March Abstract data types 10
9. 7 March Support for object-oriented programming 11
  9 March Concurrency 12
10. 14 March Exception handling 13
  16 March Epilogue and review
  21 March Final Exam, Tuesday, 10:30-12:30