Courses

This page displays the schedule of ÀÏÍõÂÛ̳ courses in this department for this academic year. It also displays descriptions of courses offered by the department during the last four academic years.

For information about courses offered by other ÀÏÍõÂÛ̳ departments and programs or about courses offered by Haverford and Swarthmore Colleges, please consult the Course Guides page.

For information about the Academic Calendar, including the dates of first and second quarter courses, please visit the College's calendars page.

Fall 2024 CMSC

Course Title Schedule/Units Meeting Type Times/Days Location Instr(s)
CMSC B113-001 Computer Science I Semester / 1 Lecture: 1:10 PM-2:30 PM TTH Park 300
Department staff,T., Poliak,A.
Laboratory: 2:40 PM-4:00 PM T Park 230
CMSC B151-001 Introduction to Data Structures Semester / 1 Lecture: 1:10 PM-2:30 PM MW Park 159
Dinella,E., Dinella,E.
Laboratory: 2:40 PM-4:00 PM W Park 230
CMSC B223-001 Systems Programming Semester / 1 Lecture: 11:40 AM-1:00 PM TTH Park 159
Normoyle,A., Normoyle,A.
Laboratory: 2:40 PM-4:00 PM TH Park 230
CMSC B231-001 Discrete Mathematics Semester / 1 Lecture: 10:10 AM-11:30 AM TTH Park 278
Zhou,Y.
CMSC B245-001 Principles of Programming Languages Semester / 1 Lecture: 10:10 AM-11:30 AM TTH Park 363C
Kumar,D., Kumar,D.
Laboratory: 1:10 PM-2:30 PM T Park 230
CMSC B283-001 Topics in Computer Science: Game Programming Semester / 1 LEC: 1:10 PM-2:30 PM TTH Park 159
Normoyle,A., Normoyle,A.
Laboratory: 2:40 PM-4:00 PM T Park 231
CMSC B325-001 Computational Linguistics Semester / 1 Lecture: 10:10 AM-11:30 AM MW Park 245
Kumar,D., Kumar,D.
Laboratory: 1:10 PM-2:30 PM M Park 230
CMSC B340-001 Analysis of Algorithms Semester / 1 Lecture: 11:40 AM-1:00 PM MW Park 159
Xu,D., Xu,D.
Laboratory: 1:10 PM-2:30 PM W Park 230
CMSC B383-001 Recent Advances in Computer Science: Machine Learning Semester / 1 LEC: 10:10 AM-11:30 AM TTH Park 159
Poliak,A., Poliak,A.
Laboratory: 2:40 PM-4:00 PM W Park 231
CMSC B403-001 Supervised Work/Independent Study 1 Dept. staff, TBA

Spring 2025 CMSC

Course Title Schedule/Units Meeting Type Times/Days Location Instr(s)
CMSC B113-001 Computer Science I Semester / 1 Lecture: 1:10 PM-2:30 PM MW Park 245
Kumar,D., Kumar,D.
Laboratory: 2:40 PM-4:00 PM M Park 231
CMSC B151-001 Introduction to Data Structures Semester / 1 Lecture: 1:10 PM-2:30 PM MW Park 300
Dinella,E., Dinella,E.
Laboratory: 2:40 PM-4:00 PM W
CMSC B223-001 Systems Programming Semester / 1 Lecture: 10:10 AM-11:30 AM TTH Normoyle,A., Normoyle,A.
Laboratory: 2:40 PM-4:00 PM T Park 231
CMSC B231-001 Discrete Mathematics Semester / 1 Lecture: 11:40 AM-1:00 PM TTH Park 245
Zhou,Y., Zhou,Y.
Laboratory: 3:00 PM-4:00 PM TH Park 230
CMSC B240-001 Principles of Computer Organization Semester / 1 Lecture: 1:10 PM-2:30 PM TTH Park 300
Kumar,D., Kumar,D.
Laboratory: 2:40 PM-4:00 PM W Park 230
CMSC B311-001 Computational Geometry Semester / 1 Lecture: 1:10 PM-2:30 PM MW Park 159
Xu,D., Xu,D.
Laboratory: 1:10 PM-2:30 PM T Park 231
CMSC B340-001 Analysis of Algorithms Semester / 1 Lecture: 11:40 AM-1:00 PM MW Park 159
Xu,D., Xu,D.
Laboratory: 11:40 AM-1:00 PM T Park 231
CMSC B355-001 Operating Systems Semester / 1 Lecture: 1:10 PM-2:30 PM TTH Park 159
Normoyle,A., Normoyle,A.
Laboratory: 2:40 PM-4:00 PM TH Park 231
CMSC B383-001 Recent Advances in Computer Science: Software Analysis Semester / 1 LEC: 10:10 AM-11:30 AM MW Park 245
Dinella,E., Dinella,E.
Laboratory: 2:40 PM-4:00 PM M Park 230
CMSC B399-001 Senior Conference Semester / 1 Lecture: 1:10 PM-3:00 PM F Dept. staff, TBA
CMSC B400-001 Senior Thesis 1 Dept. staff, TBA

Fall 2025 CMSC

(Class schedules for this semester will be posted at a later date.)

2024-25 Catalog Data: CMSC

CMSC B109 Introduction to Computing

Not offered 2024-25

The course is an introduction to computing: how we can describe and solve problems using a computer. Students will learn how to write algorithms, manipulate data, and design programs to make computers useful tools as well as mediums of creativity. Contemporary, diverse examples of computing in a modern context will be used, with particular focus on graphics and visual media. The Processing/Java programming language will be used in lectures, class examples and weekly programming projects, where students will learn and master fundamental computer programming principles. Students are required to register for the weekly lab. Prerequisites: Must pass either the Quantitative Readiness Assessment or the Quantitative Seminar (QUAN B001).

Quantitative Methods (QM)

Quantitative Readiness Required (QR)

Scientific Investigation (SI)

Counts Toward Data Science

Back to top

CMSC B113 Computer Science I

Fall 2024, Spring 2025

This is an introduction to the discipline of computer science, suitable for those students with a mature quantitative ability. This fast-paced course covers the basics of computer programming, with an emphasis on program design, problem decomposition, and object-oriented programming in Java. Graduates of this course will be able to write small computer programs independently; examples include data processing for a data-based science course, small games, or estimating likelihood of probabilistic events, etc.. No computer programming experience is necessary or expected. Students are required to register for a weekly lab. Prerequisites: Students must have completed AP level Calculus, Statistics, Physics, Chemistry, Economics, or Computer Science; or IB Mathematics HL; or have a SAT score of 650 or higher in Mathematics or Physics; or ACT score of 28 or higher in Mathematics.

Course does not meet an Approach

Quantitative Methods (QM)

Quantitative Readiness Required (QR)

Counts Toward Data Science

Back to top

CMSC B151 Introduction to Data Structures

Fall 2024, Spring 2025

Introduction to the fundamental algorithms and data structures using Java. Topics include: Object-Oriented programming, program design, fundamental data structures and complexity analysis. In particular, searching, sorting, the design and implementation of linked lists, stacks, queues, trees and hash maps and all corresponding complexity analysis. In addition, students will also become familiar with Java's built-in data structures and how to use them, and acquire competency using a debugger. Students must also register for the weekly lab. Prerequisites: CMSC B109 or CMSC B113 or CMSC H105, or permission of instructor.

Quantitative Methods (QM)

Scientific Investigation (SI)

Counts Toward Data Science

Back to top

CMSC B223 Systems Programming

Fall 2024, Spring 2025

Systems programming provides a foundation for the implementation of programs and toolkits that serve as infrastructure for other software, such as compilers, operating systems, networking APIs, and graphics engines. Topics include pointers, bit representations of data, x86_64 assembly, memory management, processes, and threads. In this class, students will gain hands-on experience implementing low-level algorithms and data structures using C. Furthermore, students will build technical skills related to makefiles, interactive debugging, version control, and command-line shell interaction. C++ and STL will be introduced at the end of the course.. Students must register for the weekly lab. NOTE: CMSC B223 and CMSC H251 cover overlapping material and students may not take both. Prerequisites: CMSC B151 or CMSC H106 or CMSC H107, and CMSC B231 or CMSC H231 or MATH B231 or MATH H231..

Course does not meet an Approach

Back to top

CMSC B231 Discrete Mathematics

Fall 2024, Spring 2025

An introduction to discrete mathematics with strong applications to computer science. Topics include propositional logic, proof techniques, recursion, set theory, counting, probability theory and graph theory. Prerequisites: CMSC B231 or CMSC H231 or MATH B231 or MATH H231.

Quantitative Methods (QM)

Back to top

CMSC B240 Principles of Computer Organization

Spring 2025

A lecture/laboratory course studying the hierarchical design of modern digital computers. Combinatorial and sequential logic elements; construction of microprocessors; instruction sets; assembly language programming. Lectures cover the theoretical aspects of machine architecture. In the weekly laboratory, designs discussed in lecture are constructed in software. Prerequisite: CMSC B151, or CMSC H106, or CMSC H107, and CMSC B231 or CMSC H231 or MATH B231 or MATH H231.

Course does not meet an Approach

Back to top

CMSC B245 Principles of Programming Languages

Fall 2024

An introduction to the study of programming languages. Where do programming languages come from and how do they evolve? And why should a programmer choose one over another? This course explores these topics by covering several different programming language features and paradigms, including object-oriented, functional, and dynamic. It also looks at the history and future of programming languages by studying the active development of several real-world languages. The course has a weekly lab component where students explore several programming languages with hands-on exercises. Prerequisite: CMSC B151 or CMSC H106 or CMSC H107, and CMSC B231 or CMSC H231 or MATH B231 or MATH H231.

Course does not meet an Approach

Back to top

CMSC B283 Topics in Computer Science

Section 001 (Fall 2024): Game Programming

Fall 2024

This is an intermediate-level topics course. Course content varies. Prerequisites: CMSC B151 or CMSC H106/107, and CMSC B231 or CMSC H231 or MATH B231 or MATH H231, or permission of instructor

Current topic description: This intermediate programming course covers the foundational concepts, architectures, and mathematics underlying video games and digital interactive experiences. We will deconstruct the designs of classic games, such as Pac-Man, Super Mario Brothers, Minecraft, Doom, and Diablo II, to explore the data structures, algorithms, and foundational mathematics necessary to implement popular game mechanics and features. Potential topics will include rendering and modeling, navigation systems, game artificial intelligence, dialog systems, character animation, networked multiplayer, user interfaces, physics engines, and sound. The course will challenge students to create original and novel game concepts through weekly assignments, labs, and a final project. Through these projects, students will learn the foundational mathematics behind "making objects move", such as transformations, splines, collision detection, and raycasting. Furthermore, students will gain object-oriented programming experience through designing mid-scale programs. Programming and project assignments will be in Java and C#, use the Processing and Unity frameworks, and cover how to build games for different platforms, namely web, desktop, virtual reality, and augmented reality.

Course does not meet an Approach

Back to top

CMSC B311 Computational Geometry

Spring 2025

A study of algorithms and mathematical theories that focus on solving geometric problems in computing, which arise naturally from a variety of disciplines such as Computer Graphics, Computer Aided Geometric Design, Computer Vision, Robotics and Visualization. The materials covered sit at the intersection of pure Mathematics and application-driven Computer Science and efforts will be made to accommodate Math majors and Computer Science majors of varying math/computational backgrounds. Topics include: graph theory, triangulation, convex hulls, geometric structures such as Voronoi diagrams and Delaunay triangulations, as well as curves and polyhedra surface topology. Prerequisite: CMSC B151 or CMSC H106 or CMSC H107, and CMSC B231, or CMSC H231 or MATH B231 or MATH H231, or permission of instructor.

Quantitative Readiness Required (QR)

Back to top

CMSC B313 Computer Graphics

Not offered 2024-25

An introduction to the fundamental principles of computer graphics, including 3D modeling, rendering, and animation. Topics cover: 2D and 3D transformations; rendering techniques; geometric algorithms; 3D object models (surface and volume); visible surface algorithms; shading and mapping; ray tracing; and select others. Prerequisites: CMSC B231 or CMSC H231 or MATH B231 or MATH H231, CMSC B246 and MATH B203 or MATH H215, or permission of instructor.

Back to top

CMSC B317 Computer Animation

Not offered 2024-25

The goal of this course is to give students a foundation for programming animated and interactive graphics. In particular, we will "look under the hood" at the algorithms used by game engines and modeling tools to create authorable, interactive characters and special effects. Labs will give students hands on experience implementing algorithms in C++ as well as opportunities to derive their own unique animations. Topics will include mathematical foundations (coordinate systems, transformations, quaternions), interpolation techniques, keyframing, motion capture and procedural animation, and physically-based systems. Pre-requisites: permission of instructor.

Back to top

CMSC B325 Computational Linguistics

Fall 2024

Introduction to computational models of understanding and processing human languages. How elements of linguistics, computer science, and artificial intelligence can be combined to help computers process human language and to help linguists understand language through computer models. Topics covered: syntax, semantics, pragmatics, generation and knowledge representation techniques. Prerequisite: CMSC B151 , or CMSC H106 or CMSC H107, and CMSC B231 or CMSC H231 or MATH B231 or MATH H231, or permission of instructor.

Counts Toward Neuroscience

Back to top

CMSC B337 Algorithms: Design and Practice

Not offered 2024-25

This course examines the applications of algorithms to the accomplishments of various programming tasks. The focus will be on understanding of problem-solving methods, along with the construction of algorithms, rather than emphasizing formal proving methodologies. Topics include searching, sorting, search engine indexing, Page Rank, pattern recognition algorithms, decision trees, neural nets, graph algorithms, error correcting codes, data compression, public key cryptography, digital signatures, cryptographic hash functions, etc. Also includes measuring program performance, programing pitfalls, code optimization, etc. This writing intensive course also focuses on student-led class discussions and formal presentations. Prerequisites: CMSC B151 or H106 and CMSC B231 or CMSC H231 or MATH B231 or MATH H231.

Writing Intensive

Back to top

CMSC B340 Analysis of Algorithms

Fall 2024, Spring 2025

This course will cover qualitative and quantitative analysis of algorithms and their corresponding data structures from a precise mathematical point of view. Topics include: performance bounds, asymptotic and probabilistic analysis, worst case and average case behavior and correctness and complexity. Particular classes of algorithms will be studied in detail. This course fulfills the writing requirement in the major. Prerequisites: CMSC B151, or CMSC H106 or CMSC H107, and CMSC B231, or CMSC H231 or MATH B231 or MATH H231 or permission of instructor.

Writing Intensive

Quantitative Readiness Required (QR)

Back to top

CMSC B355 Operating Systems

Spring 2025

A practical introduction to modern operating systems, using case studies from UNIX, MSDOS and the Macintosh. Topics include computer and OS structures, process and thread management, process synchronization and communication, resource allocations, memory management, file systems, and select examples in protection and security. This This is a challenging, implementation-oriented course with a strong lab component. Prerequisite: CMSCB223 or CMSC H251

Back to top

CMSC B373 Artificial Intelligence

Not offered 2024-25

Survey of Artificial Intelligence (AI), the study of how to program computers to behave in ways normally attributed to "intelligence" when observed in humans. Topics include heuristic versus algorithmic programming; cognitive simulation versus machine intelligence; problem-solving; inference; natural language understanding; scene analysis; learning; decision-making. Topics are illustrated by programs from literature, programming projects in appropriate languages and building small robots. Prerequisites: CMSC B151 or CMSC H106 or CMSC H107, and CMSC B231, or CMSC H231 or MATH B231 or MATH H231.

Counts Toward Neuroscience

Back to top

CMSC B383 Recent Advances in Computer Science

Section 001 (Spring 2024): Database Systems in Practice
Section 002 (Spring 2024): Deep Learning/Lrg Lang Models
Section 001 (Fall 2024): Machine Learning
Section 001 (Spring 2025): Software Analysis

Fall 2024, Spring 2025

This is a topics course. Course content varies.

Current topic description: Machine Learning as a field has grown considerably over the past few decades. In this course, we will explore both classical and modern approaches, with an emphasis on theoretical understanding. There will be a significant math component (statistics and probability in particular), as well as a substantial implementation component (as opposed to using high-level libraries). However, during the last part of the course we will use a few modern libraries such as Pytorch. By the end of this course, you should be able to form a hypothesis about a dataset of interest, use a variety of methods and approaches to test your hypothesis, and be able to interpret the results to form a meaningful conclusion. We will focus on real-world, publicly available datasets, not generating new data. Prerequisites: CMSC B151 or CMSC H106/107, and MATH B203 or MATH H215 and CMSC B231, or permission of instructor

Current topic description: This course offers an introduction to the theoretical foundations of software analysis and its applications in software engineering and security. Effective program analysis is essential for ensuring the reliability, security, and performance of software systems. Students will explore a range of methods for analyzing program behavior including testing, static analysis, and formal methods. The course emphasizes both theoretical knowledge and practical experience through implementation of analysis tools and engaging with current state-of-the-art techniques.

Counts Toward Data Science

Back to top

CMSC B399 Senior Conference

Seminar in computer science with regular oral presentations, weekly written reflections, and a final written report. Class discussions of foundational Computer Science research, oral and written presentations of research results will be emphasized. Required for all computer science majors in their senior year.

Back to top

CMSC B400 Senior Thesis

Seminar for seniors writing theses, supervised by a member of the Computer Science department. A senior thesis has an expectation of producing new knowledge or advancement in a specific research area, and working with oral and written exposition of advanced material, culminating in a written report. This course is optional and does not fulfill any major/minor requirement.

Back to top

CMSC B403 Supervised Work/Independent Study

Students wishing to engage in in-depth study of content not typically covered in a computer science course can engage in this under the guidance of a faculty member. Students should closely consult with a faculty advisor prior to registering for this class. This class does not fulfill any major/minor requirement.

Back to top