Classes in CMSC
| CMSC100 | Bits and Bytes of Computer Science (1 credits) | |||||||||||
| For first time freshmen and first time transfer computer science majors. 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. | ||||||||||||
| ||||||||||||
| CMSC102 | Introduction to Information Technology (3 credits) | |||||||||||
| For non-majors only. Not recommended for BMGT students. Not open to students who have completed CMSC106, CMSC114, CMSC132 or CMSC214. Credit will be granted for only one of the following: CMSC102, CMSC132 or CMSC214. If CMSC102 is taken before CMSC132 or CMSC214, then credit will be granted for both. An introduction to computer terminology and concepts of computing and information technology. Hands-on experience with a variety of tools available to access the Internet, to find information, as well as PC applications such as a word processor and a spreadsheet package. Students will work in multiple environments (for example, both Windows and UNIX). | ||||||||||||
| ||||||||||||
| CMSC106 | (PermReq)Introduction to C Programming (4 credits) | |||||||||||
| Prerequisite: permission of department. Pre- or corequisite: MATH140. Only for CMPS, ENCP and students with major code: 2299F. Not open to students who have completed CMSC114 or higher. Design and analysis of programs in C. An introduction to computing using structured programming concepts. For further information contact the Undergraduate Education Office, Computer Science Department. | ||||||||||||
| ||||||||||||
| CMSC122 | Introduction to Computer Programming via the Web (3 credits) | |||||||||||
| Not open to students who have completed CMSC132 or higher. Credit will be granted for only one of the following: CMSC122 or CMSC198N. Formerly CMSC198N. Introduction to computer programming in the context of developing full featured dynamic web sites. Emphasizes skills such as program design/implementation using JavaScript and essential knowledge of HTML/CSS for dynamic web sites. | ||||||||||||
| ||||||||||||
| CMSC131 | (PermReq)Object-Oriented Programming I (4 credits) | |||||||||||
| Corequisite: MATH140 and permission of department. Not open to students who have completed CMSC114. 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. For CMSC majors only. | ||||||||||||
| ||||||||||||
| CMSC131H | (PermReq)Object-Oriented Programming I (4 credits) | |||||||||||
| Corequisite: MATH140 and permission of department. Not open to students who have completed CMSC114. For general honors students only. | ||||||||||||
| ||||||||||||
| CMSC132 | (PermReq)Object-Oriented Programming II (4 credits) | |||||||||||
| Prerequisite: CMSC131 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 placement exam and permission of department. Corequisite: MATH141. 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. | ||||||||||||
| ||||||||||||
| CMSC132H | (PermReq)Object-Oriented Programming II (4 credits) | |||||||||||
| Prerequisite: CMSC131 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 placement exam and permission of department. Corequisite: MATH141. For general honors students only. | ||||||||||||
| ||||||||||||
| CMSC216 | (PermReq)Introduction to Computer Systems (4 credits) | |||||||||||
| Prerequisite: CMSC131, CMSC132, MATH140, and MATH141. Corequisite: CMSC250. Not open to students who have completed CMSC216. Credit will be granted for only one of the following: CMSC212 or (CMSC213 and CMSC313) or CMSC216. Machine representation of data including intergers and floating point. Modern computer architectural features and their interaction with software (registers, caches). Interaction between user programs and the OS: system class, process, and thread management. Optimizing software to improve runtime performance using both compilers and hand turning. | ||||||||||||
| ||||||||||||
| CMSC250 | (PermReq)Discrete Structures (4 credits) | |||||||||||
| Prerequisite: CMSC131 with a grade of C or better; MATH141; and permission of department. Formerly CMSC 150. 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. | ||||||||||||
| ||||||||||||
| CMSC289I | Rise of the Machines: Artificial Intelligence Comes of Age (3 credits) | |||||||||||
| An introduction to how contemporary artificial intelligence systems work, including symbolic reasoning, neural modeling, swarm intelligence, and simulated evolution. | ||||||||||||
| ||||||||||||
| CMSC297 | Honors Seminar (1 credits) | |||||||||||
| An introduction to the breadth of computer science research. Intended for all Computer Science Honors students, especially those considering a career in research. Will cover work from some of the key figures in the history of computer science, as well as research being pursued at Maryland. | ||||||||||||
| ||||||||||||
| CMSC311 | (PermReq)Computer Organization (3 credits) | |||||||||||
| Prerequisite: CMSC212 and CMSC250 each with a grade of C (2.0) or better; and permission of department. 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. | ||||||||||||
| ||||||||||||
| CMSC330 | (PermReq)Organization of Programming Languages (3 credits) | |||||||||||
| Prerequisite: CMSC212 and CMSC250: each with a grade of C (2.0) or better; and permission of department. The semantics of programming languages and their run-time organization. Several different models of languages are discussed, including procedural (e.g., C, Pascal), functional (e.g., ML, LISP), rule-based (e.g., Prolog), and object-oriented (e.g., C++, Smalltalk). Run-time structures, including dynamic versus static scope rules, storage for strings, arrays, records, and object inheritance are explored. | ||||||||||||
| ||||||||||||
| CMSC351 | (PermReq)Algorithms (3 credits) | |||||||||||
| Prerequisite: CMSC212 and CMSC250: each with a grade of C (2.0) or better; and permission of department. 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. Credit will be granted for only one of the following: CMSC251 or CMSC351. Formerly CMSC 251. 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. | ||||||||||||
| ||||||||||||
| CMSC411 | Computer Systems Architecture (3 credits) | |||||||||||
| Prerequisite: A grade of C or better in (CMSC311 or ENEE350) and a grade of C or better in CMSC330; and permission of department; or CMSC graduate student. Input/output processors and techniques. Intra-system communication, buses, caches. Addressing and memory hierarchies. Microprogramming, parallelism, and pipelining. | ||||||||||||
| ||||||||||||
| CMSC412 | Operating Systems (4 credits) | |||||||||||
| Prerequisites: A grade of C or better in (CMSC311 or ENEE350) and a grade of C or better in CMSC330; and permission of department; or CMSC graduate student. An introduction to batch systems, spooling systems, and third-generation multiprogramming systems. Description of the parts of an operating system in terms of function, structure, and implementation. Basic resource allocation policies. | ||||||||||||
| ||||||||||||
| CMSC414 | (PermReq)Computer and Network Security (3 credits) | |||||||||||
| Prerequisite: A grade of C or better in (CMSC311 or ENEE350) and a grade of C or better in CMSC330; and permission of department; or CMSC graduate student. 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. | ||||||||||||
| ||||||||||||
| CMSC417 | Computer Networks (3 credits) | |||||||||||
| Prerequisite: A grade of C or better in CMSC351, a grade of C or better in (CMSC311 or ENEE350), and a grade of C or better in CMSC330; and permission of department; or CMSC graduate student. 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. | ||||||||||||
| ||||||||||||
| CMSC420 | Data Structures (3 credits) | |||||||||||
| Prerequisites: A grade of C or better in CMSC330 and in CMSC351; and permission of department; or CMSC graduate student. 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. | ||||||||||||
| ||||||||||||
| CMSC423 | Bioinformatic Algorithms, Databases, and Tools (3 credits) | |||||||||||
| Prerequisite: CMSC351 or permission of department. 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 language to perform a number of useful tasks in analyzing sequence data and managing bioinformatic databases. | ||||||||||||
| ||||||||||||
| CMSC424 | Database Design (3 credits) | |||||||||||
| Prerequisite: CMSC420 with a grade of C or better; and permission of department; or CMSC graduate student. 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. | ||||||||||||
| ||||||||||||
| CMSC426 | Image Processing (3 credits) | |||||||||||
| Prerequisite: CMSC 420 and permission of department; or CMSC graduate student. 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. | ||||||||||||
| ||||||||||||
| CMSC427 | Computer Graphics (3 credits) | |||||||||||
| Prerequisites: MATH240; and a grade of C or better in CMSC420; and permission of department; or CMSC graduate student. An introduction to the principles of computer graphics. 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. | ||||||||||||
| ||||||||||||
| CMSC433 | Programming Language Technologies and Paradigms (3 credits) | |||||||||||
| Prerequisite: CMSC330; and permission of department; or CMSC graduate student. Programming language technologies (e.g., object-oriented programming), their implementations and use in software design and implementation. | ||||||||||||
| ||||||||||||
| CMSC435 | Software Engineering (3 credits) | |||||||||||
| Prerequisites: (CMSC412, CMSC417, CMSC420, CMSC430, or CMSC433) with a grade of C or better and permission of department; or CMSC graduate student. 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. | ||||||||||||
| ||||||||||||
| CMSC451 | Design and Analysis of Computer Algorithms (3 credits) | |||||||||||
| Prerequisite: a grade of C or better in CMSC351; and permission of department; or CMSC graduate student. 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. | ||||||||||||
| ||||||||||||
| CMSC456 | Cryptology (3 credits) | |||||||||||
| Prerequisites: Any two 400-level MATH courses; or CMSC330 and CMSC351; and permission of department; or CMSC graduate student. Also offered as MATH456. Credit will be granted for only one of the following: CMSC456 or MATH456. Importance 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. | ||||||||||||
| ||||||||||||
| CMSC460 | Computational Methods (3 credits) | |||||||||||
| Prerequisites: MATH240; and MATH241; and CMSC106 or CMSC114 or ENEE114; and permission of department; or CMSC graduate student. Also offered as AMSC460. Credit will be granted for only one of the following: AMSC/CMSC/MAPL460 or AMSC/CMSC/MAPL466. 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. | ||||||||||||
| ||||||||||||
| CMSC466 | Introduction to Numerical Analysis I (3 credits) | |||||||||||
| Prerequisites: MATH240; and MATH241; and CMSC106 or CMSC114 or ENEE114; and permission of department; or CMSC graduate student. Also offered as AMSC466. Credit will be granted for only one of the following: AMSC/CMSC/MAPL460 or AMSC/CMSC/MAPL466. Floating point computations, direct methods for linear systems, interpolation, solution of nonlinear equations. | ||||||||||||
| ||||||||||||
| CMSC498F | (PermReq)Selected Topics in Computer Science:Machine Learning (3 credits) | |||||||||||
| Prerequisites: CMSC 330 and 351: An introduction to representations and algorithms that allow machines to improve their performance at tasks from experience. Topics include: linear classification, decision tree neural networks, support vector machines, relational learning, reinforcement learning, and clustering algorithms such as k-means and hierarchical agglomerative clustering. | ||||||||||||
| ||||||||||||
| CMSC631 | Program Analysis and Understanding (3 credits) | |||||||||||
| Prerequisite: CMSC 430 or equivalent. Techniques for static analysis of source code and modern programming paradigms. Analysis techniques: data flow analysis, program dependence graphs, program slicing, abstract interpretation. The meaning of programs: denotational semantics, partial evaluation. Advanced treatment of abstraction mechanisms: polymorphic types, operation overloading, inheritance, object-oriented programming and ML-like programming languages. | ||||||||||||
| ||||||||||||
| CMSC660 | (PermReq)Scientific Computing I (3 credits) | |||||||||||
| Prerequisite: AMSC/CMSC/MAPL 460 or AMSC/CMSC/MAPL 466, or knowledge of basic numerical analysis (linear equations, nonlinear equations, integration, interpolation) with permission of instructor. Knowledge of C or Fortran. Also offered as AMSC 660. Credit will be granted for only one of the following: AMSC 660, CMSC 660 or MAPL 660. Monte Carlo simulation, numerical linear algebra, nonlinear systems and continuation method, optimization, ordinary differential equations. Fundamental techniques in scientific computation with an introduction to the theory and software for each topic. | ||||||||||||
| ||||||||||||
| CMSC663 | Advanced Scientific Computing I (3 credits) | |||||||||||
| Also offered as AMSC663. | ||||||||||||
| ||||||||||||
| CMSC666 | Numerical Analysis I (3 credits) | |||||||||||
| Prerequisites: AMSC/CMSC/MAPL 466; and MATH 410. Also offered as AMSC 666. Credit will be granted for only one of the following: AMSC 666, CMSC 666 or MAPL 666. Iterative methods for linear systems, piecewise interpolation, eigenvalue problems, numerical integration. | ||||||||||||
| ||||||||||||
| CMSC711 | Computer Networks (3 credits) | |||||||||||
| Prerequisite: CMSC 412 or equivalent. Priciples, design, and performance evaluation of computer networks. Network architectures including the ISO model and local area networks (LANs). Communication protocols and network topology. | ||||||||||||
| ||||||||||||
| CMSC714 | High Performance Computing Systems (3 credits) | |||||||||||
| Prerequisites: (CMSC411 and CMSC412) or permission of instructor. Slected topics in high-performance systems, including contemporary architectures, interconnection topologies, shared memory and message-passing systems, multi-threaded kernels, latency avoidance and hiding techniques, methods for data and workload partitioning performance profiling, debugging. | ||||||||||||
| ||||||||||||
| CMSC723 | Computational Linguistics I (3 credits) | |||||||||||
| Prerequisite: CMSC421 or equivalent; or permission of instructor. PhD Comp credit for CMSC723 or CMSC823, not both. Also offered as LING723. Not open to students who have completed LING645. Fundamental methods in natural language processing. Topics include: finite-state methods, context-free and extended context-free models of syntax; parsing and semantics interpretation; n-gram and Hidden Markov models, part-of-speech tagging; natural language applications such as machine translation, automatic summarization, and question answering. | ||||||||||||
| ||||||||||||
| CMSC726 | Machine Learning (3 credits) | |||||||||||
| Prerequisite: CMSC 421 or equivalent or permission of instructor. Reviews and analyzes both traditional symbol-processing methods and genetic algorithms as approaches to machine learning. (Neural network learning methods are primarily covered in CMSC 727.) Topics include induction of decision trees and rules, version spaces, candidate elimination algorithm, exemplar-based learning, genetic algorithms, evolution under artificial selection of problem-solving algorithms, system assessment, comparative studies, and related topics. | ||||||||||||
| ||||||||||||
| CMSC737 | Fundamentals of Software Testing (3 credits) | |||||||||||
| Prerequisite: CMSC435 or equivalent. Formerly CMSC 838M. Examine fundamental software testing and related program analysis techniques. In particular, the important phases of testing will be reviewed, emphasizing th significance of each phase when testing different types of software. Concepts include: test generation, oracles, prioritization and coverage, regression and mutation testing, and program analysis. | ||||||||||||
| ||||||||||||
| CMSC741 | Geometric and Solid Modeling (3 credits) | |||||||||||
| Prerequisite: MATH240 and CMSC420, or permission of instructor. Formerly CMSC828D. An introduction to modeling and mesh-based representations for solid objects, surfaces, and scalar fields; boundary and volumetric models for solid objects. Applications to computer aided design, computer graphics, scientific visualization, finite elements, computer vision, and robotics. | ||||||||||||
| ||||||||||||
| CMSC764 | Advanced Numerical Optimization (3 credits) | |||||||||||
| Prerequisite: MATH410 or permission of instructor. Also offered as AMSC607. Credit will be granted for only one of the following: AMSC607, CMSC764, or MAPL607. Formerly CMSC878O. Modern numerical methods for solving uncontrained and constrained nonlinear optimization problems in finite dimensions. Design of computational algorithms and the analysis of their properties. | ||||||||||||
| ||||||||||||
| CMSC828P | Advanced Topics in Information Processing:Image Understanding (3 credits) | |||||||||||
| Also offered as ENEE731. | ||||||||||||
| ||||||||||||



