Instructor: David G. Kay, 406B Computer Science (

Course goals: As the second course in the first-year sequence, ICS 22 broadens and deepens your understanding of computer science in many ways: how to measure, analyze, compare, and talk about the efficiency of programs and algorithms; how to build and use more flexible data structures than lists and arrays; and how to design more substantial programs by more sophisticated object-oriented programming and by using different programming paradigms and models of computation. As this is an honors course, we will cover a broader and deeper set of topics than the conventional course.

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

Prerequisite concepts: To succeed in ICS 22, students should understand the fundamental programming concepts presented in a course like ICS 21. These include control structures for selection (if-then-else, switch) and repetition (loops); procedures, parameter passing, scope of variables, and the general concept of modular program design; the concept of object-oriented programming including how to define classes; predefined and programmer-defined data structures (including arrays); and classic algorithms such as linear search. Students should also be able to write with relative ease programs in Java that make use of these concepts.

We also expect each student to be able to navigate the Windows systems in our labs, to navigate the World-Wide Web, 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; the library offers short courses that you may find helpful.

Teaching assistant: Sean McCarthy (

Meeting place and times: Lecture meets Tuesdays and Thursdays from 9:30 to 10:50 in CS 180. You must enroll in one of the two discussion/lab sections:
1.   Monday/Wednesday/Friday at 11 in CS 253 and at 12 in CS 192
2.   Monday/Wednesday/Friday at 3 in CS 243 and at 4 in CS 183 (MW) and CS 189 (F)

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 11 to noon and Thursdays from 2 to 2:30. Of course emergencies may come up, but I will try to give advance notice of any change. I'll also be happy to make appointments for other times during the week. The quickest and most effective way to reach me 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 the ID 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 Don't let this slip; if you miss official announcements, your grade could suffer.

This course's web page at (which you can reach more mnemonically from the instructor's home page,; official course Email is archived at; and a course Note Board for student-to-student discussions is available when you log on to . We don't use a news group for this course.

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 H22 may use any of the department's instructional computing labs except for times when another course is scheduled in the lab exclusively. See for lab hours and other information. Note in particular that all ICS labs are closed on university holidays.

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 crowded labs as an excuse for late or incomplete assignments.

Working at home: Doing your lab work at home is comfortable, convenient, economical, and safe. It even benefits students who work in the lab by freeing up the machine you would otherwise be using. But it's also isolated. Close friendships and a "support network" develop among students who use the labs. These are your first "professional contacts"; it would be unfortunate to miss that opportunity completely.

Other useful addresses: The Engineering Copy Center (ECC), in room 203 of Engineering I, is where we may distribute various course materials; the ECC is open 8-12 and 1-4:30, Monday through Friday.

Textbook: Data Structures and Algorithms in Java, second edition, by Goodrich and Tamassia. This text covers most of the topics in the course, and includes an introduction to Java. It should be available in the UCI Bookstore. It has a web site at, which includes errata, animations, and other resources.

Course structure:
About seven assignments, some on paper and some in the lab. (40% of the course grade)
One midterm: Given in lecture on Tuesday, February 4. (25%)
One final exam: On Thursday, March 20, 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 22. However, that is not a guarantee that every student's grade will be an A. Conventional ICS 22 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 H22 is required to continue into ICS H23.

What to do this week to get started in ICS H22:
-- If you do not have a UCInet ID (an account on the EA system for reading electronic mail), get one. See .
-- If you prefer to read your electronic mail on an account other than your UCInet account, redirect your mail at .
-- If you do not have an ICS NT account for access to the Windows NT network in ICS, get one. See .
-- On the Web, go to, log in with your UCInet ID, choose "Course Listing," click "Go" next to ICS H22, 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 (and at least one diskette if you have no other way to back up your work).
-- 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: 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 he 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 hear a different perspective there than you can in lecture. Discussion section is where you will get many details about Java and advice and information specific to the lab 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.

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

Be sure to read each lab assignment over, and think about how to solve it, before you come to lab; professional programmers plan on paper prior to starting to type. The lab 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.

Start early doing the lab assignments. 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.

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. Finally, turn in whatever portion of the assignment you have completed on the due date. In some circumstances you may arrange with your TA to work further on an assignment after the due date, but you must turn in whatever you have when the official due date comes.

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. Our text is not simple; you will want to read the assigned sections early and quickly (for the main ideas, not to memorize every detail); then you can ask your TA in section which parts merit closer attention.
Approximate course outline:


Readings in Goodrich


7 January
Introduction to the course
Efficiency and tradeoffs

Chapters 1 and 2

9 January
Programming paradigms


14 January
Functional programming

16 January
Algorithm analysis
Chapter 3


21 January
Classical data structures (stacks, queues, priority queues, trees)
Sections 4.1 and 4.2; Chapters 5 and 6; Sections 7.1 and 7.2

23 January
Dictionaries (Tables)
Performance tradeoffs among implementations

Sections 8.1, 8.2, and 8.4


28 January
Construction of dynamically allocated linked structures
Sections 4.3 and 4.4

30 January
Recursion and recurrence relations


4 February
Midterm Exam

6 February
Binary search trees
Section 9.1


11 February
Section 8.3

13 February
Graphical user interfaces


18 February
Java topics

20 February
Sorting algorithms and performance


25 February
Object-oriented design

27 February
Formal languages


4 March
Finite-state automata

6 March
Writing code using state machines


11 March
Programming languages compared

13 March
Epilogue and review

20 March
Final Exam, Thursday, 8:00-10:00 a.m.

It's a good strategy in general to read any assigned passage quickly for the main ideas first; not every detail of the readings will be essential for this class.

David G. Kay, 406B Computer Science
University of California, Irvine
Irvine, CA 92697-3425 -- (949) 824-5072 -- Fax (949) 824-4056 -- Email

Tuesday, January 25, 2005 -- 7:14 PM