What 4XX Should I Take?!

Wondering what to take in Spring 2025? The CS Advising Team has put together some pointers and resources to help you pick your CMSC courses.

4xx Course Information

Course Number Course Name Math or Programming? Languages Overview Recommended Pairings Distributive Area Exam or Project Based
CMSC411 Computer Systems Archetecture Neither, theory based MIPS computing language, C, Ruby Study topics in computer systems architecture. Start with pipelining, instruction set principles, and memory hierarchy. Then, shift to super-scalar execution, branch prediction, dynamic scheduling, hardware multi-threading, shared memory architecture, and GPU. All 1 Both
CMSC412 Operating Systems Programming C Study processes, threads, scheduling, synchronization, memory management, file system interface and implementation, disk and storage systems, and other topics (security, networking, etc.). Very rigorous, the only upper level course for 4 credits. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC474, CMSC460, CMSC466 1 Project
CMSC414 Computer and Network Security Programming C, Javascript/SQL Introduction to computer system and network security. Work on network-related security problems in computer systems. Fundamentals of unmber theory, authentication, and encryption technologies through practical problems. CMSC456 1 Project
CMSC416 Introduction to Parallel Computing Programming C, C+, Fortran, MPE Introduction to parallel computing for computer science majors. Topics include programming for shared memory and distributed memory parallel architectures, and fundamental issues in design, development and analysis of parallel programs. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC474, CMSC460, CMSC466 1 Project
CMSC417 Computer Networks Programming C, possibly Ruby Introduction to the core concepts of wired and wireless networking, focused on layered architecture and protocol stacks. Covered concepts include internet architecture, HTTP, DNS, P2P, Sockets, and more. Quite rigorous. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 1 Both, with emphasis on projects
CMSC420 Data Structures Programming Java Description, properties, and storage allocation functions of data structures including heaps, balanced binary trees, B-Trees, hash tables, skiplists, tries, kd-trees, quadtrees and many more. Algorithms for manipulating structures. All 2 Mix of both
CMSC421 Introduction to Artificial Intelligence Programming Python Introduction to AI, inclding search, inference, knowledge representation, learning, vision, natural languages, expert systems, and robotics, Implemantation and application of programming languages, programming techniques, and control structures. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 2 Project
CMSC422 Machine Learning Both Python Machine Learning studies representations and algorithms that allow machines to improve their performance on a task from experience. This is a broad overview of existing methods for machine learning and an introduction to adaptive systems in general. Emphasis is given to practical aspects of machine learning and data mining. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 2 Both, with emphasis on projects
CMSC423 Bioinformatic Algorithms, Databases, and Tools Programming Some student choice with languages used This course will focus on algorithmic, and computational aspects of biological data analysis, and specifically on genomics. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 2 Project
CMSC424 Database Design Programming Python, SQL, Ruby-on-Rails Introduction to database systems and the database approach as a mechanism formodeling the real world. In-depth coverage of the relational model, logical database design, query optimization, concurrency control, transaction management, and log based crash recovery. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 2 Project
CMSC426 Computer Vision Programming MATLAB Introduction to basic concepts and techniques in computer vision, including low-level operations like image feltering, edge detection, 3D reconstruction of scenes using stero and structure from motion, and object recognition/detection/classification. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 2 Project
CMSC427 Computer Graphics Programming Java, OpenGL Introduction to 3D computer graphics, focusing on the underlying building blocks and algorithms. Topics include 3D image generation and modeling, interactive applications, representation of 3D geometry, 3D transformations, pojections, rasterization, texturing, lighting models, and Graphics Processing Units. All 2 Project
CMSC471 Introduction to Data Visualization Programming JavaScript Topics include the techniaues and algorithms used for creating effective data visualizations ased on principles from graphic design, perceptual psychology, and cognitive science. Design and build interactive visualizations for the web using the Data-Drive Documents framework. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 2 or 3 Project
CMSC430 Introduction to Compilers Programming OCaml Topics include lexical analysis, parsing, intermediate representations, program analysis, optimization, and code generation. If you enjoyed CMSC330, you will likely enjoy this class. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 3 Project
CMSC433 Programming Language Technologies and Paradigms Programming Java Topics include programming language techologies, their implcations, and their use in software design and implementation. This course often envolves significant group work. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 3 Project
CMSC434 Introduction to Human-Computer Interaction Programming and Writing Java, HTML5, Javascript, C#, Objective C, Swift Access usability by quantitiative and qualitative methods, Conduct task analysis, usability tests, expert reviews, and continuing assesments of working products. Apply design processes and guidelines. Build low-fidelity paper mockups and a high-fidelity prototype. This course is especially recommended for students with an interest in 3D printing, arduino, and/or accessibility software. All 3 Project, emphasis on writing
CMSC435 Software Engineering Programming   Topics include state-of-the-art techniques in software design and development. Lab experience in applying the techniques covered. Students will use structured design, structured programming, top-down deisgn and development, segmentation and modularization techniques, iterative enhancement, design and code inspection techniques, correctness, and chief-programmer teams. This is considered a capstone course. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 3 Project
CMSC436 Programming Handheld Systems Programming Kotlin, Swift, Java Fundamental principles and concepts that underlie the programming of handheld systems, such as mobile phones, personal digital assistants, and tablet computers. Particular emphasis will be placed on concepts such as limited display size, power, memory and CPU speed; and new input modalities, where handheld systems differ substantially from non-handheld systems, and thus require special programming tools and approaches. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 3 Project
CMSC451 Design and Analysis of Computer Algorithms Math MATLAB Fundamental techniques for designing efficient computer algorithms, proving their correctness, and analyzing their complexity. General topics include sorting, selection, graph algorithms, and basic algorithm design paradigms (such as divide-and-conquer, dynamic programming and greedy algorithms), lower bounds and NP-completeness. If you enjoyed CMSC351, you will likely enjoy this class. CMSC411, CMSC412, CMSC414, CMSC416, CMSC417, CMSC420, CMSC421, CMSC422, CMSC423, CMSC424, CMSC426, CMSC427, CMSC470, CMSC471, CMSC420, CMSC433, CMSC434, CMSC435, CMSC436, CMSC471 4 Exam
CMSC452 Elementary Theory of Computation Math MATLAB Techniques are developed to determine the difficulty of a problem relative to a model of computation. Topics include Finite Automata, P, NP, decidability, undecidability, and communication complexity. CMSC411, CMSC412, CMSC414, CMSC416, CMSC417, CMSC420, CMSC421, CMSC422, CMSC423, CMSC424, CMSC426, CMSC427, CMSC470, CMSC471, CMSC420, CMSC433, CMSC434, CMSC435, CMSC436, CMSC471 4 Exam
CMSC454 Algorithms for Data Science Math MATLAB Topics include fundamental methods for processing a high volume of data. Methods include stream processing, locally sensitive hashing, web search methods, page rank computation, network and link analysis, dynamic graph algorithms, and methods to handle high dimensional data/dimensionality reduction. CMSC411, CMSC412, CMSC414, CMSC416, CMSC417, CMSC420, CMSC421, CMSC422, CMSC423, CMSC424, CMSC426, CMSC427, CMSC470, CMSC471, CMSC420, CMSC433, CMSC434, CMSC435, CMSC436, CMSC471 4 Exam
CMSC456 Cryptology Math MATLAB The theory, application, and implementation of mathematical techniques used to secure modern communications. Topics include symmetric and public-key encryption, message integrity, hash functions, block-cipher design and analysis, number theory, and digital signatures.
 
CMSC411, CMSC412, CMSC414, CMSC416, CMSC417, CMSC420, CMSC421, CMSC422, CMSC423, CMSC424, CMSC426, CMSC427, CMSC470, CMSC471, CMSC420, CMSC433, CMSC434, CMSC435, CMSC436, CMSC471 4 Exam
CMSC457 Intro to Quantum Computing Math MATLAB The theory, application, and implementation of mathematical techniques used to secure modern communications. Topics include symmetric and public-key encryption, message integrity, hash functions, block-cipher design and analysis, number theory, and digital signatures.
 
CMSC411, CMSC412, CMSC414, CMSC416, CMSC417, CMSC420, CMSC421, CMSC422, CMSC423, CMSC424, CMSC426, CMSC427, CMSC470, CMSC471, CMSC420, CMSC433, CMSC434, CMSC435, CMSC436, CMSC471 4 Exam
CMSC474 Introduction to Computational Game Theory Math MATLAB Game theory deals with interactions among agents (either human or computerized) whose objectives and preferences may differ from the objectives and preferences of other agents. This course will provide a comprehensive introduction to game theory, concentrating on its computatonal aspects. CMSC411, CMSC412, CMSC414, CMSC416, CMSC417, CMSC420, CMSC421, CMSC422, CMSC423, CMSC424, CMSC426, CMSC427, CMSC470, CMSC471, CMSC420, CMSC433, CMSC434, CMSC435, CMSC436, CMSC471 4 Exam
CMSC460 Computational Methods Math MATLAB Basic computational methods for interpolation, least squares, approximation, numerical quadrature, numerical solution of polynomial and transcendental equations, systems of linear equations and initial value problems for ordinary differential equations. Emphasis on methods and their computational properties rather than their analytic aspects. Intended primarily for students in the physical and engineering sciences. CMSC411, CMSC412, CMSC414, CMSC416, CMSC417, CMSC420, CMSC421, CMSC422, CMSC423, CMSC424, CMSC426, CMSC427, CMSC470, CMSC471, CMSC420, CMSC433, CMSC434, CMSC435, CMSC436, CMSC471 5 Exam
CMSC466 Introduction to Numerical Analysis Math MATLAB Floating point computations, direct methods for linear systems, interpolation, solution of nonlinear equations. CMSC411, CMSC412, CMSC414, CMSC416, CMSC417, CMSC420, CMSC421, CMSC422, CMSC423, CMSC424, CMSC426, CMSC427, CMSC470, CMSC471, CMSC420, CMSC433, CMSC434, CMSC435, CMSC436, CMSC471 5 Exam
CMSC320 Introduction to Data Science Programming Python This course focuses on (i) data management systems, (i) exploratory and statistical data analysis, (ii) data and information visualization, and (iv) the presentation and communication of analysis results. It will be centered around case studies drawing extensively from applications, and will yield a publicly-available final project that will strengthen course participants' data science portfolios. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 Elective Project
CMSC335 Web Application Development with JavaScript Programming JavaScript Introduction to modern ways of developing web applications/services using JavaScript for both front-end and back-end. Topics include fundamental JavaScript languages and constructs, server-side Javacript, back-end data persistence, and client-side JavaScript to build web applications that interact with web services and back-end databases. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 Elective Projcect
CMSC425 Game Programming Programming Unity/C# An introduction to the principles and practice of computer game programming and design. This includes an introduction to game hardware and systems, the principles of game design, object and terrain modeling, game physics, artificial intelligence for games, networking for games, rendering and animation, and aural rendering. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 Elective Projcect
CMSC472 Introduction to Deep Learning Programming Python This course is an elementary introduction to a machine learning technique called deep learning, as well as its applications to a variety of domains. Along the way, the course also provides an intuitive introduction to machine learning such as simple models, learning paradigms, optimization, overfitting, importance of data, training caveats, etc. The assignments explore key concepts and simple applications, and the final project allows an in-depth exploration of a particular application area. CMSC411, CMSC451, CMSC452, CMSC454, CMSC456, CMSC457, CMSC474, CMSC460, CMSC466 Elective Project
CMSC473 Capstone in Machine Learning Programming Some Flexibility Semester-long project course in which each student will identify and carry out a project related to machine learning, with the goal of publishing a research paper or software tool. Students will be paired with project advisors the UMD faculty or the industry. All Elective Project
CMSC475 Combinatorics and Graph Theory Math MATLAB General enumeration methods, difference equations, generating functions. Elements of graph theory, matrix representations of graphs, applications of graph theory to transport networks, matching theory and graphical algorithms. CMSC411, CMSC412, CMSC414, CMSC416, CMSC417, CMSC420, CMSC421, CMSC422, CMSC423, CMSC424, CMSC426, CMSC427, CMSC470, CMSC471, CMSC420, CMSC433, CMSC434, CMSC435, CMSC436, CMSC471 Elective Exam

Frequently Asked Questions

Which degree track/specialization am I following?

Some CS major specializations have more strict requirements than others. For example, Data Science will require CMSC320, whereas CMSC320 will be an elective for General track or a Cybersecurity specialization. The degree requirements for each specialization are listed here. Check with your advisor if you’re unsure which upper level courses your specialization requires.

What about prerequisites?

Pay close attention to course descriptions on Testudo for prerequisities, the upper level courses that are required for some upper level CMSC courses. For example, if you want to take CMSC422 Introduction to Machine Learning, be sure that your 4 year plan includes CMSC320 before the semester you plan to take CMSC422.

Which courses will help me meet my “big picture” or long term goals?

You’ll want to choose courses that will challenge you and allow you to explore your specific interests as well as potentially open opportunities when interviewing for internships and jobs.

This is a great conversation to have with your advisor! Let them know what your interests are and what you want to explore. They can help you find courses that would help prepare you.

https://www.cs.umd.edu/researcharea is a good place to take a look at different areas of study in the department, and to see which faculty members are focused on which research areas.

I’m not sure what specific area of CS I like yet.

That’s ok! Think back to what CMSC lower level courses you liked. If you liked CMSC216, you might like CMSC41x area courses, for example. Love CMSC330? Try CMSC43x courses. Do you like the theory side of things, like CMSC250 / CMSC351? Try CMSC45x theory area courses. The reality is that other factors, such as your schedule, your registration date, prereqs., and course availability will impact what courses you take, too. Run your ideas by your advisor if you get stuck.

Which courses will help strengthen areas I may not be very strong in?

It’s important to choose upper level courses where you are most interested and where you feel you can be successful. Also keep in mind some courses that may help close the gaps. For example, you may feel confident in your resume and technical skills, but how about the soft skills involved in interviewing? Consider CMSC389O: The Coding Interview.

Which faculty best match my learning style?

Try to choose your section based not only on time the class is offered, but also by instructor. Think about how you learn best and try to choose faculty that will be a good fit for you. If you’re unfamiliar with the professor, refer to the Class Webpages to see syllabi and instructor contact information.

How do I make sure my workload isn’t too heavy?

The main thing to do is balance Theory with Programming courses. Be careful not to overload yourself with all heavy programming courses or all intensive theory/math course work. Aim for as balanced a schedule as possible. Your advisor can help you determine which 4XX courses are group-work heavy, have one semester-long project, are the most rigorous, theoretical, etc.

How much should I rely on classmates’ opinions and advice about classes?

Definitely consult your classmates and ask your upperclassmen peers about their experiences but ideally that won’t be your only source of information! Classmates may be willing to share vital information straight from the student perspective. The CS Piazza page is one place you can connect.

And of course, connect with your advisor!

We are an important resource for you as you pick classes. Don’t hesitate to reach out via email with any questions.

Resources

BS/MS Program: https://undergrad.cs.umd.edu/combined-bsms-program

CMSC499A Information (Undergrad Research for Academic Credit): https://undergrad.cs.umd.edu/research-professorial-faculty-cmsc499a

CS Research Areas and Faculty: https://www.cs.umd.edu/research

CS Class Websites: http://www.cs.umd.edu/class/