UMBC logo
Undergraduate Catalog 2012

Computer Science

CMSC 100 (3.00)

Introduction to Computer Science

A one-semester introduction to computers and computer science. This course is intended for non-science majors. Topics include computer algorithms, data representations, computer systems, networks, databases, graphics, artificial intelligence, and the effects of computers on society.
   Course ID: 052864
   Consent: No Special Consent Required
   Components: Lecture
   Attributes: Science (non-lab) (GEP), Science (non-lab) (GFR)

CMSC 100H (3.00)

Introduction to Computer Science

A one-semester introduction to the computers and computer science. This course is intended for non-science majors. Topics include computer algorithms, data representations, computer systems, networks, databases, graphics, artificial intelligence, and the effects of computers on society. In the honors discussion session, students will read and discuss current articles about the interaction between humans and computers, and will also have hands-on laboratories to provide more in-depth exposure to programming techniques. The honors section of this course is intended to prepare students for CMSC 201.
   Course ID: 100125
   Consent: Department Consent Required
   Components: Discussion, Lecture
   Attributes: Science (non-lab) (GEP), Science (non-lab) (GFR)

CMSC 101 (4.00)

Computational Thinking and Design

Broad survey of the power, challenges, and specialties of computing fields . Topics include algorithmic problem solving, the design and development of computing solutions , human-centered computing, graphics and games, data management and exploration, hardware and systems, intelligent solutions, and academic and professional skills. Assumes no prior experience with compu ting. Restricted to those declared or considering a computing major (BTA, IS, CMSC, and CMPE). Intended to be taken in the first or second semester.
   Course ID: 052865
   Consent: Department Consent Required
   Components: Discussion, Lecture

CMSC 103 (4.00)

Scientific Computing

An introduction to computers and programming. This course is intended for students who will major in scientific disciplines other than computer science. The course emphasizes scientific applications and uses the FORTRAN programming language. The elements of FORTRAN covered in this course include assignment statements, input/output statements, control structures, repetition structures, sub-routines, functions, arrays and files. This course also covers general programming concepts, including computer components, structured programming,algorithm development, problem-solving, testing, debugging and documentation.
   Course ID: 052867
   Consent: No Special Consent Required
   Components: Discussion, Laboratory, Lecture
   Requirement Group: You must have completed MATH 151 or MATH 140 with the grade of C or better

CMSC 104 (3.00)

Problem Solving and Computer Programming

This course is designed to provide an introduction to problem solving and computer programming that does not require prior programming experience. Elementary problem solving skills and algorithm development will be introduced. Students will be taught the basic use of a programming environment and basic programming constructs (including loops, control statements, functions, and arrays). This course also teaches students the fundamentals of using the UNIX operating system, and introduces general computer science concepts. Note: This course does not fulfill any of the computer science major requirements. Students who have taken and received transfer credit for, or who are taking concurrently any computer programming course in a high-level programming language, will not receive credit for CMSC 104. The list of such computer programming courses includes, but is not limited to AP Computer Science, CMSC 201, CMSC 202, and sections of CMSC 291 that cover programming topics.
   Course ID: 052868
   Consent: No Special Consent Required
   Components: Lecture
   Course Equivalents: CMSC 104Y

CMSC 104Y (4.00)

Problem Solving and Computer Programming

This course is designed to provide an introduction to problem solving and computer programming that does not require prior programming experience. Elementary problem solving skills and algorithm development will be introduced. Students will be taught the basic use of a programming environment and basic programming constructs (including loops, control statements, functions, and arrays). This course also teaches students the fundamentals of using the UNIX operating system, and introduces general computer science concepts. Note: This course does not fulfill any of the computer science major requirements. Students who have taken and received transfer credit for, or who are taking concurrently any computer programming course in a high-level programming language, will not receive credit for CMSC 104. The list of such computer programming courses includes, but is not limited to AP Computer Science, CMSC 201, CMSC 202, and sections of CMSC 291 that cover programming topics.
   Course ID: 100689
   Consent: No Special Consent Required
   Components: Discussion, Lecture
   Course Equivalents: CMSC 104

CMSC 106 (2.00)

Programming in C

An introduction to programming in C for students experienced in a high-level programming language. Topics include elementary data structures, control structures and input/ output functions in C; the use of the C preprocessor; user-defined types such as arrays, records and structures; system calls; and the use of a symbolic debugger. Students will be expected to complete significant programming projects using the C programming language. Recommended Preparation: Mastery of a high-level programming language other than C.
   Course ID: 052870
   Consent: No Special Consent Required
   Components: Lecture

CMSC 109 (2.00)

Programming Topics

An introduction to programming in a specific programming language, which may vary from semester to semester. This course is repeatable for credit.
   Course ID: 052873
   Consent: No Special Consent Required
   Components: Lecture
   Topics: Programming In C++, Java Programming Languag, Programming Topics, Java Programming, Introduction To C++, C++ For Scienctists/Engr, Top:C++ Programming, C++ For Scientists & Eng, Oop For Internet/Java, Topic: Java Program Lang, Programmin In C++, Top: C++ Programming, Java For Scientists/Engr, C++ Programming, Java For Sci & Engrs
   Requirement Group: You must complete CMSC103 or CMSC201 with a C or better.

CMSC 121 (1.00)

Introduction to UNIX

This is an introductory course on UNIX intended primarily for incoming students new to UNIX and to computing at UMBC. Topics include an introduction to the UMBC computing environment, basics of the UNIX environment, e-mail using Pine and the emacs/Xemacs editor. Students are required to obtain a UMBC GL account prior to the first day of class.
   Course ID: 052874
   Consent: No Special Consent Required
   Components: Lecture

CMSC 201 (4.00)

Computer Science I for Majors

An introduction to computer science through problem solving and computer programming. Programming techniques covered by this course include modularity, abstraction, top-down design, specifications documentation, debugging and testing. The core material for this course includes control structures, functions, lists, strings, abstract data types, file I/O, and recursion.
   Course ID: 052879
   Consent: No Special Consent Required
   Components: Discussion, Lecture
   Course Equivalents: CMSC 201H
   Requirement Group: You must have completed MATH150 or MATH151 or MATH152 with a C or better

CMSC 201H (4.00)

Computer Science I for Majors (Honors)

An introduction to computer science through problem solving and computer programming. Programming techniques covered by this course include modularity, abstraction, top-down design, specifications documentation, debugging and testing. The core material for this course includes control structures, functions, lists, strings, abstract data types, file I/O, and recursion.
   Course ID: 052880
   Consent: Department Consent Required
   Components: Discussion, Lecture
   Course Equivalents: CMSC 201
   Requirement Group: You must have completed MATH150 or MATH151 or MATH152 with a C or better

CMSC 202 (4.00)

Computer Science II for Majors

This course continues the student's development of programming and problem-solving skills by providing an introduction to object-oriented design and programming (OOP). The primary focus is on OOP principles and techniques, including encapsulation, composition, inheritance, and polymorphism. Other OOP topics such as exception handling, containers, and generic programming are also covered. This is the second course for students interested in pursuing further study in computer science.
   Course ID: 052881
   Consent: No Special Consent Required
   Components: Discussion, Lecture
   Requirement Group: You must have completed CMSC201 or CMSC201H and ( MATH150 or MATH151 or MATH151H or MATH152 or MATH152H) with a C or better

CMSC 202H (4.00)

Computer Science II (Honors) (MS)

This course continues the student's development of programming and problem-solving skills by providing an introduction to object-oriented design and programming (OOP). The primary focus is on OOP principles and techniques, including encapsulation, composition, inheritance, and polymorphism. Other OOP topics such as exception handling, containers, and generic programming are also covered. This is the second course for students interested in pursuing further study in computer science
   Course ID: 052882
   Consent: No Special Consent Required
   Components: Discussion, Lecture
   Requirement Group: You must have completed CMSC201 or CMSC201H and ( MATH150 or MATH151 or MATH151H or MATH152 or MATH152H) with a C or better

CMSC 203 (3.00)

Discrete Structures

This course introduces the fundamental tools, topics and concepts of discrete mathematics needed to study computer science. This course emphasizes counting methods, proof techniques and problem solving strategies. Topics include Boolean algebra; set theory; symbolic logic; predicate calculus; number theory; the methods of direct, indirect and inductive proofs; objective functions; equivalence relations; graphs; set partitions; combinatorics; modular arithmetic; summations; and recurrences.
   Course ID: 052883
   Consent: No Special Consent Required
   Components: Lecture
   Attributes: Mathematics (GEP), Mathematics (GFR)
   Requirement Group: You must have completed MATH 151 or MATH 140 with the grade of C or better

CMSC 232 (2.00)

Advanced Java Techniques

Advanced programming techniques in Java will be presented. The use of networking, threaded programs and techniques for object reflection and persistence will be discussed in class and will be the motivation for homework assignments. Additional topics will include distributed computation facilities in Java, including remote method invocation (RM), and distributed service architectures such as Jini and space-based computations in Java Spaces also will be examined. As time permits, Java security issues will be presented.
   Course ID: 052896
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC202 or CMSC202H with the grade of C or better.

CMSC 291 (1.00 - 4.00)

Special Topics in Computer Science

Special Topics in Computer Science to be announced. Variable credit course is repeatable.
   Course ID: 052903
   Consent: No Special Consent Required
   Components: Lecture
   Topics: Programming Topics: C++, Basic Circuit Thoery Lab, Principles Of Digi Dsn, Introduction To C++, Java/Scientists/Engineer, Circuits Lab, Introduction To UNIX, Advanced Java Techniques, Adv Scientific Computing, Intro UNIX & Shell Prog, Intro To System Program, Comprehensive Java, Adv Java Techniques, Basic Circuit Theory Lab, Principles Of EE Lab, Prin Digital Design Lab, Transfer Success Seminar, Intro To UNIX, Prog Microcontrollers, Anatomy Of A Video Game, Java For Scientists/Engr, Programming In LISP, Java For C++ Programmers, C++ Programming, Advanced Techniques Java, Intro To UNIX And Shell, C Language for computer engine

CMSC 299 (1.00 - 4.00)

Independent Study in Computer Science

A student may enroll in this course to study computer science topics that are not available in a regular course. The student and the faculty member supervising the independent study must determine the objectives of the project, the number of credits to be earned and the evaluation criteria for the project. Students are limited to two independent study courses in computer science. Variable credit course is repeatable up to 4 credits.
   Course ID: 052904
   Consent: Department Consent Required
   Components: Independent Study

CMSC 304 (3.00)

Social and Ethical Issues in Information Technology

A survey course that reviews social issues and the ethical impact of information technology throughout the world. The course examines the policy issues that relate to the use of information technology, such as persona, privacy, rights of access, security, transborder information flow and confidentiality.
   Course ID: 052907
   Consent: No Special Consent Required
   Components: Lecture
   Attributes: Arts and Humanities (GEP), Writing Intensive, Arts and Humanities (GFR)
   Requirement Group: You must have completed CMSC202 or CMSC202H with the grade of C or better.

CMSC 313 (3.00)

Computer Organization and Assembly Language Programming

This course introduces the student to the low-level abstraction of a computer system from a programmer's point of view, with an emphasis on low-level programming. Topics include data representation, assembly language programming, C programming, the process of compiling and linking, low-level memory management, exceptional control flow, and basic processor architecture.
   Course ID: 052911
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC 202 and CMSC 203 with a grade of C or better

CMSC 331 (3.00)

Principles of Programming Language

This course examines the theory, design and implementation of programming languages and provides students with an introduction to programming languages that are likely to be new to them. Topics include specifications of syntax and semantics, declarations, binding, allocation, data structures, data types, control structures, control and data flow, concurrency, and the implementation and execution of programs. The major language paradigms will be described and explored, including imperative, object-oriented, functional, logic programming, concurrent and others. Programming projects will provide experience in several languages.
   Course ID: 052913
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC 202 and CMSC 203 with a grade of C or better

CMSC 341 (3.00)

Data Structures

An examination of a range of advanced data structures, with an emphasis on an object-oriented approach. Topics include asymptotic analysis; various binary search trees, including red-black and splay trees; skip lists as alternatives to binary search trees; data structures for multidimensional data such as K-D trees; heaps and priority queues, including binary heaps, binomial heaps, leftist heaps (and/or other mergeable heaps); B-trees for external storage; other commonly used data structures, such as hash tables and disjoint sets. Programming projects in this course will focus on implementation issues for data structures and on empirical analysis of their asymptotic performance.
   Course ID: 052914
   Consent: No Special Consent Required
   Components: Lecture
   Course Equivalents: CMSC 341H
   Requirement Group: You must have completed CMSC 202 and CMSC 203 with a grade of C or better

CMSC 341H (3.00)

Data Structures

An examination of a range of advanced data structures, with an emphasis on an object-oriented approach. Topics include asymptotic analysis; various binary search trees, including red-black and splay trees; skip lists as alternatives to binary search trees; data structures for multidimensional data such as K-D trees; heaps and priority queues, including binary heaps, binomial heaps, leftist heaps (and/or other mergeable heaps); B-trees for external storage; other commonly used data structures, such as hash tables and disjoint sets. Programming projects in this course will focus on implementation issues for data structures and on empirical analysis of their asymptotic performance.
   Course ID: 100127
   Consent: Department Consent Required
   Components: Lecture
   Course Equivalents: CMSC 341
   Requirement Group: You must have completed CMSC 202 and CMSC 203 with a grade of C or better

CMSC 345 (3.00)

Software Design and Development

This course introduces the basic concepts of software engineering, including software life cycle, requirements analysis and software design methods. Professional ethics in computer science and the social impact of computing are discussed as an integral part of the software development process. Additional topics may include tools for software development, software testing, software metrics and software maintenance.
   Course ID: 052915
   Consent: No Special Consent Required
   Components: Lecture
   Attributes: Writing Intensive
   Requirement Group: You must have completed CMSC341 or CMSC341H with the grade of C or better.

CMSC 352 (3.00)

Women, Gender, and Information Technology

This course examines important issues concerning women, gender, and information technology (IT). It considers women's contributions to technology, from the 19th century Analytical Engine to contemporary cybersecurity industry; how women are impacted by technology; how women and girls fare in IT educational settings; and the way these issues intersect with multiple dimensions of experience, such as nationality, race, class and age. Students will connect these issues to their ow n experiences, including academic and career choices, and will utilize information technology to completing course assignments. Recommended Course Preparation:A prior course in computer science, information systems or gender and women's studies.
   Course ID: 050049
   Consent: No Special Consent Required
   Components: Lecture
   Course Equivalents: CMSC 352H
   Same as Offering: GWST 352, IS 352
   Attributes: Social Sciences (GEP), Social Sciences (GFR)
   Requirement Group: You must have completed one IS, CMSC, or GWST course with a grade of C or better.

CMSC 352H (3.00)

Women, Gender, and Information Technology

This course examines important issues concerning women, gender and information technology (IT). Students will consider such topics as the history of women's involvement with IT; how women are impacted by technology; how women and girls fare in the educational setting as well as online; and the way gender intersects with IT in relation to other dimensions of women's experience, such as race, class and age. Students will connect issues relevant to women and IT to their own career choices, interact with women in the IT field and utilize technology for research and presentation. Prerequisite: A prior course in computer science, information systems or gender and women's studies.
   Course ID: 100341
   Consent: Department Consent Required
   Components: Lecture
   Course Equivalents: CMSC 352, GWST 352, IS 352
   Requirement Group: You must complete a course in CMSC, IS, or GWST and earn a grade of C or better in order to take this course.

CMSC 391 (1.00 - 4.00)

Special Topics in Computer Science

Special topics in computer science. Variable credit course is repeatable.
   Course ID: 052920
   Consent: No Special Consent Required
   Components: Lecture
   Topics: Program Microcontrollers, Student Succ/Appl Learn, Problem Solving Seminar, Systems Design & Programming

CMSC 404 (3.00)

The History of Computers and Computing

   Course ID: 052921
   Consent: No Special Consent Required
   Components: Lecture

CMSC 411 (3.00)

Computer Architecture

This course covers the design of complex computer systems making heavy use of the components and techniques discussed in CMSC 313, CMPE 212 and CMPE 310. All parts of the computer system - CPU, memory and input/output - are discussed in detail. Topics include information representation, floating-point arithmetic, instructions set design issues (RISC vs. CISC), microprogrammed control, hardwired control, pipelining, memory cashes, bus control and timing,input/output mechanism and issues in the construction of parallel processors.
   Course ID: 052922
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC 313 or CMPE 212 and CMPE 310 with a grade of C or better.

CMSC 421 (3.00)

Principles of Operating Systems

An introduction to the fundamentals of operating systems. Topics include interprocess communication, process scheduling, deadlock, memory management, virtual memory, file systems and distributed systems. Formal principles are illustrated with examples and case studies of one or more contemporary operating systems.
   Course ID: 052928
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC341 and ( CMSC313 or CMPE212 and CMPE310) all with a grade of C or better.

CMSC 426 (3.00)

Principles of Computer Security

This course will provide an introduction to computer security, with specific focus on the computing aspects. Topics covered will include: Basics of computer security including an overview of threat, attack, and adversary models; social engineering; essentials of cryptography; traditional computing security models; malicious software; secure programming; Operating system security in practice; trusted operating system design; public policy issues including legal, privacy, and ethical issues; network and database security overview.
   Course ID: 052931
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC421 with a C or better.

CMSC 427 (3.00)

Wearable Computing

This course covers fundamental concepts, methodologies, and algorithms related to wearable computing, including the following: Emotional Design, Convergent Design Processes, Wearability Considerations, Wearable Sensors Networks, Wearable Networks, Physiological Wearable Sensors, Innovation Processes, Marketing and business considerations, Human Aware Computing, Context Awareness, Wearable Communities, Future Mobility and Wearable Systems Applications.
   Course ID: 052932
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: Senior CMSC Major

CMSC 431 (3.00)

Compiler Design Principles

A detailed study of the design and implementation of a compiler for a high-level programming language. Topics include lexical analysis, parsing techniques (including LL and LR parsers), semantic routines,run-time storage allocation, code generation and optimization.
   Course ID: 052933
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: CMSC313 and CMSC331 and CMSC341 with a C or better.

CMSC 432 (3.00)

Object-Oriented Programming Languages and Systems

This course covers the concepts of object-oriented programming (OOP) languages and systems, including an introduction to fundamental abstraction, modularity and encapsulation mechanisms in OOP from a software engineering and representational perspective. Basic OOP concepts covered in this course include polymorphism and operator overloading, message passing via generic functions, late- vs. early-binding times, and inheritance mechanisms and their relationship to the type systems of programming languages. Other topics include a survey of OOP languages and systems, OOP languages vs. imperative programming languages and contrasting pure OOP environments vs. mixed paradigm languages.
   Course ID: 052934
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC331 and CMSC341 with a C or better.

CMSC 433 (3.00)

Scripting Languages

This course is a study of a class of programming languages and tools known as scripting languages. Topics include: writing scripts to control and connect other programs, strengths and weaknesses of interpreted languages, extending scripting languages to include new functionality, embedding functions of a scripting language in other tools, and the syntax and usage of regular expressions. Programming projects in multiple languages will be required.
   Course ID: 052935
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC 331 with the grade of C or better.

CMSC 435 (3.00)

Computer Graphics

An introduction to the fundamentals of interactive computer graphics. Topics include graphics hardware, line drawing, area filling, clipping, two-dimensional and three-dimensional geometrical transforms, three-dimensional perspective viewing, hidden surface removal, illumination, color and shading models.
   Course ID: 052936
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC313 and CMSC341 and MATH221 with a C or better.

CMSC 436 (3.00)

Data Visualization

This course addresses the theoretical and practical issues in creating visual representations of large amounts of data. It covers the core topics in data visualization: data representation, visualization toolkits, scientific visualization, medical visualization, information visualization, and volume rendering techniques. Additionally, the related topics of applied human perception and advanced display devices are introduced. Open to computer science students with a background in computer graphics or students in data-intensive fields who are familiar with the use of the computer for data collection, storage or analysis.
   Course ID: 052937
   Consent: No Special Consent Required
   Components: Lecture
   Course Equivalents: CMSC 436H
   Requirement Group: You must have completed CMSC341 or CMSC341H with the grade of C or better.

CMSC 436H (3.00)

Data Visualization Honors

This course addresses the theoretical and practical issues in creating visual representations of large amounts of data. It covers the core topics in data visualization: data representation, visualization toolkits, scientific visualization, medical visualization, information visualization, and volume rendering techniques. Additionally, the related topics of applied human perception and advanced display devices are introduced. Open to computer science students with a background in computer graphics or students in data-intensive fields who are familiar with the use of the computer for data collection, storage or analysis. Prerequisite: CMSC 435 or permission of the instructor.
   Course ID: 100490
   Consent: No Special Consent Required
   Components: Lecture
   Course Equivalents: CMSC 436
   Requirement Group: You must complete CMSC435 with a C or better.

CMSC 437 (3.00)

Graphical User Interface Programming

This is a practical, hands-on course in how to program interactive 2-D graphical user interfaces using the X11/Motif package and OpenGL. Graphical user interfaces are taken here to mean not just standard widget sets, but also various interactive, pointer-based techniques that comprise the modern desktop metaphor. This course also will introduce some of the concepts and software techniques used to implement such applications. In addition, it briefly will review some of the larger issues, history and future directions of programming graphical interfaces.While the primary emphasis of the course is on 2-D interfaces, there will be a short introduction to some of the 3-D capabilities of OpenGL,as well as a discussion of 3-D interaction and virtual reality.
   Course ID: 052938
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC341 and MATH221 with a C grade or better.

CMSC 441 (3.00)

Design and Analysis of Algorithms.

This course studies fundamental algorithms, strategies for designing algorithms, and mathematical tools for analyzing algorithms. Fundamental algorithms studied in this course include algorithms for sorting and searching, hashing, and graph algorithms. Mathematical tools include asymptotic notations and methods for solving recurrences. Algorithm design strategies include the greedy method, divide-and-conquer, dynamic programming, and randomization.
   Course ID: 052940
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed MATH 142 and MATH 152 and CMSC 341 and STAT 355 with a grade of C or better.

CMSC 442 (3.00)

Information and Coding Theory

An introduction to information and coding theory. Topics include error-control coding problems, entropy, channels, Shannon's theorems, error-correcting codes, applications of coding theory, algebraic codingtheory, block codes, linear codes, cyclic codes, decoding algorithms, BCH codes, convolutional codes, linear sequential circuits and sequential decoding.
   Course ID: 052941
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC 203 and MATH 221 with a grade of C or better.

CMSC 443 (3.00)

Cryptology

An introduction to cryptology, the science of making and breaking codes and ciphers. Topics include: conventional and public-key cryptosystems, including DES, RSA, shift register systems and selected classical systems; examples of cryptanalytic techniques; digital signatures; pseudo-random number generation; cryptographic protocols and their applications; and an introduction to the theories of cryptographic strength based on information theory and complexity theory.
   Course ID: 052942
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC341 and MATH221 and STAT355 with a C or better.

CMSC 444 (3.00)

Information Assurance

Selected recent research topics in information assurance, such as social engineering, buffer overflow, malicious code, spyware, denial of service, information warfare, computer forensics, recovery and response, enterprise security, clandestine channels and emissions security, security analysis, security models and formal techniques, best practices, and national policy for information assurance. Taking a broad, practical view of security - including people, policies and procedures, and technology - this course will help students devise and implement security solutions that meaningfully raise the level of confidence in computer systems. This course will minimize discussion of intrusion detection, firewalls, operating systems security, and mathematical cryptology, which are emphasized in other CMSC security courses.
   Course ID: 052943
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC421 and CMSC481 with a C or better.

CMSC 446 (3.00)

Introduction to Design Patterns

This course is an introduction to software design patterns. Each pattern represents a best practice solution to a software problem in some context. The course will cover the rationale and benefits of object-oriented software design patterns. Several example problems will be studied to investigate the development of good design patterns.Specific patterns, such as observer, state, adapter, strategy, decorator and abstract factory will be discussed. Programming projects in the Java language will provide experience in the use of these patterns. In addition, distributed object frameworks, such as RMI and Jini, will be studied for their effective use of design patterns.
   Course ID: 052945
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC331 and CMSC341 with a C or better.

CMSC 447 (3.00)

Software Engineering I

This course introduces the basic concepts of software engineering, including software life cycle, requirements analysis and software design methods. Professional ethics in computer science and the social impact of computing are discussed as an integral part of the software development process. Additional topics may include tools for software development, software testing, software metrics and software maintenance. Note: Credit will not be given for both CMSC 345 and CMSC 447.
   Course ID: 101927
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must compete CMSC341 one other CMSC 400-level course with a grade of C or better.

CMSC 448 (3.00)

Software Engineering II

A continuation of the study of software engineering with emphasis on topics not fully covered in CMSC 345 and CMSC 447. Topics may include software maintenance; metrics; quality assurance; configuration management; deployment; project planning and management; and modern software development processes, techniques and tools. Students will be given multiple individual and cooperative hands-on assignments. Note: Credit will not be given for both CMSC 445 and CMSC 448.
   Course ID: 052944
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC345 or CMSC447 with a C or better

CMSC 451 (3.00)

Automata Theory and Formal Languages

This course introduces the basic concepts in the theory of formal languages. Topics include regular grammars and finite automata, context-free grammars and push-down automata, Turing machines and the halting problem, and an introductory treatment of computable and non-computable functions.
   Course ID: 052947
   Consent: No Special Consent Required
   Components: Lecture
   Course Equivalents: CMSC 451H
   Requirement Group: You must have completed CMSC 202 and CMSC 203 with a grade of C or better

CMSC 451H (3.00)

Automata Theory and Formal Languages

This course introduces the basic concepts in the theory of formal languages. Topics include regular grammars and finite automata, context-free grammars and push-down automata, Turing machines and the halting problem, and an introductory treatment of computable and non-computable functions.
   Course ID: 100242
   Consent: Department Consent Required
   Components: Lecture
   Course Equivalents: CMSC 451
   Requirement Group: You must have completed CMSC 202 and CMSC 203 with a grade of C or better

CMSC 452 (3.00)

Logic for Computer Science

This course covers the fundamental topics in sentential and first-order logic, including models, logical consequence, deduction and the completeness theorem. Other topics include: undecidability theorems, including Goedel's incompleteness theorem and Tarski's theorem; Herbrand's theorem; and applications including resolution, logic programming, automatic deduction, program specification and program verification.
   Course ID: 052948
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC203 with the grade of C or better.

CMSC 453 (3.00)

Applied Combinatorics and Graph Theory

An introduction to the application of combinatorial methods to computer science. Topics include enumeration methods, recurrence relations, generating functions, graph theory and graph algorithms, and connectivity, Euler tours, Hamiltonian cycles, flow graphs and transport networks, matching theory, planarity, Kuratowski's theorem and NP-complete combinatorial problems.
   Course ID: 052949
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC341 and MATH221 and MATH152 or MATH142 with a C or better.

CMSC 455 (3.00)

Numerical Computations

Topics include numerical linear algebra, interpolation, solving non-linear systems and the numerical solution of differential equations. This course also provides some emphasis on numerical algorithms andcomputation in a parallel environment.
   Course ID: 052951
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC341 and MATH221 and MATH152 or MATH142 with a C or better.

CMSC 456 (3.00)

Symbolic Computation

The theme of this course is abstract algebra from an algorithmic perspective. Algorithms for computing in groups, rings, fields, ideals, quotient rings and other algebraic objects are studied. For example, the Coxeter coset enumeration and the Groebner basis algorithms are studied. Algebraic varieties play a key role in this course. The course also covers many applications of symbolic computation, such as applications to algebraic coding theory, robotics and automatic theorem proving. There are various projects using a symbolic computation package such as Maple or Mathematica.
   Course ID: 052952
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC341 and MATH221 and MATH152 or MATH142 with a C or better.

CMSC 457 (3.00)

Quantum Computation

The course begins with a brief overview of those topics in quantum mechanics and mathematics needed for the understanding of quantum computation. It will then focus on quantum algorithms, covering such topics as quantum superposition and quantum entanglement, quantum decoherence, quantum teleportation, quantum Turing machines, Shor's Algorithm, Grover's algorithm, Hallgren's algorithm, quantum information theory, quantum data compression, quantum cryptographic protocols, quantum error-correcting codes, implementation issues.
   Course ID: 100191
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC 203 and MATH 221 with a grade of C or better.

CMSC 461 (3.00)

Database Management Systems

This course covers database management and the different data models used to structure the logical view of databases. The course also covers database design and implementation techniques, including file organization, query processing, concurrency control, recovery, integrity and security.
   Course ID: 052954
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC341 or CMSC341H with the grade of C or better.

CMSC 465 (3.00)

Introduction to Electronic Commerce

Electronic commerce is the use of electronic means to pursue business objectives. It relies on a wide range of modern technologies, such as the World Wide Web, telecommunications, database technologies, agent technologies, business intelligence, multimedia and user interfaces. This course puts special emphasis on the student's ability to do research in existing and emerging technology and to summarize and present findings clearly. An important part of this course is the development of technical writing skills. The second part of the course concentrates on the issues that are not solely technical, such as trust management, privacy and personalization, and the role of electronic market in revolutionizing traditional industries.
   Course ID: 052955
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC461 and CMSC481 with a C or better.

CMSC 466 (3.00)

Electronic Commerce Technology

This course is designed to prepare students to be e-commerce developers. It introduces students to the changing and competitive landscape of e-commerce technology, products and solutions. It begins with an introduction to WWW technology and an overview of Web applications and services. It further discusses networking technologies with the view toward mobile and wireless commerce and object orientation and Web programming. An overview of Java language and relational databases is given. Database-Web connectivity is discussed.The course proceeds with the study of inter-process communications in a distributed environment concentrating on Java RMI and COBRA technologies. Development of interactive Web pages with JavaScript and dynamic HTML, one of the basic skills in the area of e-commerce development, is covered.
   Course ID: 052956
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC461 and CMSC481 with a C or better.

CMSC 471 (3.00)

Introduction to Artificial Intelligence

This course provides a broad introduction to artificial intelligence, its sub-fields and their applications. Topics include problem-solving approaches, problem spaces and search, knowledge representation and reasoning, logic and deduction, planning, expert systems, handling uncertainty, learning and natural language understanding.
   Course ID: 052958
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC341 or CMSC341H with the grade of C or better.

CMSC 473 (3.00)

Introduction to Natural Language Processing

Natural language processing (NLP), the first non-numerical application of computing, was first studied more than 50 years ago. The ultimate goal of NLP is to enable computers to communicate with people the same way that people communicate among themselves. To do so, the computers must be able to understand and generate text. The course will introduce the students to the problems, methods, and applications of NLP.
   Course ID: 052960
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC 331 with the grade of C or better.

CMSC 475 (3.00)

Introduction to Neural Networks

This course is an in-depth introduction to neural networks. Topics include: characteristics of neural network computing; major neural network models and their related algorithms; supervised, unsupervised and reinforcement learning; and neural network application in function approximation, pattern analysis, optimization and associative memories.
   Course ID: 052962
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC341 or CMSC341H with the grade of C or better.

CMSC 476 (3.00)

Information Retrieval

This course is an introduction to the theory and implementation of software systems designed to search through large collections of text. The first course objective is to cover the fundamentals of Information Retrieval (IR): retrieval models, search algorithms and IR evaluation. The second is to give a taste of the implementation issues through the construction and use of a text search engine.
   Course ID: 052963
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC341 or CMSC341H with the grade of C or better.

CMSC 477 (3.00)

Agent Architectures and Multi-Agent Systems

This course covers fundamental techniques for developing intelligent agents and multi-agent systems, including cognitive, logic-based, reactive and belief-desire-intention architectures; inter-agent communication languages and protocols; distributed problem-solving, planning and constraint satisfaction methods; distributed models of rational behavior; and learning and adaptation in multi-agent systems. This course is repeatable up to 3 credits.
   Course ID: 052964
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC 471 with a grade of C or better.

CMSC 478 (3.00)

Introduction to Machine Learning

This course covers fundamental concepts, methodologies, and algorithms related to machine learning,which is the study of computer programs that improve some task with experience. Topics covered include decision trees, perceptrons, logistic regression, linear discriminant analysis, linear and non-linear regression, basic functions, support vector machines, neural networks, genetic algorithms, reinforcement learning, naive Bayes and Bayesian networks, bias/variance theory, ensemble methods, clustering, evaluation methodologies, and experiment design.
   Course ID: 052965
   Consent: No Special Consent Required
   Components: Lecture
   Course Equivalents: CMSC 478H
   Requirement Group: You must have completed CMSC 471 with a grade of C or better.

CMSC 478H (3.00)

Introduction to Machine Learning

This course covers fundamental concepts, methodologies, and algorithms related to machine learning,which is the study of computer programs that improve some task with experience. Topics covered include decision trees, perceptrons, logistic regression, linear discriminant analysis, linear and non-linear regression, basic functions, support vector machines, neural networks, genetic algorithms, reinforcement learning, naive Bayes and Bayesian networks, bias/variance theory, ensemble methods, clustering, evaluation methodologies, and experiment design.
   Course ID: 100216
   Consent: Department Consent Required
   Components: Lecture
   Course Equivalents: CMSC 478
   Requirement Group: You must have completed CMSC 471 with a grade of C or better.

CMSC 479 (3.00)

Introduction to Robotics

This course covers fundamental concepts, methodologies, and algorithms related to autonomous mobile robotics, touching on mechanical, motor, sensory, perceptual, and cognitive aspects of the problem of building robots that move about and decide what to do on their own. Specific topics covered include legged and wheeled location, kinematic models and constraints, mobile robot maneuverability, motion control, sensors and sensing, perception, localization, belief representations, map representations, probabilistic map-based localization, autonomous map building, planning, reacting, and navigation architectures.
   Course ID: 052966
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC 471 with a grade of C or better.

CMSC 481 (3.00)

Computer Networks

This course introduces the fundamentals of data communication and computer networking, including circuit and packet switching; network architectures and protocols; local/metropolitan/wide-area networks, OSI and TCP/IP standards; network programming and applications; and network management.
   Course ID: 052968
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC341 or CMSC341H with the grade of C or better.

CMSC 483 (3.00)

Parallel and Distributed Processing

This course provides a project and applications-oriented approach to parallel and distributed programming. Students will learn a specific parallel language and programming environment and will complete a large programming project. Topics include a selected parallel programming language, a survey of parallel and distributed architectures and associated programming styles, an introduction to parallel and distributed algorithms, and a study of trade-offs between computation and communication in parallel processing.
   Course ID: 052970
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC421 with a C or better.

CMSC 484 (3.00)

Java Server Technologies

This course is an in-depth look at several of the technologies currently in use to develop applications for the Web. Topics include the use of Java Servlets and Java Server Pages (JSP) and their benefits over traditional CGI programs, the development of web services using SOAP and XML, the use of Enterprise Java Beans to encapsulate server-side business logic and the use of application servers. Several programming projects will be done using these technologies and an appropriate Webserver, such as Apache Tomcat. In addition, several related technologies, such as PHP and Javascript, will be covered.
   Course ID: 052971
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC202 or CMSC202H with the grade of C or better.

CMSC 486 (3.00)

Mobile Telephony Communications

This course provides a technical introduction to mobile radio telephony. Topics include: the evolution of mobile radio communications, transforming signal representation between time and frequency domains, allocation and assignment of communication channels for cellular phones, signal modulation techniques and wireless networks. An in-depth study of the GSM and IS-95 CDMA cellular phone systems also will be presented.
   Course ID: 052972
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMPE 313 or CMPE 212 and MATH 152 with a C or better.

CMSC 487 (3.00)

Introduction To Network Security

The objective of this course is to teach the fundamental concepts, architectures, and protocols related to network security. Topics covered include: Overview of network security; Basics of cryptography; Threat models; Authentication and Authorization Mechanisms and Standards; Public Key Infrastructure; Electronic Mail Security; Network Layer Security; Transport layer and web security; Packet filtering; Firewalls; Intrusion Detection, and Virtual Private Networks; Recent topics in Network Security.
   Course ID: 052973
   Consent: No Special Consent Required
   Components: Lecture
   Requirement Group: You must complete CMSC421 and CMSC481 with a C or better.

CMSC 491 (3.00)

Special Topics in Computer Science

Special topics in Computer Science. This course is repeatable for credit.
   Course ID: 052975
   Consent: No Special Consent Required
   Components: Lecture
   Topics: Top:Obj Orien Prog & Lan, System Implement & Integ, Software Engineering, Distributed Systems, Scripting Languages, Ooa&D, Java Programming, Computer Security, Computer Animation, Electronic Commerce, Wireless Communications, Digital Signal Process, E-Commerce Technology, Enterprise Syst Security, Mobile Radio Telephony, Computer Science, Intro To Design Patterns, Machine Learning, Cell Processors & Applic, Object-Oriented Program, Graphical User Interface, Internet Tools/Protocols, Graph User Interface Pro, Symbolic/Algebraic Proc, Sql Programming, Symbolic Comput Maple, Introduction To UNIX, Java II, Med Software Engineering, Net Prog Mgmt & Admin, Data Network/Security, Microprocessor Systems, Entr Comp & Web Tech, Information Retrieval, Ontological Semantics, UNIX Sec And Admin Pol, Advanced Natural Lang Pr, Intro Machine Learning, Intro To It Services, Srvc Oriented Computing, Spec Topics In Comp Sci, Obj-Orient Anal & Design, UNIX Networking, VLSI Systems, Advance VLSI Design, Developing Palmtop Sys, Data Mining, UNIX System Admin, Scrty In Dstrbtd & Mble, Adv Natural Lang Proc, Comp Graphics For Games, Special Topics, Network Programming, Semantic Web, Sensor Networks, UNIX Security Admin Poli, Object Oriented Analysis, System Implementation, Program Logic Devices, Database Perform Anal, Oracle-Forms, Oracle - Forms, Data Drvn Info Arch, Design Patterns In Java, Creating Web Services, Electronic Commerce Tech, Data & Network Security, Micro Processor Systems, Database Implementation, Adv In E-Learning Tech, Java Server Technologies, Information Assurance, Real-Time Shading, Top:Graphics Prog Lang, Tcp/Ip, Adv Computer Networks, Java I, Neural Networks, Web & Data Mining, Mobil Computing, Computing & Web Tech, Entrprise Comp & Web Tec, Intro To E-Commerce, System Maintenance, Natural Language Process, Spec Topic In Comp Sci, Intro To Nat Lang Proc, Mobile Computing, Embedded Systems, Wireless Sensor Networks, Artistic Rendering, Robotics, Wearable Computing, Network Info Retrieval, Database Design, Object-Oriented Analysis, Programming In Java, VLSI Manufacturability, Data-Driven Info Process, Topics In Systems Admin, Wireless Communication, Distrib Multimedia Sys, Agent Based Information, Software Quality Engin, Wearable Computing, Malicious Software, Prog Embedded Systems, Serv Oriented Computing, Social Web Technologies, Contingency Planning, Top:Software Eng W/Ada, Graphics Program Lang, Tcp/Ip Programming, Topic: S Q L, Topic:Tcp/Ip Programming, Data Base Design, Hardware Design Language, Digital Image Processing, Intro To Data Mining, Introduction To Robotics, Intro Network Security, Electronic Voting Sys, Data Visualization, Top: Dstrb Database Syst, Client/Server Data Sys, Ooa & D, Visualization, Real-Time Graphics, Neural Network Computing, Project Management, Agent Architectures, Sec In Wireless Dis Sys, Quantum Computation, Web Serv Orien Computing, Mobile Platform Dev: iPhone and iPod, Computer Forensics and Intrusions, Intro to Parallel Computing:, Intro Parallel Comp: Emphas Use of IBM Cell B.E., User Interface Programming, Multi- and Many-core Programming, Game User Interface Programming, Advanced FPGA Design, Intro to Quantum Mechanics for, Computational Photography: In, Probabilistic Models, Data Intensive Computing, Computation, Complexity & Emergence, Advanced Computer Graphics, Computation, Complexity, and Emergence, Privacy and Security in a Mobile Social World, Graphics for Games, Medical Informatics, Clinical Informatics, Malware Analysis, Systems for Smart Home Automation, Cybersecurity Research Seminar, Hadoop Based Distributive Computing, Human Cmptg in Visualization

CMSC 493 (3.00)

Capstone Games Group Project

The computer games capstone course is designed to allow students completing the computer science games track to engage in a complete group project development experience. This will help them to integrate the various technical concepts they have learned in earlier courses. The course aims to impart a foundation in team leadership and project management ability that will allow graduates to function effectively within multi-disciplinary teams.
   Course ID: 052976
   Consent: Department Consent Required
   Components: Lecture
   Requirement Group: You must have completed CMSC 435 and CMSC 471 with a grade of C or better.

CMSC 495 (3.00)

Honors Thesis

Under the supervision of a faculty advisor, students in the Computer Science Honors Program will write and submit a scholarly paper reporting on their senior project.
   Course ID: 052977
   Consent: Department Consent Required
   Components: Lecture

CMSC 498 (3.00)

Independent Study in Computer Science for CMSC Interns and Coop Students

Consult the department Web page on CMSC 498 for more information.
   Course ID: 052980
   Consent: Department Consent Required
   Components: Independent Study

CMSC 499 (1.00 - 4.00)

Independent Study in Computer Science

A student may enroll in this course to study computer science topics that are not available in a regular course. The student and the faculty member supervising the independent study must determine the objectives of the project, the number of credits to be earned and the evaluation criteria for the project. Students are limited to two independent study courses in computer science. Variable credit course repeatable up to 4 credits.
   Course ID: 052981
   Consent: Department Consent Required
   Components: Independent Study
   Requirement Group: You must be junior standing