Professors Erlinger (Chair), Alvarado, Dodds, Keller, Kuenning, Libeskind-Hadas, O’Neill, Stone, Sweedyk, and Thom.
Computer science is the art and science of developing automated, information-based processes, including modeling, algorithms, communication techniques, languages, implementation, performance measurement and prediction, and applications of such processes. As an academic discipline it has strong components of design, logic, mathematics, engineering, and philosophy. The role of computer science could be characterized as providing the logical infrastructure for the modern information-based society.
The Harvey Mudd College Computer Science major, established in 1992, provides a solid education in the fundamental principles and concepts of computer science through a blend of experiment, theory, and design. A student completing the major is well-prepared for both immediate employment in computer science and related fields and for graduate study in computer science. The program exposes students to a wide variety of application areas within their studies. Computer science graduates are thus able to make new contributions to science within a computational framework, as well as to the field of computing itself. Each computer science major participates in a year-long Computer Science Clinic project, addressing real-world problems of interest to industry and research laboratories, and may also engage in research with faculty members.
Examples of recent student involvement in research include the design, analysis, and simulation of routing algorithms for parallel computers and networks of workstations; the design and implementation of new programming languages; research into issues of applying and deploying network security; and building and deploying robots.
Careers in computer science are typically positions with titles of computer scientist, computer engineer, computer architect, programmer (application, systems, business, scientific, game, graphics, database), software developer, software engineer, hardware engineer, systems analyst, system designer, systems integrator, system administrator, network engineer, technical writer, as well as educator (professor, teacher, trainer), consultant, and technical management (project manager, product manager, program manager, chief scientist, chief technical officer, chief information officer) in these fields.
Graduates of the Computer Science Department have gone on to work in many of the top companies in the field including Apple Computer, Argonne National Laboratory, BoxTop Interactive, Ernst and Young, Green Hills Software, Hewlett Packard, IBM, JPL, Knowledge Adventure, Lawrence Livermore National Laboratories, Lockheed-Martin, Microsoft, Netcom Systems, O’Melveny & Myers, Paracel, Qualcomm, Rockwell, Silicon Graphics, Stanford Linear Accelerator, Sun Microsystems, Sybase, Scient, The Aerospace Corporation, Trilogy Systems and WebTV.
A significant fraction of our majors have gone on to graduate study at schools such as Carnegie-Mellon University, Cornell, Stanford, UCLA, UC Davis, UC San Diego, University of North Carolina, the University of Illinois at Champaign-Urbana, the University of Texas, the University of Washington, and the University of Wisconsin. They have done advanced study in areas such as algorithm design and analysis, logical foundations of computer science, software engineering, computer graphics, networking, distributed systems, mobile computing, performance analysis, programming languages, computer architecture, computer operating systems, parallel computing, artificial intelligence, computer vision, robotics, speech understanding, virtual reality, artificial life, neural networks, fuzzy logic, human-computer interfaces and telecommunications. Most of these areas are introduced in courses at HMC.
Most students at Harvey Mudd College achieve basic competence in programming through the course Computer Science 5, Introduction to Computer Programming. The computer science major continues with the foundation courses, starting with Computer Science 60 (Principles of Computer Science), which provides a broad exposure to many areas of computer science and further develops fundamental competence in programming, logic, algorithm analysis, and computer structure. Mathematics 55 is taken to develop skills in discrete mathematics that are needed for greater depth in more advanced areas. Computer Science 70 (Data Structures and Program Development) improves the depth of programming competence, and diversifies the set of data structures and corresponding analysis techniques to which the computer science student is exposed. Computer Science 81 (Computability and Logic) introduces the mathematical foundations of computer science, particularly logic, automata, and computability theory, and demonstrates the applications of the aforementioned areas to problems of practical significance.
Building on the foundation courses are the kernel courses. Computer Science 105 (Computer Systems) develops a deep understanding of computer structure and its relationship to correct and efficient program implementation. Computer Science 121 (Software Development) focuses on requirements analysis and specification techniques for large software systems, and the project management skills needed to develop such a system. Computer Science 131 (Programming Languages) investigates concepts underlying a wide variety of modern programming languages. Computer Science 140 (Algorithms) develops fundamental skills needed to perform comparative analysis of algorithms and enable the synthesis of new algorithms. The computer science electives allow students to achieve more specialization in areas of personal interest. We believe that most of the areas of computer science that are of central importance are covered in the combination of courses mentioned thus far.
The Computer Science Clinic provides a way of putting many of the acquired skills into practice. In The Clinic Program, students work on problems that have no textbook answers. Instead, they are real-world problems of great interest to real people, companies, and research organizations. A Clinic project lasts one year, and is completed by a team of three to five students working with a faculty advisor and a liaison. Examples of recent Computer Science Clinic projects that have been completed by teams of Harvey Mudd students are
A new standard for the management of missle range countdown clocks;
A software module that converts a digital photo of a document into an image that looks scanned;
An extensible interface for current and future insulin pumps, glucose sensors, and related diabetes technology;
A computer security tool based on the biological immune system paradigm;
An extensible software architecture that enables satellite anomalies to be detected and displayed in visual form;
A simulation model of the GPS ground network and verification of that model through available data;
An implementation of the MESQUITE mesh smoothing toolkit on a distributed cluster;
An implementation of the VAIL waveform analysis tool on the "grid" highly-parallel computing environment;
Sponsors of Computer Science Clinic projects have included Boeing, GTE, IBM, Jet Propulsion Laboratory, Microsoft, Octel Communications, Optivus Technology, Paracel, Sandia National Laboratories, Teradyne and The Aerospace Corporation.
The final element of the major is the Computer Science Colloquium, which features speakers drawn from both industry and academia who present results of their current research. Recent colloquium speakers have come from a variety of research labs and universities such as Caltech, Carnegie Mellon University, Harvard University, IBM Research, MIT, Motorola, The Salk Institute, Stanford University, The Aerospace Corporation, UC Berkeley, UC San Diego, USC, University of Illinois, University of Iowa, University of Washington and the University of Wisconsin.
A computer science major must complete the following courses:
Computer Science Foundation:
|
Computer Science 60: |
Principles of Computer Science |
|
Mathematics 55: |
Discrete Mathematics |
|
Computer Science 70: |
Data Structures and Program Development |
|
Computer Science 81: |
Computability and Logic |
Computer Science Kernel:
|
Computer Science 105: |
Computer Systems |
|
Computer Science 121: |
Software Development |
|
Computer Science 131: |
Programming Languages |
|
Computer Science 140: |
Algorithms |
Three Computer Science Electives:
|
Computer Science 124: |
User Interface Design |
|
Computer Science 125: |
Computer Networks |
|
Computer Science 132: |
Compiler Design |
|
Computer Science 133: |
Databases |
|
Computer Science 134: |
Operating Systems |
|
Computer Science 136: |
Advanced Computer Architecture |
|
Computer Science 141: |
Advanced Topics in Algorithms |
|
Computer Science 142: |
Complexity Theory |
|
Computer Science 144: |
Scientific Computing |
|
Computer Science 147: |
Computer Systems Performance Analysis |
|
Computer Science 151: |
Artificial Intelligence |
|
Computer Science 152: |
Neural Networks |
|
Computer Science 153: |
Computer Vision |
|
Computer Science 154: |
Robotics |
|
Computer Science 155: |
Computer Graphics |
|
Computer Science 156: |
Parallel and Real-Time Computing |
|
Computer Science 157: |
Computer Animation |
Students may substitute electives in one or more CS-related areas, such as in engineering or mathematics, with the consent of the faculty advisor. Normally, project-oriented courses and research do not count as elective courses, unless approved by petition to the CS faculty.
Both of the following:
|
Two semesters of Computer Science Clinic (183-184) |
|
Four semesters of Computer Science Colloquium (193-196) |
Computer Science Colloquium is only required when students are in residence at HMC. Study abroad students are relieved of the colloquium requirement during their time away from the HMC campus.
A frequently-asked question concerns the possibility of pursuing a Computer Engineering major at HMC. As the engineering department offers a non-specialized engineering degree, students interested in computer engineering may wish to major in computer science. While the courses offered in the Computer Science Department are focused primarily on systems and software, appropriate engineering courses may be counted towards the elective course requirements of the CS major. In addition, the computer science major allows flexibility for taking additional electives beyond the major requirements, and these may be taken in engineering as well. Thus an HMC computer science major may graduate with a hardware or engineering emphasis. Engineering courses that are generally accepted as CS technical electives include E85A: Digital Electronics, E115: Project Management, E151: Engineering Electronics, E155: Microprocessor-based Systems: Design and Applications, E161: Computer Image Processing and Analysis, and E158; Introduction to CMOS VLSI Design.
Students from the other Claremont Colleges who desire to major in Computer Science at Harvey Mudd College need to inform the Computer Science Chair so that they may be assigned an appropriate advisor and program. The HMC Computer Science major assumes significant material included in the HMC Technical Core. In particular, it is assume that students have taken courses in Calculus, Linear Algebra, and Differential Equations. Part of the advising process will be a determination of whether the student has adequate background to attempt the HMC Computer Science major.
COURSES
5. Introduction to Computer Programming. Dodds, Thom. Introduction to programming and problem solving via computer. Students are introduced to and program in Java. In this course, students explore data representation (both simple and structured data types, classes, objects), flow-control structures (if, for, recursion, subroutines), basic algorithms (sorting, searching, numeric computation), and program design. No prior programming experience required. 3 credit hours (Fall.)
60. Principles of Computer Science. Dodds, Keller, Libeskind-Hadas. Introduction to principles of computer science. Information structures, functional programming, object-oriented programming, grammars, logic, logic programming, correctness, algorithms, complexity analysis, finite-state machines, basic processor architecture, and theoretical limitations. Prerequisites: Computer Science 5 and one semester of calculus. 3 credit hours. (Fall and Spring.)
70. Data Structures and Program Development. Kuenning, O'Neil, and Stone. Abstract data types including priority queues, dynamic dictionaries, and disjoint sets. Efficient data structures for these data types, including heaps, self-balancing trees, and hash tables. Analysis of data structures including worst-case, average-case, and amortized analysis. Storage allocation and reclamation. Secondary storage considerations. Extensive practice building programs for a variety of applications. Prerequisites: Computer Science 60. 3 credit hours. (Fall and Spring.)
81. Computability and Logic. Keller, Bull (Pomona). An introduction to some of the mathematical foundations of computer science, particularly logic, automata, and computability theory. Develops skill in constructing and writing proofs, and demonstrates the applications of the aforementioned areas to problems of practical significance. Prerequisites: Computer Science 60, Mathematics 55. 3 credit hours. (Fall and Spring.)
105. Computer Systems. Erlinger, Kuenning, Bull (Pomona). An introduction to computer systems. In particular the course investigates data representatons, machine level representations of programs, processor architecture, program optimizations, the memory hierarchy, linking, exceptional control flow (exceptions, interrupts, processes, and Unix signals), performance measurement, virtual memory, system-level I/O, and basic concurrent programming. These concepts are supported by a series of hands-on lab assignments. Prerequisite: Computer Science 70. 3 credit hours. (Fall and Spring.)
121. Software Development. Keller, Sweedyk. Rigorous introduction to the technological and managerial discipline concerned with the design and implementation of large software systems. Techniques for software specification, design, verification, and validation. Formal methods for proving the correctness of programs. Student teams design, implement, and present a substantial software project. Prerequisite: Computer Science 70. 3 credit hours. (Fall and Spring.)
124. User Interface Design. O'Neill. This course indtroduces students to issues in the design, implementation, and evaluation of human-computer interfaces, with emphasis on user-centered design and graphical interfaces. Students will learn skills that aid them in choosing the right user interaction technique and developing an interface that is well-suited to the people for whom it is designed. 3 credit hours. (Spring, alternate years.)
125. Computer Networks. Erlinger. Principles and analysis techniques for internetworking. Analysis of networking models and protocols. Presentation of computer communication with emphasis on protocol architecture. Prerequisite: Computer Science 105. 3 credit hours. (Spring.)
131. Programming Languages. O'Neill, Stone, and Marshall (Pomona). A thorough examination of issues and features in language design and implementation including language-provided data structuring and data-typing, modularity, scoping, inheritance, and concurrency. Compilation and run-time issues. Introduction to formal semantics. Prerequisite: Computer Science 70 and 81. 3 credit hours. (Fall and Spring.)
132. Compiler Design. Stone. The theory, design, and implementation of compilers and interpreters. The interaction between compiler design and run-time organization. Logistics of porting to new hardware. Prerequisites: Computer Science 105 and 131. 3 credit hours. (Spring, alternate years.)
133. Databases and Knowledge-based Systems. Keller. Fundamental models of databases: entity-relationship, relational, deductive, object-oriented. Relational algebra and calculus, query languages. Data storage, caching, indexing, and sorting. Locking protocols and other issues in concurrent and distributed databases. Prerequisites: Computer Science 70 and 81 (131 recommended). 3 credit hours. (Fall, alternate years.)
134. Operating Systems. O'Neill. Design and implementation of operating systems, including processes, memory management, synchronization, scheduling, protection, filesystems, and I/O. These concepts are used to illustrate wider concepts in the design of other large software systems, including simplicity; efficiency; event-driven programming; abstraction design; client-server architecture; mechanism vs. policy; orthogonality; naming and binding; static vs. dynamic, space vs. time, and other tradeoffs; optimization; caching; and managing large codebases. Group projects provide experience in working with and extending a real operating system. Prerequiste: CS 105
136. Advanced Computer Architecture. Kuenning. Reduced vs. complex instruction set architecture, pipelining, instruction-level parallelism, superscalar architectures, advanced memory-hierarchy design, advanced computer arithmetic, multiprocessor systems, cache coherence, interconnection networks, performance analysis and case studies. Prerequisite: Computer Science 105. 3 credit hours. (Spring, alternate years.)
140. Algorithms. Libeskind-Hadas, Sweedyk, Thom, Chen (Pomona). (joint-listed as Mathematics 168). Algorithm design, analysis, and correctness. Design techniques including divide-and-conquer and dynamic programming. Analysis techniques including solutions to recurrence relations and amortization. Correctness techniques including invariants and inductive proofs. Applications including sorting and searching, graph theoretic problems such as shortest path and network flow, and topics selected from arithmetic circuits, parallel algorithms, computational geometry, and others. An introduction to computational complexity, NP-completeness, and approximation algorithms. Proficiency with programming is expected as some assignments require algorithm implementation. Prerequisite: Computer Science 70 and Mathematics 55. 3 credit hours. (Both semesters. Students taking the course as Mathematics 168 have slightly different prerequisites.)
141. Advanced Topics in Algorithms. Libeskind-Hadas. Advance topics in the design and analysis of combinatorial algorithms. Example topics are amotized analysis of data structures, competitive analysis of on-line algorithms, matroid theory, and introduction to parallel and distributed algorithms. A significant component of the course is written and oral student presentations of material from the original literature. Prerequisite: Computer Science 140/Mathematics 168. 3 credit hours. (Alternate years).
142. Complexity Theory (joint-listed as Mathematics 167). Libeskind-Hadas, Bull(Pomona). Brief review of computability theory through Rice's Theorem and the Recursion Theorem followed by a rigorous treatment of complexity theory. The complexity classes P, NP, and the Cook-Levin Theorem. Approximability of NP-complete problems. The polynomial hierarchy, PSPACE-completeness, L and NL-completeness, #P-completeness. IP and Zero-knowledge proofs. Randomized and parallel complexity classes. The speedup, hierarchy, and gap theorems. Prerequisite: Computer Science 81. 3 credit hours. (Fall.)
144. Scientific Computing. de Pillis. (Same as Math 164) Computational techniques applied to problems in the sciences and engineering. Modeling of physical problems, computer implementation, analysis of results; use of mathematical software; numerical methods chosen from: solutions of linear and nonlinear algebraic equations, solutions of ordinary and partial differential equations, finite elements, linear programming, optimization algorithms, and fast-Fourier transforms. Prerequisites: Mathematics 64 and Computer Science 60. 3 credit hours. (Spring.)
147. Computer Systems Performance Analysis. Kuenning. Measurement and analysis of computer software and systems performance, with emphasis on methodological issues. Measurement planning and experimental design. Statistical methods for data analysis. Hypothesis testing. Effective graphical and tabular presentation of data. Common errors in performance measurement. Elementary queuing theory. Simulation methods. Project in performance measurement. Typical projects include measurement of databases, theorem provers, file systems, networks, OS kernels, and computer processors. Prerequisites: Mathematics 62 and CS 70. 3 credit hours. (Spring, alternate years.)
151. Artificial Intelligence. Marshall (Pomona). Knowledge representation, including rule-based systems and neural networks, learning paradigms, and philosophical challenges to artificial intelligence. Discussion of areas of current research: natural language processing, robotics, vision, cognitive modeling, case-based reasoning. Prerequisite: Computer Science 81 (131 recommended). 3 credit hours. (Spring.)
152. Neural Networks. Keller, Marshall (Pomona). Modeling, simulation, and analysis of artificial neural networks and their relation to biological networks. Design and optimization of discrete and continuous neural networks. Back propagation, and other gradient descent methods. Hopfield and Boltzmann networks. Unsupervised learning. Self-organizing feature maps. Applications chosen from function approximation, signal processing, control, computer graphics, pattern recognition, time-series analysis. Relationship to fuzzy logic, genetic algorithms, and artificial life. Prerequisites: Computer Science 60 and Mathematics 63. 3 credit hours. (Fall.)
153. Computer Vision. Alvarado, Dodds. Computational algorithms for visual perception. Image acquisition, image processing, segmentation. Representation of color, shading, texture, shape. Stereo and motion analysis. Object recognition. Relations to robotics, human perception, image databases. Prerequisite: Physics 23-24, Computer Science 70 and Mathematics 63. 3 credit hours. (Spring, alternate years.)
154. Robotics. Dodds. Introduction to robotics from a behavioral perspective. Topics span from sensor operation and low-level actuator control to architectures and algorithms for accomplishing tasks. The basic framework and analysis of both industrial and biologically-motivated robots are addressed. The laboratory component of the class provides experience in developing algorithms, programming, and testing a range of robot behaviors on a variety of systems. Prerequisites: CS105, Math 12, and Math 13 3 credit hours. (Spring, alternate years.)
155. Computer Graphics. Sweedyk. Geometric models for visual output. Rastering. Three-dimensional volume and surface modeling. Reflectance and illumination models. Texturing and shading. Color and animation. Prerequisites: Mathematics 63, Computer Science 70 and 140. 3 credit hours. (Fall.)
156. Parallel and Real-Time Computing. Keller, Chen (Pomona). Characteristics and applications for parallel and real-time systems. Specification techniques, algorithms, architectures, languages, design, and implementation. Prerequisites: Computer Science 105 and 140 (131 recommended). 3 credit hours. (Spring, alternate years.)
157. Computer Animation. Sweedyk. This course introduces students to the theory and practice of computer animation. The course covers the algorithms and data structures for building and animating articulated figures and particle systems including interpolation techniques, deformations, forward and inverse kinematics, rigid body dynamics, and physically based modeling. In addition the course surveys the art, history and production of animation. Prequisite: Computer Science 155. 3 credit hours. (Second semester, alternate years.)
181, 182 . Computer Science Seminar. Staff. Advanced topics of current interest in computer science. Prerequisite: permission of instructor. 3 credit hours. (Fall and Spring.)
183, 184. Computer Science Clinic I, II. Staff. Team project in computer science, with corporate affiliation. Prerequisite: Computer Science 121. 3 credit hours.
185, 186. Computer Science Research I, II. Staff. Projects involving original research under faculty supervision. 1-3 credit hours.
189. Programming Practicum. Dodds, Stone. This course is a weekly programming seminar, emphasizing efficient recognition of computational problems and their difficulty, developing and implementing algorithms to solve them, and the testing of those implementations. Attention is given to the effective use of programming tools and available libraries, as well as to the dynamics of team problem-solving. 1 credit hour. (May be repeated for elective credit up to 3 times.) (Fall and Spring.)
191, 192. Computer Science Project I, II. Staff. Participation in projects of substantial interest to computer scientists. Emphasis is on the design and implementation of computer systems for real problems. Students typically work in small teams with faculty supervision. 1-3 credit hours.
193, 194, 195, 196. Computer Science Colloquium. Staff. Oral presentations and discussions of selected topics, including recent developments in computer science. Participants include computer science majors, clinic participants, faculty members, and visiting speakers. Required for all junior and senior computer science majors, both semesters while in residence. Students studying abroad should consult the faculty member coordinating the colloquia to determine how they will meet this requirement. All majors welcome. No credit.
197, 198. Advanced Problems in Computer Science. Staff. Independent study in a field agreed upon by student and a faculty member. 1-3 credit hours.