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). Also note that the graduate versions of the courses below can be substituted for their undergraduate counterparts to fulfill a specialization requirement (for example, CMSC 30370 in place of CMSC 20370).

The following specializations are available starting in Autumn 2019:

  1. Computer Security and Privacy: CMSC 23200 Introduction to Computer Security and two courses from this list.

    • CMSC 23206 Security, Privacy, and Consumer Protection
    • CMSC 23210 Usable Security and Privacy
    • CMSC 23280 Cryptocurrencies (no longer offered)
    • CMSC 25910 Engineering for Ethics, Privacy, and Fairness in Computer Systems
    • CMSC 28400 Introduction to Cryptography
    • Bachelor's thesis in computer security, approved as such
  2. 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 (no longer offered; cf. CMSC 23320)
    • CMSC 23310 Advanced Distributed Systems
    • CMSC 23320 Foundations of Computer Networks
    • CMSC 23500 Introduction to Database Systems
    • CMSC 23530 Advanced Database Systems
    • CMSC 25422 Machine Learning for Computer Systems
    • Bachelor's thesis in computer systems, approved as such
  3. Data Science: CMSC 21800 Data Science for Computer Scientists and two courses from this list.

    • CMSC 23900 Data Visualization
    • CMSC 25025 Machine Learning and Large-Scale Data Analysis
    • CMSC 25300 Mathematical Foundations of Machine Learning
    • CMSC 25400 Machine Learning
    • Bachelor's thesis in data science, approved as such
  4. Human Computer Interaction: CMSC 20300 Introduction to Human-Computer Interation and two courses from this list.

    • CMSC 20370 Inclusive Technology: Designing for Underserved and Marginalized Populations
    • CMSC 20380 Actuated User Interfaces and Technology
    • 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
    • Bachelor's thesis in human computer interaction, approved as such
  5. Machine Learning: three courses from this list. Note that at most one of CMSC 25500 and TTIC 31230 count towards the Machine Learning specialization, and, more broadly, the computer science major (or minor).

    • CMSC 25025 Machine Learning and Large-Scale Data Analysis
    • CMSC 25040 Introduction to Computer Vision
    • CMSC 25300 Mathematical Foundations of Machine Learning
    • CMSC 25400 Machine Learning
    • CMSC 25460 Introduction to Optimization
    • CMSC 25500 Introduction to Neural Networks
    • 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 31230 Fundamentals of Deep Learning
    • TTIC 31250 Introduction to the Theory of Machine Learning
    • Bachelor's thesis in machine learning, approved as such
  6. 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 22450 Foundations of Programming Languages
    • CMSC 22500 Type Theory
    • CMSC 22600 Compilers for Computer Languages
    • Bachelor's thesis in programming languages, approved as such
  7. 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
  8. Note: Students may petition to have graduate courses count towards their specialization.