CMSC - Computer Science

CMSC100 Bits and Bytes of Computer Science (1 Credit)

Students are introduced to the field (and disciplines) of computer science within a small classroom setting. They will learn to make a successful transition from high school to the university, while exploring study skills, student success plans and research opportunities.

Restriction: For first time freshmen and first time transfer computer science majors.

CMSC106 Introduction to C Programming (4 Credits)

Design and analysis of programs in C. An introduction to computing using structured programming concepts. Intended for students with no or minimal programming experience.

Prerequisite: MATH115.

Restriction: Must not be in Computer Science program; and must not have completed any courses from CMSC131-499 course range.

Credit Only Granted for: CMSC106, CMSC122, or INST126.

CMSC122 Introduction to Computer Programming via the Web (3 Credits)

Introduction to computer programming in the context of developing full featured dynamic web sites. Uses a problem solving approach to teach basics of program design and implementation using JavaScript; relates these skills to creation of dynamic web sites; then explores both the potential and limits of web-based information sources for use in research. Intended to help relate a student's major to these emerging technologies.

Restriction: Must not have completed any courses from CMSC131-499 course range; and must not be concurrently enrolled in CMSC131.

Credit Only Granted for: CMSC106, or CMSC122.

CMSC131 Object-Oriented Programming I (4 Credits)

Introduction to programming and computer science. Emphasizes understanding and implementation of applications using object-oriented techniques. Develops skills such as program design and testing as well as implementation of programs using a graphical IDE. Programming done in Java.

Corequisite: MATH140.

CMSC132 Object-Oriented Programming II (4 Credits)

Introduction to use of computers to solve problems using software engineering principles. Design, build, test, and debug medium -size software systems and learn to use relevant tools. Use object-oriented methods to create effective and efficient problem solutions. Use and implement application programming interfaces (APIs). Programming done in Java.

Prerequisite: Minimum grade of C- in CMSC131; or must have earned a score of 5 on the A Java AP exam; or must have earned a satisfactory score on the departmental placement exam. And minimum grade of C- in MATH140.

CMSC198 Special Topics in Computer Science for Non-Majors (1-4 Credits)

A course designed to allow non-computer science majors and non-computer engineering majors to pursue a specialized topic or project.

Restriction: Must not be in Computer Science program.

Repeatable to: 6 credits if content differs.

CMSC216 Introduction to Computer Systems (4 Credits)

Introduction to the interaction between user programs and the operating system/hardware. Major topics include C programming, introductory systems programming, and assembly language. Other concepts covered include UNIX, machine data representation, thread management, optimization, and virtual memory. Programming is done in the Linux Environment.

Prerequisite: Minimum grade of C- in CMSC132; and minimum grade of C- in MATH141.

Restriction: Must be in a major within the CMNS-Computer Science department; or must be in Engineering: Computer program; or must be in the Computer Science Minor program.

CMSC250 Discrete Structures (4 Credits)

Fundamental mathematical concepts related to computer science, including finite and infinite sets, relations, functions, and propositional logic. Introduction to other techniques, modeling and solving problems in computer science. Introduction to permutations, combinations, graphs, and trees with selected applications.

Prerequisite: Minimum grade of C- in CMSC131; and minimum grade of C- in MATH141.

Restriction: Must be in a major within the CMNS-Computer Science department; or must be in Engineering: Computer program; or must be in the Computer Science Minor program.

Formerly: CMSC150.

CMSC298 Special Topics in Computer Science (1-4 Credits)

A course designed to allow a lower level student to pursue a specialized topic or project.

Restriction: Permission of CMNS-Computer Science department.

Repeatable to: 6 credits if content differs.

CMSC320 Introduction to Data Science (3 Credits)

An introduction to the data science pipeline, i.e., the end-to-end process of going from unstructured, messy data to knowledge and actionable insights. Provides a broad overview of several topics including statistical data analysis, basic data mining and machine learning algorithms, large-scale data management, cloud computing, and information visualization.

Prerequisite: Minimum grade of C- in CMSC216 and CMSC250.

Restriction: Permission of CMNS-Computer Science department.

Credit Only Granted for: STAT426 or CMSC320.

CMSC330 Organization of Programming Languages (3 Credits)

A study of programming languages, including their syntax, semantics, and implementation. Several different models of languages are discussed, including dynamic, scripting (e.g., Ruby, Python) functional (e.g., OCaml, Haskell, Scheme), and memory safe systems programming (e.g., Rust). Explores language features such as formal syntax, scoping and binding of variables, higher-order programming, typing, and type polymorphism. Introduces finite automata, context free grammar, parsing, lambda calculus, and basics of security attacks and software security.

Prerequisite: Minimum grade of C- in CMSC250 and CMSC216.

Restriction: Must be in a major within the CMNS-Computer Science department; or must be in the Computer Science Minor program; or must be in Engineering: Computer program.

CMSC351 Algorithms (3 Credits)

A systematic study of the complexity of some elementary algorithms related to sorting, graphs and trees, and combinatorics. Algorithms are analyzed using mathematical techniques to solve recurrences and summations.

Prerequisite: Minimum grade of C- in CMSC250 and CMSC216.

Restriction: Must be in a major within the CMNS-Computer Science department; or must be in Engineering: Computer program; or must be in the Computer Science Minor program.

Credit Only Granted for: CMSC251 or CMSC351.

Additional Information: CMSC351 may not count as one of the required upper level CMSC courses for students who are required to have 24 upper level CMSC credits for graduation, i.e. for students who became computer science majors prior to Fall, 2002.

CMSC388 Special Topics in Computer Science (1-3 Credits)

Seminar courses that allow students to pursue new and emerging areas of Computer Science.

Restriction: Permission of CMNS-Computer Science department.

Repeatable to: 6 credits if content differs.

CMSC389 Special Topics in Computer Science (1-3 Credits)

Seminar courses that allow students to pursue new and emerging areas of Computer Science; course may be used as electives for the undergraduate degree and minor.

Repeatable to: 6 credits if content differs.

CMSC390 Honors Paper (3 Credits)

Special study or research directed toward preparation of honors paper.

Restriction: Must be admitted to the Computer Science Honors Program.

CMSC396 Computer Science Honors Seminar (1 Credit)

Overview of computer science research activities, techniques, and tools. Diverse research areas will be covered, including systems, networks, artificial intelligence, human-computer interaction, software engineering, graphics, vision, and theory.

Prerequisite: Must have admission into Computer Science Departmental Honors Program.

Restriction: Permission of CMNS-Computer Science department.

Credit Only Granted for: CMSC297 or CMSC396.

Formerly: CMSC297.

CMSC402 Bioinformatic Algorithms and Methods for Functional Genomics and Proteomics (3 Credits)

An introduction to the fundamental concepts in the computational analysis of biological systems with applications to: functional genomics, population genetics, proteomics and epigenetics. Computational concepts covered: network and graph algorithms, combinatorial algorithms, machine learning, large data/network visualization, statistical modeling and inference, probabilistic graphical models, sparse methods in data analysis, numerical optimization. No prior knowledge of biology required.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; and permission of CMNS-Computer Science department.

CMSC411 Computer Systems Architecture (3 Credits)

Input/output processors and techniques. Intra-system communication, buses, caches. Addressing and memory hierarchies. Microprogramming, parallelism, and pipelining.

Prerequisite: Minimum grade of C- in CMSC330; or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

Restriction: Permission of CMNS-Computer Science department.

Credit Only Granted for: ENEE446 or CMSC411.

CMSC412 Operating Systems (4 Credits)

A hands-on introduction to operating systems, including topics in: multiprogramming, communication and synchronization, memory management, IO subsystems, and resource scheduling polices. The laboratory component consists of constructing a small kernel, including functions for device IO, multi-tasking, and memory management.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; and 1 course with a minimum grade of C- from (CMSC414, CMSC417, CMSC420, CMSC430, CMSC433, CMSC435, ENEE440, ENEE457).

Restriction: Permission of CMNS-Computer Science department; or must be in one of the following programs (Computer Science (Master's); Computer Science (Doctoral)).

Credit Only Granted for: CMSC412 or ENEE447.

CMSC414 Computer and Network Security (3 Credits)

An introduction to the topic of security in the context of computer systems and networks. Identify, analyze, and solve network-related security problems in computer systems. Fundamentals of number theory, authentication, and encryption technologies, as well as the practical problems that have to be solved in order to make those technologies workable in a networked environment, particularly in the wide-area Internet environment.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

Restriction: Permission of CMNS-Computer Science department.

Credit Only Granted for: CMSC414, ENEE459C, or ENEE457.

CMSC417 Computer Networks (3 Credits)

Computer networks and architectures. The OSI model including discussion and examples of various network layers. A general introduction to existing network protocols. Communication protocol specification, analysis, and testing.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC420 Advanced Data Structures (3 Credits)

Description, properties, and storage allocation functions of data structures including balanced binary trees, B-Trees, hash tables, skiplists, tries, KD-Trees and Quadtrees. Algorithms for manipulating structures. Applications from areas such as String Processing, Computer Graphics, Information Retrieval, Computer Networks, Computer Vision, and Operating Systems.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC421 Introduction to Artificial Intelligence (3 Credits)

Introduces a range of ideas and methods in AI, varying semester to semester but chosen largely from: automated heuristic search, planning, games, knowledge representation, logical and statistical inference, learning, natural language processing, vision, robotics, cognitive modeling, and intelligent agents. Programming projects will help students obtain a hands-on feel for various topics.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC422 Introduction to Machine Learning (3 Credits)

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.

Prerequisite: Minimum grade of C- in CMSC320, CMSC330, and CMSC351; and 1 course with a minimum grade of C- from (MATH240, MATH461); and permission of CMNS-Computer Science department.

CMSC423 Bioinformatic Algorithms, Databases, and Tools (3 Credits)

An introduction to the main algorithms, databases, and tools used in bioinformatics. Topics may include assembly and analysis of genome sequences, reconstructing evolutionary histories, predicting protein structure, and clustering of biological data. Use of scripting languages to perform analysis tasks on biological data. No prior knowledge of biology is assumed.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC424 Database Design (3 Credits)

Students are introduced to database systems and motivates the database approach as a mechanism for modeling the real world. An in-depth coverage of the relational model, logical database design, query languages, and other database concepts including query optimization, concurrency control; transaction management, and log based crash recovery. Distributed and Web database architectures are also discussed.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC425 Game Programming (3 Credits)

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. Course topics are reinforced through the design and implementation of a working computer game.

Prerequisite: Minimum grade of C- in CMSC420.

CMSC426 Computer Vision (3 Credits)

An introduction to basic concepts and techniques in computervision. This includes low-level operations such as image filtering and edge detection, 3D reconstruction of scenes using stereo and structure from motion, and object detection, recognition and classification.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

Restriction: Permission of CMNS-Computer Science department.

CMSC427 Computer Graphics (3 Credits)

An introduction to 3D computer graphics, focusing on the underlying building blocks and algorithms for applications such as 3D computer games, and augmented and virtual reality (AR/VR). Covers the basics of 3D image generation and 3D modeling, with an emphasis on interactive applications. Discusses the representation of 3D geometry, 3D transformations, projections, rasterization, basics of color spaces, texturing and lighting models, as well as programming of modern Graphics Processing Units (GPUs). Includes programming projects where students build their own 3D rendering engine step-by-step.

Prerequisite: MATH240; and minimum grade of C- in CMSC420; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC430 Introduction to Compilers (3 Credits)

Topics include lexical analysis, parsing, intermediate representations, program analysis, optimization, and code generation.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC433 Programming Language Technologies and Paradigms (3 Credits)

Programming language technologies (e.g., object-oriented programming), their implementations and use in software design and implementation.

Prerequisite: Minimum grade of C- in CMSC330; or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

Restriction: Permission of CMNS-Computer Science department.

CMSC434 Introduction to Human-Computer Interaction (3 Credits)

Assess usability by quantitative and qualitative methods. Conduct task analyses, usability tests, expert reviews, and continuing assessments of working products by interviews, surveys, and logging. Apply design processes and guidelines to develop professional quality user interfaces. Build low-fidelity paper mockups, and a high-fidelity prototype using contemporary tools such as graphic editors and a graphical programming environment (eg: Visual Basic, Java).

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC435 Software Engineering (3 Credits)

State-of-the-art techniques in software design and development. Laboratory experience in applying the techniques covered. Structured design, structured programming, top-down design and development, segmentation and modularization techniques, iterative enhancement, design and code inspection techniques, correctness, and chief-programmer teams. The development of a large software project.

Prerequisite: 1 course with a minimum grade of C- from (CMSC412, CMSC417, CMSC420, CMSC430, CMSC433); and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC436 Programming Handheld Systems (3 Credits)

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. Students will apply these concepts and principles in the context of an existing handset programming platform.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

Restriction: Permission of CMNS-Computer Science department.

CMSC451 Design and Analysis of Computer Algorithms (3 Credits)

Fundamental techniques for designing efficient computer algorithms, proving their correctness, and analyzing their complexity. General topics include graph algorithms, basic algorithm design paradigms (such as greedy algorithms, divide-and-conquer, and dynamic programming), network flows, NP-completeness, and other selected topics in algorithms.

Prerequisite: Minimum grade of C- in CMSC351; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC452 Elementary Theory of Computation (3 Credits)

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.

Prerequisite: Minimum grade of C- in CMSC351; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC454 Algorithms for Data Science (3 Credits)

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 as well as methods to handle high dimensional data/dimensionality reduction.

Prerequisite: Minimum grade of C- in CMSC320, CMSC330, and CMSC351; and 1 course with a minimum grade of C- from (STAT400, STAT410); and permission of CMNS-Computer Science department.

Credit Only Granted for: CMSC454 or CMSC498U.

Formerly: CMSC498U.

CMSC456 Cryptography (3 Credits)

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.

Prerequisite: (CMSC106, CMSC131, or ENEE150; or equivalent programming experience); and (2 courses from (CMSC330, CMSC351, ENEE324, or ENEE380); or any one of these courses and a 400-level MATH course, or two 400-level MATH courses). Or permission of instructor. Also offered as: MATH456, ENEE456.

Credit Only Granted for: MATH456, CMSC456, or ENEE456.

CMSC457 Introduction to Quantum Computing (3 Credits)

An introduction to the concept of a quantum computer, including algorithms that outperform classical computation and methods for performing quantum computation reliably in the presence of noise. As this is a multidisciplinary subject, the course will cover basic concepts in theoretical computer science and physics in addition to introducing core quantum computing topics.

Prerequisite: 1 course with a minimum grade of C- from (MATH240, PHYS274); and 1 course with a minimum grade of C- from (CMSC351, PHYS373).

Restriction: Permission of CMNS-Computer Science department.

Additional Information: No previous background in quantum mechanics is required.

CMSC460 Computational Methods (3 Credits)

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.

Prerequisite: 1 course with a minimum grade of C- from (MATH240, MATH341, MATH461); and 1 course with a minimum grade of C- from (MATH241, MATH340); and 1 course with a minimum grade of C- from (CMSC106, CMSC131); and minimum grade of C- in MATH246. Also offered as: AMSC460.

Credit Only Granted for: AMSC460, AMSC466, CMSC460, or CMSC466.

CMSC466 Introduction to Numerical Analysis I (3 Credits)

Floating point computations, direct methods for linear systems, interpolation, solution of nonlinear equations.

Prerequisite: 1 course with a minimum grade of C- from (MATH240, MATH341, MATH461); and 1 course with a minimum grade of C- from (MATH241, MATH340); and 1 course with a minimum grade of C- from (CMSC106, CMSC131); and minimum grade of C- in MATH410. Also offered as: AMSC466.

Credit Only Granted for: AMSC460, CMSC460, AMSC466, or CMSC466.

CMSC470 Introduction to Natural Language Processing (3 Credits)

Introduction to fundamental techniques for automatically processing and generating natural language with computers. Machine learning techniques, models, and algorithms that enable computers to deal with the ambiguity and implicit structure of natural language. Application of these techniques in a series of assignments designed to address a core application such as question answering or machine translation.

Prerequisite: Minimum grade of C- in CMSC320, CMSC330, and CMSC351; and 1 course with a minimum grade of C- from (MATH240, MATH461).

Restriction: Permission of CMNS-Computer Science department.

CMSC474 Introduction to Computational Game Theory (3 Credits)

Game theory deals with interactions among agents (either human or computerized) whose objectives and preferences may differ from the objectives and preferences of the other agents. It will also provide a comprehensive introduction to game theory, concentrating on its computational aspects.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

Credit Only Granted for: CMSC474, ECON414, GVPT390 or GVPT399A.

CMSC475 Combinatorics and Graph Theory (3 Credits)

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.

Prerequisite: 1 course with a minimum grade of C- from (MATH240, MATH341, MATH461); and 1 course with a minimum grade of C- from (MATH241, MATH340). And permission of CMNS-Computer Science department; or permission of CMNS-Mathematics department. Cross-listed with MATH475 .

CMSC488 Special Topics in Computer Science (1-3 Credits)

Seminar courses that allow students to pursue new and emerging areas of Computer Science.

Restriction: Permission of CMNS-Computer Science department.

Repeatable to: 6 credits if content differs.

Additional Information: Course may be used as electives for the undergraduate degree and minor.

CMSC498 Selected Topics in Computer Science (1-3 Credits)

An individualized course designed to allow a student or students to pursue a selected topic not taught as a part of the regular course offerings under the supervision of a Computer Science faculty member. In addition, courses dealing with topics of special interest and/or new emerging areas of computer science will be offered with this number. Selected topics courses will be structured very much like a regular course with homework, project and exams. Credit according to work completed

Restriction: Permission of CMNS-Computer Science department.

CMSC499 Independent Undergraduate Research (1-3 Credits)

Students are provided with an opportunity to participate in a computer science research project under the guidance of a faculty advisor. Format varies. Students and supervising faculty member will agree to a research plan which must be approved by the department. As part of each research plan, students should produce a final paper delineating their contribution to the field.

Restriction: Must be in one of the following programs (Computer Science; Engineering: Computer) ; and permission of CMNS-Computer Science department.