19 courses with the subject CMSC H, each shown exactly as we captured it from the college's catalog, with every element we hold. Where the wording looks broken, that is our reading of the catalog, not the college's text.
CMSC H105INTRODUCTION TO COMPUTER SCIENCE1.0
Introduction to the intellectual and software tools used to create and study algorithms: formal and informal problem specification; problem solving and algorithm design techniques; reliability, formal verification, testing, and peer code review techniques; program clarity, complexity and efficiency; functional and imperative paradigms; associated programming skills. Students must attend a one-hour weekly lab. Labs will be sectioned by course professor. Prerequisite(s): May not be taken by students who have taken any one of HC: CMSC 104, CMSC 107; BMC: CMSC 110, except by instructor consent
An introduction to the fundamental data structures of computer science: strings, lists, stacks, queues, trees, BSTs, graphs, sets and their accompanying algorithms. Principles of algorithmic analysis and object reasoning and design will be introduced using mathematical techniques for the notions of both complexity and correctness. More practical issues, such as memory management and hashing, will also be covered. The programming language used to illustrate and implement these concepts will be able to support functional, imperative and object-oriented approaches. Emphasis will be placed on recursive thinking and its connection to iteration. Students must attend a one-hour weekly lab. Labs will be sectioned by course professor. Prerequisite(s): CMSC 105 (or 110 or 113 at Bryn Mawr) or instructor consent; may not be taken by students who have taken any one of HC: CMSC 107; BMC: CMSC 206, CMSC 151, except by instructor consent
CMSC H107INTRODUCTION TO COMPUTER SCIENCE AND DATA STRUCTURES1.0
An accelerated treatment of CMSC 105/106 for students with significant programming experience. Reviews programming paradigms, while focusing on techniques for reasoning about about software: methodical testing, formal verification, code reviews, other topics as time permits. Includes lab work. Prerequisite(s): CMSC104 or instructor consent, or placement by CS faculty, based on CS placement test. If you are interested in CMSC 107, you should preregister for the CMSC 105 section at the same time and take the placement test by the deadline, typically Wednesday before classes start; may not be taken by students who have taken any one of HC: CMSC 105, CMSC 106; BMC: CMSC 206, except by instructor consent
Covers the design, evaluation and implementation of interactive computing systems, along with the study of major phenomena surrounding these systems. Topics include: user-centered design, usability, affordances, cognitive and physical ergonomics, information and interactivity structures, interaction styles, interaction techniques, and user interface tools with a special focus on accessible and mobile interfaces. Prerequisite(s): CMSC106, 107, 206, or instructor consent
A survey of major algorithms in modern scientific computing, with a focus on continuous problems. Topics include numerical differentiation and integration, numerical linear algebra, root-finding, optimization, Monte Carlo methods, and discretization of differential equations. Basic ideas of error analysis are presented. A regular computer lab introduces students to the software package Matlab, in which the algorithms are implemented and applied to various problems in the natural and social sciences. Prerequisite: MATH 120 or 121. Cross-listed: Mathematics, Computer Science
An introduction to discrete mathematics with strong applications to computer science. Topics include set theory, functions and relations, propositional logic, proof techniques, difference equations, graphs, and trees. Co-requisite(s): CMSC 105, 107, or B110 or B113 or instructor consent
What actually happens when you hit "run", after writing your program? This course introduces the elements of hardware and language/O.S. software that execute a program, serving as a foundation for later work in these areas, and providing insights into computing efficiency that may be important to a wide range of programmers. Includes weekly lab exercises, on principles covered in lecture, and details from lecture and self-teaching (according to resource-use principles presented in the course). Pre-requisite(s): Both introductory CS (CMSC H106, H107, or B151) and CMSC 231, with the latter allowed as co-requisite (Note that CMSC 223 and 251 cover substantially the same material, and thus students may not take both);
This course will introduce students to the principles of learning from data, including basic modeling, applied linear algebra, probability, statistics, and visualization. The lab component will focus on implementation and analysis in Python. Pre-requisite(s): MATH 105 or equivalent, CMSC H106/CMSC B151 (Data Structures), corequisite CMSC H231 (Discrete Math), or permission of the instructor.
An introduction to and analysis of the impacts of artificial intelligence on society, including ethical, historical, policy, and technical perspectives on AI. Course topics will include: defining intelligence, algorithmic discrimination, AI harms, data, physical infrastructure and environmental impacts, workers, and the future of AI. Students will also do laboratory work related to technical and policy approaches to these issues including transparency mechanisms, AI audits, fair machine learning, and other mitigations for AI harms. Pre-requisite(s): CMSC 260 Foundations of Data Science or Instructor Consent Lottery Preference: 1. senior CMSC majors; 2. junior CMSC majors; 3. first years and sophomores; 4. senior CMSC minors; 5. juniors CMSC minors; 6. other seniors; 7. other juniors
Qualitative and quantitative analysis of algorithms and their corresponding data structures from a precise mathematical point of view. Performance bounds, asymptotic and probabilistic analysis, worst case and average case behavior. Correctness and complexity. Particular classes of algorithms such as sorting searching will be studied in detail. Crosslisted: Computer Science, Mathematics Prerequisite(s): CMSC 106 or 107 or B206, and 231, or instructor consent
Introduction to the mathematical foundations of computer science: finite state automata, formal languages and grammars, Turing machines, computability, unsolvability, and computational complexity. Attendance at the weekly discussion section is required. Crosslisted: Computer Science, Mathematics Prerequisite(s): (CMSC 106, 107, 151, or 206) and CMSC 231, and junior or senior standing, or instructor consent
An introduction to compiler design, including the tools and software design techniques required for compiler construction. Students construct a working compiler using appropriate tools and techniques in a semester-long laboratory project. Lectures combine practical topics to support lab work with more abstract discussions of software design and advanced compilation techniques. Prerequisite(s): CMSC H251 or CMSC B223; concurrent enrollment in this and two other CMSC lab courses requires instructor consent
CMSC H356CONCURRENCY AND CO-DESIGN IN OPERATING SYSTEMS1.0
A practical introduction to the principles of shared-memory concurrent programming and of hardware/software co-design, which together underlie modern operating systems; includes a substantial laboratory component, currently using Java's high-level concurrency and the HERA architecture. Prerequisite(s): CMSC 251 or B223 or H240; concurrent enrollment in this and two other CMSC lab courses requires permission of the instructor
To 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 TensorFlow and Keras. By the end of this course, students 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. Prerequisite(s): CMSC 260 or instructor consent
This course introduces foundational algorithms that have become essential for learning from biological data. With the genome sequencing revolution, it has become easier and cheaper to obtain genetic data, but often challenging to store, analyze, and make sense of this data. These questions have driven new algorithm development and repurposed existing algorithms for biology. We will study these algorithms from a variety of angles, including theory, implementation, application, biological interpretation, and communication of results. Pre-requisite(s): CS260 "Foundations of Data Science Lottery Preference: 1. senior CMSC majors; 2. junior CMSC majors; 3. senior CMSC minors; 4. junior CMSC minors; 5. Scientific Computing concentrators; 6. senior LING majors; 7. junior LING majors; 8. other seniors; 9. other juniors; 10. sophomores; 11. everyone else
This course presents an overview of robotics in practice and research with topics including kinematics, control, motion planning, perception, reinforcement learning, and human-robot interaction. Students will implement algorithms to enable a robot to learn about and interact with the physical world. Pre-requisite(s): CMSC H260 (Data Science), MATH H215/B203 (Linear Algebra), or permission of the instructor Lottery Preference: Fall: 1. senior CMSC majors; 2. junior CMSC majors; 3. senior CMSC minors; 4. junior CMSC minors; 5. Scientific Computing concentrators
CMSC H394ADVANCED TOPICS IN THEORETICAL COMPUTER SCIENCE: INTRODUCTION TO DISCRETE MATHEMATICS1.0
A 300-level course on the mathematical foundations of computer science, with the particular topic(s) varying each time it is offered. Fall 2026: This course introduces three fundamental aspects of discrete mathematics: enumeration, graph theory and discrete probability. Our introduction to enumeration covers basic counting, basic approximations, bijective arguments, double-counting arguments, recurrence relations, generating functions, the pigeonhole principle, inclusion-exclusion, etc. Our introduction to graph theory includes topics such as connectivity, trees, matchings, colorings, Ramsey theory, etc. Our introduction to discrete probability includes linearity of expectation, the law of averages, Markov's inequality, Chebyshev's inequality, etc. We will see how discrete probability can be used to prove the existence of surprising discrete structures. Prerequisites: Math 120 and Math 215, and a solid grasp of proof techniques Crosslisted: Mathematics, Computer Science
Fall seminar required for seniors writing theses, dealing with the oral and written exposition of advanced material. Lottery Preference(s): Senior standing