Introduction to Computer Science I—Honors
Course Reference Sheet

Instructors: David G. Kay, 5056 Donald Bren Hall (kay@uci.edu)

Teaching assistant: Richert Wang (rkwang@uci.edu)

Quick links: Textbook Assignments Email archive Additional references

Course goals: This course is the first of a three-quarter sequence covering the fundamentals of computer science. We focus on software—not just how to construct it, but also how to choose and design the underlying algorithms, how to organize the data involved, and how to analyze its performance. As an honors series, these courses will cover a broader and deeper set of topics than the corresponding conventional courses. The concepts we will cover transcend the details of particular programming languages, but ICS H21 will use primarily Scheme ICS H22 and H23 will move on to Java.

ICS H21 is an exciting course because of the many horizons it broadens. We welcome you, and we hope you enjoy it.

Prerequisite concepts: This course does not expect any previous experience in computer science or computer programming. If you do have some experience, you will find some topics familiar but many others will certainly be new to you.

We do expect each student to be able to navigate the Windows XP systems in our labs, to navigate the World-Wide Web, to download and read documents in Adobe Acrobat (pdf) format, and to read and send electronic mail. Some of our assignments will require these skills. If you need to pick these skills up or sharpen them, you should do it in the first week of the quarter.

Meeting place and times: Lecture meets Tuesdays and Thursdays from 9:30 to 10:50 in 1500 Donald Bren Hall. Discussion and lab section meets Monday, Wednesday, and Friday from 1:00 to 2:50, in 192 ICS. Your lab work will be done in pairs, so the scheduled lab times are the best times to work with your partner.

Office hours: You are welcome to drop by my office at any time. If I'm there and not immersed in something else, I'll be glad to chat about the course material or other topics. I will definitely be in or near my office during these scheduled hours, during which course-related matters will have first priority: Tuesdays from 1:00 to 1:45 and Wednesdays from 2:15 to 2:45; I may adjust these times at the end of the first week. Of course emergencies may come up, but I will try to give advance notice of any change. We'll also be happy to make arrangements for other times during the week; "making an appointment" is no big deal (but if you make one, don't blow it off without getting in touch). The quickest and most effective way to reach us is by electronic mail, as described below.

Questions and announcements: You can usually get a response to your course-related questions within a few hours (a bit less frequently on the weekends) by sending electronic mail to icsh21@uci.edu. This goes to both of us, and whoever reads it first can respond. If you need to reach one of us individually, use our individual IDs listed 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 Email to your preferred account (see http://www.nacs.uci.edu/email/forward.html). Don't let this slide; if you miss official announcements, your grade could suffer.

This course's web page is at http://www.ics.uci.edu/~kay/courses/h21) and official course Email is archived at http://e3.uci.edu/08f/w3m3/36550.

Textbook and software: How to Design Programs, by Felleisen, Findler, Flatt, and Krishnamurthi. This text has a web site at http://www.htdp.org; there you will find the full text of the book along with errata, code for the book's examples, and a guide to using the DrScheme software. The on-line version is slightly more current than the print version, but many people find it tiresome to read lengthy technical material on the screen. The DrScheme (PLT Scheme) software we will use is available free for all platforms at http://www.plt-scheme.org.

Labs and lab hours: Of course you will need to do some of your work outside of the scheduled Monday/Wednesday/Friday lab hours. Students in ICS H21 may use any of the school's instructional computing labs except for times when another course is scheduled in the lab exclusively. See http://www.ics.uci.edu/~lab for lab hours and other information. Note in particular that all ICS labs are closed on university holidays, such as the Friday after Thanksgiving (but not the Saturday and Sunday).

Please remember that programming tasks always take longer to complete than you think they will, no matter how much experience you have. You must account for this as you plan your time; we cannot accept busy schedules or time mismanagement as an excuse for late or incomplete assignments.

Course structure:
Weekly homeworks and lab assignments (35% of the course grade). All the assignments will be available at
http://www.ics.uci.edu/~kay/courses/h21/hw/ .
Two midterms: Given in lecture on October 23 and November 18 (30% together).
One final exam: On Thursday, December 11, from 8:00 to 10:00 a.m. (35%).

We expect that most students in this course will earn a final grade in the A range, as you would have done had you been enrolled in a conventional offering of ICS 21. However, that is not a guarantee that every student's grade will be an A. Conventional ICS 21 itself is a six-unit course that requires a major time commitment, even from students with significant computing experience or strong academic backgrounds. A grade of at least B- in ICS H21 is required to continue into ICS H22.

We're required to say that in unusual circumstances, these criteria could change, but we do not expect that to happen.

Special needs: Any student who feels he or she may need an accommodation due to a disability should contact the UCI Disability Services Center at (949) 824-7494 as soon as possible to explore the range of possibilities. We encourage all students having difficulty, whether or not due to a disability, to consult privately with the instructor at any time.

What to do this week to get started in ICS H21:
— If you do not have a UCInet ID, get one (see
— Learn how to read electronic mail sent to your UCInet ID (see
http://www.nacs.uci.edu/email/). If you prefer to read your electronic mail on an account other than your UCInet account, redirect your mail at http://www.nacs.uci.edu/email/forward.html .
— If you do not have an ICS account for access to the Windows network in ICS, get one. See
http://www.ics.uci.edu/computing/account_faq.php .
— On the Web, go to
checkmate.ics.uci.edu, log in with your UCInet ID, choose "Course Listing," click "Go" next to ICS H21, and then click "List me for this course." You'll submit some of your work electronically; this step is necessary to set that up.
— Get a lab printing key-card if you plan to do any printing in the lab.
— 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.)
— Complete the survey at http://eee.uci.edu/survey/h21.f08.q.

Good advice and helpful hints: Make every effort to attend the lectures; we will make important announcements and often cover material that isn't directly in the textbook. It's not fair to ask the TA simply to repeat lecture material you missed, though of course the TA will always answer questions about it.

Attend your discussion and lab section, too; assignments will be discussed and collected there, exams will be reviewed there, and you can hear a different perspective there than you hear in lecture. Don't hesitate to ask your TA to cover things that will help you. Since most of your work will be done with a partner, your partner also depends on your consistent presence.

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

Keep up with the reading; you'll need it to do your assignments, and the quarter system goes so fast that a few missed pages can quickly become a few chapters if you're not careful. You will want to read the assigned sections early so you can ask us about parts that aren't clear.

The assignments, like all technical specifications, require careful and thorough reading and re-reading. Expect to refer back to the assignment often, and check it first when you have questions about what's required or how to proceed. Before you come to lab, be sure to read the assignment to get an idea of what's required; professional programmers plan on paper prior to starting to type.

Start each assignment early. Assignments will be due weekly, but you'll need to spend some time on them nearly every day. Programming always takes longer to complete than you think it will, even if you have previous programming experience. By starting early, you'll have time to ask in discussion section about problems you encounter.

If you find yourself having trouble or getting behind, speak with your TA or the instructor. We have lots of ways to help. 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. ICS takes academic honesty very seriously; for a more complete discussion, see the ICS departmental web page covering academic honesty issues (http://www.ics.uci.edu/ugrad/current/policies/index.php).

Turn in whatever portion of the assignment you have completed on the due date. It's much better to turn in something rather than nothing; zeroes are hard to make up. In some circumstances you may arrange with your TA to work further on an assignment after it's due, but you must turn in whatever you have when the official due date comes.

Always keep your own copy of each assignment, both electronically 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.

Approximate course outline:


Topic (and chapters in HtDP)*
0. 25 September Introduction to the course and Scheme (1-2)


30 September
Scheme expressions, functions, conditions, and data (3-6)

2 October
Compound data and lists (7-9)


7 October
Lists and list processing (10)
Numbers and recursion (11)

9 October
— No class meeting —


14 October
Nested lists and trees (12-14)

16 October
Processing complex list structures (15-18*)


21 October First midterm

23 October
Algorithmic abstraction and higher-order functions (19, 20)


28 October
More on algorithmic abstraction (21, 22)

30 October

Lambda expressions and generative recursion (24-28)


4 November
Algorithm analysis and vectors (29)

6 November
Accumulators (30-32)


11 November
— No class meeting —

13 November
State and assignment (34-37)


18 November
Second midterm

20 November

Approaches to programming: functional, imperative, object-oriented


25 November
Comparing programming languages

27 November
— No class meeting —


2 December
Object-oriented programming and transition to Java

4 December
Epilogue and review


11 December
Final exam, Thursday, 8:00 to 10:00 a.m.

* Some chapters in the book are called Intermezzos. Intermezzo 1, for example, occurs between Chapter 7 and Chapter 9, so it's the same thing as Chapter 8.

David G. Kay,kay@uci.edu
Tuesday, January 6, 2009 5:37 AM