Professors Libeskind-Hadas (Chair), Dodds, Erlinger, Keller, Kuenning, Lewis, O’Neill, Stone, Sweedyk, and Wiedermann.
Computer science is an exciting and rapidly-evolving discipline with components of design, logic, mathematics, engineering and philosophy. The role of computer science can be characterized as providing the logical infrastructure for the modern, information-based society.
The Harvey Mudd College Computer Science major, established in 1992, teaches fundamental principles of computer science through a blend of experimentation, theory, and design. Our students are well-prepared to make contributions to the field of computing, to computational aspects of science and engineering, and to society in general through the development of tools and technologies that can have a significant, positive societal impact. Our graduates are equally well-prepared to work in industry or continue on for graduate studies.
Each computer science major participates in a year-long capstone Computer Science Clinic project, addressing real-world problems provided by sponsors from industry and research laboratories. A Clinic project typically comprises three to five students, supervised by a faculty member and a liaison from the sponsor, working on a project from “concept to product.” Recent projects have come from sponsors including the Aerospace Corporation, Intel, Microsoft, QUALCOMM, and Sandia National Laboratories.
Computer science students also frequently engage in research with faculty mentors during the academic year and the summer. Examples of recent student involvement in research include; the design of a system that can improvise jazz solos and advise musicians on solo construction; the design and implementation of new features for parallel programming languages; and the design, analysis, and implementation of new algorithms for analyzing the evolution of pairs of linked species.
Graduates of the Computer Science program have gone on to work for a diverse set of employers and, in some cases, have started their own companies. Some employers that have hired our graduates in recent years include Amazon, Blizzard, Electronic Arts, Google, IMC Financial Markets, LaserFiche, LinkedIn, Microsoft and Twitter.
A significant number of our majors have gone on to graduate study. Some of the graduate programs where our students have enrolled include Caltech, Carnegie Mellon University, Cornell, Georgia Institute of Technology, MIT, Stanford, UC Berkeley, UCLA, UC San Diego, University of Illinois at Urbana-Champaign, and University of Washington. Our graduates have done advanced study in areas such as artificial intelligence, algorithm design and analysis, computer graphics, distributed systems, mobile computing, programming languages and robotics.
All students at Harvey Mudd College are required to fulfill Computer Science 5 (Introduction to Computer Science) or its equivalent which provide an exposure to some major concepts in the discipline including functional programming, object-oriented programming, digital logic and computer organization, computability theory and societal issues. 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 advanced computer science areas. Computer Science 70 (Data Structures and Program Development) improves the students’ depth of programming competence and diversifies the set of data structures and corresponding analysis techniques to which the student is exposed. Computer Science 81 (Computability and Logic) introduces the mathematical foundations of computer science, particularly logic, automata and computability theory, and demonstrates 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 systems. Computer Science 131 (Programming Languages) investigates concepts underlying a wide variety of modern programming languages. Computer Science 140 (Algorithms) develops fundamental skills needed to design and analyze algorithms for a variety of applications. The broad array of computer science electives (over 20 elective and seminar courses) allows students to achieve more specialization in areas of personal interest.
A computer science major must complete the following courses:
Computer Science Foundation
- Computer Science 60: Principles of Computer Science, or Computer Science 42: Principles and Practice 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
Computer Science Clinic
- Two semesters of Computer Science 183, 184: Clinic
Computer Science Colloquium
- Four semesters of Computer Science 195: Colloquium are required only when students are in residence at HMC. Study abroad students are excused from the colloquium requirement during their time away from the HMC campus.
Three Computer Science Electives
- Computer Science 124: Basics of User Interface Design
- Computer Science 125: Computer Networks
- Computer Science 132: Compiler Design
- Computer Science 133: Databases
- Computer Science 134: Operating Systems: Design and Implementation
- Computer Science 136: Advanced Computer Architecture
- Computer Science 137: File Systems
- 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
- Computer Science 158: Machine Learning
- Computer Science 159: Natural Language Processing
Students may substitute electives in one or more computer science-related areas, such as in engineering or mathematics, with the consent of their faculty advisor. Computer Science 186 (Computer Science Research II) can be counted as an elective for the major and requires Computer Science 185 (Computer Science Research I) as a prerequisite. Other research or project courses cannot normally be counted as electives for the major.
Concentration in Computer Engineering
Students frequently ask about the possibility of pursuing a computer engineering major at HMC. As the Department of Engineering 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 toward the elective course requirements of the computer science 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 computer science technical electives include Engineering 85 (Digital Electronics and Computer Engineering), Engineering 115 (Project Management), Engineering 151 (Engineering Electronics), Engineering 155 (Microprocessor-based Systems: Design and Applications), Engineering 161 (Computer Image Processing and Analysis), and Engineering 158 (Introduction to CMOS VLSI Design).
Computer Science Majors from the Other Claremont Colleges
Pomona College offers an undergraduate major in computer science and there is close cooperation between the Pomona and HMC Computer Science Departments.
HMC welcomes computer science majors from the other Claremont Colleges. Students from the other colleges who desire to major in computer science at Harvey Mudd College should inform the chair of the Computer Science Department of their plans so that they may be assigned an appropriate advisor.
The HMC Computer Science major assumes significant material included in the HMC Technical Core. In particular, it is assumed that students have taken courses in calculus, linear algebra and differential equations. Part of the advising process for an off-campus student involves identifying the courses that the student should take before enrolling in HMC computer science courses.
Computer Science Courses (Credit hours follow course title)
5. Introduction to Computer Science (3)
Dodds, Kuenning, Libeskind-Hadas. Introduction to elements of computer science. Students learn computational problem-solving techniques and gain experience with the design, implementation, testing and documentation of programs in a high-level language. In addition, students learn to design digital devices, understand how computers operate, and learn to program in a small machine language. Students are also exposed to ideas in computability theory. The course includes discussions of societal and ethical issues related to computer science. (Fall)
5GR. Introduction to Biology and Computer Science (3)
Libeskind-Hadas, Bush (Biology). This course introduces fundamental concepts from the Core course Computer Science 5 using biology as the context for those computational ideas. Students see both the intellectual and practical connections between these two disciplines and write computer programs to explore biological phenomena. Biology topics include the basics of biochemistry, the central dogma, population genetics, molecular evolution, metabolism, regulation, and phylogenetics. Computer science material includes basic data types and control structures, recursion, dynamic programming, and an introduction to automata and computability. This course fulfills the computer science core requirement at Harvey Mudd College. It does not fulfill the HMC biology Core requirement.
42. Principles and Practice of Computer Science (3)
Keller, Stone. Accelerated breadth-first introduction to computer science as a discipline for students (usually first-year) who have some programming background. Computational models of functional, object-oriented and logic programming. Data structures and algorithm analysis. Computer logic and architecture. Grammars and parsing. Regular expressions. Computability. Extensive practice constructing applications from principles, using a variety of languages. Successful completion of this course satisfies the Computer Science 5 core requirement and Computer Science 60 coursework. Prerequisite: permission of instructor. (Fall)
60. Principles of Computer Science (3)
Dodds, Keller, Lewis, Stone. 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. Those who have completed Computer Science 42 cannot take Computer Science 60. Prerequisites: Computer Science 5 or 5GR, or permission of the instructor. (Fall and Spring)
70. Data Structures and Program Development (3)
O’Neill, Stone, Wiedermann. 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 or 42. (Fall and Spring)
81. Computability and Logic (3)
Keller, Stone, 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 or 42, Mathematics 55. (Fall and Spring)
105. Computer Systems (3)
Erlinger, Kuenning, Bull (Pomona). An introduction to computer systems. In particular the course investigates data representations, 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. (Fall and Spring)
121. Software Development (3)
Erlinger, Keller, Sweedyk. Introduction to the discipline concerned with the design and implementation of software systems. The course presents a historical perspective on software development practice and explores modern, agile techniques for eliciting software requirements, designing and implementing software architecture and modules, robust testing practices, and project management. Student teams design, develop and test a substantial software project. Prerequisite: Computer Science 70. (Fall and Spring)
125. Computer Networks (3)
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. (Alternate years)
131. Programming Languages (3)
O’Neill, Stone, Bruce (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. (Fall and Spring)
132. Compiler Design (3)
Stone. The design and implementation of compilers. Topics include elegant theoretical results underlying compilation techniques, practical issues in efficient implementation of programming languages, and bit-level interactions with operating systems and computer architectures. Over the course of the semester, students build a working compiler. Prerequisites: Computer Science 105 and 131 or permission of instructor. (Spring, alternate years)
133. Databases (3)
Lee (CMC). 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; Computer Science 131 recommended. (Fall, alternate years)
134. Operating Systems: Design and Implementation (3)
Neill. Design and implementation of operating systems, including processes, memory management, synchronization, scheduling, protection, file systems 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 trade-offs; optimization; caching; and managing large code bases. Group projects provide experience in working with and extending a real operating system. Prerequisite: Computer Science 105. (Spring, alternate years)
136. Advanced Computer Architecture (3)
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. (Alternate years)
137. File Systems (3)
Kuenning. Computer storage and file systems. Characteristics of nonvolatile storage, including magnetic disks and solid-state memories. RAID storage. Data structures used in file systems. Performance, reliability, privacy, replication and backup. A major portion of the course is devoted to readings selected from current research in the field. Prerequisites: Computer Science 105. (Fall, alternate years)
140. Algorithms (3) (Also listed as Mathematics 168)
Libeskind-Hadas, Pippenger (Mathematics), Chen (Pomona). 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; CS 81 recommended. (Students taking the course as Mathematics 168 have slightly different prerequisites.) (Fall and Spring)
142. Complexity Theory (3)(Also listed as Mathematics 167)
Libeskind-Hadas, Pippenger (Mathematics). 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. (Fall, alternate years. Also offered as CS 181, a 1.5 unit fall half course with CS 140/Math 168 as a prerequisite)
144. Scientific Computing (3)(Also listed as Mathematics 164)
de Pillis (Mathematics), Yong (Mathematics). 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 65 and Computer Science 60 or 42. (Spring)
147. Computer Systems Performance Analysis (3)
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 35 and Computer Science 70. (Spring, alternate years)
151. Artificial Intelligence (3)
Keller, Sood (Pomona). This course presents a general introduction to the field of Artificial Intelligence. It examines the question: What does (will) it take for computers to perform human tasks? It presents a broad introduction to topics such as knowledge representation, search, learning and reasoning under uncertainty. For each topic, it examines real-world applications of core techniques to problems which may include game playing, text classification and visual pattern recognition. Prerequisites: Computer Science 60 or 42 and Mathematics 35; Computer Science 70 recommended. (Fall and Spring)
152. Neural Networks (3)
Keller. 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 or 42 and Mathematics 65. (Fall)
153. Computer Vision (3)
Dodds. Computational algorithms for visual perception. Students will develop applications that acquire, process, and interpret still images and image streams. The course will cover representations of color, shading, texture and shape along with stereo and motion analysis, object recognition and approaches for three-dimensional reconstruction. Applications include robotics, human perception and the use of large image databases. Prerequisite: Computer Science 60 or permission of instructor. (Fall, alternate years)
154. Robotics (3)
Dodds. Introduction to algorithmic robotics. Topics span from sensor operation and low-level actuator control to architectures and algorithms for accomplishing tasks such as localization, navigation and mapping. 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 our hardware platforms. Prerequisites: Computer Science 60 or permission of instructor. (Spring)
155. Computer Graphics (3)
Sweedyk. This course introduces students to modern computer graphics. Topics include image processing, ray tracing and pipeline rendering, GPU processing, and 3D modeling. The course also covers a selection of recent research results. Students work on four substantial projects across the semester. Prerequisites: Computer Science 70 and Mathematics 25B. (Fall)
156. Parallel and Real-Time Computing (3)
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; Computer Science 131 recommended. (Spring, alternate years)
157. Computer Animation (3)
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. Prerequisite: Computer Science 155. (Spring, alternate years)
158. Machine Learning (3)
Sood (Pomona). An exploration of concepts and methods in machine learning including decision trees, Markov models and neural networks. Students will implement machine learning methods, read and discuss contemporary research articles in the field, and independently propose, research and implement a machine learning approach to a modern artificial intelligence problem. Prerequisites: Computer Science 151. (Fall, alternate years)
159. Natural Language Processing (3)
Bruce (Pomona). An introduction to the fundamental concepts and ideas in natural language processing, sometimes called computational linguistics. The goals of the field range from text translation and understanding to enabling humans to converse with robots. We will study language processing starting from the word level to syntactic structure to the semantic meaning of text. Approaches include statistical as well as symbolic methods using logic and the lambda calculus. Students will build and modify systems and will use large existing corpora for validating their systems. Prerequisites: Computer Science 81. (Spring, alternate years)
181, 182. Computer Science Seminar (3)
Staff. Advanced topics of current interest in computer science. Prerequisite: Permission of instructor. (Fall and Spring)
183, 184. Computer Science Clinic I, II (3)
Staff. Team project in computer science, with corporate affiliation. Prerequisite: Computer Science 121. (Fall and Spring)
185. Computer Science Research I (1-3)
Staff. An independent research project under faculty supervision. The course also has regular class meetings that address research methods and presentation skills. Prerequisite: permission of instructor. (Fall)
186. Computer Science Research II (3)
Staff. A continuation of independent research carried out in Computer Science 185 culminating in a research paper and oral presentation. Prerequisite: Computer Science 185. (Spring)
189. Programming Practicum (1)
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. Prerequisite: Computer Science 5, 5GR or 42 or permission of instructor. (May be repeated forelective credit up to three times.) (Fall and Spring)
191, 192. Computer Science Project I, II (1-3)
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. Prerequisite: permission of instructor. (Fall and Spring)
195. Computer Science Colloquium (0.5)
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, any semester while in residence at HMC. No more than 2.0 units of credit can be earned for colloquia. Pass/No Credit grading. All majors welcome. (Fall and Spring)
197, 198. Advanced Problems in Computer Science (1-3)
Staff. Independent study in a field agreed upon by student and a faculty member. Prerequisite: permission of instructor. (Fall and Spring)