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), recursion, exceptions, debugging, and files. No previous programming experience assumed.

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.

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 CS 70 as a prerequisite for upper division computer science courses at any of the Claremont Colleges. Prerequisite: Computer Science 51.

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.

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.

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.

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.

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.

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.

135. Distributed Software Architecture

Software architectures, programming models, and programming environments pertinent to developing Internet applications. Topics include network protocols, client-server model, multi-tier software architecture, client-side scripting (e.g., JavaScript), server-side programming (e.g., Servlets and JavaServer Pages), component reuse (e.g., JavaBeans), database connectivity (e.g., JDBC), web servers, and developing web applications. A team project. Prerequisite: Computer Science 62.

140. Algorithms

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.

181. Special Topics in Computer Science

Selected topics in computer science. May be repeated for credit. Instructor's permission required.

Math 50. Discrete Mathematics

Topics include sets, propositional logic, combinatorics, recursion, trees, and graph theory, with emphasis on problem solving and proofs. Possible additional topics include analysis of algorithms, particularly search and ordering algorithms, and matrix theory. Prerequisite: Placement Test 1.