This is the preliminary (or launch) version of the 2024-2025 VCU Bulletin. We may add courses that expose our students to cutting-edge content and transformative learning. We may also add content to the general education program that focuses on racial literacy and a racial literacy graduation requirement, and may receive notification of additional program approvals after the launch. The final edition and full PDF version will include these updates and will be available in August prior to the beginning of the fall semester.

CMSC 101. Introduction to Computer Science. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: MATH 139 or MATH 141 with a minimum grade of C. An introduction to the work of computer scientists, including an overview of current research and application areas as well as career opportunities. Topics include problem-solving, the basics of computer organization, the software engineering life cycle, research resources and social and ethical aspects of technology. Additional topics also include binary, hexadecimal, two’s complement, floating point representation, ASCII and Unicode.

CMSC 144. Code Beats With Python. 1 Hour.Play VideoPlay course video for Code Beats With Python

Semester course; 2 laboratory hours. 1 credit. An introduction to computer programming in Python by teaching students to create hip hop beats. Teaches fundamental programming concepts including sequencing, syntax, variables, functions, parameters, lists, repetition and modularization. Teaches just enough music theory to ensure that student-made beats sound great, including fundamental concepts such as melody, rhythm, harmony, chord progression and orchestration. Students will complete in-class activities that reinforce class concepts and, if completed correctly, demonstrate a clear understanding of the material.

CMSC 191. Topics in Computer Science. 3 Hours.

Semester course; 3 lecture hours. 3 credits. May be repeated for credit. Prerequisite: permission of the instructor. This course will teach selected topics in computer science. See the Schedule of Classes for specific topics to be offered each semester and prerequisites.

CMSC 210. Computers and Programming. 3 Hours.

Semester course; 3 lecture hours (delivered online). 3 credits. Introduction to object-oriented programming using Python. The course introduces students to structured programming logic and design techniques. The course content also includes instruction in critical thinking and problem-solving skills using contemporary tools. Specific topics include flowcharting, pseudocode and program control structures, including sequence, selection and repetition. This course is not applicable for credit toward the B.S. in Computer Science.

CMSC 225. Essentials of Artificial Intelligence. 3 Hours.

Semester course; 3 lecture hours (delivered online). 3 credits. An introduction and comprehensive overview of artificial intelligence, including its history, how it works, a survey of algorithms that underlie the technology and current and future uses of AI. This course is designed for students from all backgrounds and knowledge in computing.

CMSC 235. Computing and Data Ethics. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Introduction to ethical considerations for computing and working with data, legal implications surrounding data and computational systems, and sociotechnical responsibilities.

CMSC 245. Introduction to Programming Using C++. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: MATH 151 or satisfactory score on the Mathematical Placement Test. Students registering for CMSC 245 must have taken the VCU Mathematics Placement Test within the one-year period immediately preceding the beginning of the course. An exception to this policy is made in the case in which the stated alternative prerequisite course has been completed at VCU. Students are expected to have fundamental computer skills. Introduction to the concepts and practice of structured programming using C++. Problem-solving, top-down design of algorithms, objects, basic C++ syntax, control structures, functions and arrays. This course is intended for engineering majors.

CMSC 246. Advanced Programming Using C++. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 245. Advanced programming in C++. Topics include program design, objects, classes, inheritance, files, strings, linked lists, stacks, queues, binary trees, recursion, and basic searching and sorting techniques. This course is intended for engineering majors.

CMSC 254. Introduction to Problem-solving. 4 Hours.

Semester course; 3 lecture and 2 laboratory hours. 4 credits. Introduction to problem solving and implementation of solutions using Python. The course introduces students to concepts and practice of structured programming, problem-solving, top-down design of algorithms, a Python language syntax, control structures and arrays. The course content also includes instruction in critical-thinking and problem-solving skills using contemporary tools. Specific topics include flowcharting, pseudocode and program control structures, including sequence, selection, repetition and modularization. Students may not receive credit for both CMSC 254 and CMSC 210.

CMSC 255. Introduction to Object-oriented Programming. 4 Hours.

Semester course; 3 lecture and 2 laboratory hours (delivered online, face-to-face or hybrid). 4 credits. Prerequisite: CMSC 254 or CMSC 210 with a minimum grade of C. Students are expected to have fundamental computer skills and coding knowledge. Introduction to object-oriented programming using Java. Topics include problem-solving, top-down design of algorithms using control structures, methods, arrays, basic I/O, objects and classes in Java including object-oriented design, inheritance, polymorphism, and exceptions, Java classes for manipulating strings, recursion, and introduction to program testing, UML notation and integrated development environments. Students may not receive credit for more than one of the following: CMSC 255, EGRE 245 and INFO 350.

CMSC 256. Introduction to Data Structures. 4 Hours.

Semester course; 3 lecture and 2 laboratory hours (delivered online, face-to-face or hybrid). 4 credits. Prerequisites: CMSC 255 and MATH 151, each with a minimum grade of C. Corequisite: CMSC 302. Advanced programming using Java. Topics include interfaces, linked lists, stacks, queues, binary trees, and basic searching and sorting techniques. Continued focus on program testing and UML notation. Students working toward a computer science degree or certificate program may not receive credit for both CMSC 256 and EGRE 347.

CMSC 257. Computer Systems. 4 Hours.

Semester course; 3 lecture and 2 laboratory hours (delivered online, face-to-face or hybrid). 4 credits. Prerequisite: CMSC 256 with a minimum grade of C. Topics include Linux essentials; system programming in C; organization of programs/data, arrays and pointers; types, structs and unions; strings; bit/byte operations; memory management; shell programming; input/output, including file handling; debugging; signals; program concurrency using forks and threads; experiments on program performance and optimization techniques.

CMSC 302. Introduction to Discrete Structures. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Prerequisite: CMSC 255 with minimum grade of C. Corequisite: CMSC 256. Logic and proofs, sets, functions, sequences and sums, relations, graphs, trees, induction and recursion, advanced counting techniques (recurrences and combinatorics), probability.

CMSC 303. Introduction to the Theory of Computation. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 302 or the equivalent with a grade of C or better. Complexity classes, grammars, automata, formal languages, Turing machines, computability.

CMSC 304. Programming Languages. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 256 with a minimum grade of C. Survey of representative modern programming languages. Formal definition of programming languages including specifications of syntax and semantics. Precedence, infix, prefix and postfix notation. Global properties of algorithmic languages. Sub-routines, co-routines and tasks. List processing, string manipulation, data description and simulation languages. Run-time representation of program and data structures.

CMSC 311. Computer Organization. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Prerequisite: CMSC 302 with a minimum grade of C. Introduction to the basic organization of computers including elementary digital logic design, processor and arithmetic/logic unit design, data paths, memory hierarchy, I/O devices, instruction set architecture and addressing modes. Students working toward a computer science degree or certificate program may not receive credit for both CMSC 311 and EGRE 364.

CMSC 312. Introduction to Operating Systems. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 311 or EGRE 364. Computer systems design, inter-process communications, multi-threading, I/O processing, secondary memory organization, command languages, memory management and job scheduling.

CMSC 320. Software Engineering and Web Development. 3 Hours.

Semester course; 3 lecture hours (delivered online). 3 credits. Prerequisite: CMSC 210 or CMSC 254. Introduction to software engineering and web development. The course introduces students to the software development process, including design, development and testing principles. Students will apply these principles in the development of a web application. This course is not applicable for credit toward any College of Engineering degrees.

CMSC 330. Data Science Skills. 3 Hours.

Semester course; 3 lecture hours (delivered online). 3 credits. Prerequisite: CMSC 210 or CMSC 254. Introduction to data science skills. The course introduces students to the foundations of data science and the tools used to collect, analyze and represent data. Students will apply these principles in both analysis and visualization projects. This course is not applicable for credit toward any College of Engineering degrees.

CMSC 340. Cybersecurity Skills. 3 Hours.

Semester course; 3 lecture hours (delivered online). 3 credits. Introduction to cybersecurity skills. The course introduces students to cybersecurity terminology, standards and best practices. Students will apply these practices as part of a cybersecurity-focused project. This course is not applicable for credit toward any College of Engineering degrees.

CMSC 355. Fundamentals of Software Engineering. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 256 or EGRE 347, either with a minimum grade of C. Provides an overview of how to engineer software systems, including all stages of the software development process based on agile principles. Familiarizes students with modern software tooling and the principles of software quality and testing. Students will work in teams to gain experience in software development methodology, write specification and design documents, and develop a prototype.

CMSC 391. Topics in Computer Science. 3 Hours.

Semester course; 3 lecture hours. 3 credits. May be repeated for credit. Prerequisite: permission of the instructor. This course will teach selected topics in computer science. See the Schedule of Classes for specific topics to be offered each semester and prerequisites.

CMSC 401. Algorithm Analysis with Advanced Data Structures. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC 256 with a grade of C or better and CMSC 302 with a grade of C or better. Introduction to algorithm analysis and complexity classes. Advanced data structures topics including multiple linked lists, height-balanced trees, B-trees, hashing and graph representation; incorporating data structures into object-oriented design. Analysis of various searching and sorting algorithms. Algorithm design topics include divide-and-conquer, dynamic programming and greedy methods.

CMSC 404. Compiler Construction. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC 401 and 403. A first course in compiler theory and construction. Formal description of languages, underlying theory and design techniques for compilers, lexical analysis, syntax analysis, syntax-directed translation, intermediate languages, run-time system management, code generation, code optimization, compiler-building tools.

CMSC 408. Databases. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 303. Introduction to databases. Database design and the entity-relationship model. Relational database design, normalization and decomposition. Relational algebra. SQL. Data definition language. Data manipulation language. Data query language. Queries, subqueries, functions, procedures, cursors, views, triggers, indexes and transactions. Security, performance, and scalability of databases. Database installation, configuration and administration. MySQL and the web.

CMSC 410. Introduction to Quantum Computing. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC 401 and MATH 310, both with a minimum grade of B. Introduction to quantum information processing: state vectors and density operators, tensor product space, unitary evolution, no-go theorems, measurement, qubit, gate model of quantum computing, quantum complexity theory, quantum error correction, quantum algorithms, and quantum machine learning.

CMSC 411. Computer Graphics. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC 355 and MATH 310. Presents mathematical techniques for graphic development and transformation, curve and surface approximation and projections, graphical languages and data structures and their implementation, graphic modeling.

CMSC 412. Social Network Analysis and Cybersecurity Risks. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC 401 with a minimum grade of C. Covers network models, link prediction and analysis, centrality measures, random networks, power-laws and preferential attachment, small world phenomenon and decentralized search, community structure, information propagation in networks, and security and privacy issues in OSNs.

CMSC 413. Introduction to Cybersecurity. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 257 with a minimum grade of C. This course provides introduction and basic concepts of computer security, cyber attacks, cyber defense, cyber forensics and cyber ethics.

CMSC 414. Computer and Network Security. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 401 with a minimum grade of C. Corequisite: CMSC 312. This course covers the best practices of computer systems and network security. Key topics include security architecture, cryptographic systems and security management tools.

CMSC 415. Introduction to Cryptography. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 401 with a minimum grade of C. This course provides a rigorous and theoretical introduction to modern cryptography. Key topics include symmetric key encryption and authentication, public key encryption, and digital signatures.

CMSC 420. Software Project Management. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 355 with a minimum grade of C. Study of the logistics of team software development. Students work in teams to gain experience in software management and develop the components of a larger software product. Topics include risk management, project planning, quality management, configuration management and software testing.

CMSC 425. Introduction to Software Analysis and Testing. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 355 with a minimum grade of C. Enrollment is restricted to majors in the computer science program. A practical introduction to testing complex software applications. An introduction to concepts and techniques used in the analysis of software, including basic and advanced control flow and data flow analyses. Using analytic results to derive test data and validate the correct implementation of programs. Advanced testing strategies including random, structural, mutation and fuzzing.

CMSC 426. Software as a Service. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 355 with a minimum grade of C. Enrollment is restricted to majors in the computer science program. Students will examine the challenges, opportunities and open problems of software-as-a-service deployed on commodity cloud computing platforms. Covers relevant software architectures and API design principles. Includes concepts of modern software frameworks for software development, cloud computing for software deployment and software operations. Students participate in projects that use modern tooling to develop, deploy and monitor a software application.

CMSC 427. Design and Implementation of User Interfaces. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Enrollment is restricted to majors in the computer science program. This course investigates the design and implementation of user interfaces and the evaluation of user experiences. Particular emphasis is placed on creating professional-quality designs and implementations and on evaluating these implementations with end-users. Students will create their own UIs as well as critique others to develop a deep understanding of what works in practice.

CMSC 428. Mobile Programming: iOS. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 355, with a minimum grade of C. This course covers the fundamentals of Swift, Xcode and iOS for programming and design of iOS applications. Background in object-oriented programming and access to a computer with Xcode platform is required.

CMSC 435. Introduction to Data Science. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 401 with a minimum grade of C. This course covers understanding, representation, storage, retrieval, preprocessing and analysis of data. Specific topics include data quality and preprocessing, database management systems, data warehouses, selected methods for scalable unsupervised and supervised data analysis, and assessment of results generated by these methods. Students will be engaged in analysis of real-life data from data preprocessing, through data analysis, to the assessment of a knowledge product.

CMSC 436. Artificial Intelligence. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: MATH 310 with a minimum grade of C. Enrollment is restricted to majors in the computer science program. Covers problem spaces, problem-solving methods, game playing, knowledge representatives, expert systems, natural language understanding.

CMSC 437. Introduction to Natural Language Processing. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 401 with a minimum grade of C. Enrollment is restricted to majors in the computer science program. Covers rule-based and statistical methods for creating computer programs that analyze, generate and understand human language. Topics include regular expressions and automata, context-free grammars, probabilistic classifiers, and machine learning. Word-level, syntactic and semantic processing are all considered. Application to real-world problems such as spell-checking, Web search, automatic question answering, authorship identification and developing conversational interfaces.

CMSC 438. Machine Learning. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC 257 and MATH 310 with minimum grades of C. Enrollment is restricted to majors in the computer science program. The course will assume undergraduate-level background in algorithms, linear algebra, calculus, statistics and probability. Upon successful completion of this course, the student will be able to understand basic concepts and techniques in machine learning. Topics covered will include: probabilistic and optimization-based view of machine learning, linear models, deep nonlinear models, deep networks for specific domains such as large language models and generative models for images.

CMSC 440. Data Communication and Networking. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 257 with a minimum grade of C. Enrollment is restricted to majors in the College of Engineering. This course explores computer networking, focusing on the applications and protocols that run on the Internet. Students will take a top-down approach to the layered network architecture, studying applications first and then proceeding down the network “stack” toward the physical link. Students will examine the operation of applications such as the web, FTP, e-mail and DNS. At the transport layer, students will study both connectionless UDP and connection-oriented TCP, with an in-depth study of TCP operation, specifically flow control and congestion control. Data communications are explored through various data routing protocols. Additional topics include network security and wireless/mobile networking.

CMSC 441. Senior Design Studio I (Laboratory/Project Time). 2 Hours.

Semester course; 6 laboratory hours. 2 credits. Prerequisites: CMSC 355; and UNIV 200 or HONR 200 or equivalent, both with minimum grades of C. Corequisite: CMSC 451. Enrollment is restricted to computer science majors with senior standing who have 24 credits in computer science courses. A minimum of six laboratory hours per week dedicated to the execution phase of the senior design (capstone) project for the computer science major. Tasks include team meetings, brainstorming, sponsor advising, researching, designing, implementing, reviewing, testing and validating projects. Each student will participate, either individually or as part of a team, in a project or other experience approved by the course coordinator or sponsored by another computer science faculty member. Students will submit a detailed written description of their proposed project or experience and will present orally some aspect of what they have learned and/or done during the semester. This course cannot be counted as upper-level CMSC electives for students graduating under bulletins prior to 2008-09.

CMSC 442. Senior Design Studio II (Laboratory/Project Time). 2 Hours.

Semester course; 6 laboratory hours. 2 credits. Prerequisites: CMSC 408, CMSC 441 and CMSC 451, each with a minimum grade of C. Corequisite: CMSC 452. Enrollment is restricted to computer science majors with senior standing who have 24 credits in computer science courses. A minimum of six laboratory hours per week dedicated to the execution phase of the senior design (capstone) project for the computer science major. Tasks include team meetings, brainstorming, sponsor advising, researching, designing, implementing, reviewing, testing and validating projects. Each student will participate, either individually or as part of a team, in a project or other experience approved by the course coordinator or sponsored by another computer science faculty member. Students must continue on the same project that was started in CMSC 441 and CMSC 451. A final project report and presentation are due at the conclusion of the two-semester project or experience. This course cannot be counted as upper-level CMSC electives for students graduating under bulletins prior to 2008-09.

CMSC 445. Introduction to Game Development. 3 Hours.

Semester course; 2 lecture and 3 studio hours. 3 credits. Prerequisite: CMSC 255. Enrollment is restricted to computer science majors and minors. A comprehensive course designed to introduce students to the foundational concepts and tools essential for game design and development. Students gain hands-on experience with industry-standard game engines to build and deploy their own games. Working both individually and collaboratively in teams, students develop a practical understanding of the creative and technical processes involved in bringing a game from concept to reality.

CMSC 451. Senior Project I. 1 Hour.

Semester course; 1 lecture hour. 1 credit. Prerequisites: CMSC 355 with minimum grade of C; and UNIV 200 or HONR 200 or equivalent. Corequisite: CMSC 441. Enrollment is restricted to computer science majors with senior standing who have 24 credits in computer science courses. This weekly seminar presents and discusses topics relevant to senior-level computer science students in support of the capstone project and upcoming graduation. A single course coordinator manages and administers the course and schedules the various faculty lectures and guest speakers. Topics include, but are not limited to, the following: proposal writing; project planning and management; scheduling resources and budgeting for software development projects; patents and intellectual property; entrepreneurship; ethical, legal and social issues in computing; and professional responsibilities of computer scientists. Each student will write and revise a research paper on a technical topic associated with his or her project or experience. A final project report and presentation, which will include a discussion of associated legal, social and/or ethical issues, are due at the conclusion of the two-semester project or experience. The courses in this sequence cannot be counted as upper-level CMSC electives for students graduating under bulletins prior to 2008-09.

CMSC 452. Senior Project II. 1 Hour.

Semester course; 1 lecture hour. 1 credit. Prerequisites: CMSC 408, CMSC 441 and CMSC 451, each with a minimum grade of C. Corequisite: CMSC 442. Enrollment is restricted to students with senior standing in the computer science department. This weekly seminar presents and discusses topics relevant to senior-level computer science students in support of the capstone project and upcoming graduation. A single course coordinator manages and administers the course and schedules the various faculty lectures and guest speakers. Topics include, but are not limited to, the following: proposal writing; project planning and management; scheduling resources and budgeting for software development projects; patents and intellectual property; entrepreneurship; ethical, legal and social issues in computing; and professional responsibilities of computer scientists. Each student will write and revise a research paper on a technical topic associated with his or her project or experience. Students must continue on the same project that was started in CMSC 451. A final project report and presentation, which will include a discussion of associated legal, social and/or ethical issues, are due at the conclusion of the two-semester project or experience. The courses in this sequence cannot be counted as upper-level CMSC electives for students graduating under bulletins prior to 2008-09.

CMSC 491. Topics in Computer Science. 1-3 Hours.

Semester course; variable hours. 1-3 credits. May be repeated for credit with different content. Prerequisite: permission of instructor. This course will cover selected topics in computer science. See the Schedule of Classes for specific topics to be offered each semester.

CMSC 492. Independent Study. 2-4 Hours.

Semester course; variable hours. 2, 3 or 4 credits per semester. Maximum 4 credits per semester; maximum total of 6 credits. Generally open only to students of junior or senior standing who have acquired at least 12 credits in the departmental discipline. Determination of the amount of credit and permission of instructor and department chair must be procured prior to registration of the course. The student must submit a proposal for investigating some area or problem not contained in the regular curriculum. The results of the student's study will be presented in a report.

CMSC 501. Advanced Algorithms. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Prerequisite: CMSC 401 or equivalent. Enrollment is restricted to students with graduate standing or those accepted into the accelerated B.S. to M.S. program in computer science. Advanced graph algorithms, advanced data structures, applied numerical algorithms, optimization methods, approximation methods for hard graph and string problems and computational geometry algorithms.

CMSC 502. Parallel Algorithms. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Prerequisites: CMSC 312 and CMSC 401. Enrollment is restricted to students with graduate standing or those accepted into the accelerated B.S. to M.S. program in computer science. Software and hardware mechanisms for providing mutual exclusion in uniprocessor and multiprocessor environments. Architectural issues including pipeline design, superscalar computers, multiprocessors, memory systems, peripherals, interfacing techniques, networks, performance and software issues. Design and uses of parallel algorithms to solve concurrency problems in a distributed environment including message passing and remote procedure calls. Students will work in teams (as well as on individual projects) to design and implement parallel algorithms.

CMSC 506. Computer Networks and Communications. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 312. Theoretical and applied analysis of basic data communication systems; design of networks in the framework of the OSI reference model; Local and Wide Area Networks; performance analysis of networks; error control and security. Students will work in teams to design and implement a small computer network. Crosslisted as: EGRE 526.

CMSC 508. Database Theory. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 303 with a minimum grade of C. Design and implementation of relational database systems. Emphasis is placed on entity-relationship diagrams, relational algebra, normal forms and normalization. Introduction to SQL. Discussion of physical level issues. Students will be required to complete a design project and give an oral presentation of the project. Not applicable toward the M.S. in Computer Science or the Ph.D. in Engineering, computer science concentration.

CMSC 510. Regularization Methods for Machine Learning. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Enrollment is restricted to students with graduate standing in computer science or related discipline such as bioinformatics or acceptance into the accelerated B.S. to M.S. program in computer science. The course will assume undergraduate-level background in algorithms, linear algebra, calculus, statistics and probability. Upon successful completion of this course, the student will be able to understand recent advances in machine learning and apply machine-learning tools that go beyond learning from data, as well as have the ability to incorporate additional knowledge about the learning problem. Topics covered will include optimization-based view of supervised machine learning; classical regularization approaches including weight decay and Lasso; regularization terms incorporating additional knowledge about structures in the feature space, including group lasso and graph-based regularization terms; semi-supervised learning using graphs linking unlabeled and labeled samples.

CMSC 512. Advanced Social Network Analysis and Security. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Pre- or corequisites: CMSC 412 and CMSC 501. Enrollment is restricted to students with graduate standing in computer science or a related discipline such as bioinformatics or acceptance into the accelerated B.S. to M.S. program in computer science. The purpose of the course is to teach algorithms for analyzing social networks and complex systems. The focus will be on understanding the inner workings of algorithms using in-network analysis and security threats in online social network sites. Topic covered will include modeling social and technological networks, methods for analyzing structure and dynamical processes on the network, and security and privacy issues in online social networks such as inference attacks, network anonymization, sybil attacks and defense, social bots.

CMSC 516. Advanced Natural Language Processing. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Enrollment is restricted to students with graduate standing in computer science or a related discipline, or those accepted into the accelerated B.S. to M.S. program in computer science. Upon successful completion of this course, the student will be able to understand recent advances in natural language processing and apply NLP algorithms and techniques for processing unstructured text. Word-level, syntactic and semantic processing will be considered. Specific topics include rule-based and statistical methods for creating computer programs that analyze, generate and understand human language. Regular expressions and automata, context-free grammars, probabilistic classifiers and machine learning. Applications to real-world problems such as spell-checking, Web search, automatic question answering, authorship identification and developing conversational interfaces.

CMSC 525. Introduction to Software Analysis, Testing and Verification. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Prerequisites: CMSC 304 and CMSC 401. Enrollment is restricted to students with graduate standing or those accepted into the accelerated B.S. to M.S. program in computer science. An introduction to concepts and techniques used in the analysis of software for certain properties. Using analytic results to derive test data and verify the correct implementation of programs. Flow graphs, fault/failure model, theoretical and practical limitations. Control flow, data flow and error flow analyses. Testing strategies including random, structural, mutation and error flow. Software metrics.

CMSC 526. Theory of Programming Languages. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 304. Enrollment is restricted to students with graduate standing or who have been accepted into the five-year accelerated B.S. and M.S. program in computer science. An introduction to the formal semantics of programming languages, logic programming and functional programming. Topics include denotational semantics, attribute grammars, Backus Formal Functional Programming, fixed point semantics, model-theoretic semantics and PROLOG.

CMSC 531. 3D Computer Vision for Robot Navigation. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Enrollment is restricted to graduate students in computer science or related discipline or to students accepted into the five-year accelerated program in computer science. The course focuses on recent advancements in 3D robotic vision. It covers basic concepts and computational models of 3D sensing, robotic mapping, visual odometry, simultaneous localization and mapping, as well as 3D point data processing for robotic navigation. Students will acquire in-depth knowledge in robotic vision by completing a course project.

CMSC 591. Topics in Computer Science. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. May be repeated for credit. Enrollment requires permission of the instructor. The course is open to students with graduate standing or those accepted into the accelerated B.S. to M.S. program in computer science. A study of selected topic(s) in computer science at the graduate level. See the Schedule of Classes for specific topics to be offered each semester.

CMSC 601. Convex Optimization. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 501 or permission of instructor. Enrollment restricted to students with graduate standing in computer science or related discipline. A background in undergraduate-level linear algebra is assumed. Convex sets and functions. Convex optimization problems: Linear, quadratic, semi-definite and cone programs. Duality theory. Approximation algorithms for NP-complete integer optimization problems via semi-definite relaxations and rounding schemes. Algorithms for optimization, such as gradient descent, proximal descent, alternating directions method of multipliers, interior point methods.

CMSC 602. Operating Systems. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 502. A study of operating systems including those in multiprocessor and distributed environments. I/O programming, resource management (including processor and memory management), security and system performance evaluation.

CMSC 603. High Performance Distributed Systems. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Enrollment is restricted to students with graduate standing in computer science or related discipline or those accepted into the accelerated B.S. to M.S. program in computer science. The course will assume undergraduate-level background in algorithms, data structures and parallel programming. Upon successful completion of this course, the student will be able to understand the concepts underlying distributed systems; analyze problems to identify performance bottlenecks, parallelization opportunities and concurrency issues in a distributed environment; create distributed and scalable implementations using multiple hosts/GPUs; design and implement algorithms using Hadoop, Spark and CUDA.

CMSC 605. Advanced Computer Architecture. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: EGRE 426 or with permission of instructor. This course will focus on the design and analysis of high performance computer architectures. Topics investigated include pipeline design, superscalar computers, multiprocessors, memory systems, peripherals, interfacing techniques, networks, performance and software issues. Crosslisted as: EGRE 635.

CMSC 608. Advanced Database. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 508. Topics discussed include: handling of missing information; the relationship between relational calculus, relational algebra and SQL; logic databases; distributed databases; outer joins; and transaction processing. Emphasis is placed on theoretical issues involved in these topics. In addition students will work in teams to develop a working database application.

CMSC 610. Algorithmic Foundations of Bioinformatics. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: Graduate student standing or acceptance into five-year accelerated program in computer science or related discipline such as bioinformatics. The purpose of the course is to teach algorithms for analyzing biological and medical data. The focus will be on understanding the inner workings of algorithms used in bioinformatics tools. Topic covered will include algorithms for assembling and searching biological sequences, finding patterns associated with disease, and exploring biological networks.

CMSC 611. Computer Multimedia. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: permission of instructor. Study of computer multimedia techniques relating to images, sound, video and text. Emphasis on compression techniques and standard storage formats. This course is programming-intensive.

CMSC 612. Game Theory and Security. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Prerequisite: CMSC 401. Enrollment is restricted to students with graduate standing in computer science or those accepted into the accelerated B.S. to M.S. program in computer science. The course will provide an introduction to game theory and mechanism design concepts. Lectures cover topics such as introduction of games, equilibrium concepts, computation of game-theoretic solution concepts, mechanism, and issues in game theory and mechanism design.

CMSC 615. Cryptocurrency and Blockchain Techniques. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Enrollment is restricted to students with graduate standing in computer science or a related discipline. The course will assume undergraduate-level background in algorithms, data structures and programming. Upon successful completion of this course, the student will be able to understand the major concepts about cryptocurrency and blockchain techniques; be familiar with major blockchain applications as well as real-world issues; understand the underlying consensus mechanisms in the Bitcoin system and other alternative cryptocurrency systems; analyze the security of Nakamoto consensus; understand, write and execute smart contracts using an Ethereum-like platform.

CMSC 618. Database and Application Security. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Theory and practice of database and software security focusing in particular on some common database software security risks and on the identification of potential threats and vulnerabilities. Crosslisted as: CISS 618.

CMSC 619. The Design and Specifications of User Interfaces. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: Graduate standing and permission of instructor. Requires knowledge of first order predicate calculus and context-free languages. Focuses on human-computer interface design principles and methodology and formal specifications of user interfaces.

CMSC 620. Applied Cryptography. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Provides a comprehensive survey of modern cryptography. Included are techniques of enciphering and deciphering messages using cryptographic algorithms, block ciphers and block cipher modes, hash functions and message authentication codes, public key cryptography and digital signatures, and steganography. Crosslisted as: CISS 624.

CMSC 621. Theory of Computation. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: graduate student standing and permission of instructor. Discussion of the complexity and computability of problems and programs. Topics will include unsolvability, universal programs and abstract complexity.

CMSC 622. Network and System Security. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Studies the principles of network security and system security. Included are topics relating to application layer security, TCP layer security, network layer security and link layer security and the use of access control, intrusion detection, intrusion prevention and other related tools.

CMSC 623. Cloud Computing. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Provides an introduction to cloud computing architecture and cloud computing security. The course covers the basic concepts of cloud computing, including memory virtualization, device virtualization and related security problems in cloud computing.

CMSC 624. Software Quality Assurance. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: a course in software engineering and graduate standing in computer science, or permission of instructor. A study of issues that affect the quality of software and of methodology to assure that software products are of the desired quality. This also includes issues in assessing product quality as well as the process by which the software is produced. Topics include various methodologies, standards, metrics and tools.

CMSC 625. Advanced Software Analysis, Testing and Verification. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 525. Studies the concepts and techniques used in the analysis of software and the derivation of test data. Focuses on software metrics and reliability; construction of tools to aid software analysis and testing. Requires students to review seminal and current papers from the literature, and lead their discussion in class.

CMSC 628. Mobile Networks: Applications, Modeling and Analysis. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Enrollment is restricted to students with graduate standing in computer science or a related discipline. The course will assume undergraduate-level background in algorithms, data structures, programming and networks. Upon successful completion of this course, the student will be able to understand the major concepts about mobile networks such as device-to-device communication technologies, mobility models and coverage; be familiar with various mobile network types (e.g., mobile social networks, delay tolerant networks, overlay networks, vehicular networks and cellular networks) and devices (e.g., smartphones, femtocells, WiFi), learn how to model mobile networks with stochastic processes and real datasets; be able to use different networking simulators; and understand various routing algorithms and analyze their behavior.

CMSC 630. Image Analysis. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Enrollment is restricted to students with graduate standing in engineering or science or by permission of the instructor. Introduces theoretical and practical aspects of computer vision for image processing and understanding. It provides a comprehensive walkthrough from basics of image preparation to using computational intelligence tools for knowledge discovery from images. The course will cover basics of image processing and computer vision, including image sampling and quantization, color, pixel-based operations, image filtering, morphological image processing, and image transforms; information extraction including segmentation and feature extraction; pattern recognition for computer vision: classification, novelty and object detection, image understanding, learning from video streams, and tensor-based methods. Examples will include medical image analysis, object recognition in ground and aerial photographs and hyperspectral imaging.

CMSC 635. Knowledge Discovery and Data Mining. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Prerequisite: CMSC 401 or corequisite: CMSC 501. Enrollment is restricted to students with graduate standing in computer science or a related discipline such as bioinformatics, or those accepted into the accelerated B.S. to M.S. program in computer science. Covers knowledge discovery and data mining concepts, tools and methods; provides hands-on experience based on a project involving analysis of large real-life data. Topics include the knowledge discovery process, data storage and representation, preprocessing algorithms for missing data imputation, feature selection and discretization; unsupervised learning algorithms for clustering and association mining; supervised learning algorithms including decision trees, Bayesian models and introduction to support vector machines and neural networks; ensemble learning; protocols and measures for validation of predictive models; and data security and privacy issues.

CMSC 636. Artificial Neural Networks and Deep Learning. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Enrollment is restricted to students with graduate standing in computer science. The course will assume undergraduate-level background in programming, algorithms, linear algebra, calculus, statistics and probability. Topics ranging from fundamental learning rules, functional, cascade correlational, recurrent and gradient descent networks, to neocognitron, softmax, deep convolutional networks, autoencoders and pretrained deep learning (restricted Boltzmann machines). Students will be required to work in teams on a class paper.

CMSC 654. Memory and Malware Forensics. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Prerequisite: CMSC 312. Enrollment is restricted to students with graduate standing in computer science or a related discipline, or those accepted into the accelerated B.S. to M.S. program in computer science. Students should have significant programming experience. This course provides foundation for memory and malware forensics, using the Volatility memory forensics framework, an open source toolkit written in Python. It is focused on investigation of the contents of volatile computer memory (RAM), to reveal hidden malware processes, network connections, clipboard contents, evidence of malware and other malicious evidence. The course will teach skills for analyzing internals of operating systems, such as Mac, Windows and Linux, by concentrating on data structures used by these operating systems.

CMSC 678. Statistical Learning and Fuzzy Logic Algorithms. 3 Hours.

Semester course; 3 lecture hours (delivered online, face-to-face or hybrid). 3 credits. Prerequisite: MATH/STAT 309 or MATH 310. The course considers two central problems in modern science and engineering: i) the problem of statistical learning from examples (empirical data) and ii) the problem of embedding existing human knowledge into workable mathematics. Topics include: examples of multivariate functional mapping, basics of classic classification and regression, support vector machines as a learning paradigm based on structural risk minimization, fuzzy logic algorithms, basics of multi-class classification over high dimensional spaces, curve and surface fittings, multivariate function approximation and nonlinear optimization; fuzzy logic systems; crisp and fuzzy sets, linguistic variables, fuzzy set theory; if-then rules, fuzzy interference, fuzzification and defuzzification, neuro-fuzzy paradigms.

CMSC 681. Data Science Capstone Project I. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Enrollment is restricted to students pursuing the M.S. in Data Science. This course will allow students to apply the concepts, theories and skills learned in other courses to a real data science problem. Student teams, in collaboration with a faculty mentor, will formulate a problem, query databases for appropriate data, perform appropriate analyses, discuss ethical considerations and present results in both written and oral presentations. Crosslisted as: SSOR 681.

CMSC 682. Data Science Capstone Project II. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC/SSOR 681. Enrollment is restricted to students in the M.S. in Data Science program. Continuation of project from prerequisite course. Continues an emphasis on collaboration, analysis planning and effective communication of results. Crosslisted as: SSOR 682.

CMSC 691. Special Topics in Computer Science. 3 Hours.

Semester course; 3 lecture hours. 3 credits. May be repeated for credit. Prerequisites: at least one graduate-level computer science course pertaining to the topic area and permission of instructor. An advanced study of selected topic(s) in computer science at the graduate level. See the Schedule of Classes for specific topics to be offered each semester.

CMSC 692. Independent Study. 1-3 Hours.

Semester course; 1-3 variable hours (to be arranged). 1-3 credits. Enrollment restricted to students with graduate standing and consent of instructor. Independent study done under the supervision of a faculty member. The student must identify a faculty member willing to supervise the research and submit a proposal for approval by the computer science graduate committee no later than the 10th week of the prior semester. A written report and an oral presentation are required upon completion of the research project. Graded as Pass/Fail.

CMSC 697. Directed Research. 1-15 Hours.

Semester course; 1-15 research hours (to be arranged). 1-15 credits. May be repeated for credit. A total of three credits may be used to fulfill the M.S. in Computer Science thesis requirement. Independent research culminating in the writing of the required thesis or dissertation. The student must identify a faculty member willing to supervise the research and submit a proposal to the computer science graduate committee no later than the 10th week of the prior semester. This proposal must be approved before the student can register for the course. Graded as S/U/F.

CMSC 701. Research Methods. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: Ph.D. standing or permission of instructor. Covers the principles of conducting a research project, reporting the findings in the form of a journal paper and promoting the research through public presentations. Students learn to write grant proposals and practice reviewing research papers and grant proposals. The main emphasis of the course is writing a paper and a grant proposal in a format compliant with NSF, NIH or DoD guidelines.

CMSC 702. Computer Science Seminar. 1 Hour.

Semester course; 1 seminar hour. 1 credit. May be repeated for credit. Enrollment restricted to students in the doctoral program in computer science. Students will attend a weekly research seminar in which the topic and speaker will change each week in order to cover a broad range of subjects at the forefront of computer science research. Students will have to present and to write a report on at least one seminar presented by other speakers. The objective is to expose students to research topics and scholars in the field of computer science as well as to provide them experience in delivering and critiquing seminar talks. Graded as satisfactory/unsatisfactory.