CMSC101 Introductory Computer Science (3 cr.)
A study of fundamental programming concepts and constructs within an abstract (language-independent) framework. Topics include basic and structured data types, variables, and the structure of expressions. Pseudocode is used to explore the syntax and semantics of structured programming statements, functions, and the use of parameters. Programming assignments include the creation, compilation, and execution of computer programs in a modern programming language that implements these abstract concepts. The history of computing and computing ethics are also discussed. Students may receive credit for only one of the following courses: CMIS 102 or CMSC 101.
CMSC130 Computer Science I (3 cr.)
(For students majoring in computer science. Taking CMSC 130 and CMSC 230 in consecutive semesters is recommended.) Prerequisite: CMSC 101 or equivalent experience. Recommended: CMSC 150. A study of fundamental concepts that underlie object-oriented programming. Topics include the study and use of primitive and object data types and the process of creating well-designed computer programs to solve specified problems. Programming projects in Java are included.
CMSC150 Introduction to Discrete Structures (3 cr.)
Prerequisite or corequisite: MATH 140. A survey of fundamental mathematical concepts involved in computer science. Functions, relations, finite and infinite sets, and propositional logic are explored. Proof techniques presented are those used for modeling and solving problems in computer science. Combinations, permutations, graphs, and trees are introduced, along with selected applications. Students may receive credit for only one of the following courses: CMSC 150 or CMSC 250.
CMSC230 Computer Science II (3 cr.)
(For students majoring in computer science. Taking CMSC 130 and CMSC 230 in consecutive semesters is recommended.) Prerequisites: CMSC 130 and CMSC 150. A study of the fundamental data structures in computer science. Topics include linked lists, stacks, queues, arrays, dictionaries, vectors, and trees. Algorithms that perform sorting and searching are discussed and analyzed. Programming projects in Java are included.
CMSC305 Programming and Applications in Java (3 cr.)
(For students with previous programming experience.) Prerequisites: A 200 level computer science course in data structures, using a language other than Java (such as C++, C, Pascal, Ada, or PL/I) and either MATH 130, MATH 140, or MATH 220. A fast-paced, one-semester guide to using Java to implement fundamental programming constructs and basic data structures. Emphasis is on implementing Java concepts that have already been studied and understood. Students who completed CMSC 230 after fall 1998 may receive credit for only one of the following courses: CMSC 230 or CMSC 305.
CMSC311 Computer Organization (3 cr.)
(Required for students majoring in CMSC.) Prerequisites: CMSC 130 and CMSC 230. A study of the organization of memory, input/output, and central processing units, including instruction sets, register transfer operations, control microprogramming, data representation, and arithmetic algorithms. Assembly language and digital logic circuit design are introduced. Students may receive credit for only one of the following courses: CMIS 270, CMIS 310, CMSC 311, or IFSM 310.
CMSC325 Game Design and Development (3 cr.)
Prerequisite: CMSC230. A study of the theory and practice of game design and development. This project-driven course will allow teams of students to collaborate with one another to develop interactive games. Students will be exposed to critical mathematical concepts and real-time game physics allowing them to build realistic graphical 3-D worlds, animate characters, and add special effects to their games.
CMSC330 Advanced Programming Languages (3 cr.)
Prerequisite: CMSC 230 or CMSC 305. A comparative study of programming languages. Topics covered include the syntax and semantics of programming languages, and run-time support required for various programming languages. Programming projects using selected languages are required.
CMSC335 Object-Oriented and Concurrent Programming (3 cr.)
Prerequisite: CMSC 230 or CMSC 305. A study of object-oriented and concurrent programming using features of Java. Concepts of object-oriented programming (such as composition, classification, and polymorphism) are explored. Topics include the principles of concurrent programming (such as task synchronization, race conditions, deadlock, and threads). Programming projects are implemented in Java. Students may receive credit for only one of the following courses: CMSC 300 or CMSC 335.
CMSC411 Computer System Architecture (3 cr.)
Prerequisite: CMSC 311. A discussion of input/output processors and techniques, covering their relation to intrasystem communication, including buses and caches. Discussion covers addressing and memory hierarchies, microprogramming, parallelism, and pipelining.
CMSC412 Operating Systems (3 cr.)
Prerequisite: CMSC 311. A study of the fundamental principles underlying modern operating systems. The essential components of a typical operating system and the interactions among them are described. Methods of managing processes and resources in computer systems are discussed in detail. Programming projects that implement parts of an operating system are required.
CMSC415 UML and Design Patterns (3 cr.)
(Designed for software engineers, systems analysts, designers, and programmers.) Prerequisite: CMSC 335. A comprehensive study of fundamental concepts of object-oriented analysis and design focusing on Unified Modeling Language (UML) and its application to the system architectural design using selected patterns as guiding models. Activities include creation of detailed object models, in conjunction with UML views and design from system requirements, using use-case models and proven patterns to refine analysis and design models. Emphasis is on expansion of the analysis into a design that is ready for implementation, with artifacts that are testable, and that exhibits scalability to easily evolve in response to changes in a given problem domain.
CMSC420 Advanced Data Structures and Analysis (3 cr.)
Prerequisites: CMSC 230 and CMSC 330. A study of data structures (including lists and trees) in terms of their descriptions, properties, and storage allocations. Algorithms are used to manipulate structures. Applications are drawn from the areas of information retrieval, symbolic manipulation, and operating systems.
CMSC421 Introduction to Artificial Intelligence (3 cr.)
Prerequisites: CMSC 330 and 335. An exploration of various areas of artificial intelligence, including search, inference, knowledge representation, learning, vision, natural languages, expert systems, and robotics. Programming languages (e.g., LISP, PROLOG), programming techniques (e.g., pattern matching, discrimination networks), and control structures (e.g., agendas, data dependencies) are implemented in suitable applications.
CMSC424 Database Design (3 cr.)
Prerequisite: CMSC 335. A study of the applicability of the database approach as a mechanism for modeling the real world. Review covers the three popular data models (hierarchical, relational, and network). Permissible structures, integrity constraints, storage strategies, and query facilities are compared. The theoretical foundations of the logic used in designing a database are presented.
CMSC430 Theory of Language Translation (3 cr.)
Prerequisites: CMSC 330 and programming experience in C or C++. An examination of the formal translation of programming languages, syntax, and semantics. Highlights include evaluation of finite-state grammars and recognizers; context-free parsing techniques such as recursive descent, precedence, LL(K), LR(K), and SLR(K); and improvement and generation of machine-independent code and syntax-directed translation schema. Programming projects that implement parts of a compiler are required.
CMSC450 Logic for Computer Science (3 cr.)
(Also listed as MATH 450. Accessible to advanced undergraduates majoring in computer science.) Prerequisites: CMSC 150 and MATH 241. Elementary development of propositional logic (including the resolution method) and first-order logic (including Hebrand's unsatisfiability theorem). Discussion covers the concepts of truth and interpretation; validity, provability, and soundness; completeness and incompleteness; and decidability and semidecidability. Students may receive credit for only one of the following courses: CMSC 450, MATH 444, MATH 445, or MATH 450.
CMSC451 Design and Analysis of Computer Algorithms (3 cr.)
Prerequisites: CMSC 150 and CMSC 230. Presentation of fundamental techniques for designing and analyzing computer algorithms. Basic methods include divide-and-conquer techniques, search and traversal techniques, dynamic programming, greedy methods, and induction.
CMSC452 Elementary Theory of Computing (3 cr.)
Prerequisite: CMSC 311. Analysis of alternative theoretical models of computation and types of automata. Their relationship to formal grammars and languages is specified.
CMSC475 Combinatorics and Graph Theory (3 cr.)
Prerequisites: MATH 240 and MATH 241. An exploration of general enumeration methods, difference equations, and generating functions. Focus is on elements of graph theory, matrix representations of graphs, and applications of graph theory to transport networks. Matching theory and graphical algorithms are also considered. Students may receive credit for only one of the following courses: CMSC 475 or MATH 475.
CMSC480 Advanced Programming in Java (3 cr.)
Prerequisite: CMSC 335 or equivalent object-oriented and Java programming experience. An examination of the principles, techniques, and applications of programming in Java in the Internet environment. Topics include threads, packages, interfaces, and exceptions. Java applets are created and incorporated into Web pages. Visual development tools are reviewed. Students may receive credit for only one of the following courses: CMIS 498J, CMSC 480, or CMSC 498J.
CMSC486A Internship in Computer Science Through Co-op (3 cr.)
Prerequisite: Formal admission to the Co-op program (program requirements are listed on p. 00). An opportunity to combine academic theory with new, career-related experience in computer science. At least 12 hours per week must be devoted to new tasks for a minimum of 180 hours during the Co-op session; four new tasks must be delineated in the Learning Proposal; and the course requirements must be completed. May be repeated upon approval of a new Learning Proposal that demonstrates new tasks and objectives related to computer science and that continues to advance application of academic theory in the workplace. Students may earn up to 15 semester hours in all internship coursework through Co-op toward a first bachelor's degree and up to 9 semester hours toward a second bachelor's degree. Co-op credits may not be used for general education requirements and, unless otherwise specified, no more than 6 Co-op credits may be used in the academic major and minor (combined).
CMSC486B Internship in Computer Science Through Co-op (6 cr.)
Prerequisite: Formal admission to the Co-op program (program requirements are listed on p. 00). An opportunity to combine academic theory with new, career-related experience in computer science. At least 20 hours per week must be devoted to new tasks for a total of 300 hours during the Co-op session; five to eight new tasks must be delineated in the Learning Proposal; and the course requirements must be completed. May be repeated upon approval of a new Learning Proposal that demonstrates new tasks and objectives related to computer science and that continues to advance application of academic theory in the workplace. Students may earn up to 15 semester hours in all internship coursework through Co-op toward a first bachelor's degree and up to 9 semester hours toward a second bachelor's degree. Co-op credits may not be used for general education requirements and, unless otherwise specified, no more than 6 Co-op credits may be used in the academic major and minor (combined).
CMSC495 Current Trends and Projects in Computer Science (3 cr.)
(Intended as a final, capstone course to be taken in a student's last 9 credits) Prerequisites: CMSC 330 and CMSC 335. An overview of computer science with emphasis on integration of concepts, practical application, and critical thinking. Analysis covers innovative and emerging issues in computer science. Projects use techniques and approaches previously studied; they may focus on software design and architecture, systems and application security, mobile applications, database design and implementation, concurrent programming, signal processing, algorithm performance optimization, or current issues. Assignments include working in teams throughout the analysis, design, development, implementation, testing, and documentation phases of the projects.
CMSC498 Special Topics in Computer Science (3 cr.)
Prerequisites: Vary according to topic. A seminar on topics in computer science. May be repeated to a maximum of 6 credits when topics differ.
CMSC498D Topics in Software Systems Engineering (3 cr.)
Prerequisites: CMSC 330 and CMSC 335. An exploration of software engineering from both a systems engineering and a managerial point of view. Coverage of issues in software systems engineering includes definition of requirements, specification, design, verification and validation, and estimation of costs of software. Topics in management include planning, organizing, staffing, directing, and controlling, as those activities apply to the development of software systems.
CMSC498G Image Processing and Computer Graphics (3 cr.)
Prerequisites: MATH 240 and CMSC 335. An investigation of concepts and techniques of image processing and computer graphics. Review covers input/output devices, display programs, and statistical attributes of images. Transformations, thresholding, clipping, and edge detection are implemented. Convolution and filters, Fourier and wavelet transforms, and volume rendering and animation of three-dimensional graphical objects are introduced. Topics include methods to scan conversion of lines and polygons and to apply two- and three-dimensional geometric and projective transformations, and algorithms for hidden-surface removal, reflection and lighting, and representation of general curves and surface.