CMSC Course Listing

Introduction to Discrete Structures (CMSC 150, 3 Credits)
Prerequisite or corequisite: MATH 140. A survey of fundamental mathematical concepts relevant to computer science. The objective is to address problems in computer science. Proof techniques presented are those used for modeling and solving problems in computer science. Discussion covers functions, relations, infinite sets, and propositional logic. Topics also include graphs and trees, as well as selected applications. Students may receive credit for only one of the following courses: CMSC 150 or CMSC 250.

Artificial Intelligence Applications (CMSC 307, 3 Credits)
(No programming or math background required.) An interactive, hands-on study of current artificial intelligence (AI) applications spanning multiple disciplines and domains, including business, science, communications, and computing. The goal is to use datasets with AI and machine learning applications from leading cloud vendors, including Amazon and Microsoft. Projects and laboratory exercises demonstrate how AI can be used to solve problems across a wide variety of disciplines.

Game Design and Development (CMSC 325, 3 Credits)
Prerequisite: CMSC 230 or CMIS 242. A project-driven study of the theory and practice of game design and development. The aim is to build realistic graphical 3-D worlds, animate characters, and add special effects to games. Discussion covers critical mathematical concepts and real-time game physics. Projects include collaborative development of interactive games.

Advanced Programming Languages (CMSC 330, 3 Credits)
Prerequisite: CMSC 230 or CMSC 350. A comparative study of programming languages. The aim is to write safe and secure computer programs. Topics include the syntax and semantics of programming languages and run-time support required for various programming languages. Programming projects using selected languages are required.

Object-Oriented and Concurrent Programming (CMSC 335, 3 Credits)
Prerequisite: CMSC 230 or CMSC 350. A study of object-oriented and concurrent programming using features of Java. The goal is to design, implement, test, debug, and document complex robust programs in an object-oriented language. Concepts of object-oriented programming (such as composition, classification, and polymorphism) are explored. Topics include the principles of concurrent programming (such as task synchronization, race conditions, deadlock, threads, and event-driven graphic user interface programs). Programming projects are implemented in Java. Students may receive credit for only one of the following courses: CMSC 300 or CMSC 335.

Data Structures and Analysis (CMSC 350, 3 Credits)
Prerequisite: CMIS 242. A study of user-defined data structures and object-oriented design in computer science. The aim is to develop secure Java programs. Topics include linked lists, stacks, queues, arrays, maps, vectors, and trees. Algorithms that perform sorting, searching, and recursion are discussed and analyzed.

Computer Graphics (CMSC 405, 3 Credits)
Prerequisite: CMSC 325 or CMSC 350. A hands-on, project-based introduction to computer graphics. The goal is to develop projects that render graphic images and animate three-dimensional objects. Topics include programming in OpenGL and transforming, viewing, and modeling 2-D and 3-D objects.

Operating Systems (CMSC 412, 3 Credits)
Prerequisite: CMIS 310 or CMSC 311. A study of the fundamental principles underlying modern operating systems. The objective is to design and implement a small-scale operating system and design a virtual memory management system. Discussion covers the essential components of a typical operating system and the interactions among them. Topics also include methods of managing processes and resources in computer systems. A programming project that implements part of an operating system is required.

Artificial Intelligence Foundations (CMSC 427, 3 Credits)
Prerequisite SDEV 300. A study of the theoretical foundations and practical applications of artificial intelligence. The objective is to develop algorithms and systems to demonstrate intelligent behavior. Topics include intelligent agents, searching algorithms, knowledge representation, probability, logic, and learning.

Compiler Theory and Design (CMSC 430, 3 Credits)
Prerequisites: CMSC 330 and programming experience in C or C++. An examination of the formal translation of programming languages, syntax, and semantics. The goal is to write programs that are constructed using program generators. Topics include evaluation of finite-state grammars and recognizers; context-free parsing techniques, such as recursive descent, precedence, LL(K), LR(K), and SLR(K); and improvement and generation of machine-independent code and syntax-directed translation schema. Programming projects that implement parts of a compiler are required.

Design and Analysis of Computer Algorithms (CMSC 451, 3 Credits)
Prerequisites: CMSC 150 and CMSC 350 (or CMSC 230). A presentation of fundamental techniques for designing and analyzing computer algorithms. The aim is to apply Big-O estimates of algorithms and proof-of-correctness techniques and to design algorithms. Basic methods include divide-and-conquer techniques, search and traversal techniques, dynamic programming, greedy methods, and induction. Programming projects are included.

Image and Signal Processing (CMSC 465, 3 Credits)
Prerequisites: MATH 141 and CMSC 350. A project-driven study of image and signal processing. The goal is to apply spectral analysis techniques to analyze time series data for the purpose of recognizing and classifying signals and to apply image segmentation, representation, and description techniques to recognize and classify objects. Topics include discrete Fourier transforms, fast Fourier transforms, sampling and filtering, and image transformations and enhancements.

Current Trends and Projects in Computer Science (CMSC 495, 3 Credits)
(Intended as a final, capstone course to be taken in a student's last 9 credits.) Prerequisite(s): Either CMSC 330 and CMSC 335, CMIS 320 and CMIS 330, or SDEV 425. An overview of computer technologies, with an emphasis on integration of concepts, practical application, and critical thinking. The goal is to research, plan, conduct, and complete collaborative computer-related projects in compliance with schedule deadlines. Analysis covers innovative and emerging issues in computer science. Assignments include working in teams throughout the analysis, design, development, implementation, testing, and documentation phases of the projects, including periodic peer reviews.