Computer Science Sequence
The computer science sequence is designed to complement almost all, if not all, CMC majors. It provides a substantial course of study in both the theory and practice of computing, beginning with the fundamental concepts and elementary programming using modern programming languages such as Java, C++, Scheme, and Python, and culminating in courses emphasizing both the abstract principles of computer science as well as building systems and applications using modern software development methodologies and tools. Completion of the sequence is listed on student's transcripts.
Computer Science Programs at The Claremont Colleges
CMC, Harvey Mudd College and Pomona College offer programs in computer science in close collaboration and most computer science courses offered at the other Claremont Colleges are comparable to CMC courses. Although the introductory courses, Computer Science 51, 52, and 62 at CMC or Pomona College are collectively equivalent to Computer Science 5, 60, and 70 at Harvey Mudd College, the courses are not interchangeable and students who start with the sequence at Harvey Mudd College should continue to take the next two courses at HMC if they plan to take upper division courses at any of the three colleges. The computer science courses at all three colleges are designed in such a way that students at CMC can seamlessly continue on to a full major in computer science at Pomona College or at Harvey Mudd College. CMC students interested in pursuing a dual major in computer science may do so through Pomona College. Students interested in pursuing a full or dual major must consult with the CMC computer science advisors to ensure they select appropriate courses.
Computer Science Courses
51. Introduction to Computer Science
First computer science course intended for students planning to minor (sequence) or major in computer science or a related field. Students will learn principles of developing object-oriented programs using a modern programming language such as Java. Fundamental concepts covered will include abstraction using classes, control structures, elementary data structures (arrays and linked lists), object-oriented design, elementary algorithms (sorting and searching), and recursion. No previous programming experience assumed. Offered jointly with Pomona College. Offered every semester.
52. Fundamentals of Computer Science
A solid foundation in functional programming, procedural and data abstraction, recursion, and problem solving. Applications to key areas of computer science, including algorithms and complexity, computer architecture and organization, programming languages, finite automata and computability. This course serves the same role as HMC CS 60 as a prerequisite for upper division computer science courses at any of the Claremont Colleges. Prerequisite: Computer Science 51. Offered every fall semester.
62. Data Structures and Advanced Programming
This course builds on the computing concepts and programming skills acquired in Computer Science 51. Key topics include abstract data types (including stacks, queues, trees, priority queues, dynamic dictionaries, disjoint sets), classical algorithms (including sorting and searching), analysis of algorithms (including worst-case, average-case, and amortized analysis), and storage management. Extensive practice in implementing these data structures in Java. Includes an introduction to manual memory management in C++. This course serves the same role as HMC Computer Science 70 as a prerequisite for upper division computer science courses at any of the Claremont Colleges. Prerequisite: Computer Science 51. Offered jointly by CMC and Pomona College. Offered every semester.
81. Computability and Logic
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 62 and Mathematics 50. Offered jointly by CMC, Harvey Mudd College, and Pomona College. Offered every semester.
105. Computer Systems
Introduction to computer systems from a programmer's point of view. Machine level representations of programs, optimizing program performance, memory hierarchy, linking, exceptional control flow, measuring program performance, virtual memory, concurrent programming with threads, network programming. Prerequisite: Computer Science 62. Offered jointly by CMC, Harvey Mudd College, and Pomona College. Offered every semester.
121. Software Development
Practical exposure to the process of creating large software systems, including requirements specifications, design, implementation, testing, debugging, and maintenance. Emphasis on software process, software tools (debuggers, profilers, source code repositories, test harnesses), software engineering techniques (time management, code and documentation standards, source code management, object-oriented analysis and design), development methods (pair programming, test first development, etc.), and team development practice. Some of the work will be in groups. Prerequisite: Computer Science 62. Offered jointly by CMC, Harvey Mudd College, and Pomona College. Offered every semester.
131. Programming Languages
Ideas behind the design and implementation of programming languages. Syntactic description, scope and lifetime of variables, runtime stack organization, parsing and abstract syntax, semantic issues, type systems, programming paradigms, interpreters and compilers. Prerequisite: Computer Science 81 or permission of the instructor. Offered jointly by CMC, Harvey Mudd College, and Pomona College. Offered every semester.
133. Database Systems
Representing information about real world enterprises using important data models including the entity-relationship, relational and object-oriented approaches. Database design criteria, including normalization and integrity constraints. Implementation techniques using commercial database management system software. Selected advanced topics such as distributed, temporal, active, and multi-media databases. Prerequisite: Computer Science 81 or permission of the instructor. Offered every spring semester.
134. Operating Systems
Characteristics, objectives, and issues concerning computer operating systems. Hardware/software interactions, process management, memory management, protection, synchronization, resource allocation, file systems, security, and distributed systems. Extensive systems programming. Prerequisite: Computer Science 105. Offered jointly by CMC, Harvey Mudd College, and Pomona College. Offered every semester.
135. Distributed Software Architecture
Balanced trees, string matching, graph algorithms, external sorting and searching. Dynamic programming, exhaustive search. Space and time complexity, derivation and solution of recurrence relations, complexity hierarchies, reducibility, NP completeness. Prerequisites: Computer Science 62 and Mathematics 50. Offered jointly by CMC, Harvey Mudd College, and Pomona College. Offered every semester.
181. Special Topics in Computer Science
Selected topics in computer science. May be repeated for credit. Instructor's permission required. Offered occasionally.