For information about Web accessibility, please contact the Webmaster at

Haverford College

Computer Science

header image

Academic Programs : Major

Major Requirements

The CS major for students who wish to explore fundamental questions about computation itself and the role of computation in society, such as

  • How do the languages and "paradigms" we use to express computation affect our ability to develop, understand, and use software?
  • What computing techniques are needed to perform inquiry into other fields such as physics, biology, or economics?
  • Does a simple requirement of logical consistency constrain what can, in principle, be computed?
  • Do the laws of physics constrain what can and cannot be computed?
  • Are the constraints of logical consistency and physics the same? If not, what does this mean about the universe?
  • How can human beings best communicate with each other about the properties of computing systems?
  • Is the classic 'worst-case time complexity' analysis really the best way to study the resources needed for computation?
  • How does the design and marketing of computing systems influence disparities in society?

As part of this exploration, we provide many opportunities for students to design, implement, and analyze algorithms and data structures, and to develop larger-scale hardware/software systems over the course of multiple semesters. These opportunities include both individual projects and group work, and provide experience with a variety of programming languages and with computer hardware. The senior experience and final projects in many classes provide opportunities for students to explore their own interests; we also invite students to contact us to discuss ideas for independent study courses or independent majors relating to computer science.


  • Introductory courses
    • CMSC105 or CS 110 at Bryn Mawr Introduction to Computer Science (or CMSC107)
    • CMSC106 or CS 206 at Bryn Mawr Introduction to Data Structures (or CMSC107)
    • Math/CMSC 231 Discrete Math (students who receive instructor permission to register for CMSC340 or CMSC345 without Math/CMSC 231 may substitute another mathematics course that is relevant to computer science from the following list: Linear Optimization (Math 210b), Linear Algebra (215), Scientific Computing (222), Logic (394), Cryptography (394), Combinatorics (395), or Statistics (203, 218, 286, or 396))
  • Required core courses
    • CMSC240 Principles of Computer Organization
    • CMSC245 Principles of Programming Languages
    • CMSC340 Analysis of Algorithms
    • CMSC345 Theory of Computation
    • either
      • CMSC350 Compiler Design or
      • CMSC355 Operating Systems or
      • CMSC356 Concurrency and Co-Design in Operating Systems
  • Electives
    • one additional course at the 300-level in computer science or related courses in math or physics
    • two additional courses at at least the 200-level in computer science or related courses in math or physics
  • CMSC399, Senior Seminar thesis

Flowchart with core courses.