| Subject | Course Number | Long Course Title | Description |
| CMSC | 100 | Exploring Computer Science | An overview of computer science as a broadly based discipline. Emphasis on development of skills in algorithmic thinking, implemented in a subset of a suitable programming language. Brief coverage of selected advanced topics from computer science, applications of computing in other disciplines, and impacts of computing on society. Not intended as preparation for Computer Science 250 or 270. |
| CMSC | 110 | Introduction to Scientific Programming | An introduction to computer programming with an emphasis on numerical applications in mathematics and the sciences. Topics include elementary programming concepts in the C language, design and implementation of numerical algorithms, and an introduction to symbolic computation. |
| CMSC | 150 | Introduction to Computer Science | An introduction to computer programming for potential mathematics/computer science majors and other students with a strong interest in computing. Topics include elementary programming constructs, design and implementation of algorithms, and object-oriented programming. Introductory instruction in the Java language. |
| CMSC | 190 | Tutorial Studies in Computer Science | |
| CMSC | 199 | Independent Study in Computer Science | |
| CMSC | 250 | Intermediate Programming Concepts | A study of more advanced programming techniques in the Java language, with emphasis on skills required for implementation of larger software projects. Topics include graphical user interfaces, exception-handling, multithreading, I/O streams, networking, and event-driven programming. |
| CMSC | 270 | Introduction to Data Structures | A study of advanced programming and an introduction to data structures. Topics focus on programming skills needed for the design and implementation of standard data structures such as lists, trees, and graphs and their associated algorithms. Additional topics include recursion, analysis of algorithms, and advanced aspects of object-oriented programming in the C++ language. |
| CMSC | 390 | Tutorial Studies in Computer Science | |
| CMSC | 399 | Independent Study in Computer Science | |
| CMSC | 410 | Systems Analysis and Design | An introduction to techniques for analyzing and modeling systems for implementation as computer programs. Topics include a survey of modeling methodologies for structured and object-oriented systems and case studies of system development. Also, applications of analysis and design methods to database design and design of distributed systems. |
| CMSC | 420 | Computer Graphics | The fundamentals of computer graphics and their applications in visualizing a variety of scientific phenomena. Topics include graphics primitives, two- and three-dimensional transformations, three-dimensional viewing techniques, spline curves, surface patches, hidden line algorithms, ray tracing, radiosity, texture-mapping, and fractals. |
| CMSC | 430 | Hardware Organization | The structure and function of computers from a perspective midway between that of the electronic circuit designer (see Physics 220) and that of the assembly language programmer (see Computer Science 440). Topics include elementary digital logic, data storage devices, data flow pathways, and examples of central processor organization that illustrate micro-programming, pipelining, parallelism, and reduced instruction sets. |
| CMSC | 440 | Computer Architecture | A study of computers and their system software at the level of abstraction of an architecture defined by an assembly language. Topics include instruction sets, addressing techniques, and program control mechanisms; subroutines, procedures, and macros; representation and manipulation of numeric and string data; assemblers, linkers, run-time libraries, and debugging aids. |
| CMSC | 450 | Operating Systems | The basic principles of operating systems: implementation of multitasking systems; control and coordination of concurrent tasks, deadlocks, synchronization, mutual exclusion; storage management, segmentation, paging, virtual memory, protection, sharing, access control, file systems; resource management; evaluation and prediction of performance by both theoretical and experimental means. |
| CMSC | 460 | Programming Languages | Current algorithmic paradigms, their implementation in programming languages, and the translation of such languages into machine operations. Topics include object-oriented programming, functional programming, logic programming, parsing theory, and the implementation of programming language constructs in terms of fundamental machine operations. |
| CMSC | 470 | Artificial Intelligence | Principles and programming techniques of artificial intelligence using the LISP language. Topics include computational methods and models of search, game playing, theorem proving, heuristics as a means of improving problem-solving, and adaptive systems. |
| CMSC | 510 | Data Structures and Algorithm Analysis | Advanced data structures and the time and space efficiency of the algorithms that manipulate such structures. Topics include string search algorithms, sparse matrices, union-find problems, recursion, internal and external sorting, optimized tree structures, graphs, networks, path-finding algorithms, hashing, memory-management techniques, and parallelism. |
| CMSC | 515 | Theory of Computation | A study of programming in the abstract, leading to an understanding of the precise nature and limitations of computing machines. Topics include universal computing machines such as Turing machines, decidable and undecidable predicates, regular and pushdown automata, and regular and context-free grammars. |
| CMSC | 550 | Advanced Topics in Computing | An exploration of selected advanced computing techniques such as constraint logic, continuation-passing, production systems, declarative knowledge representations, macros, scripting, robot programming, and lazy evaluation, to name a few. The choice of topics for any given term will vary according to the interest of the students and faculty. |
| CMSC | 590 | Tutorial Studies in Computer Science | |
| CMSC | 599 | Independent Study in Computer Science | |
| CMSC | 600 | Computer Science Senior Seminar | Intended as a capstone experience for math-computer science majors, this course will provide a forum for seniors to present the results of their required independent research projects. Other class meetings will consist of instructor talks, guest lectures, and discussions of readings of particular relevance to graduating computer scientists. |
| CMSC | 690 | Tutorial Studies in Computer Science | |
| CMSC | 699 | Independent Study in Computer Science |