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 |
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.
Info Session PDF
4xx Course Information
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/