Classes in CMSC
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)ObjectOriented 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 objectoriented 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.  
 
CMSC132  (PermReq)ObjectOriented 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 objectoriented methods to create effective and efficient problem solutions. Use and implement application programming interfaces (APIs). Programming done in Java.  
 
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.  
 
CMSC250H  Discrete Structures (4 credits)  
Prerequisite: CMSC131 with a grade of C or better; MATH141; and permission of department. Formerly CMSC 150.  
 
CMSC287  Network Science and Networked Information: What can (Social) Networks do for us? (3 credits)  
Largescale social information networks are now fundamental components of society, perhaps the most wellknown one being the Web. This class will address the science behind such networks and the potential of such networks, for students with a sound general academic background at a highschool level, and with an interest in the social/mathematical sciences and their applications.  
 
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 runtime organization. Several different models of languages are discussed, including procedural (e.g., C, Pascal), functional (e.g., ML, LISP), rulebased (e.g., Prolog), and objectoriented (e.g., C++, Smalltalk). Runtime 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. Intrasystem 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 thirdgeneration 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 networkrelated 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 widearea 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.  
 
CMSC421  Introduction to Artificial Intelligence (3 credits)  
Prerequisites: A grade of C or better in CMSC330 and in CMSC351; and permission of the department or CMSC graduate student. 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).  
 
CMSC422  (PermReq)Introduction to Machine Learning (3 credits)  
Prerequisite: Minimum grade of C in CMSC351 and CMSC330. Recommended: STAT400. 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.  
 
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.  
 
CMSC430  Theory of Language Translation (3 credits)  
Prerequisites: a grade of C or better in CMSC330; and permission of department; or CMSC graduate student. Formal translation of programming languages, program syntax and semantics. Finite state recognizers and regular grammars. Contextfree parsing techniques such as recursive descent, precedence, LL(k) and LR(k). Code generation, improvement, syntaxdirected translation schema.  
 
CMSC433  Programming Language Technologies and Paradigms (3 credits)  
Prerequisite: CMSC330; and permission of department; or CMSC graduate student. Programming language technologies (e.g., objectoriented programming), their implementations and use in software design and implementation.  
 
CMSC434  Introduction to HumanComputer Interaction (3 credits)  
Prerequisites: CMSC330 with a grade of C or better and PSYC100; and permission of department; or CMSC graduate student. 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 lowfidelity paper mockups, and a highfidelity prototype using contemporary tools such as graphic editors and a graphical programming environment (eg: Visual Basic, Java).  
 
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. Stateoftheart techniques in software design and development. Laboratory experience in applying the techniques covered. Structured design, structured programming, topdown design and development, segmentation and modularization techniques, iterative enhancement, design and code inspection techniques, correctness, and chiefprogrammer 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 divideandconquer, dynamic programming and greedy algorithms), lower bounds and NPcompleteness.  
 
CMSC452  Elementary Theory of Computation (3 credits)  
Prerequisite: CMSC351 with a grade of C or better; and permission of department; or CMSC graduate student. Alternative theoretical models of computation, types of automata, and their relations to formal grammars and languages.  
 
CMSC456  Cryptology (3 credits)  
Prerequisites: Any two 400level 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.  
 
CMSC474  Introduction to Computational Game Theory (3 credits)  
Prerequisite: Minimum grade of C in CMSC351; or permission of CMNSComputer Science department. Credit only granted for: CMSC474, ECON414, or GVPT399A. 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.  
 
CMSC475  Combinatorics and Graph Theory (3 credits)  
Prerequisites: MATH240 and MATH241; and permission of department; or CMSC graduate student. Also offered as MATH475. 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.  
 
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, objectoriented programming and MLlike programming languages.  
 
CMSC652  Complexity Theory (3 credits)  
Prerequisite: CMSC451 or CMSC452; or permission of instructor. Credit will be granted for only one of the following: CMSC652 or CMSC858G. Formerly CMSC 858G. This course will define what it means for a problem to be hard (or easy) in a variety of ways. The emphasis will be on natural problems. Topics may include NPcompleteness, Sparse Sets, Graph Isomoprhism (why it is thought to not be NPcomplete), Counting problems, and approximation problems.  
 
CMSC661  Scientific Computing II (3 credits)  
Prerequisite: AMSC/CMSC/MAPL 460, 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 661. Credit will be granted for only one of the following: AMSC, CMSC 661 or MAPL 661. Fourier and wavelet transform methods, numerical methods for elliptic partial differential equations, numerical linear algebra for sparse matrices, Finite element methods, numerical methods for time dependent partial differential equations. Techniques for scientific computation with an introduction to the theory and software for each topic. Course is part of a two course sequence (660 and 661), but can be taken independently.  
 
CMSC664  Advanced Scientific Computing II (3 credits)  
Prerequisite: CMSC 663 and permission of instructor. Also offered as AMSC 664. Credit will be granted for only one of the following: AMSC 664, CMSC 664 or MAPL 664. In the sequence CMSC 663, CMSC 664 students work on a yearlong individual project to develop software for a scientific task in a high performance computing environment. Lectures will be given on code development and validation, parallel algorithms for partial differential equations, nonlinear systems, optimization.  
 
CMSC667  Numerical Analysis II (3 credits)  
Prerequisite: AMSC/CMSC/MAPL 666. Also offered as AMSC 667. Credit will be granted for only one of the following: AMSC 667, CMSC 667 or MAPL 667. Nonlinear systems of equations, ordinary differential equations, boundary value problems.  
 
CMSC702  Computational Systems Biology (3 credits)  
Prerequisite: CMSC423, or (CMSC or AMSC graduate student), or permission of instructor. An introduction to the fundamental concepts in the computational analysis of biological systems with applications to: functional genomics, population genetics, interaction networks, epigenetics. Computational concepts convered: network and graph 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.  
 
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.  
 
CMSC712  Distributed Algorithms and Verification (3 credits)  
Prerequisite: CMSC 612 or equivalent. Study of algorithms from the distributed and concurrent systems literature. Formal approach to specifying, verifying, and deriving such algorithms. Areas selected from mutual exclusion, resource allocation, quiescence detection, election, Byzantine agreements, routing, network protocols, and faulttolerence. Formal approaches will handle system specification and verification of safety, liveness, and realtime properties.  
 
CMSC724  Database Management Systems (3 credits)  
Prerequisite: CMSC 624 or permission of instructor. Theoretical and implementation issues in advanced database systems. Topics include distributed databases, parallel databases, database clientserver architectures, multimedia access methods, advanced query optimization techniques, data semantics and models, objectoriented databases, and deductive and expert database systems.  
 
CMSC751  Parallel Algorithms (3 credits)  
Prerequisite: CMSC 451 or equivalent. A presentation of the theory of parallel computers and parallel processing. Models of parallel processing and the relationships between these models. Techniques for the design and analysis of efficient parallel algorithms including parallel prefix, searching, sorting, graph problems, and algebraic problems. Theoretical limits of parallelism, inherently sequential problems, and the theory of Pcompleteness.  
 
CMSC773  Computational Linguistics II (3 credits)  
Prerequisite: CMSC723 or LING723; or permission of instructor. May only receive PhD Comp. credit for CMSC723 or CMSC823, not both. Also offered as LING773. Not open to students who have completed LING647. Formerly CMSC 828R. Natural language processing with a focus on corpusbased statistical techniques. Topics inlcude: stochastic language modeling, smoothing, noisy channel models, probabilistic grammars and parsing; lexical acquisition, similaritybased methods, word sense disambiguation, statistical methods in NLP applications; system evaluation.  
 
CMSC838G  Advanced Topics in Programming Languages:Web Scale Information Processing Applications (3 credits)  
Also offered as INFM718G.  
