Computer Science Specializations
Students who major in computer science have the option to complete one specialization. To do so, students must take three courses from an approved list in lieu of three major electives. Please note that a course that is counted towards a specialization may not also be counted towards a major sequence requirement (i.e., Programming Languages and Systems, or Theory). The following specializations are available starting in Autumn 2019:

Computer Security: CMSC 23200 and two other courses from this list
 CMSC 23200 Introduction to Computer Security
 CMSC 23210 Usable Security and Privacy
 CMSC 23280 Cryptocurrencies
 CMSC 28400 Introduction to Cryptography
 Bachelor's thesis in computer security, approved as such

Computer Systems: three courses from this list, over and above those taken to fulfill the programming languages and systems requirement
 CMSC 22200 Computer Architecture
 CMSC 22240 Computer Architecture for Scientists
 CMSC 23000 Operating Systems
 CMSC 23010 Parallel Computing
 CMSC 23300 Networks and Distributed Systems
 CMSC 23310 Advanced Distributed Systems
 CMSC 23320 Foundations of Computer Networks
 CMSC 23500 Introduction to Database Systems
 Bachelor's thesis in computer systems, approved as such

Data Science: CMSC 21800 and two other courses from this list
 CMSC 21800 Data Science for Computer Scientists
 CMSC 23900 Data Visualization
 CMSC 25025 Machine Learning and LargeScale Data Analysis
 CMSC 25300 Mathematical Foundations of Machine Learning
 CMSC 25400 Machine Learning
 Bachelor's thesis in data science, approved as such

Human Computer Interaction: CMSC 20300 and two other courses from this list
 CMSC 20300 Introduction to HumanComputer Interaction
 CMSC 20370 Inclusive Technology: Designing for Underserved and Marginalized Populations
 CMSC 20900 Computers for Learning
 CMSC 23210 Usable Security and Privacy
 CMSC 23220 Inventing, Engineering and Understanding Interactive Devices
 CMSC 23230 Engineering Interactive Electronics onto Printed Circuit Boards
 CMSC 23240 Emergent Interface Technologies
 CMSC 23400 Mobile Computing
 CMSC 23900 Data Visualization
 CMSC 30370 Inclusive Technology: Designing for Underserved and Marginalized Populations
 Bachelor's thesis in human computer interaction, approved as such

Machine Learning: three courses from this list
 CMSC 25025 Machine Learning and LargeScale Data Analysis
 CMSC 25040 Introduction to Computer Vision
 CMSC 25300 Mathematical Foundations of Machine Learning
 CMSC 25400 Machine Learning
 CMSC 25440 Machine Learning in Medicine
 CMSC 25460 Introduction to Optimization
 CMSC 25700 Natural Language Processing
 TTIC 31020 Introduction to Machine Learning
 TTIC 31110 Speech Technologies
 TTIC 31120 Statistical and Computational Learning Theory
 TTIC 31180 Probabilistic Graphical Models
 TTIC 31190 Natural Language Processing
 TTIC 31210 Advanced Natural Language Processing
 TTIC 31220 Unsupervised Learning and Data Analysis
 TTIC 31250 Introduction to the Theory of Machine Learning
 Bachelor's thesis in machine learning, approved as such

Programming Languages: three courses from this list, over and above those courses taken to fulfill the programming languages and systems requirements
 CMSC 22100 Programming Languages
 CMSC 22300 Functional Programming
 CMSC 22400 Programming Proofs
 CMSC 22500 Type Theory
 CMSC 22600 Compilers for Computer Languages
 Bachelor's thesis in programming languages, approved as such

Theory: three courses from this list, over and above those taken to fulfill the theory requirements
 CMSC 27410 Honors Combinatorics
 CMSC 27500 Graph Theory
 CMSC 27502 Advanced Algorithms
 CMSC 27530 Honors Graph Theory
 CMSC 27700 Mathematical Logic I
 CMSC 27800 Mathematical Logic II
 CMSC 28000 Introduction to Formal Languages
 CMSC 28100 Introduction to Complexity Theory
 CMSC 28130 Honors Introduction to Complexity Theory
 CMSC 28400 Introduction to Cryptography
 Bachelor's thesis in theory, approved as such
Note: Students may petition to have graduate courses count towards their specialization.