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.
76. Encryption and Encoding
The theory and practice of data encoding and encryption, with
much of the necessary mathematical background developed in the
course. Topics include: an introduction to finite algebraic
structures; residue arithmetic and the Chinese Remainder Theorem;
basic notions of encoding and error correcting capabilities;
complexity-theoretic foundations of cryptography; one-way and
trapdoor functions; secret key and public key encoding: the Data
Encryption Standard, the RSA algorithm; the factorization problem:
elementary algorithms and the quadratic sieve method; theory of
zero-knowledge protocols. Prerequisites: Mathematics 90; Computer
Science 51 recommended.
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.
|