The official catalog description of all courses can be found on Testudo. (Graduate course listings are available here.)


CMSC 102 INTRODUCTION TO INFORMATION TECHNOLOGY (3)
  Prerequisites: None
  Notes: Three hours of lecture each week
  Syllabus: HTML
  Description: For non-majors only. Computer technology and concepts. Introduction to database management systems, spreadsheats, and word processors. Introduction to networks and to the Internet in particular. Importing information from network to local application.
CMSC 106 INTRODUCTION TO C PROGRAMMING (4)
  Prerequisites: MATH 140 (co-requisite)
  Notes: Three hours of lecture each week
  Syllabus: HTML
  Description: Design and analysis of programs in C. An introduction to computing using structured programming concepts. CMPS and Computer Engineering majors will be given priority for registration until the first day of classes.
CMSC 131 OBJECT-ORIENTED PROGRAMMING I (4)
  Prerequisites: MATH 140 (co-requisite)
  Syllabus: HTML
  Notes: Three hours of lecture and two hours of laboratory per week.
  Description: Introduction to programming and computer science. Emphasizes understanding and implementation of applications using object-oriented techniques. Development of skills such as program design and testing as well as implementation of programs using a graphical IDE.
Programming done in Java.
CMSC 132 OBJECT-ORIENTED PROGRAMMING II (4)
  Prerequisites: CMSC 131 with a grade of C or better, or a score of 5 on the A Java AP exam, or a score of 4 or 5 on the AB Java AP exam, or permission of the department based on satisfactory performance on the Department’s placement exam. Corequisite: MATH 141.
  Syllabus: HTML
  Notes: Three hours of lecture and two hours of laboratory per week.
  Description: 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.
CMSC 212 INTRODUCTION TO LOW-LEVEL PROGRAMMING CONCEPTS (4)
  Prerequisites: CMSC 132 with a grade of C or better, or permission of the department based on satisfactory performance on the department’s placement exam. Corequisite: CMSC 250
  Syllabus: HTML
  Notes: Three hours of lecture and two hours of laboratory per week.
  Description: Introduction to many of the concepts that lie behind software such as hardware, memory layout, memory management, and operating systems. Explain how these concepts affect the design of software systems. Provides transition from the Java environment of preceding two courses to programming in C.
CMSC 250 INTRODUCTION TO DISCRETE STRUCTURES (4)
  Prerequisites: MATH 141
  Notes: Formerly CMSC 150. Three hours of lecture and two hours of lab each week
  Syllabus: HTML
  Description: 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.
CMSC 298 SPECIAL TOPICS IN COMPUTER SCIENCE (1-3)
  Prerequisites: Permission of department.
  Notes: Special topics outside the normal course sequence.
CMSC 311 COMPUTER ORGANIZATION (3)
  Prerequisites: Grades of C or better in CMSC 212(or CMSC 214) and CMSC250.
  Notes: Three hours of lecture each week
  Syllabus: HTML
  Description: Introduction to assembly language. Design of digital logic circuits. Organization of central processors, including instruction sets, register transfer operations, control, microprogramming data representation, and arithmetic algorithms. Memory and input/output organization.
CMSC 330 ORGANIZATION OF PROGRAMMING LANGUAGES (3)
  Prerequisites: Grades of C or better in CMSC 212 (or CMSC 214) and CMSC 250.
  Notes: Two hours of lecture and two hours of lab each week
  Syllabus: HTML
  Description: The run-time organization of programming languages (e.g., ALGOL, PL/1, Pascal, Ada, Lisp, APL, Prolog). Dynamic versus static scope rules. Storage for strings, arrays, and records.
CMSC 351 ALGORITHMS (3)
  Prerequisites: Grades of C or better in CMSC 212 (or CMSC 214) and CMSC 250.
  Notes: Formerly CMSC 251. Three hours of lecture each week
  Syllabus: HTML
  Description: A systematic study of the complexity of some elementary algorithms related to sorting, graphs and trees, and combinatorics.
CMSC 390 HONORS PAPER (3)
  Prerequisites: Admission to CMSC Honors Program.
  Notes:  
  Syllabus: N/A
  Description: Special study or research directed toward preparation of honors paper.
CMSC 411 COMPUTER SYSTEMS ARCHITECTURE (3)
  Prerequisites: Grades of C or better in CMSC 311 and CMSC 330, or a grade of C or better in CMSC 400.
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: Input/output processors and techniques. Intra-system communication, buses, caches. Addressing and memory hierarchies. Microprogramming, parallelism, and pipelining.
CMSC 412 OPERATING SYSTEMS (4)
  Prerequisites: Grades of C or better in (CMSC 311 or ENEE 350) and CMSC 330, or a grade of C or better in CMSC 400.
  Notes: CMSC 411 recommended. Three hours of lecture and one hour of lab each week.
  Syllabus: HTML
  Description: A hands-on introduction to operating systems, including 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, memory management, dynamic linking and loading, socket-driven, window management.
CMSC 414 COMPUTER AND NETWORK SECURITY (3)
  Prerequisites: Grades of C or better in (CMSC 311or ENEE 350) and CMSC 330.
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: 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.
CMSC 415 CONCURRENT AND DISTRIBUTED SYSTEMS (3)
  Prerequisites: A grade of C or better in CMSC 412.
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: Advanced topics and projects in contemporary computer systems, including distributed operating systems, IO subsystems, distributed shared memory, IO subsystems, mixed media systems, load-balancing, cache coherency, object-based operating systems and threads models.
CMSC 417 COMPUTER NETWORKS (3)
  Prerequisites: Grades of C or better in CMSC 311, CMSC 330, and CMSC 351.
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: 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.
CMSC 420 DATA STRUCTURES (3)
  Prerequisites: A grade of C or better in CMSC 330 and CMSC 351.
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: Description, properties, and storage allocation of data structures including lists and trees. Algorithms for manipulating structures. Applications from areas such as data processing, information retrieval, symbol manipulation, and operating systems.
CMSC 421 INTRODUCTION TO ARTIFICIAL INTELLIGENCE (3)
  Prerequisites: Grades of C or better in either (CMSC 330 and CMSC 251) or CMSC 420
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: Areas and issues in artificial intelligence, including search, inference, knowledge representation, learning, vision, natural languages, expert systems, robotics. Implementation and application of programming languages (e.g., Lisp, Prolog, Smalltalk), programming techniques (e.g., pattern matching, discrimination networks), and control structures (e.g., agendas, data dependencies).
CMSC 422 PROGRAMMING ROBOTS (3)
  Prerequisites: A grade of C or better in CMSC 214 and permission of department.
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: An examination of programming issues involved in creating autonomous robots, which can interact with their environments in “intelligent” ways. Topics include traditional robotics, behavior-based robotics, sensor processing, sensor-based control, programming robotic behaviors. Team programming project. Note: this course cannot be taken for credit in the computer science graduate program.
CMSC 423 PROGRAMMING ROBOTS (3)
  Prerequisites: A grade of C or better in CMSC351 or permission of department.
  Notes: Three hours of lecture each week.
  Syllabus:
  Description: A practical introduction to the main topics in algorithms, databases, and tools used in bioinformatics. Includes public databases such as Genbank and PDG, software tools such as BLAST, and their underlying algorithms. Use of Perl scripting languages to perform a number of useful tasks in analyzing sequence data and managing bioinformatic databases.
CMSC 424 DATABASE DESIGN (3)
  Prerequisites: A grade of C or better in CMSC 420.
  Notes: CMSC 450 recommended. Three hours of lecture each week.
  Syllabus: HTML
  Description: Motivation for the database approach as a mechanism for modeling the real world. Review of the three popular data models: relational, network and hierarchical. Comparison of permissible structures, integrity constraints, storage strategies and query facilities. Theory of database design logic.
CMSC 426 IMAGE PROCESSING (3)
  Prerequisites: A grade of C or better in CMSC 420.
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: An introduction to basic techniques of analysis and manipulation of pictorial data by computer. Image input/output devices, image processing software, enhancement, segmentation, property measurement, Fourier analysis. Computer encoding, processing and analysis of curves.
CMSC 427 COMPUTER GRAPHICS (3)
  Prerequisites: MATH 240 and CMSC 420.
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: An introduction to the principles of computer graphics. This includes an introduction to graphics displays and systems, introduction to the mathematics of affine and projective transformations, perspective, curve and surface modeling, algorithms for hidden-surface removal, color models, methods for modeling illumination, shading, and reflection.
CMSC 430 THEORY OF LANGUAGE TRANSLATION (3)
  Prerequisites: A grade of C or better in CMSC 330 or CMSC 400.
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: Formal translation of programming languages, program syntax and semantics. Finite state recognizers and regular grammars. Context free parsing techniques such as recursive descent, precedence, LL(k), and LR(k). Code generation, improvement, syntax directed translation schema.
CMSC 433 PROGRAMMING LANGUAGE TECHNOLOGIES AND PARADIGMS (3)
  Prerequisites: A grade of C or better in CMSC 330.
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: Programming language technologies (e.g., object-oriented programming), their implementations and use in software design and implementation.
CMSC 434 HUMAN FACTORS IN COMPUTER AND INFORMATION SYSTEMS (3)
  Prerequisites: A grade of C or better in CMSC 330; and PSYC 100.
  Notes: Three hours of lecture each week
  Syllabus: HTML
  Description: Human factors issues in the development of software, the use of database systems, and the design of interactive systems. Science base (theories, models, usability studies, and controlled experimentation), and software engineering with user interface development environments. Issues include: programming and command languages; menus, forms, and direct manipulation; graphical user interfaces, computer-supported cooperative work, information search and visualization; input/output devices; and display design.
CMSC 435 SOFTWARE ENGINEERING(3)
  Prerequisites: A grade of C or better in CMSC 412 or 417 or 420 or 430 or 433
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: State of the art technique 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.
CMSC 450 LOGIC FOR COMPUTER SCIENCE (3)
  Prerequisites: CMSC 351 and MATH 141
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: Elementary development of propositional and first-order logic accessible to the advanced undergraduate computer science student, including the resolution method in propositional logic and Herbrand’s Unsatisfiability Theorem in first-order logic. Included are the concepts of truth, interpretation, validity, provability, soundness, completeness, incompleteness, decidability and semi-decidability. This is the same course as MATH 450. Credit will be granted for only one of the following: CMSC450/MATH450 or MATH445.
CMSC 451 DESIGN AND ANALYSIS OF COMPUTER ALGORITHMS (3)
  Prerequisites: Grades of C or better in CMSC 214 and CMSC 351
  Notes: CMSC 420 recommended. Three hours of lecture each week.
  Syllabus: HTML
  Description: 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.
CMSC 452 ELEMENTARY THEORY OF COMPUTATION (3)
  Prerequisites: Grades of C or better in CMSC 214 and CMSC 251
  Notes: Three hours of lecture each week
  Syllabus: HTML
  Description: Introduction to alternative theoretical models of computation, types of automata, and their relations to formal grammars and languages.
CMSC 456 CRYPTOLOGY (3)
  Prerequisites: Two 400-level mathematics courses or two 400-level computer science courses or permission of the instructor.
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: Cryptology has become very important in protecting data in communications between computers. The subject lies on the border between mathematics and computer science. Mathematical topics include number theory and probability, and computer science topics include complexity theory.
CMSC 460 COMPUTATIONAL METHODS (3)
  Prerequisites: Grades of C or better in MATH 240 and MATH 241; and CMSC 104 or CMSC 214
  Notes: Three hours of lecture each week
  Syllabus: HTML
  Description: 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 is on the methods and their computational properties rather than on their analytic aspects. Listed also as MAPL 460. Credit will not be granted for both CMSC/MAPL 460 and CMSC/MAPL 466.
CMSC 466 INTRODUCTION TO NUMERICAL ANALYSIS I (3)
  Prerequisites: Grades of C or better in MATH 240 and MATH 241; and CMSC 104 or CMSC 214
  Notes: Three hours of lecture each week
  Syllabus: HTML
  Description: Floating point computations, direct methods for linear systems, interpolation, solution of nonlinear equations. Listed also as MAPL 466. Credit will not be granted for both CMSC/MAPL 460 and CMSC/MAPL 466.
CMSC 475 COMBINATORICS AND GRAPH THEORY (3)
  Prerequisites: MATH 240 and MATH 241
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: 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. Listed also as MATH 475.
CMSC 477 OPTIMIZATION (3)
  Prerequisites: A grade of C or better in either CMSC/AMSC 460, CMSC/AMSC 466, or CMSC/AMSC 467; Permission of Department
  Notes: Three hours of lecture each week.
  Syllabus: HTML
  Description: Linear programming including the simplex algorithm and dual linear programs, convex sets and elements of convex programming, combinatorial optimization, integer programming. Listed also as MAPL 477.
CMSC 498 SPECIAL PROBLEMS IN COMPUTER SCIENCE (1-3)
  Prerequisites: Permission of department
  Syllabus: N/A
  Description: An individualized course designed to allow a student or students to pursue a specialized topic not taught as part of the regular course offerings under the supervision of a Computer Science Faculty member. In addition, courses dealing with topics of special interest an/or emerging areas of computer science will be offered with this course number. Selected topics will be structured very much like a regular course with homework, project and exams. Credit according to work done.
CMSC 499 Independent Undergraduate Research (1-3)
  Prerequisites: Permission of department
  Syllabus: N/A
  Description: 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 the research plan, students should produce a final paper delineating their contribution to the field. Credit according to work done.