at the highest academic level, or advance into leadership positions in industry. The program creates an atmosphere that promotes COMPUTER innovative thinking, values mutual respect and diversity, supports scholarship and research, instills ethical behavior, and cultivates lifelong learning. SCIENCE The department offers both a major and a minor in Computer Science. The requirements for these programs are outlined in the Emeriti: (Professors) Tom Binford, Edward Feigenbaum, Richard “School of Engineering” section of this bulletin and described in Fikes, Donald E. Knuth,* John McCarthy, Edward J. more detail in the Handbook for Undergraduate Engineering McCluskey, William F. Miller, Nils J. Nilsson, Vaughan Pratt,* Programs published by the School of Engineering. The Computer Jeffrey D. Ullman, Gio Weiderhold* Science major offers a number of tracks (programs of study) from Chair: William J. Dally which students can choose, allowing them to focus their program on Associate Chair for Education: Mehran Sahami the areas of most interest. These tracks also reflect the broad Professors: Alex Aiken, Dan Boneh, David Cheriton, William J. diversity of areas in computing disciplines. The department has an Dally, David Dill, Hector Garcia-Molina, Leonidas J. Guibas, honors program, which is described in the following section. Patrick Hanrahan, John Hennessy, Mark A. Horowitz, Oussama In addition to Computer Science itself, Stanford offers several Khatib, Daphne Koller, Monica Lam, Jean-Claude Latombe, interdisciplinary degrees with a substantial computer science Marc Levoy, Zohar Manna, John Mitchell, Rajeev Motwani, component. The Computer Systems Engineering major (also in Kunle Olukotun, Yoav Shoham, Sebastian Thrun, Jennifer Engineering) allows the study of areas requiring a knowledge of both Widom, Terry Winograd computer hardware and software, bridging the gap between Associate Professors: Serafim Batzoglou, , Ronald P. traditional CS and Electrical Engineering majors. The Symbolic Fedkiw, Michael Genesereth, Christopher Manning, David Systems major (in the School of Humanities and Sciences) offers an Mazieres, Nick McKeown, Serge A. Plotkin, Balaji Prabhakar, opportunity to explore computer science and its relation to Mendel Rosenblum linguistics, philosophy, and psychology. Finally, the Mathematical Assistant Professors: Gill Bejerano, Jeffrey Heer, Scott Klemmer, and Computational Sciences major (also Humanities and Sciences) Vladlen Koltun, Christoforos Kozyrakis, Philip Levis, Andrew allows students to explore computer science along with more Ng, mathematics, statistics, and operations research. Professors (Research): , John K. Salisbury Professor (Teaching): Eric S. Roberts HONORS PROGRAM Associate Professor (Teaching): Mehran Sahami The Department of Computer Science (CS) offers an honors Courtesy Professors: Russ Altman, Bernd Girod, Teresa Meng, program for undergraduates whose academic records and personal Mark Musen, Fouad A. Tobagi initiative indicate that they have the necessary skills to undertake Courtesy Associate Professors: Ashish Goel, Dan Jurafsky, high-quality research in computer science. Admission to the program Benjamin Van Roy is by application only. To apply for the honors program, students Courtesy Assistant Professors: Atul Butte, Ramesh Johari must be majoring in Computer Science, have a grade point average Lecturers: Gerald Cain, Nicholas J. Parlante, Robert Plummer, (GPA) of at least 3.6 in courses that count toward the major, and Patrick Young, Julie Zelenski achieve senior standing (135 or more units) by the end of the Consulting Professors: Gary Bradski, Kathleen Fisher academic year in which they apply. Coterminal master’s students are Consulting Associate Professor: Pei Cao eligible to apply as long as they have not already received their Consulting Assistant Professors: Kurt Akeley, Federico Barbagli undergraduate degree. Beyond these requirements, students who Visiting Professor: Martin Abadi apply for the honors program must also find a Computer Science * Recalled to active duty. faculty member who agrees to serve as the thesis adviser for the Mail Code: 94305-9025 project. Thesis advisers must be members of Stanford’s Academic Phone: (650) 723-2273 Council. Web Site: http:// www.cs.stanford.edu Students who meet the eligibility requirements and wish to be Courses offered by the Department of Computer Science have considered for the honors program must submit a written application the subject code CS, and are listed in the “Computer Science (CS) to the CS undergraduate program office by May 1 of the year Courses” section of this bulletin. preceding the honors work. The application must include a letter describing the research project, a letter of endorsement from the The Department of Computer Science (CS) operates and faculty sponsor, and a transcript of courses taken at Stanford. Each supports computing facilities for departmental education, research, year, a faculty review committee selects the successful candidates and administration needs. All CS students have access to the for honors from the pool of qualified applicants. departmental student machine for general use (mail, news, etc.), as In order to receive departmental honors, students admitted to the well as computer labs with public workstations located in the Gates honors program must, in addition to satisfying the standard Building. In addition, most students have access to systems located requirements for the undergraduate degree, do the following: in their research areas. Complete at least 9 units of CS 191 or 191W under the Each research group in Computer Science has systems specific direction of their project sponsor. to its research needs. These systems include workstations (PCs, 1. Attend a weekly honors seminar Winter and Spring quarters. Macs), multi-CPU computer clusters, and local mail and file servers. 2. Complete an honors thesis deemed acceptable by the Servers and workstations running Linux or various versions of thesis adviser and at least one additional faculty member. Windows are commonplace. Support for course work and instruction 3. Present the thesis at a public colloquium sponsored by the is provided on systems available through Information Technology department. Systems (ITS) and the School of Engineering (SoE).

4. Maintain the 3.6 GPA required for admission to the honors program. UNDERGRADUATE PROGRAMS IN COMPUTER SCIENCE GRADUATE PROGRAMS IN COMPUTER The mission of Stanford’s undergraduate program in Computer SCIENCE Science is to provide a foundation of mathematics, science, and The University’s basic requirements for the M.S. and Ph.D. engineering knowledge. Building on Stanford’s core ideals of liberal degrees are discussed in the “Graduate Degrees” section of this education, the program combines fundamentals with practical bulletin. experience in problem solving, programming, communication, and collaboration, allowing each student to realize his or her individual MASTER OF SCIENCE IN COMPUTER SCIENCE potential. Graduates of the program are prepared to pursue graduate study In general, the M.S. degree in Computer Science is intended as a terminal professional degree and does not lead to the Ph.D. degree.

1 | Stanford Bulletin, 2008-09

Most students planning to obtain the Ph.D. degree should apply Artificial Intelligence directly for admission to the Ph.D. program. Some students, f. at least four of: CS 223A, 223B, 224M, 224N, 224S, 224U, however, may wish to complete the master’s program before 226, 227, 228, 229 deciding whether to pursue the Ph.D. To give such students a greater g. a total of 21 units from category (a) and the following: CS opportunity to become familiar with research, the department has 205A, 222, 225A, 225B, 227B, 228T, 256, 262, 270, 273A, instituted a program leading to a master’s degree with distinction in 274, 275, 276, 277, 278, 279, 294A, 321, 327A, 328, 329, research. This program is described in more detail in a subsequent 374, 377,* 379*; ECON 286; EE 263, 376A; ENGR 205, section. 209A; LINGUIST 180; MS&E 251, 252, 339, 351, 352, Applications for admission to the M.S. program, and all of the 353; PSYCH 202, 205; STATS 202, 315A, 315B required supporting documents, must be received by December 9, 7. Biocomputation 2008. Exceptions are made for applicants who are already students at h. at least four of: CS 262, 270, 272, 273A, 274, 278, 279 Stanford and are applying to the coterminal program. Information on i. a total of 21 units from category (a) and the following: CS these deadlines is available from the department. 228, 229, 245, 261, 268, 275, 277, 345, 346, 365, 374; BIOC For University coterminal degree program rules and University 218; BIOMEDIN 234; GENE 203, 211; SBIO 228 application forms, see http://registrar.stanford.edu/shared/ 8. Computer and Network Security publications.htm#Coterm. j. CS 155, 244, 255 k. at least three of: CS 240, 244B, 244C, 259, 261, 340, 344, REQUIREMENTS 365 A candidate is required to complete a program of 45 units. At l. at least one additional course chosen from (b) and the least 36 of these must be graded units, passed with a grade point following: CS 240E, 244E, 245, 295, 344B, 345, 347, 355, average (GPA) of 3.0 (B) or better. The 45 units may include no 361A; EE 384A, 384B, 384C, 384M, 384S more than 21 units of courses from those listed below in 9. Database Systems Requirements 1 and 2. Thus, students needing to take more than m. CS 245 seven of the courses listed in Requirements 1 and 2 actually n. at least two of: CS 345, 346, 347 complete more than 45 units of course work in this program. Only o. at least four additional courses from category (b) and the well-prepared students may expect to finish the program in one year; following: CS 240, 242, 243, 244, 244B, 244C, 249A, 249B, most complete the program in six quarters. Students hoping to 255, 262, 270, 271, 272, 275, 276, 315A, 321, 344, 364B, complete the program with 45 units should already have a 374 substantial background in computer science, including course work 10. Human-Computer Interaction or experience equivalent to all of Requirement 1 and some of the p. CS 147, 247 courses in Requirement 2. q. at least one of: ME 101, 115; MS&E 284; Psych 205, 252 Requirement 1—The following courses may be needed as r. at least two of: CS 148 or 248, 294H, 376, 377 (may be prerequisites for other courses in the program: CS 103, or 103A, B, repeated for credit), 378, 447; COMM 207, 268, 269; EDUC or X, 106A, B, or X, 107, 108, 110; MATH 104. 124; MUSIC 250A; SYMBSYS 145 Requirement 2—Students must demonstrate breadth of s. a total of 21 units from categories (a), (b), (c), and the knowledge in the field by completing the following courses: following: CS 221, 223B, 229, 242, 249A, 249B, 276, Area A: Mathematical and Theoretical Foundations 379Y, 379Z, 448; COMM 272; ENGR 231; LINGUIST a. Required: 180; MS&E 288; ME 206A, 206B, 313, 314, 377; PSYCH Statistics (CS 109 or STATS 116 or MS&E 220 or 221 CME 106) 11. Numerical Analysis/Scientific Computation Algorithms (CS 161) t. CME 302, 306; CS 205A Automata (CS 154) u. at least two of: CME 326; CS 205B; MS&E 121; MATH b. Choose one of: 131, 132, 220A; STATS 200 Numerical Analysis (CME 108 or 302) v. at least two of: CS 223A, 327A, 339; AA 214A, 214B; Logic (CS 156, 157, 258, or PHIL 251) CME 324, 342 Mathematical Methods (CS 205A) 12. Real-World Computing 5. Area B: Computer Systems w. at least two of: CS 223A, 223B, 248 c. Required: Architecture (EE 108B or 282) x. at least three of: CS 205A, 205B, 226, 249A, 249B, 262, d. Choose two of: 268, 277, 348A, 348B, 374; CME 302, 306, 326 Operating Systems (CS 140) y. a total of 21 units from the above and from the following: Compilers (CS 143) CS 225A, 225B, 228, 229, 247, 270, 271, 272, 273A, 274, Introduction to Computer Networks (CS 144 or EE 284) 294A, 327A, 328, 448; CME 324 6. Area C: AI and Applications 13. Software Theory e. Choose two of the following, with at least one 200-level z. CS 242, 243, 256, 258 course: aa. at least one of: CS 244, 245, 295, 343, 345 AI (CS 121 or 221) bb. at least one course from the following: CS 255, 259, 261, Databases (CS 145 or 245) 268, 355, 356, 361A, 361B, 365 Graphics (CS 148 or 248) cc. at least one additional course chosen from (b), (c), and CS Individual specializations may narrow the set of choices in 346 specific areas of the breadth requirement; see the individual 14. Systems specialization sheets at http://cs.stanford.edu/degrees/mscs/ dd. CS 240, 242 programsheets for details. Breadth courses are waived only if ee. at least three of: CS 243, 244, 245, 248, 348B; EE 271 evidence is provided that similar or more advanced courses have ff. at least two additional courses chosen from (b) and the been taken, either at Stanford or another institution. Courses that are following: CS 194, 240C, 240D, 240E, 240X, 244B, 244C, waived rather than taken may not be counted toward the M.S. 244E, 249A, 249B, 255, 259, 262, 270, 271, 272, 276, 294S, degree. Breadth courses may be taken on a satisfactory/no credit 295, 315A, 315B, 340, 343, 344, 344B, 344E, 345, 346, basis provided that a minimum of 36 graded units is presented within 347, 348A, 349, 374, 448; EE 384A, 384B, 384C, 384S, the 45-unit program. 384X, 384Y Requirement 3—At least 1 but no more than 3 units of 500-level 15. Theoretical Computer Science seminars must be taken. gg. CS 256, 258, 261 (361A, 361B, or 365 may be substituted Requirement 4—A program of 21 units in an area of for 261) specialization must be completed. All courses in this area must be hh. at least four additional courses chosen from CS 228, 255, taken for letter grades. Ten approved programs are listed below. 259, 262, 268, 345, 355, 356, 357, 358, 359,* 361A, 361B, Students may propose to the M.S. program committee other coherent 364A, 364B, 365, 369,* 374; MS&E 310 programs that meet their goals and satisfy the basic requirements. * With consent of specialization chair.

2 | Stanford Bulletin, 2008-09

Requirement 5—Additional elective units must be technical Science Department that may count toward the J.D. degree, and the courses (numbered 100 or above) related to the degree program and Computer Science Department shall approve courses from the Law approved by the adviser. Elective courses may be taken on a School that may count toward the M.S. degree in Computer Science. satisfactory/no credit basis provided that a minimum of 36 graded In either case, approval may consist of a list applicable to all join units is presented within the 45-unit program. degree students or may be tailored to each individual student program. No more than 30 semester (45 quarter) hours of approved MASTER OF SCIENCE WITH DISTINCTION IN RESEARCH courses may be counted toward both degrees. No more than 24 A student who wishes to pursue the M.S./CS with distinction in semester (36 quarter) hours of courses that originate outside the Law research must first identify a faculty adviser who agrees to supervise School may count toward the law degree. To the extent that courses and support the research work. The research adviser must be a under this joint degree program originate outside of the Law School member of the Academic Council and must hold an appointment in but count toward the law degree, the Law School credits permitted Computer Science. The student and principal adviser must also under Section 17(1) of the Law School Regulations shall be reduced identify another faculty member, who need not be in the Department on a unit-per-unit basis, but not below zero. The maximum number of Computer Science, to serve as a secondary adviser and reader for of Law School credits that may be counted toward the M.S. in the research report. In addition, the student must complete the Computer Science is the greater of: (i) 8 semester (12 quarter) hours; following requirements beyond those for the regular M.S./CS or (ii) the maximum number of hours from courses outside of the degree: department that M.S. candidates in Computer Science are permitted Research Experience: The program must include significant to count toward the M.S. in the case of a particular student’s research experience at the level of a half-time commitment individual program. Tuition and financial aid arrangements will over the course of three academic quarters. In any given normally be through the school in which the student is then enrolled. quarter, the half-time research commitment may be satisfied by a 50 percent appointment to a departmentally IN COMPUTER SCIENCE supported research assistantship, 6 units of independent Applications to the Ph.D. program and all supporting documents study (CS 393, 395, or 399), or a prorated combination of must be submitted and received online by December 9, 2008. See the two (such as a 25 percent research assistantship http://cs.stanford.edu/wiki/admissions for complete information. supplemented by 3 units of independent study). This Changes or updates to the admission process are posted in research must be carried out under the direction of the September and October, 2008. The following are general department primary or secondary adviser. requirements; contact the Computer Science Ph.D. administrator for 16. Supervised Writing and Research: In addition to the details. research experience outlined in the previous requirement, A student should plan and complete a coherent program of students must enroll in at least 3 units of independent study covering the basic areas of computer science and research (CS 393, 395, or 399) under the direction of their related disciplines. The student’s adviser has primary primary or secondary adviser. These units should be closely responsibility for the adequacy of the program, which is related to the research described in the first requirement, subject to review by the Ph.D. program committee. but focused more directly on the preparation of the 18. Each student, to remain in the Ph.D. program, must satisfy research report described in the next section. Note that the the breadth requirement covering introductory-level writing and research units described in parts (1) and (2) graduate material in major areas of computer science. A must be taken in addition to the 21 units required for the student who fulfills six of thirteen exams in the breadth specialization, although they do count toward the 45 units requirement may apply for candidacy prior to the second required for the degree. year in the program. The student must completely satisfy 17. Research Report: Students must complete a significant the breadth requirement by the end of nine quarters report describing their research and its conclusions. The (excluding Summer Quarters), and must pass a qualifying research report represents work that is publishable in a exam in the general area of the expected dissertation. journal or at a high-quality conference, although it is 19. As part of the training for the Ph.D., the student is required presumably longer and more expansive in scope than a to complete at least 4 units (a unit is 10 hours per week for typical conference paper. Two copies of the research report one quarter) as a course assistant or instructor for courses must be submitted to the Student Services office in the in Computer Science numbered 100 or above. department three weeks before the beginning of the 20. The most important requirement is the dissertation. After examination period in the student’s final quarter. Both the passing the required qualifying examination, each student primary and secondary adviser must approve the research must secure the agreement of a member of the department report before the distinction-in-research designation can be faculty to act as the dissertation adviser. In some cases, the conferred. dissertation adviser may be in another department. 21. The student must pass a University oral examination in the JOINT M.S. AND LAW DEGREE form of a defense of the dissertation. This is typically held Law students interested in pursuing an M.S. in Computer after all or a substantial portion of the dissertation research Science must apply for admission to the Computer Science has been completed. Department either (i) concurrently with applying to the Law School; 22. The student is expected to demonstrate the ability to or (ii) after being admitted to the Law School, but no later than the present scholarly material orally, both in the dissertation earlier of: (a) the end of the second year of law school; or (b) the defense and by a lecture in a department seminar. Computer Science Department’s admission deadline for the year 23. The dissertation must be accepted by a reading committee following that second year of law school. In addition to being composed of the principal dissertation adviser, a second admitted separately to the Law School and the Computer Science member from within the department, and a third member Department, students must secure permission from both academic chosen from within the University. The principal adviser and units to pursue degrees in those units as part of a joint degree at least one of the other committee members must be program. J.D./M.S. students may elect to begin their course of study Academic Council members. in either the Law School or the Computer Science Department. Faculty advisors from each academic unit will participate in the PH.D. MINOR IN COMPUTER SCIENCE planning and supervising of the student’s joint program. Students For a minor in Computer Science, a candidate must complete 20 must be enrolled full time in the Law School for the first year of law unduplicated units of computer science course work numbered 200 school. Otherwise, enrollment may be in the graduate school or the or above. At least three of the courses must be master’s core courses Law School and students may choose courses from either program to provide breadth and one course numbered 300 or above to provide regardless of where enrolled. Students must satisfy the requirements depth. One of the courses taken must include a significant for both the J.D. and the M.S. degrees as specified in the Stanford programming project to demonstrate programming efficiency. Bulletin or elsewhere. Courses must be taken for a letter grade and passed with a grade ‘B’ The Law School shall approve courses from the Computer

3 | Stanford Bulletin, 2008-09 or better. Applications for a minor in Computer Science are Students who intend to pursue a serious course of study in submitted at the same time as admission to candidacy. computer science may enter the program at a variety of levels, depending on their background. Students with little prior experience TEACHING AND RESEARCH ASSISTANTSHIPS IN or those who wish to take more time to study the fundamentals of COMPUTER SCIENCE programming should take 106A followed by 106B. Students in Graduate student assistantships are available. Half-time 106A need not have prior programming experience. Students with assistants receive a tuition scholarship for 8, 9, or 10 units per significant prior exposure to programming or those who want an quarter during the academic year, and in addition receive a monthly intensive introduction to the field should take 106X or may start stipend. directly in 106B. CS106A uses Java as its programming language; Duties for half-time assistants during the academic year involve CS106B and X use C++. No prior knowledge of these languages is approximately 20 hours of work per week. Course assistants (CAs) assumed, and the prior programming experience required for 103B help an instructor teach a course by conducting discussion sections, or X may be in any language. In all cases, students are encouraged to consulting with students, and grading examinations. Research discuss their background with the instructors responsible for these assistants (RAs) help faculty and senior staff members with research courses. in computer science. Most course and research assistantships are After the introductory sequence, Computer Science majors and held by Ph.D. students. If there is an insufficient number of Ph.D. those who need a significant background in computer science for students to staff teaching and research assistantships, then these related majors in engineering should take 103, 107 and 110. CS 103 positions are open to master’s students. However, master’s students offers an introduction to the mathematical and theoretical should not plan on being appointed to an assistantship. foundations of computer science. CS 107 exposes students to a Students with fellowships may have the opportunity to variety of programming concepts that illustrate critical strategies supplement their stipends by serving as graduate student assistants. used in systems development; 110 builds on this material, focusing on the development of larger-scale software making use of systems and networking abstractions. in In summary: COMPUTER For exposure: 1C For nontechnical use: 105 For scientific use: 106A SCIENCE (CS) For a technical introduction: 106A COURSES For significant use: 106A,B or 106X, along with 103, 107, and 110 UNDERGRADUATE COURSES IN COMPUTER For information on graduate programs in the Department of SCIENCE Computer Science, see the “Computer Science” and “School of Undergraduates are advised to consult the “Guide to Choosing Engineering” sections of this bulletin. Introductory Courses” in the “Computer Science” section of this bulletin.

COMPUTER SCIENCES COURSE CATALOG CS 1C. Introduction to Computing at Stanford NUMBERING SYSTEM For those with limited experience with computers or who want to The first digit of a CS course number indicates its general level learn more about Stanford’s computing environment. Topics of sophistication: include: computer maintenance and security, computing resources, 001-099 Service courses for nontechnical majors Internet privacy, and copyright law. One-hour lecture/demonstration 100-199 Other service courses, basic undergraduate in dormitory clusters prepared and administered weekly by the 200-299 Advanced undergraduate/beginning graduate Resident Computer Coordinator (RCC). Final project. Not a 300-399 Advanced graduate programming course. 1 unit, Aut (Staff) 400-499 Experimental 500-599 Graduate seminars CS 2C. Intermediate Computing at Stanford The tens digit indicates the area of Computer Science it Continuation of 1C. Sound, image and video editing including addresses: understanding and publishing multimedia. Applications include 00-09 Introductory, miscellaneous GarageBand, Photoshop, Acrobat, iMovie, Final Cut Pro, and iDVD. 10-19 Hardware Systems One-hour lecture/workshop in dormitory clusters prepared and 20-29 Artificial Intelligence administered weekly by the Resident Computer Coordinator (RCC). 30-39 Numerical Analysis Advanced section also available. Final project. Not a programming 40-49 Software Systems course. 50-59 Mathematical Foundations of Computing 1 unit, Win (Chan, K)

60-69 Analysis of Algorithms 70-79 Computational Biology and Interdisciplinary Topics CS 21N. Can Machines Know? Can Machines Feel? 90-99 Independent Study and Practicum Stanford Introductory Seminar. Preference to freshmen. Can mental attitudes attributed to people and sometimes to animals, including knowledge, belief, desire, and intention, also be ascribed to GUIDE TO CHOOSING INTRODUCTORY COURSES machines? Can light sensors have a belief? Can a pool cleaning Students arriving at Stanford have widely differing backgrounds robot or tax-preparation software have an intention? If not, why not? and goals, but most find that the ability to use computers effectively If yes, what are the rules of such ascription, and do they vary is beneficial to their education. The department offers many between human beings and machines? Sources include philosophy, introductory courses to meet the needs of these students. neuroscience, computer science, and artificial intelligence. Topics: For students whose principal interest is an exposure to the logic, probability theory, and elements of computation. Students fundamental ideas behind computer science and programming, CS present a paper. GER:DB-EngrAppSci 105 is the most appropriate course. It is intended for students in 3 units, Aut (Shoham, Y) nontechnical disciplines who expect to make some use of computers, but who do not expect to go on to more advanced courses. CS 105 meets the General Education Disciplinary Breadth Requirement in Engineering and Applied Sciences and includes an introduction to programming and the use of modern Internet-based technologies. Students interested in learning to use the computer should consider CS 1C, Introduction to Computing at Stanford.

4 | Stanford Bulletin, 2008-09

CS 45N. Computers and Photography: From Capture to Sharing CS 103X. Discrete Structures (Accelerated) Stanford Introductory Seminar. Preference to freshmen with Covers the material in 103A and B in a single quarter. The exerience in photography and use of computers. How a photographer mathematical foundations of computer science.Introduction to set creates photos, makes them available for computer viewing, reliably theory and logic, number theory, functions and relations, stores them, organizes them, tags them, searches them, and combinatorics, and graph theory. Prerequisite: background in distributes them online. Access to a digital SLR camera and to mathematical formalism and mathematical proof. GER:DB-Math PhotoShop Elements or equivalent software is required; no 3-4 units, not given this year programming experience required. CS 105. Introduction to Computers 3 units, Aut (Garcia-Molina, H) For non-technical majors. What computers are and how they work. CS 48N. The Science of Art Practical experience in programming. Construction of computer Stanford Introductory Seminar. Preference to freshmen. The programs and basic design techniques. A survey of Internet interwoven histories of science and Western art from the technology and the basics of computer hardware. Students in Renaissance to the 19th century. Emphasis is on the revolutions in technical fields and students looking to acquire programming skills science and mathematics that inspired parallel revolutions in the should take 106A or 106X. Students with prior computer science visual arts such as Brunelleschi’s invention of linear perspective, experience at the level of 106 or above require consent of instructor. Newton’s discoveries in geometric optics, and the theories of color Prerequisite: minimal math skills. GER:DB-EngrAppSci vision proposed by Goethe, Young, and Helmholtz. The scientific 3-5 units, Aut (Young, P), Spr (Young, P) principles behind image making including digital image synthesis CS 106A. Programming Methodology and computer graphics. No programming experience required. (Same as ENGR 70A.) Introduction to the engineering of computer GER:DB-EngrAppSci applications emphasizing modern software engineering principles: 3 units, Win (Levoy, M) object-oriented design, decomposition, encapsulation, abstraction, CS 51N. Visionaries in Computer Science and testing. Uses the Java programming language. Emphasis is on Stanford Introductory Seminar. Preference to freshmen. How good programming style and the built-in facilities of the Java visionaries anticipated the future; how could they see what their language. No programming experience required. GER:DB-EngrAppSci contemporaries did not? How can others strive for comparable 3-5 units, Aut (Sahami, M), Win (Roberts, E), Spr (Young, P), achievements? The insights of Alan Turing, Vannevar Bush, Richard Sum (Staff)

Licklider, Ted Nelson, Morton Heilig, Ivan Sutherland, Douglas CS 106B. Programming Abstractions Engelbart, Alan Kay, Frederick Brooks, and others. (Same as ENGR 70B.) Abstraction and its relation to programming. 3 units, Spr (Koltun, V) Software engineering principles of data abstraction and modularity. CS 73N. Business on the Information Highways Object-oriented programming, fundamental data structures (such as Stanford Introductory Seminar. Preference to freshmen. The stacks, queues, sets) and data-directed design. Recursion and capabilities of the Internet and its services. Writing for the web. The recursive data structures (linked lists, trees, graphs). Introduction to effect on commerce, education, government, and health care. time and space complexity analysis. Uses the programming language Technical and business alternatives. Who is hurt and who benefits C++ covering its basic facilities. Prerequisite: 106A or equivalent. from the changes? Participants develop web publications. GER:DB-EngrAppSci 3 units, Spr (Wiederhold, G; Barr, A; Tessler, S) 3-5 units, Win (Cain, G), Spr (Roberts, E), Sum (Staff)

CS 74N. Digital Dilemmas CS 106L. Standard C++ Programming Laboratory Stanford Introductory Seminar. Preference to freshmen. Issues where Supplemental lab to 106B and 106X. Additional features of standard policy decision making requires understanding computer and C++ programming practice. Possible topics include advanced C++ communications technology. Technology basics taught in non- language features, standard libraries, stl containers and algorithms, technology terms. Topics include consumer privacy, government object memory management, operator overloading, and inheritance. surveillance, file sharing and intellectual property. Focus is on Prerequisite: consent of instructor. Corequisite: 106B or 106X. technology in elections including topics such as voter registration 1 unit, Aut (Staff), Win (Staff), Spr (Staff) databases, and electronic and Internet voting. GER:DB-EngrAppSci CS 106X. Programming Abstractions (Accelerated) 3 units, Aut (Dill, D) (Same as ENGR 70X.) Intensive version of 106B for students with a CS 103. Mathematical Foundations of Computing strong programming background interested in a rigorous treatment Mathematical foundations required for computer science, including of the topics at an accelerated pace. Additional advanced material propositional predicate logic, induction, sets, functions, and and more challenging projects. Prerequisite: excellence in 106A or relations. Formal language theory, including regular expressions, equivalent, or consent of instructor. GER:DB-EngrAppSci grammars, finite automata, Turing machines, and NP-completeness. 3-5 units, Aut (Hurlbutt, T), Spr (Cain, G)

Mathematical rigor, proof techniques, and applications. May not be CS 107. Computer Organization and Systems taken by students who have completed 103A,B or 103X. Autumn topics include: advanced memory management features of Prerequisite: 106A or equivalent. GER:DB-Math C and C++; the difference between imperative and object-oriented 3-5 units, Win (Plummer, R) paradigms. The functional paradigm (using LISP) and concurrent CS 103A. Discrete Mathematics for Computer Science programming. Other modern languages such as Python, Objective C, Final offering of this course. Mathematical foundations required for and C#. Spring topics include: elements of computer architecture; computer science. Topics: propositional and predicate logic, proof advanced memory management features of C; elements of code techniques, induction, recursion, combinatorics, and functions. compilation; concurrency and threading. Prerequisite: 106B or X, or Corequisite: 106A or X. GER:DB-Math consent of instructor. GER:DB-EngrAppSci 3 units, Aut (Plummer, R) 3-5 units, Aut (Cain, G), Spr (Zelenski, J)

CS 103B. Discrete Structures CS 108. Object-Oriented Systems Design Final offering of this course. Continuation of 103A. Topics: analysis Software design and construction in the context of large OOP of algorithms, recurrence relations, mathematical formulations of libraries. Taught in Java. Topics: OOP design, design patterns, basic data models (sets, relations, linear models, trees and graphs), testing, graphical user interface (GUI) OOP libraries, software regular expressions, grammars, and finite automata. Corequisite: engineering strategies, approaches to programming in teams. 106B or X. GER:DB-Math Prerequisite: 107. GER:DB-EngrAppSci 3 units, Win (Sahami, M) 3-4 units, Aut (Jimenez, O), Win (Young, P)

5 | Stanford Bulletin, 2008-09

CS 109. Introduction to Probability for Computer Scientists CS 144. Introduction to Computer Networking Topics include: counting and combinatorics, random variables, Principles and practice. Structure and components of computer conditional probability, independence, distributions, expectation, networks, packet switching, layered architectures. Applications: point estimation, and limit theorems. Applications of probability in web/http, voice-over-IP, p2p file sharing and socket programming. computer science including machine learning and the use of Reliable transport: TCP/IP, reliable transfer, flow control, and probability in the analysis of algorithms. Prerequisites: 106B or X, congestion control. The network layer: names and addresses, and MATH 51 or equivalent. GER:DB-EngrAppSci routing. Local area networks: ethernet and switches. Wireless 3-5 units, Spr (Sahami, M) networks and network security. Prerequisite: 108 or equivalent. 3-4 units, Aut (Levis, P) CS 110. Principles of Computer Systems Building software systems using facilities of operating systems and CS 145. Introduction to Databases networking. Topics include: elements of processes and currency Database design and use of database management systems for mechanics, interprocess communication, storage systems and file applications. The relational model, relational algebra, and SQL, the management, networking layers and abstractions, sockets, and standard language for creating, querying, and modifying relational understanding of distributed systems. Prerequisites: 103 or 103B, and object-relational databases. XML data including the query and 107. GER:DB-EngrAppSci languages XPath and XQuery. UML database design, and relational 3-5 units, Spr (Rosenblum, M) design principles based on functional dependencies and normal

CS 121. Introduction to Artificial Intelligence forms. Indexes, views, transactions, authorization, integrity (Only one of 121 or 221 counts towards any CS degree program.) constraints, and triggers. Advanced topics from data warehousing, Concepts, representations, and techniques used in building practical data mining, web data management, Datalog, data integration, data computational systems (agents) that appear to display artificial streams and continuous queries, and data-intensive web services. intelligence (AI), through the use of adaptive information processing Prerequisites: 103 or 103B, and 107. GER:DB-EngrAppSci 3-4 units, Aut (Widom, J) algorithms. Topics: history of AI, reactive systems, heuristic search, planning, constraint satisfaction, knowledge representation and CS 147. Introduction to Human-Computer Interaction Design uncertain reasoning, machine learning, classification, applications to Usability and affordances, direct manipulation, systematic design language, and vision. Prerequisites: 103 or 103B, and facility with methods, user conceptual models and interface metaphors, human differential calculus, vector algebra, and probability theory. cognitive and physical ergonomics, information and interactivity GER:DB-EngrAppSci structures, and design tools and environments. Team project in 3 units, Spr (Latombe, J), Sum (Staff) interaction design. Prerequisite: 106B or X or equivalent

CS 124. From Languages to Information programming experience. 3-4 units, Aut (Klemmer, S) (Same as LINGUIST 180.) Automated processing of less structured information: human language text and speech, web pages, social CS 148. Introductory Computer Graphics networks, genome sequences, with goal of automatically extracting (Only one of 148 or 248 counts towards any CS degree program.) meaning and structure. Methods include: string algorithms, automata For undergraduates; M.S. students and those interested in continuing and transducers, hidden Markov models, graph algorithms, XML in graphics, register for 248. Two- and three-dimensional computer processing. Applications such as information retrieval, text graphics. Topics: input and display devices, scan conversion of classification, social network models, machine translation, genomic geometric primitives, two- and three-dimensional transformations sequence alignment, word meaning extraction, and speech and clipping, windowing techniques, curves and curved surfaces, recognition. three-dimensional viewing and perspective, hidden surface removal, 3-4 units, Win (Jurafsky, D) illumination and color models, OpenGL, and 3-D modeling tools.

CS 140. Operating Systems and Systems Programming Emphasis is on practical skills in using graphics libraries and tools. Operating systems design and implementation. Basic structure; Programming using C/C++ and OpenGL, with demos in SoftImage. synchronization and communication mechanisms; implementation of Prerequisites: 107, MATH 103. GER:DB-EngrAppSci 3 units, Win (Hanrahan, P), Sum (Staff) processes, process management, scheduling, and protection; memory organization and management, including virtual memory; I/O device CS 154. Introduction to Automata and Complexity Theory management, secondary storage, and file systems. Prerequisite: 107. Regular sets: finite automata, regular expressions, equivalences GER:DB-EngrAppSci among notations, methods of proving a language not to be regular. 3-4 units, Aut (Rosenblum, M), Win (Mazieres, D), Sum (Staff) Context-free languages: grammars, pushdown automata, normal

CS 142. Web Programming and Security forms for grammars, proving languages non-context-free. Turing The web uses complex applications that run on heterogeneous machines: equivalent forms, undecidability. Nondeterministic Turing browsers that may be built using programming technologies such as machines: properties, the class NP, complete problems for NP, Javascript, AJAX, Google Web Toolkit, Apache Struts, Java Server Cook’s theorem, reducibilities among problems. Prerequisites: 103 Faces, and Rails. How core web technologies work; common or 103B. GER:DB-EngrAppSci 3-4 units, Aut (Dill, D), Spr (Motwani, R), Sum (Staff) security vulnerabilities; and how to build secure web applications that avoid them. Prerequisities: 107 and108. CS 154N. Introduction to NP Completeness 3 units, Win (Boneh, D; Mitchell, J) Turing machines: equivalent forms, undecidability. Nondeterministic

CS 143. Compilers Turing machines: properties, the class NP, complete problems for Principles and practices for design and implementation of compilers NP, Cook’s theorem, reducibilities among problems. Students and interpreters. Topics: lexical analysis; parsing theory; symbol participate in approximately the last half of 154. Prerequisite: formal tables; type systems; scope; semantic analysis; intermediate languages and automata as in first part of 154. 2 units, Aut (Dill, D), Spr (Motwani, R) representations; runtime environments; code generation; and basic program analysis and optimization. Students construct a compiler for CS 155. Computer and Network Security a simple object-oriented language during course programming For seniors and first-year graduate students. Principles of computer projects. Prerequisites: 103 or 103B, and 107. GER:DB-EngrAppSci systems security. Attack techniques and how to defend against them. 3-4 units, Aut (Aiken, A), Sum (Staff) Topics include: network attacks and defenses, holes, application security (web, email, databases), viruses, social engineering attacks, privacy, and digital rights management. Course projects focus on building reliable code. Prerequisite: 140. Recommended: basic Unix. GER:DB-EngrAppSci 3 units, Spr (Boneh, D; Mitchell, J)

6 | Stanford Bulletin, 2008-09

CS 156. Calculus of Computation CS 191. Senior Project Decision procedures with applications to analyzing and developing Restricted to Computer Science and Computer Systems Engineering robust software. Logic review. Propositional and first-order logic; students. Group or individual projects under faculty direction. induction. Verification: methods for proving correctness of sequential Register using instructor’s section number. A project can be either a programs using first-order reasoning; need for decision procedures. significant software application or publishable research. Software Decision procedures: algorithms that decide the validity of logical application projects include substantial programming and modern formulas for common theories including SAT, equality, arithmetic, user-interface technologies and are comparable in scale to shareware recursive data structures, and arrays. Combination theories and programs or commercial applications. Research projects may result combination of decision procedures. Static analysis: algorithms for in a paper publishable in an academic journal or presentable at a deducing program properties. Projects include writing verified pro- conference. Required public presentation of final application or grams. Prerequisites: 103, 106, or equivalents. GER:DB-EngrAppSci research results. 3-4 units, Aut (Manna, Z) 1-6 units, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff)

CS 157. Logic and Automated Reasoning CS 191W. Writing Intensive Senior Project An elementary exposition from a computational point of view of Restricted to Computer Science and Computer Systems Engineering propositional and predicate logic, axiomatic theories, and theories students. Writing-intensive version of CS191. Register using the with equality and induction. Interpretations, models, validity, proof, section number of an Academic Council member. strategies, and applications. Automated deduction: polarity, 3-6 units, Aut (Staff), Win (Staff), Spr (Staff) skolemization, unification, resolution, equality. Prerequisite: 103 or CS 192. Programming Service Project 103B. GER:DB-EngrAppSci Restricted to Computer Science students. Appropriate academic 3 units, Aut (Genesereth, M) credit (without financial support) is given for volunteer computer CS 161. Design and Analysis of Algorithms programming work of public benefit and educational value. Worst and average case analysis. Recurrences and asymptotics. 1-4 units, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff)

Efficient algorithms for sorting, searching, and selection. Data CS 193C. Client-Side Internet Technologies structures: binary search trees, heaps, hash tables. Algorithm design Client-side technologies used to create web sites such as techniques: divide-and-conquer, dynamic programming, greedy sophisticated Web 2.0 interfaces similar to Google maps. XHTML, algorithms, amortized analysis, randomization. Algorithms for CSS, JavaScript, document object model (DOM), AJAX, and Flash. fundamental graph problems: minimum-cost spanning tree, Prerequisite: programming experience at the level of 106A. connected components, topological sort, and shortest paths. Possible 3 units, not given this year additional topics: network flow, string searching. Prerequisite: 103 or 103B; 109 or STATS 116. GER:DB-EngrAppSci CS 193D. Professional Software Development with C++ 3-4 units, Aut (Plotkin, S), Win (Roughgarden, T), Sum (Staff) Programming techniques and methodologies. Language concepts including object-oriented design, memory management, and the CS 164. Computing with Physical Objects: Algorithms for standard library. Modern software development concepts such as Shape and Motion design patterns, test-driven development, extreme programming, and Algorithms and data structures deadling with the representation and XML. Prerequisites: basic C++ or significant experience in C or manipulation of physical objects and entities in the computer. Java. GER:DB-EngrAppSci Computational structures for shape and motion, shape fitting and 3 units, not given this year matching, triangulations and other spatial subdivisions, and low- dimensional search and optimization. Examples relevant to computer CS 193H. High Performance Web Sites graphics, computer vision, robotics and geometric computation Best practices for speeding up web pages extracted from Google, emphasizing algorithmic paradigms applicable to multidimensional Yahoo!, and other web sites. Students conduct experiments to quantify data. Prerequisites: CS 103 or 103B, and CS 109 or STATS 116, and web performance. Prerequisites: JavaScript, CSS, and HTML. 3 units, Aut (Souders, S) CS 106B/X or consent of instructor. 3 units, Win (Guibas, L) CS 193P. iPhone Application Programming

CS 178. Digital Photography Tools and APIs required to build applications for the iPhone Scientific, artistic, and computing aspects of digital photography. platform using the iPhone SDK. User interface designs for mobile Topics: lenses and optics, light and sensors, color theory, optical devices and unique user interactions using multitouch technologies. effects in nature, the laws of perspective and depth of field, sampling Object-oriented design using model-view-controller pattern, memory and noise, the camera as a computing platform, image processing management, Objective-C programming language. iPhone APIs and and editing, and computational photography. Counts as a CS elective tools including Xcode, Interface Builder and Instruments on Mac OS in the Graphics track. Prerequisites: basic calculus; students must X. Other topics include: core animation, bonjour networking, mobile have a digital camera with manual control over shutter speed and device power management and performance considerations. aperture. No programming experience required. Prerequisites: C language and programming experience at the level 3-4 units, Spr (Levoy, M) of 106B or X. Recommended: UNIX, object-oriented programming, graphical toolkits. CS 181. Computers, Ethics, and Public Policy 3 units, Aut (Marcos, P) (Formerly 201.) Primarily for majors entering computer-related fields. Ethical and social issues related to the development and use of CS 194. Software Project computer technology. Ethical theory, and social, political, and legal Design, specification, coding, and testing of a significant team considerations. Scenarios in problem areas: privacy, reliability and programming project under faculty supervision. Documentation risks of complex systems, and responsibility of professionals for includes a detailed proposal. Public demonstration of the project at applications and consequences of their work. Prerequisite: 106B or the end of the quarter. Prerequisite: 108. GER:DB-EngrAppSci 3 units, Spr (Plummer, R) X. GER:EC-EthicReas 3-4 units, Win (Johnson, M) CS 196. Microcomputer Consulting Focus is on Macintosh and Windows system administration, maintenance and troubleshooting. Hardware and software concepts. Topics include operating systems, networking, security, troubleshooting methodology with emphasis on Stanford’s computing environment. Not a programming course. Prerequisite: 1C or equivalent. 2 units, Win (Ly, J), Spr (Ly, J)

7 | Stanford Bulletin, 2008-09

CS 198. Teaching Computer Science CS 222. Rational Agency and Intelligent Interaction Students lead a discussion section of 106A while learning how to (Same as PHIL 358.) For advanced undergraduates, and M.S. and teach a programming language at the introductory level. Focus is on beginning Ph.D. students. Logic-based methods for knowledge teaching skills, techniques, and course specifics. Application and representation, information change, and games in artificial interview required; see http://cs198.stanford.edu. intelligence and philosophy. Topics: knowledge, certainty, and 3-4 units, Aut (Sahami, M; Kim, I; Thamrongrattanarit, A), Win belief; time and action; belief dynamics; preference and social (Sahami, M; Kim, I; Thamrongrattanarit, A), Spr (Sahami, M; choice; games; and desire and intention. Prerequisite: propositional Kim, I; Thamrongrattanarit, A) and first-order logic. Recommended: modal logic; game theory. 3 units, Spr (Shoham, Y) CS 199. Independent Work Special study under faculty direction, usually leading to a written CS 223A. Introduction to Robotics report. Letter grade; if not appropriate, enroll in 199P. Topics: robotics foundations in kinematics, dynamics, control, 1-6 units, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff) motion planning, trajectory generation, programming and design.

CS 199P. Independent Work Recommended: matrix algebra. 3 units, Win (Kolarov, K) 1-6 units, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff) CS 223B. Introduction to Computer Vision GRADUATE COURSES IN COMPUTER Fundamental issues and techniques of computer vision. Image formation, edge detection and image segmentation, stereo, motion, SCIENCE shape representation, recognition. Primarily for graduate students or advanced undergraduates. 3 units, Win (Thrun, S)

CS 202. Law for Computer Science Professionals CS 224M. Multi-Agent Systems Intellectual property law as it relates to computer science including For advanced undergraduates, and M.S. and beginning Ph.D. copyright registration, patents, and trade secrets; contract issues such students. Topics: logics of knowledge and belief, other logics of as non-disclosure/non-compete agreements, license agreements, and mental state, theories of belief change, multi-agent probabilities, works-made-for-hire; dispute resolution; and principles of business essentials of game theory, social choice and mechanism design, formation and ownership. Emphasis is on topics of current interest multi-agent learning, communication. Applications discussed as such as open source and the free software movement, peer-to-peer appropriate, but emphasis is on conceptual matters and theoretical sharing, encryption, data mining, and spam. foundations. Prerequisites: basic probability theory and first-order 1 unit, Aut (Hansen, D) logic. 3 units, Aut (Shoham, Y) CS 204. Computational Law Legal informatics based on representation of regulations in CS 224N. Natural Language Processing computable form. Encoding regulations facilitate creation of legal (Same as LINGUIST 280.) Methods for processing human language information systems with significant practical value. Convergence of information and the underlying computational properties of natural technological trends, growth of the Internet, advent of semantic web languages. Syntactic and semantic processing from linguistic and technology, and progress in computational logic make computational algorithmic perspectives. Focus is on modern quantitative techniques law prospects better. Topics: current state of computational law, in NLP: using large corpora, statistical models for acquisition, prospects and problems, philosophical and legal implications. translation, and interpretation; and representative systems. Prerequisite: basic concepts of programming. Prerequisites: CS 121/221 or CS124/LINGUIST 180, CS103, 3 units, Spr (Genesereth, M) CS109. 3-4 units, Spr (Manning, C) CS 205A. Mathematical Methods for Robotics, Vision, and Graphics CS 224S. Speech Recognition and Synthesis Continuous mathematics background necessary for research in (Same as LINGUIST 281.) Automatic speech recognition, speech robotics, vision, and graphics. Possible topics: linear algebra; the synthesis, and dialogue systems. Focus is on key algorithms conjugate gradient method; ordinary and partial differential including noisy channel model, hidden Markov models (HMMs), equations; vector and tensor calculus. Prerequisites: 106B or X; Viterbi decoding, N-gram language modeling, unit selection MATH 51 and 113; or equivalents. synthesis, and roles of linguistic knowledge. Prerequisite: 3 units, Aut (Fedkiw, R) programming experience. Recommended: CS 221 or 229. 2-4 units, Win (Jurafsky, D) CS 205B. Mathematical Methods for Fluids, Solids, and Interfaces CS 224U. Natural Language Understanding Numerical methods for simulation of problems involving solid (Same as LINGUIST 188, LINGUIST 288.) Machine understanding mechanics and fluid dynamics. Focus is on practical tools needed for of human language. Computational semantics (determination of simulation, and continuous mathematics involving nonlinear sense, event structure, thematic role, time, aspect, hyperbolic partial differential equations. Possible topics: finite synonymy/meronymy, causation, compositional semantics, element method, highly deformable elastic bodies, plasticity, treatment of scopal operators), and computational pragmatics and fracture, level set method, Burgers’ equation, compressible and discourse (coherence relations, anaphora resolution, information incompressible Navier-Stokes equations, smoke, water, fire, and packaging, generation). Theoretical issues, online resources, and solid-fluid coupling. Prerequisite: 205A or equivalent. relevance to applications including question answering, 3 units, Spr (Fedkiw, R) summarization, and textual inference. Prerequisites: one of CS 221. Artificial Intelligence: Principles and Techniques LINGUIST 180, CS 224N,S; and logic such as LINGUIST 130A or (Only one of 121 or 221 counts towards any CS degree program.) B, CS 157, or PHIL150). 2-4 units, alternate years, not given this year Topics: search, constraint satisfaction, knowledge representation, probabilistic models, machine learning, neural networks, vision, CS 225A. Experimental Robotics robotics, and natural language understanding. Prerequisites: 103 or Hands-on. Topics: kinematic and dynamic control of motion, 103B; 106B or 106X; and exposure to probability. Recommended: compliant motion and force control, sensor-based collision 107 and facility with basic differential calculus. avoidance, motion planning, dynamic skills, and robot-human 3-4 units, Win (Ng, A) interfaces. Limited enrollment. Prerequisite: 223A. 3 units, not given this year

8 | Stanford Bulletin, 2008-09

CS 225B. Robot Programming Laboratory CS 229. Machine Learning For robotics and non-robotics students. Students program mobile Topics: statistical pattern recognition, linear and non-linear robots to exhibit increasingly complex behavior (simple dead regression, non-parametric methods, exponential family, GLIMs, reckoning and reactivity, goal-directed motion, localization, complex support vector machines, kernel methods, model/feature selection, tasks). Topics: motor control and sensor characteristics; sensor learning theory, VC dimension, clustering, density estimation, EM, fusion, model construction, and robust estimation; control regimes dimensionality reduction, ICA, PCA, reinforcement learning and (subsumption, potential fields); probabalistic methods, including adaptive control, Markov decision processes, approximate dynamic Markov localization and particle filters. Student programmed robot programming, and policy search. Prerequisites: linear algebra, and contest. Programming is in C++ on Unix machines, done in teams. basic probability and statistics. Prerequisite: programming at the level of 106B, 106X, 205, or 3 units, Aut (Ng, A) equivalent. CS 240. Advanced Topics in Operating Systems 3-4 units, Aut (Konolige, K) Recent research. Classic and new papers. Topics: virtual memory CS 226. Statistical Techniques in Robotics management, synchronization and communication, file systems, For students seeking to develop robust robot software and those protection and security, operating system extension techniques, fault interested in real-world applications of statistical theory. tolerance, and the history and experience of systems programming. Probabilistic state estimation, Bayes filters, Kalman filters, Prerequisite: 140 or equivalent. information filters, and particle filters. Simultaneous localization and 3 units, Aut (Engler, D), Spr (Engler, D) mapping techniques, and multi-robot sensor fusion. Markov CS 240C. Advanced Operating Systems Implementation techniques for making decisions under uncertainty, and probabilistic Operating system techniques for meeting the performance, security, control algorithms and exploration. flexibility, and robustness needs of demanding applications. Review 3 units, Spr (Staff) of hardware/software interface and traditional operating system CS 227. Reasoning Methods in Artificial Intelligence concepts. Recent operating systems research. Lab to apply concepts. Technical presentation of logical algorithmic techniques for problem Students work with a minimal operating system capable of running solving in AI. Combines formal algorithmic analysis with a on standard PC hardware. Operating system written in C with some description of recent applications. Topics: representation and assembly. Prerequisite: 140 or consent of instructor. (Mazieres) modelling, propositional satisfiability, constraint satisfaction, 3 units, not given this year planning and scheduling, advanced topics. Focus is on recent results. CS 240D. Distributed Storage Systems Prerequisites: familiarity with basic notions in data structures and File system implementation, low-level database storage techniques, with techniques in algorithm design and analysis. Recommended: and distributed programming. File system structures, journaling and previous or concurrent course in AI. logging, I/O system performance, RAID (redundant arrays of 3 units, Spr (Yorke-Smith, N) inexpensive disks), remote procedure call abstraction, and systems CS 227B. General Game Playing illustrating these concepts. File systems, distributed computing, A general game playing system accepts a formal description of a replication and consistency, fault tolerance, and crash recovery. game to play it without human intervention or algorithms designed Programming assignments. Final project to build a functioning Unix for specific games. Hands-on introduction to these systems and file system. Prerequisites: C++ and familiarity with Unix; 140 or artificial intelligence techniques such as knowledge representation, consent of instructor. (Mazieres) reasoning, learning, and rational behavior. Students create GGP 3 units, not given this year systems to compete with each other and in external competitions. CS 240E. Low Power Wireless System Software Prerequisite: programming experience. Recommended: 103 or The structure and implementation of software systems for low power equivalent. (Genesereth) embedded sensors; how to build software that can run unattended for 3 units, Spr (Genesereth, M) years on small batteries. Topics: hardware trends, energy profiles, CS 228. Structured Probabilistic Models: Principles and execution models, aggregation, storage, application requirements, Techniques allocation, power management, resource management, scheduling, Probabilistic modeling languages for representing complex domains, time synchronization, programming models, software design, and algorithms for reasoning and decision making using these fault tolerance. Students build working systems on TinyOS, a low- representations, and learning these representations from data. Focus power embedded operation system. is on probabilistic graphic models, including Bayesian and Markov 3 units, not given this year networks, extensions to temporal modeling such as hidden Markov CS 240X. Advanced Operating Systems II models and dynamic Bayesian networks, and extensions to decision Same content as 240, with expanded topics focusing on more making such as influence diagrams. Basic techniques and their difficult and specialized papers. Recent topics in systems research. applications to domains including speech recognition, biological 3 units, not given this year modeling and discovery, medical diagnosis, message encoding, vision, and robot motion planning. Prerequisites: basic probability CS 242. Programming Languages theory and algorithm design and analysis. Central concepts in modern programming languages, impact on 3 units, Win (Koller, D) software development, language design trade-offs, and implementation considerations. Functional, imperative, and object- CS 228T. Structured Probabalistic Models: Theoretical oriented paradigms. Formal semantic methods and program analysis. Foundations Modern type systems, higher order functions and closures, For students interested in advanced methods in machine learning and exceptions and continuations. Modularity, object-oriented languages, probabilistic AI. Theoretical foundations and extension for the ideas and concurrency. Runtime support for language features, and algorithms covered in CS 228. Topics include theory and interoperability, and security issues. Prerequisite: 107, or experience advanced algorithms for approximate inference in graphical models, with Lisp, C, and an object-oriented language. representation and inference in continuous processes, and theory and 3 units, Aut (Mitchell, J) algorithms for learning with missing data and hidden variables. Pre- or corequisites: CS 228; strong mathematical foundation. CS 243. Program Analysis and Optimizations 2-3 units, Win (Koller, D) Program analysis techniques used in compilers and software development tools to improve productivity, reliability, and security. The methodology of applying mathematical abstractions such as graphs, fixpoint computations, binary decision diagrams in writing complex software, using compilers as an example. Topics include data flow analysis, instruction scheduling, register allocation, parallelism, data locality, interprocedural analysis, and garbage collection. Prerequisites: 103 or 103B, and 107. 3-4 units, Win (Lam, M)

9 | Stanford Bulletin, 2008-09

CS 244. Advanced Topics in Networking CS 249A. Object-Oriented Programming from a Modeling and Classic papers, new ideas, and research papers in networking. Simulation Perspective Architectural principles: naming, addressing, routing; congestion Topics: large-scale software development approaches, encapsulation, control, traffic management, QoS; wireless and mobility; overlay use of inheritance and dynamic dispatch, design of interfaces and networks and virtualization; network security; switching and routing; interface/implementation separation, exception handling, design content distribution; and proposals for future Internet structures. patterns, minimalizing dependencies and value-oriented Prerequisite: 144 or equivalent. programming. The role of programming 3-4 units, Win (McKeown, N) conventions/style/restrictions in surviving object-oriented

CS 244B. Distributed Systems programming for class libraries, frameworks, and programming-in- Distributed operating systems and applications issues, emphasizing the-large; general techniques for object-oriented programming. high-level protocols and distributed state sharing as the key Prerequisites: C, C++, and programming methodology as developed technologies. Topics: distributed shared memory, object-oriented in 106B or X, and 107 (107 may be taken concurrently). distributed system design, distributed directory services, atomic Recommended: 193D. 3 units, Aut (Cheriton, D) transactions and time synchronization, application-sufficient consistency, file access, process scheduling, process migration, and CS 249B. Advanced Object-Oriented Programming storage/communication abstractions on distribution, scale, How to produce reasonable-cost, high quality software such as next- robustness in the face of failure, and security. Prerequisite: 249A. stage, large-scale systems that handle life-critical systems. Software Corequisite: 244A. process, people, practice, and audit: integrating invariant checks with 3 units, Spr (Cheriton, D) production software; collection implementation; generic

CS 244C. Readings and Projects in Distributed Systems programming and templates; design of value types; named Companion project option for 244B. Corequisite: 244B. descriptions for large value types; memory management; controlling 3-6 units, Spr (Guibas, L) placement; locality and consumption; concurrency with modular object-oriented programming. Inheritance: when and why multiple CS 244E. Low Power Wireless Networking inheritance naming, directories, manager, and other design patterns. Challenges of low power wireless networking protocols and 3 units, Win (Cheriton, D) applications. Topics: the OSI model, 802.11, Bluetooth, 802.15.4, Zigbee, 6lowpan, hardware considerations, traffic patterns, media CS 255. Introduction to Cryptography access (CSMA, TDMA, RTS/CTS, idle listening), DSSS, UWB, For advanced undergraduates and graduate students. Theory and radio propagation models, cross-layer interactions, flooding, practice of cryptographic techniques used in computer security. dissemination, gossip, epidemics, probabilistic approaches, global Topics: encryption (single and double key), digital signatures, versus local communication, and in-network processing. Students pseudo-random bit generation, authentication, electronic commerce read papers and build working protocols on TinyOS, a low-power (anonymous cash, micropayments), key management, PKI, zero- embedded operating system. knowledge protocols. Prerequisite: basic probability theory. 3 units, Win (Boneh, D) 3 units, not given this year

CS 245. Database Systems Principles CS 256. Formal Methods for Reactive Systems File organization and access, buffer management, performance Formal methods for specification, verification, and development of analysis, and storage management. Database system architecture, concurrent and reactive programs. Reactive systems: syntax and query optimization, transaction management, recovery, concurrency semantics, fairness requirements. Specification language: temporal control. Reliability, protection, and integrity. Design and formulas (state, future, and past) and omega-automata. Hierarchy of management issues. Prerequisites: 145, 161. program properties: safety, guarantee, obligation, response, 3 units, Win (Garcia-Molina, H), Sum (Staff) persistence, and reactivity. Invariant generation. Deductive verification of programs: verification diagrams and rules, CS 247. Human-Computer Interaction Design Studio completeness. Modularity. Parameterized programs. Algorithmic Project-based. Methods used in interaction design including needs verification of finite-state programs (model checking). Prerequisite: analysis, user observation, idea sketching, concept generation, 154, 156, 157, or equivalent. scenario building, storyboards, user character stereotypes, usability 3 units, Win (Manna, Z) analysis, and market strategies. Prerequisites: 147 and 106A or equivalent background in programming. CS 256L. Formal Methods for Reactive Systems Laboratory 3-4 units, Win (Winograd, T) Practical application of the specification and verification methods in 256. Individual projects include implementation of verification CS 247L. Human Computer Interaction Technology methods, verification case studies, or tool evaluation, depending on Laboratory student preference. Hands-on introduction to contemporary HCI technologies. 2 units, Win (Manna, Z) Interaction design with Adobe Flash, mobile development, physical computing, and web applications. Corequisite: 247. CS 258. Introduction to Programming Language Theory 1 unit, Win (Winograd, T) Syntactic, operational, and semantic issues in the mathematical analysis of programming languages. Type systems and non-context- CS 248. Introduction to Computer Graphics free syntax. Universal algebra and algebraic data types. Operational (Only one of 148 or 248 counts towards any CS degree program.) semantics given by rewrite rules; confluence and termination. Input and display devices, scan conversion of geometric primitives, Denotational semantics and elementary domain theory for languages 2D and 3D geometric transformations, clipping and windowing, with higher-type functions and recursion. Treatment of side effects. scene modeling and animation, algorithms for visible surface Prerequisites: 154, 157 or PHIL 160A. determination, local and global shading models, color, and real-time 3 units, Win (Mitchell, J) rendering methods. Written assignments and programming projects. Prerequisites: 108, MATH 103 or equivalent. 3-5 units, Aut (Levoy, M)

10 | Stanford Bulletin, 2008-09

CS 259. Security Analysis of Network Protocols CS 272. Introduction to Biomedical Informatics Research Hands-on experience in formal methods to verify and evaluate the Methodology security of network protocols and other systems. Common security (Same as BIOE 212, BIOMEDIN 212, GENE 212.) Hands-on protocols and their properties including secrecy, authentication, key software building. Student teams conceive, design, specify, establishment, and fairness. Topics: standard formal models and implement, evaluate, and report on a software project in the domain tools used in security protocol analysis; their advantages and of biomedicine. Creating written proposals, peer review, providing limitations. Fully automated, finite-state, model-checking status reports, and preparing final reports. Guest lectures from techniques. Constraint solving, process algebras, protocol logics, professional biomedical informatics systems builders on issues probabilistic model checking, and game theory. Students select a related to the process of project management. Software engineering protocol or secure system to analyze, specify it in the chosen model, basics. Prerequisites: 210, 211 or 214, or consent of instructor. use a formal analysis tool to verify its properties, and present 3 units, Aut (Altman, R; Cheng, B; Klein, T) findings. CS 273A. A Computational Tour of the Human Genome 3 units, not given this year (Same as BIOMEDIN 273A, DBIO 273A.) Computational biology CS 261. Optimization and Algorithmic Paradigms through an exploration of human genome. Key genetic concepts Algorithms for network optimization: max-flow, min-cost flow, from a bioinformatics perspective. Biomedical advances resulting matching, assignment, and min-cut problems. Introduction to linear from sequencing of human and related organisms. Genome programming. Use of LP duality for design and analysis of sequencing: technologies, assembly, personalized sequencing. algorithms. Approximation algorithms for NP-complete problems Functional landscape: genes, regulatory modules, repeats, RNA such as Steiner Trees, Traveling Salesman, and scheduling problems. genes. Genome evolution: processes, comparative genomics, Randomized algorithms. Introduction to online algorithms. ultraconservation, co-option. Additional topics: population genetics Prerequisite: 161 or equivalent. and personalized genomics, ancient DNA, and metagenomics. 3 units, Win (Plotkin, S) 3 units, Aut (Batzoglou, S; Bejerano, G)

CS 262. Computational Genomics CS 274. Representations and Algorithms for Computational (Same as BIOMEDIN 262.) Applications of computer science to Molecular Biology genomics, and concepts in genomics from a computer science point (Same as BIOE 214, BIOMEDIN 214, GENE 214.) Topics: of view. Topics: dynamic programming, sequence alignments, algorithms for alignment of biological sequences and structures, hidden Markov models, Gibbs sampling, and probabilistic context- computing with strings, phylogenetic tree construction, hidden free grammars. Applications of these tools to sequence analysis: Markov models, computing with networks of genes, basic structural comparative genomics, DNA sequencing and assembly, genomic computations on proteins, protein structure prediction, protein annotation of repeats, genes, and regulatory sequences, microarrays threading techniques, homology modeling, molecular dynamics and and gene expression, phylogeny and molecular evolution, and RNA energy minimization, statistical analysis of 3D biological data, structure. Prerequisites: 161 or familiarity with basic algorithmic integration of data sources, knowledge representation and controlled concepts. Recommended: basic knowledge of genetics. terminologies for molecular biology, graphical display of biological 3 units, Win (Batzoglou, S) data, machine learning (clustering and classification), and natural

CS 268. Geometric Algorithms language text processing. Prerequisites: programming skills; consent Techniques for design and analysis of efficient geometric algorithms of instructor for 3 units. 3-4 units, Spr (Altman, R) for objects in 2-, 3-, and higher dimensions. Topics: convexity, triangulations and simplicial complexes, sweeping, partitioning, and CS 275. Translational Bioinformatics point location. Voronoi/Delaunay diagrams and their properties. (Same as BIOMEDIN 217.) Analytic, storage, and interpretive Arrangements of curves and surfaces. Intersection and visibility methods to optimize the transformation of genetic, genomic, and problems. Geometric searching and optimization. Random sampling biological data into diagnostics and therapeutics for medicine. methods. Impact of numerical issues in geometric computation. Topics: access and utility of publicly available data sources; types of Example applications to robotic motion planning, visibility genome-scale measurements in molecular biology and genomic preprocessing and rendering in graphics, model-based recognition in medicine; analysis of microarray data; analysis of polymorphisms, computer vision, and structural molecular biology. Prerequisite: proteomics, and protein interactions; linking genome-scale data to discrete algorithms at the level of 161. Recommended: 164. clinical data and phenotypes; and new questions in biomedicine 3 units, Spr (Staff) using bioinformatics. Case studies. Prerequisites: programming

CS 270. Introduction to Biomedical Informatics: Fundamental ability at the level of CS 106A and familiarity with statistics and Methods biology. 4 units, Win (Butte, A) (Same as BIOMEDIN 210.) Methods for modeling biomedical systems and for making those models explicit in the context of CS 276. Information Retrieval and Web Search building software systems. Emphasis is on intelligent systems for (Same as LINGUIST 286.) Text information retrieval systems; decision support and Semantic Web applications. Topics: knowledge efficient text indexing; Boolean, vector space, and probabilistic representation, controlled terminologies, ontologies, reusable retrieval models; ranking and rank aggregation; evaluating IR problem solvers, and knowledge acquisition. Recommended: systems. Text clustering and classification: classification algorithms, exposure to object-oriented systems, basic biology. latent semantic indexing, taxonomy induction; Web search engines 3 units, Aut (Musen, M) including crawling and indexing, link-based algorithms, and web

CS 271. Introduction to Biomedical Informatics: Principles of metadata. Prerequisites: CS 107, CS 109, CS 161. 3 units, Aut (Manning, C; Raghavan, P) Systems Design (Same as BIOMEDIN 211.) Focus is on undertaking design and CS 277. Experimental Haptics implementation of computational and information systems for life Haptics as it relates to creating touch feedback in simulated or scientists and healthcare providers. Case studies illustrate what virtualized environments. Goal is to develop virtual reality haptic design factors lead to success or failure in building systems in simulators and applications. Theoretical topics: psychophysical complex biomedical environments. Topics: requirements analysis, issues, performance and design of haptic interfaces, haptic rendering workflow and organizational factors, functional specification, methods for 3-D virtual environments, and haptic simulation and knowledge modeling, data heterogeneity, component-based rendering of rigid and deformable solids. Applied topics: the CHAI architectures, human-computer interaction, and system evaluation. haptic library; implementation of haptic rendering algorithms; Prerequisite: 210, or consent of instructor. collision detection in 3-D environments; design of real-time models 3 units, Win (Das, A) for deformable objects. Guest speakers. Lab/programming exercises; a more open-ended final project. Enrollment limited to 20. Prerequisite: experience with C++. Recommended: 148 or 248, 223A. 3 units, Spr (Staff)

11 | Stanford Bulletin, 2008-09

CS 278. Systems Biology CS 300. Departmental Lecture Series (Same as BIOC 278, BIOE 310, CSB 278.) Complex biological For first-year Computer Science Ph.D. students. Presentations by behaviors through the integration of computational modeling and members of the department faculty, each describing informally his or molecular biology. Topics: reconstructing biological networks from her current research interests and views of computer science as a high-throughput data and knowledge bases. Network properties. whole. Computational modeling of network behaviors at the small and large 1 unit, Aut (Motwani, R) scale. Using model predictions to guide an experimental program. CS 302. Tech Law with Progressive Minds Robustness, noise, and cellular variation. Prerequisites: background How the advent of computing technologies is reflected in the in biology and mathematical analysis. confluence of law, public policy, and technology. Issues relating to 3 units, Aut (Covert, M; Dill, D; Brutlag, D; Ferrell, J) civil liberties, consumer protection, e-voting, copyright law, patent CS 279. Computational Methods for Analysis and law, international patent law, trade secrets, political processes, and Reconstruction of Biological Networks litigation. Types of interactions, including: regulatory such as transcriptional, 1 unit, not given this year signaling, and chromatin modification; protein-protein interactions; CS 309. Industrial Lectureships in Computer Science and genetic. Biological network structure at scales such as single Guest computer scientist. By arrangement. May be repeated for interaction, small subgraphs, and global organization. Methods for credit. analyzing properties of biological networks. Techniques for 1 unit, not given this year reconstructing networks from biological data, including: DNA/protein sequence motifs and sequence conservation; gene CS 309A. Software as a Service expression data; and physical binding data such as protein-DNA, For technology and business students. The shift from traditional protein-RNA, and protein-protein. Network dynamics and evolution. software model of disconnected development and CD-ROM Prerequisites: biology at the level of BIO 41; computer science and deployment to engineering and delivery on the Internet as a service. data structures at the level of CS 103 and 106; and probability and Guest industry experts give first-hand view of changes in the statistics at the level of STATS 116. software industry. 1 unit, Aut (Chou, T) 3 units, not given this year

CS 294. Research Project in Computer Science CS 315A. Parallel Computer Architecture and Programming Student teams work under faculty supervision on research and The principles and tradeoffs in the design of parallel architectures. implementation of a large project in some major sub-discipline in Emphasis is on naming, latency, bandwidth, and synchronization in computer science. Lectures on state-of-the-art methods related to the parallel machines. Case studies on shared memory, message passing, particular problem domain. Prerequisites: consent of instructor. data flow, and data parallel machines illustrate techniques. 3 units, not given this year Architectural studies and lectures on techniques for programming parallel computers. Programming assignments on one or more CS 294A. Research Project in Artificial Intelligence commercial multiprocessors. Prerequisites: EE 282, and reasonable Student teams under faculty supervision work on research and programming experience. implementation of a large project in AI. State-of-the-art methods 3 units, Win (Olukotun, O) related to the problem domain. Prerequisites: AI course from 220 series, and consent of instructor. CS 315B. Parallel Computing Research Project 3 units, Aut (Koller, D), Win (Ng, A) Advanced topics and new paradigms in parallel computing including parallel algorithms, programming languages, runtime environments, CS 294H. Social Software library debugging/tuning tools, and scalable architectures. Research Interface, systems, and algorithms concepts in designing social project. Prerequisite: consent of instructor. software including personalized home pages and social networks. 3 units, not given this year Topics include collaborative filtering, user-generated content, search, social networks, actions, blogs, and controlled online CS 319. Topics in Digital Systems experimentation.Team-based project. Advanced material is often taught for the first time as a topics 3 units, Aut (Klemmer, S; Kamvar, S) course, perhaps by a faculty member visiting from another institution. May be repeated for credit. CS 294S. Research Project in Software Systems and Security 3 units, offered occasionally Topics vary. Focus is on emerging research themes such as programmable open mobile Internet that spans multiple system CS 326A. Motion Planning topics such as human-computer interaction, programming systems, Computing object motions in computer graphics, geometrical operating systems, networking, and security. May be repeated for computing, robotics, or artificial intelligence for applications such as credit. Prerequisites: CS 103 and 107. design, manufacturing, robotics, animated graphics, surgical 3 units, Spr (Lam, M) planning, drug design, assembly planning, graphic animation of human figures, humanoid robots, inspection and surveillance, CS 294W. Writing Intensive Research Project in Computer simulation of crowds, and biology. Path planning methods to Science generate collision-free paths among static obstacles. Extensions Restricted to Computer Science and Computer Systems Engineering include uncertainty, mobile obstacles, manipulating moveable undergraduates. Students enroll in the CS 294W section attached to objects, maneuvering with kinematic constraints, and making and the CS 294 project they have chosen. breaking contacts. Configuration space, geometric arrangements, and 3 units, Aut (Koller, D), Win (Ng, A), Spr (Lam, M) random sampling. Theoretical methods. CS 295. Software Engineering 3 units, Win (Latombe, J)

Software specification, testing, and verification. Emphasis is on CS 327A. Advanced Robotics current best practices and technology for developing reliable Emerging areas of human-centered robotics and interactive haptic software at reasonable cost. Assignments focus on applying these simulation of virtual environments. Topics: redundancy; task- techniques to realistic software systems. Prerequisites: 108. oriented dynamics and control, whole-body control-task and posture Recommended a project course such as 140, 143, or 145. GER:DB- decomposition, cooperative robots, haptics and simulation, EngrAppSci haptically augmented teleoperation, human-friendly robot design. 2-3 units, Spr (Aiken, A) Prerequisites: 223A or equivalent. CS 298. Seminar on Teaching Introductory Computer Science 3 units, not given this year

Faculty, undergraduates, and graduate students interested in teaching CS 329. Topics in Artificial Intelligence discuss topics raised by teaching computer science at the Advanced material is often taught for the first time as a topics introductory level. Prerequisite: consent of instructor. course, perhaps by a faculty member visiting from another 1-3 units, Aut (Sahami, M) institution. May be repeated for credit.

3 units, offered occasionally

12 | Stanford Bulletin, 2008-09

CS 339. Topics in Numerical Analysis CS 346. Database System Implementation Advanced material is often taught for the first time as a topics A major database system implementation project realizes the course, perhaps by a faculty member visiting from another principles and techniques covered in earlier courses. Students institution. May be repeated for credit. independently build a complete database management system, from 3 units, offered occasionally file structures through query processing, with a personally designed

CS 340. Topics in Computer Systems feature or extension. Lectures on project details and advanced Topics vary every quarter, and may include advanced material being techniques in database system implementation, focusing on query taught for the first time. May be repeated for credit. processing and optimization. Guest speakers from industry on 3-4 units, Aut (Staff) commercial DBMS implementation techniques. Prerequisites: 145, 245, programming experience in C++. CS 340V. Networked Systems for Virtual Worlds 3-5 units, Spr (Widom, J) Open to graduate students and advanced undergraduates. Systems and networking aspects of building large, distributed virtual 3D CS 347. Transaction Processing and Distributed Databases environments, with a focus on scalability, consistency, security, The principles and system organization of distributed databases. fairness, and federation. Topics include existing architectures, Data fragmentation and distribution, distributed database design, naming, routing, caching, migration, interoperability, and attribution. query processing and optimization, distributed concurrency control, Open-ended research project. Prerequisite: some systems and reliability and commit protocols, and replicated data management. networking background. May be repeated for credit. Distributed algorithms for data management: clocks, deadlock 3-4 units, Aut (Levis, P) detection, and mutual exclusion. Heterogeneous and federated distributed database systems. Overview of commercial systems and CS 342. Programming Language Design research prototypes. Prerequisites: 145, 245. Tools for analysis and optimization of iterative coding systems. 3 units, Spr (Garcia-Molina, H) LDPC codes, Turbo codes, RA codes, optimized ensembles, message passing algorithms, density evolution, analytic techniques. CS 348A. Computer Graphics: Geometric Modeling Prerequisite: 376A. The mathematical tools needed for the geometrical aspects of 3 units, not given this year computer graphics and especially for modeling smooth shapes. Fundamentals: homogeneous coordinates, transformations, and CS 343. Advanced Topics in Compilers perspective. Theory of parametric and implicit curve and surface Topics change every year. May be repeated for credit. Prerequisite: 243. models: polar forms, Bezier arcs and de Casteljau subdivision, 3 units, Spr (Staff) continuity constraints, B-splines, tensor product, and triangular patch CS 344. Build an Internet Router surfaces. Subdivision surfaces and multiresolution representations of High-performance embedded system design. Student teams of two geometry. Representations of solids and conversions among them. software engineers (C experience required) and one hardward Surface reconstruction from scattered data points. Geometry engineer (Verilog experience required) build a fully functioning processing on meshes, including simplification. Prerequisite: linear Internet router Work in team of three. How router interoperates with algebra. Recommended: 164. others in class. Open-ended design challenge judged by panel of 3-4 units, not given this year industry experts. Prerequisites: 144, 244A, or network programming CS 348B. Computer Graphics: Image Synthesis Techniques experience. Intermediate level, emphasizing the sampling, shading, and display 3 units, Spr (McKeown, N) aspects of computer graphics. Topics: local and global illumination CS 344B. Advanced Topics in Distributed Systems methods including radiosity and distributed ray tracing, texture Continuation of 244B. The use of distributed systems research in generation and rendering, volume rendering, strategies for anti- practical systems. New applications due to the growth in high- aliasing and photo-realism, human vision and color science as they bandwidth connections. Distributed systems knowledge and relate to computer displays, and high-performance architectures for techniques from research and system implementations, and active graphics. Written assignments and programming projects. research topics. Readings include research publications. Prerequisite: 248 or equivalent. Recommended: Fourier analysis or 2 units, not given this year digital signal processing. 3-4 units, Spr (Hanrahan, P) CS 345. Advanced Topics in Database Systems Content varies. May be repeated for credit with instructor consent. CS 349. Topics in Programming Systems Prerequisite: 145. Recommended: 245. May be repeated for credit. 3 units, not given this year 3 units, not given this year

CS 345A. Data Mining CS 349W. Abstractions for Highly Interactive Web Algorithms for mining large-scale data, including data from the web Applications and data maintained by web-based enterprises. Finding frequent Web development basics, including HTML, Javascript, DOM, and itemsets and correlated items; web crawling; finding important web Javascript. Toolkits for developing Web applications, such as Ruby pages; link-spam detection; collaborative filtering; stream mining; on Rails and Django. Techniques for increasing the interactivity of clustering; optimizing ad selection; and virtual databases and web applications beyond simple forms, such as AJAX. Interaction extraction of relations from the web. styles in web applications. 3 units, Aut (Ullman, J; Rajaraman, A) 3 units, Aut (Staff)

CS 345C. Data Integration CS 355. Advanced Topics in Cryptography Techniques for integrating data from multiple heterogeneous data Topics: pseudo-random generation, zero knowledge protocols, sources. Topics: semantic heterogeneity; languages for mediating elliptic curve systems, threshold cryptography, security analysis between disparate data sources; techniques for automatic schema using random oracles, lower and upper bounds on factoring and reconciliation and reference reconciliation; adaptive query discrete log. May be repeated for credit. Prerequisite: 255. processing; basics of XML and its relevance to data integration; 3 units, not given this year peer-to-peer data sharing data exchange; combining structured and CS 357. Advanced Topics in Formal Methods unstructured data; and dataspaces. Recommended: 145. Topics vary annually. Possible topics include automata on infinite 3 units, not given this year words, static analysis methods, runtime analysis methods, verification of real-time and hybrid systems, and formalization of middleware services. May be repeated for credit. Prerequisite: 256. 3 units, offered occasionally

13 | Stanford Bulletin, 2008-09

CS 359. Topics in the Theory of Computation CS 369F. Topics in Analysis of Algorithms Advanced material is often taught for the first time as a topics Focus is on combinatorial optimization with emphasis on online course, perhaps by a faculty member visiting from another algorithms. institution. May be repeated for credit. 3 units, Spr (Plotkin, S) 3 units, not given this year CS 374. Algorithms in Biology CS 359D. Hardness of Approximation (Same as BIOMEDIN 374.) Algorithms and computational models Results on and proof techniques for ruling out good approximation applied to molecular biology and genetics. Topics vary annually. algorithms for NP-hard optimization problems. Topics: the PCP Possible topics include biological sequence comparison, annotation theorem; parallel repetition theorem; the unique games conjecture; of genes and other functional elements, molecular evolution, genome applications to set cover, clique, max cut, network design, and rearrangements, microarrays and gene regulation, protein folding problems. Prerequisites: 154 and 261, or equivalents. and classification, molecular docking, RNA secondary structure, 3 units, not given this year DNA computing, and self-assembly. May be repeated for credit.

CS 361A. Advanced Algorithms Prerequisites: 161, 262 or 274, or BIOCHEM 218, or equivalents. 2-3 units, Spr (Batzoglou, S) Advanced data structures: union-find, self-adjusting data structures and amortized analysis, dynamic trees, Fibonacci heaps, universal CS 376. Research Topics in Human-Computer Interaction hash function and sparse hash tables, persistent data structures. Interactive systems, research areas in interaction techniques, and the Advanced combinatorial algorithms: algebraic (matrix and design, prototyping, and evaluation of user interfaces. Topics: polynomial) algorithms, number theoretic algorithms, group computer-supported cooperative work; audio, speech, and theoretic algorithms and graph isomorphism, online algorithms and multimodal interfaces; user interface toolkits; design and evaluation competitive analysis, strings and pattern matching, heuristic and methods; ubiquitous and context-aware computing; tangible probabilistic analysis (TSP, satisfiability, cliques, colorings), local interfaces, haptic interaction; and mobile interfaces. search algorithms. May be repeated for credit. Prerequisite: 161 or 3 units, alternate years, not given this year

261, or equivalent. CS 377. Topics in Human-Computer Interaction 3 units, not given this year Contents change each quarter. May be repeated for credit. See CS 361B. Advanced Algorithms http://hci.stanford.edu/academics for offerings. Topics: fundamental techniques used in the development of exact 2-3 units, not given this year and approximate algorithms for combinational optimization CS 378. Phenomenological Foundations of Cognition, problems such as generalized flow, multicommodity flow, sparsest Language, and Computation cuts, generalized Steiner trees, load balancing, and scheduling. Using Critical analysis of theoretical foundations of the cognitive approach linear programming, emphasis is on LP duality for design and to language, thought, and computation. Contrasts of the rationalistic analysis of approximation algorithms; interior point methods for LP. assumptions of current linguistics and artificial intelligence with Techniques for development of strongly polynomial algorithms. alternatives from phenomenology, theoretical biology, critical 3 units, not given this year literary theory, and socially-oriented speech act theory. Emphasis is CS 364A. Algorithmic Game Theory on the relevance of theoretical orientation to the design, Topics at the interface of theoretical computer science and game implementation, and impact of computer systems as it affects theory such as: algorithmic mechanism design; combinatorial and human-computer interaction. competitive auctions; congestion and potential games; cost sharing; 3-4 units, alternate years, not given this year existence, computation, and learning of equilibria; game theory and CS 377W. Create Engaging Web Applications Using Metrics the Internet; network games; price of anarchy; and selfish routing. and Learning on Facebook Prerequisites: 154N and 161, or equivalents. Experimental course. Students work in small, interdisciplinary teams 3 units, Aut (Roughgarden, T) to create, launch, and optimize web-based applications for social CS 364B. Topics in Algorithmic Game Theory networks such as Facebook. Tools include Google Analytics. Online Topics on the interface of theoretical computer science and game experiments and user responses to learn how to iterate and improve theory. May be taken prior to 364A; may be repeated for credit. applications. Guest experts. Prerequisites: 154N and 161, or equivalents. 3-4 units, not given this year 3 units, not given this year CS 379D. Computer Vision and Image Analysis in the Study of CS 365. Randomized Algorithms Art Design and analysis of algorithms that use randomness to guide their Application of algorithms to computer vision, image analysis, and computations. Basic tools, from probability theory and probabilistic two-dimensional Western art such as paintings, drawings, and analysis, that are recurrent in algorithmic applications. Randomized etchings. Topics: multispectral image enhancement and color complexity theory and game-theoretic techniques. Algebraic manipulation; geometric perspective and warped (anamorphic) techniques. Probability amplification and derandomization. perspective; visual metrology; view synthesis; statistical analysis of Applications: sorting and searching, data structures, combinatorial form; texture and brushstrokes; and shape-from-shading. These optimization and graph algorithms, geometric algorithms and linear techniques, pattern classification, statistical estimation methods, and programming, approximation and counting problems, parallel and stylometry (quantification of artistic style) address art historical distributed algorithms, online algorithms, number-theoretic problems such as attribution, authentication, and dating to reveal algorithms. Prerequisites: 161 or 261, STATS 116, or equivalents. artists’ working methods. 3 units, Aut (Motwani, R) 3 units, not given this year

CS 369. Topics in Analysis of Algorithms CS 379Y. Interdisciplinary Design for Agile Aging May be repeated for credit. (Same as HUMBIO 131, MED 279Y.) Offered by the d.school. 3 units, not given this year Perspectives from computer science, design, social and behavioral

CS 369A. Advanced Geometric Algorithms sciences, physiology, geriatrics, and biodesign to develop projects Approximate, randomized, and high-dimensional geometric that address the potential of people to maintain vitality and mobility algorithms. Topics of current interest: clustering; nearest-neighbor as they age. New ways to integrate computer and device search; shortest paths; geometric random walks; shape fitting; technologies with behavioral and social interventions. Focus is on geometric embeddings; coresets; geometric TSP; and linear small-group projects based on real-world need finding. Prerequisite: programming. Prerequisites: 368 or equivalent. background in one of design, computing, medicine, behavioral 3 units, not given this year sciences, communications, or business. 3-4 units, Win (Winograd, C; Winograd, T; Friedlander, A; Yock, P)

14 | Stanford Bulletin, 2008-09

CS 379Z. Design Project for Agile Aging CS 448. Topics in Computer Graphics (Same as MED 279Z.) Second of two quarter sequence; students Topic changes each quarter. Recent topics: exotic input and display may take 379Y without 379Z; offered by the d.school. Small teams technologies, graphics architectures, advanced rendering techniques, develop projects that can have an impact in the world through modeling shape and motion, data visualization, and computational products, programs, and practices that affect people’s health on a photography. See http://graphics.stanford.edu/courses for offerings. broad scale. Technical interventions, social and contextual design, May be repeated for credit. Prerequisite: 248 or consent of instructor. organizational contexts, and business and distribution issues. 3-4 units, not given this year

Limited enrollment. Prerequisites: CS379Y, and master’s level skills CS 448A. Topics in Computer Graphics: Computational in one of design, computing, medicine, behavioral sciences, Photography communications, or business. Capabilities unique to digital cameras. Sensors; in-camera 3-4 units, not given this year processing systems; the ability to refocus photographs after they are CS 390A. Curricular Practical Training taken or to combine views taken with different camera settings, aim, Educational opportunities in high technology research and or placement. New technologies for creating efficient, controllable development labs in the computing industry. Qualified computer illumination such as pulsed LEDs or video projectors; the ability to science students engage in internship work and integrate that work selectively illuminate objects, recolor a scene, or extract shape into their academic program. Students register during the quarter information. How these developments relax notions of what they are employed and complete a research report outlining their constitutes a photograph, blur the distinction between photography work activity, problems investigated, results, and follow-on projects and scene modeling, and lead to new photographic techniques, they expect to perform. 390 A, B, and C may each be taken once. scientific tools, and art forms. (Levoy) (Motwani) 3-4 units, not given this year 1 unit, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff) CS 448B. Topics in Computer Graphics: Special Topics in CS 390B. Curricular Practical Training Visualization Educational opportunities in high technology research and Topic changes each quarter. Recent topics: exotic input and display development labs in the computing industry. Qualified computer technologies, graphics architecures, advanced rendering techniques, science students engage in internship work and integrate that work modeling shape and motion, data visualization, and computational into their academic program. Students register during the quarter photography. See http://graphics.stanford.edu/courses/ for current they are employed and complete a research report outlining their offerings. work activity, problems investigated, results, and follow-on projects 1-3 units, not given this year they expect to perform. 390A,B,C may each be taken once. CS 450. Introduction to Biotechnology 1 unit, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff) Academic and industrial experts discuss latest developments in fields CS 390C. Curricular Practical Training such as bioenergy, green process technology, the production of Educational opportunities in high technology research and industrial chemicals from renewable resources, protein development labs in the computing industry. Qualified computer pharmaceutical production, industrial enzyme production, stem cell science students engage in internship work and integrate that work applications, medical diagnostics, and medical imaging. Discussions into their academic program. Students register during the quarter of biotechnology ethics, business and patenting issues, and they are employed and complete a research report outlining their entrepreneurship in biotechnology. work activity, problems investigated, results, and follow-on projects 3 units, not given this year they expect to perform. 390A,B,C may each be taken once. CS 468. Topics in Geometric Algorithms 1 unit, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff) Recent offerings include: shape matching, proximity and nearest- CS 393. Computer Laboratory neighbor problems, visibility and motion planning, collision For CS graduate students. A substantial computer program is detection, geometric sampling methods, shape interpolation, and designed and implemented; written report required. Recommended computational topology. May be repeated for credit. Prerequisite: as a preparation for dissertation research. Register using the section 268, 368, or consent of instructor. number associated with the instructor. Prerequisite: consent of 3 units, Aut (Memoli Techera, R), Win (Staff), Spr (Koltun, V) instructor. CS 499. Advanced Reading and Research 1-9 units, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff) For CS graduate students. Register using the section number CS 395. Independent Database Project associated with the instructor. Prerequisite: consent of instructor. For graduate students in Computer Science. Use of database 1-15 units, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff) management or file systems for a substantial application or CS 528. Broad Area Colloquium for Artificial Intelligence, implementation of components of database management system. Geometry, Graphics, Robotics, and Vision Written analysis and evaluation required. Register using the section Weekly series of informal research talks on topics related to number associated with the instructor. Prerequisite: consent of perceiving, modeling, manipulating, and displaying the physical instructor. world. The computational models and numerical methods underlying 1-6 units, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff) these topics. May be repeated for credit. CS 399. Independent Project 1 unit, not given this year

Letter grade only. CS 531. Numerical Analysis/Scientific Computing Seminar 1-9 units, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff) Research lectures by experts from academia, national laboratories, CS 399P. Independent Project industry, and doctoral students. May be repeated for credit. Graded satisfactory/no credit. 1 unit, not given this year 1-9 units, Aut (Staff), Win (Staff), Spr (Staff), Sum (Staff) CS 541. Clean Slate Internet Research Seminar CS 447. Software Design Experiences How would a global communications infrastructure be designed Small teams develop technology prototypes combining product and starting from a hypothetical clean slate, given what is known now? interaction design. Focus is on software and hardware interfaces, How should the Internet look in 15 years? Research questions and interaction, design aesthetics, and underpinnings of successful ideas and approaches in subfields of with Internet design including design including a reflective, interactive design process, group network architecture, network security and robustness, mobile dynamics of interdisciplinary teamwork, and working with users. wireless networking, distributed services and systems, and theory- Prerequisite: CS 247A. inspired network architecture. Guest speakers from Stanford and 3-4 units, Spr (Winograd, T) industry. See http://cleanslate.stanford.edu. 1 unit, alternate years, not given this year

15 | Stanford Bulletin, 2008-09

CS 545. Database and Information Management Seminar Current research and industrial innovation in database and information systems. 1 unit, Win (Widom, J)

CS 547. Human-Computer Interaction Seminar Weekly speakers. May be repeated for credit. 1 unit, Aut (Winograd, T), Win (Winograd, T), Spr (Winograd, T)

CS 548. Internet and Distributed Systems Seminar Guest speakers from academia and industry. May be repeated for credit. 1 unit, not given this year

CS 571. Surgical Robotics Seminar Surgical robots developed and implemented clinically on varying scales. Seminar goal is to expose students from engineering, medicine, and business to guest lecturers from academia and industry.engineering and clinical aspects connected to design and use of surgical robots, varying in degree of complexity and procedural role. 1 unit, Win (Barbagli, F)

16 | Stanford Bulletin, 2008-09