**Teaching and Related Activities:**

Teaching Overview of Philosophy

List of Undergraduate Courses Taught

List of Graduate Courses Taught

An Innovative Puzzle-Based Freshman Seminar

Math + Fun! Series of math lessons for elementary grades 3-6

**Course Websites:**

ECE 1, Ten Puzzling Problems in Computer Engineering

ECE 154, Introduction to Computer Architecture

ECE 252B, Computer Arithmetic

ECE 254B, Adv. Computer Architecture: Parallel Processing

ECE 257A, Fault-Tolerant Computing

**Textbooks and Other Educational Resources:**

Textbook on Computer Architecture, Oxford, 2005

Textbook on Computer Arithmetic, Oxford, 2nd ed., 2010

Textbook on Parallel Processing, Plenum, 1999

Textbook on Dependable Computing, forthcoming in 2010

Published Books in Persian

Professor Parhami enjoys teaching at all levels, but the bulk of his formal teaching load has been at the graduate level. In Iran, this was due to a dearth of expertise at his level and here at UCSB, it has been primarily due to scheduling considerations and the need to cover all major course offerings in computer engineering. He regularly teaches undergraduate courses on computer design and architecture as well as graduate-level courses on computer arithmetic and parallel processing. His many years of teaching in these areas have led to the publication of comprehensive textbooks on parallel processing (1999), computer arithmetic (2000), and computer architecture (2005); see the links below for more information. He has also taught a number of graduate courses on advanced digital design and fault-tolerant computing.

Until 1986, Professor Parhami was also heavily involved in programs to teach computing fundamentals to nonspecialists and high-school students. The *Computer Appreciation* textbook that he wrote based on these experiences was a best-selling Persian-language book on computing for over a decade after its initial publication in 1984. Professor Parhami's teaching-related professional activities in the past have included participating in curriculum development for Iranian high schools, leading curriculum development efforts for computer engineering education at the college level, contributing to a series of TV science programs on computing, organizing a "Teaching of First CS Course" conference, and giving numerous public lectures under the auspices of the Informatics Society of Iran.

Professor Parhami believes in detailed advance planning for every course that he teaches. A typical course outline that he hands out at the start of an academic term contains lecture schedule (including page numbers in the text or reader), posting and due dates for all homework assignments, and a full description of course reference material and grading scheme. He also strives for careful preparation before each lecture, providing alternate explanations (e.g., through analogies), emphasizing the big picture, and encouraging discussions/comments in class. Professor Parhami is a demanding but enthusiastic teacher who has consistently received high marks from students at all levels. These include graduate and undergraduate students that he normally teaches, as well as a multitude of other learners, from high-school students to professionals in short courses and seminars.

Even though Professor Parhami's focus in undergraduate teaching has been computer design and architecture, he has also taught courses in computer software, applications, and theory. At the undergraduate level and below, Professor Parhami de-emphasizes pedestrian details (e.g., the instruction set of a given microprocessor or the design details of a particular high-performance computer) in favor of content that will be remembered and will remain useful many years later. To this end, he makes extensive use of analogies, back-of-the-envelope estimation, and class assignments that are both relevant and interesting. He tries to avoid reusing exam or homework problems, not just to make cheating more difficult but because he considers the process of making up interesting problems germane to remaining excited about the topic and in touch with the students.

At the graduate level, Professor Parhami emphasizes unifying concepts and the presentation of a broad and balanced overview of the subject matter. This philosophy is particularly important in the area of parallel processing (ECE 254B, that he teaches regularly) where a multitude of competing architectures must be presented and usefully compared through a fog of misleading or unfair claims by their designers and proponents. He incorporates the latest papers from journals and conference proceedings into the course material. Nothing excites students more than the opportunity to discuss and comment on a paper that was published only a few months ago. He updates the course material (including its reader or text, and presentation slides) with every offering. Professor Parhami encourages original thinking to the extent that several term papers written for his graduate courses have been published as journal or conference papers.

Undergraduate courses taught by Professor Parhami are listed below in reverse chronological order, categorized by the institutions where they were offered. Only regularly scheduled and seminar courses are included here. Individualized instruction and project courses can be found under Student Supervision. Special training and intensive short courses are listed in Appendix L to B. Parhami's CV (along with lectures and other presentations).

**At University of California, Santa Barbara**
**ECE 1**, Ten Puzzling Problems in Computer Engineering, 1 unit freshman seminar, s2007-11
**ECE 154**, Introduction to Computer Architecture, 4 units, f1993, f99, ss2000-05, w2006-10
**CMPSC 154**, Introduction to Computer Architecture, 4 units, w1995

**At Carleton University, Canada**
**95.102**, Introduction to Computers, 0.5 unit, w1988
**95.203**, Computer Organization, 0.5 unit, f1987
**95.301**, Concurrent Programming, 0.5 unit, w1988
**95.490/590**, Fault-Tolerant Computer Systems (under/grad), 0.5 unit, f1987

**At University of Waterloo, Canada**
**CS 335**, Computing Systems, 0.5 unit, w1987
**CS 350/550**, Machine Structures (under/grad), 0.5 unit, f1986
**CS 369/569**, Digital Networks (under/grad), 0.5 unit, s1987

**At Guilan University, Rasht, Iran**

Fundamentals of Computers and Programming, 4 units, s1985 (two sections)

Advanced Programming, 4 units, s1985

**At Tehran University**

Computer System Organization, 5 units, s1982
**22-871**, Computer Organization I (offered jointly with SHUT), 4 units, s1984

**At School of Planning and Computer Applications, Tehran**
**C 792**, Automata Theory, 3 units, f1979

**At Sharif (formerly Arya-Mehr) University of Technology, Tehran**
**22-014**, Introduction to Programming, 3 units, f1974, s75
**22-018**, Computer Programming, 2 units, s1983 (two sections)
**22-682**, Data Structures, 3 units, f1976
**22-684**, Computer Organization I, 3 units, f1974, s75, s76, s80
**22-685**, Discrete Mathematical Structures, 3 units, f1975, s76
**22-691**, Switching Theory, 3 units, s1978, f78, s79, f79
**22-780**, Technical Writing in Computer Science (Seminar), 2 units, s1976
**22-780**, Computers and Society (Seminar), 2 units, s1977
**22-807**, Technical Presentations, 2 units, f1984
**22-827**, Theory of Languages and Machines, 3 units, s1984
**22-842**, Advanced Logic Circuits, 3 units, f1983
**22-861**, Operating Systems I, 3 units, s1983, f84
**22-864**, Software Engineering (under/grad), 3 units, s1984
**22-871**, Computer Organization I (offered jointly with Tehran Univ.), 4 units, s1984

**At University of California, Los Angeles**
**E 100D**, Information Processing Systems, 4 units, s1973

Graduate courses taught by Professor Parhami are listed below in reverse chronological order, categorized by the institutions where they were offered. Only regularly scheduled and seminar courses are included here. Individualized instruction and project courses can be found under Student Supervision. Special training and intensive short courses are listed in Appendix L to B. Parhami's CV (along with lectures and other presentations).

**At University of California, Santa Barbara**
**ECE 250**, Advanced Computer Architecture, 4 units, f1988, f89 (predecessor of ECE 254A)
**ECE 251**, Parallel and Distributed Computation, 4 units, s1990, s91 (predecessor or ECE 254B/C)
**ECE 252B**, Computer Arithmetic, 4 units, w1989, w90, f90-91, w93-94, f94-97, w1999-2001, f01-03, w05, s07-11
**ECE 252C**, Advanced Topics in Digital System Design, 4 units, w1996, w98
**ECE 254B**, Advanced Computer Architecture: Parallel Processing, 4 units, s1992-2001, w02-04, s05-06, f08, f10
**ECE 257A**, Fault-Tolerant Computing, 4 units, f1998, f2006-07, f09
**ECE 594L**, Advanced Topics: Parallel and Distributed Computation, 4 units, s1989
**ECE 594L**, Advanced Topics: Massively Parallel Computation, 4 units, f1992

**At Carleton University, Canada**
**95.490/590**, Fault-Tolerant Computer Systems (under/grad), 0.5 unit, f1987

**At University of Waterloo, Canada**
**CS 350/550**, Machine Structures (under/grad), 0.5 unit, f1986
**CS 369/569**, Digital Networks (under/grad), 0.5 unit, s1987
**CS 750**, Dependable Computing, 0.5 unit, f1986

**At Sharif (formerly Arya-Mehr) University of Technology, Tehran**
**22-686**, Compilers and Assemblers, 3 units, f1977
**22-687**, Computer Organization II, 3 units, f1975, f76, s78, f78, s79, s80
**22-790**, Advanced Computer Science Seminar, 3 units, s1978
**22-857**, Artificial Intelligence, 3 units, f1984
**22-864**, Software Reliability (under/grad), 3 units, s1984
**22-872**, Computer Organization II (new), 3 units, f1983, s85
**22-890**, Graduate Computer Science Seminar, 2 units, f1984
**22-895**, Microprogramming, 3 units, s1984
**22-951**, Formal Languages and Automata, 3 units, s1975, s77, f77, f79

**At University of California, Los Angeles**
**E 225C**, Computer System Design: Fault Tolerance, 3 units, w1974