This is the preliminary (or launch) version of the 2020-21 VCU Bulletin. This edition includes all programs and courses approved by the publication deadline; however we 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.

The Bachelor of Science in Computer Science is built on a rigorous, highly concentrated, accredited curriculum of computer science courses, and includes concentrations in cybersecurity, data science and software engineering. The program provides a strong foundation in the discipline and includes advanced study in several important areas of computer science.

The degree requires a minimum of 120 credit hours and includes undergraduate requirements, general education requirements and computer science major requirements.

Learning outcomes

Upon completing this program, students will know and know how to do the following:

  1. Analyze a complex computing problem and apply principles of computing and other relevant disciplines to identify solutions
  2. Design, implement and evaluate a computing-based solution to meet a given set of computing requirements in the context of the program’s discipline
  3. Communicate effectively in a variety of professional contexts
  4. Recognize professional responsibilities and make informed judgments in computing practice based on legal and ethical principles
  5. Function effectively as a member or leader of a team engaged in activities appropriate to the program’s discipline
  6. Apply computer science theory and software development fundamentals to produce computing-based solutions

Special requirements

Students must receive a minimum grade of C in all computer science courses in order to graduate

Degree requirements for Computer Science, Bachelor of Science (B.S.) with a concentration in data science

General Education requirements

CourseTitleHours
University Core Education Curriculum
UNIV 111 Play VideoPlay course video for Focused Inquiry I [View Image]
Focused Inquiry I3
UNIV 112 Play VideoPlay course video for Focused Inquiry II [View Image]
Focused Inquiry II3
UNIV 200Inquiry and the Craft of Argument3
Approved humanities/fine arts3
Approved natural/physical sciences3-4
Approved quantitative literacy3-4
Approved social/behavioral sciences3-4
General Education requirements
Humanities electives from list below (in addition to those in University Core)9
Total Hours30-33

Collateral requirements

CourseTitleHours
Select one of the following options:8-10
Option A:
General Chemistry I
and General Chemistry Laboratory I
General Chemistry II
and General Chemistry Laboratory II
Option B:
University Physics I
and University Physics II
Option C:
Introduction to Biological Sciences I
and Introduction to Biological Science Laboratory I
Introduction to Biological Sciences II
and Introduction to Biological Science Laboratory II
ECON 205The Economics of Product Development and Markets3
MATH 200Calculus with Analytic Geometry I (satisfies quantitative literacy)4
MATH 201Calculus with Analytic Geometry II4
Select two upper-level (300- to 400-level) MATH courses6
STAT 212Concepts of Statistics3
Natural science electives (BIOL, CHEM or PHYS courses that count toward the major in that science)6
Total Hours30-32

Major requirements

CourseTitleHours
CMSC 255Introduction to Programming4
CMSC 256Data Structures and Object Oriented Programming4
CMSC 257Computer Systems4
CMSC 302Introduction to Discrete Structures3
CMSC 303Introduction to the Theory of Computation3
CMSC 311Computer Organization3
CMSC 312Introduction to Operating Systems3
CMSC 355Fundamentals of Software Engineering3
CMSC 401Algorithm Analysis with Advanced Data Structures3
CMSC 403Programming Languages3
CMSC 440Data Communication and Networking3
CMSC 451
CMSC 452
Senior Project I
and Senior Project II (capstone courses)
6
CMSC 508Database Theory3
Concentration courses
CMSC 409Artificial Intelligence3
CMSC 416Introduction to Natural Language Processing3
CMSC 435Introduction to Data Science3
Total Hours54

Open electives

CourseTitleHours
Select four to six open elective credits4-6

The minimum total of credit hours required for this degree is 120.

Approved humanities electives

CourseTitleHours
Select nine credits from the following programs or subject areas:9
African-American studies
American studies
Anthropology
School of the Arts
English
Foreign language
History
Philosophy
Psychology
Religious studies
Social work
Sociology
Urban studies

Some courses in other programs (including most honors modules and other courses that focus on human behavior, communication and/or social interaction) may be counted toward this requirement with departmental approval.

What follows is a sample plan that meets the prescribed requirements within a four-year course of study at VCU. Please contact your adviser before beginning course work toward a degree.

Freshman year
Fall semesterHours
CMSC 255Introduction to Programming4
UNIV 111 Play VideoPlay course video for Focused Inquiry I [View Image]
Focused Inquiry I3
Approved humanities electives6
Approved natural/physical sciences3
 Term Hours: 16
Spring semester
CMSC 256Data Structures and Object Oriented Programming4
CMSC 302Introduction to Discrete Structures3
ECON 205The Economics of Product Development and Markets3
MATH 200Calculus with Analytic Geometry I4
UNIV 112 Play VideoPlay course video for Focused Inquiry II [View Image]
Focused Inquiry II3
 Term Hours: 17
Sophomore year
Fall semester
CMSC 257Computer Systems4
CMSC 355Fundamentals of Software Engineering3
MATH 201Calculus with Analytic Geometry II4
UNIV 200Inquiry and the Craft of Argument3
Approved humanities/fine arts3
 Term Hours: 17
Spring semester
CMSC 303Introduction to the Theory of Computation3
CMSC 311Computer Organization3
STAT 212Concepts of Statistics3
Approved humanities elective4
Approved social/behavioral sciences3
 Term Hours: 16
Junior year
Fall semester
CMSC 312Introduction to Operating Systems3
CMSC 401Algorithm Analysis with Advanced Data Structures3
Approved natural science elective (BIOL, CHEM or PHYS course that count toward the major in that science)3
Select one of the following:4-5
CHEM 101
CHEZ 101
General Chemistry I
and General Chemistry Laboratory I
4
PHYS 207University Physics I5
BIOL 151
BIOZ 151
Introduction to Biological Sciences I
and Introduction to Biological Science Laboratory I
4
 Term Hours: 13-14
Spring semester
CMSC 403Programming Languages3
CMSC 508Database Theory3
MATH upper-level (300- to 400-)3
Select one of the following:4-5
CHEM 102
CHEZ 102
General Chemistry II
and General Chemistry Laboratory II
4
PHYS 208University Physics II5
BIOL 152
BIOZ 152
Introduction to Biological Sciences II
and Introduction to Biological Science Laboratory II
4
 Term Hours: 13-14
Senior year
Fall semester
CMSC 409Artificial Intelligence3
CMSC 435Introduction to Data Science3
CMSC 451Senior Project I (capstone)3
MATH upper-level (300- to 400-)3
Approved natural science elective (BIOL, CHEM or PHYS course that count toward the major in that science)3
 Term Hours: 15
Spring semester
CMSC 416Introduction to Natural Language Processing3
CMSC 440Data Communication and Networking3
CMSC 452Senior Project II (capstone)3
Open electives4
 Term Hours: 13
 Total Hours: 120-122

The minimum total of credit hours required for this degree is 120.

The accelerated B.S. and M.S. program allows qualified students to earn both the B.S. and M.S. in Computer Science in a minimum of five years by completing approved graduate courses during the senior year of their undergraduate program. Students in the program may count up to six hours of graduate courses toward both the B.S. and M.S. degrees. Thus, the two degrees may be earned with a minimum of 144 credits rather than the 150 credits necessary if the two degrees are pursued separately.

The program is designed to develop skills and educate computer science students to be major contributors in the computing industry. The graduate program in computer science provides state-of-the-art education through the use of didactic courses to those students who wish to further their knowledge and careers within the computing industry. The program emphasizes continuing self-development and broadening of the knowledge of individuals currently engaged in science, technology and engineering-related fields. It also prepares persons who have completed undergraduate majors in these fields for entry into a career in the numerous areas that use computing technology. Both the theoretical and applied aspects of computer science are emphasized in this program.

Admission to the program

Minimum qualifications for admittance to the program include completion of 30 undergraduate credit hours including six computer science courses CMSC 255CMSC 256CMSC 257CMSC 302CMSC 303 and CMSC 311; an overall GPA of 3.0; and a GPA of 3.4 in the six courses identified above. Successful applicants would enter the program in the fall semester of their senior year. (Optional: Students who do not meet the minimum GPA requirements may submit GRE scores to receive further consideration.)

Undergraduate students must have departmental approval to participate in an accelerated program and must apply for admission to the master's program prior to beginning their final year of full-time undergraduate study. The entry term for the master's program will be the next available admission term following the last semester of undergraduate study. Admission to the master’s program is provisional until the undergraduate degree has been conferred. Upon completion and conferral of the undergraduate degree, students are fully admitted to the master’s program.

Students who are interested in the accelerated program should consult with the faculty advisers to both the undergraduate and graduate computer science programs before they have completed the six undergraduate courses listed above. By the end of their junior year, undergraduate students must secure approval for joining the accelerated program from the undergraduate program director for computer science. Students must have approval from the undergraduate program director to participate in an accelerated program and must apply for admission to the master's program immediately following the spring of their junior year, but no later than May 31 of that year, prior to beginning their final year of full-time undergraduate study. The entry term for the master’s program will be the next available admission term following the last semester of undergraduate study.

Three reference letters (including one from the computer science undergraduate program director and at least one more from a computer science faculty member) must accompany the application. Admission to the master’s program is provisional until the undergraduate degree has been conferred. Upon completion and conferral of the undergraduate degree, with the minimum major GPA of 3.2, students are fully admitted to the master’s program. To graduate with the M.S. in Computer Science, students will meet graduation requirements of the degree as presented in the bulletin that is effective at the time of their full admission to the master’s program.

Once admitted into the accelerated program, students must meet the standards of performance applicable to graduate students as described in the “Satisfactory academic progress” section of the Graduate Bulletin, including maintaining a 3.0 GPA. Guidance to students admitted to the accelerated program is provided by both the undergraduate computer science adviser and the faculty adviser to the graduate program.

Degree requirements

The Bachelor of Science in Computer Science degree will be awarded upon completion of a minimum of 120 credits and the satisfactory completion of all undergraduate degree requirements as stated in the Undergraduate Bulletin.

A maximum of 12 graduate credits may be taken prior to completion of the baccalaureate degree. At most, six of these graduate credits will substitute for open elective credits for the undergraduate degree. These courses are shared credits with the graduate program, meaning that they will be applied to both undergraduate and graduate degree requirements.

The graduate computer science courses that may be taken as an undergraduate, once a student is admitted to the program, are:

CourseTitleHours
Use course picker to select shared courses. Maximum for shared credits is 12.
CMSC 501Advanced Algorithms3
CMSC 502Parallel Algorithms3
CMSC 510Regularization Methods for Machine Learning3
CMSC 516Advanced Natural Language Processing3
CMSC 525Introduction to Software Analysis, Testing and Verification3
CMSC 591Topics in Computer Science3
Total Hours18

Recommended course sequence/plan of study for students pursuing a thesis master’s

What follows is the recommended plan of study for students interested in the accelerated program beginning in the fall of the junior year prior to admission to the accelerated program in the senior year.

CourseTitleHours
Junior year
Fall semester
CMSC 312Introduction to Operating Systems3
CMSC 401Algorithm Analysis with Advanced Data Structures3
Approved natural science elective (BIOL, CHEM or PHYS course that counts toward the major in that science)3
Select one of the following:4-5
General Chemistry I
and General Chemistry Laboratory I
University Physics I
Introduction to Biological Sciences I
and Introduction to Biological Science Laboratory I
Contact undergraduate and graduate program directors
Term Hours:13-14
Spring semester
CMSC 403Programming Languages3
CMSC 508Database Theory3
MATH upper-level (300 to 400)3
Select one of the following:4-5
General Chemistry II
and General Chemistry Laboratory II
University Physics II
Introduction to Biological Sciences II
and Introduction to Biological Science Laboratory II
Secure approval from undergraduate program director
Apply to the M.S. program
Term Hours:13-14
Senior year
Fall semester
CMSC 451Senior Project I3
MATH upper-level (300 to 400)3
Approved natural science elective (BIOL, CHEM or PHYS course that counts toward the major in that science) 3
CMSC 501Advanced Algorithms3
CMSC 516Advanced Natural Language Processing3
Term Hours:15
Spring semester
CMSC 440Data Communication and Networking3
CMSC 452Senior Project II3
CMSC 525Introduction to Software Analysis, Testing and Verification (counts toward B.S. and M.S.)3
Fourth graduate course (counts toward B.S. and M.S.)3
Choose the M.S. thesis adviser
Term Hours:12
Fifth year
Fall semester
CMSC 697Directed Research3
M.S. foundational area courses (theory and systems) 16
Term Hours:9
Spring semester
CMSC 697Directed Research6
M.S. foundational area course (applied) 13
Term Hours:9
1

See the Graduate Bulletin for the list of theory, systems and applied foundational area courses.

Recommended course sequence/plan of study for students pursuing a non-thesis master’s

What follows is the recommended plan of study for students interested in the accelerated program beginning in the fall of the junior year prior to admission to the accelerated program in the senior year.

CourseTitleHours
Junior year
Fall semester
CMSC 312Introduction to Operating Systems3
CMSC 401Algorithm Analysis with Advanced Data Structures3
Approved natural science elective (BIOL, CHEM or PHYS course that counts toward the major in that science) 3
Select one of the following: 4-5
General Chemistry I
and General Chemistry Laboratory I
University Physics I
Introduction to Biological Sciences I
and Introduction to Biological Science Laboratory I
Contact undergraduate and graduate program directors
Term Hours: 13-14
Spring semester
CMSC 403Programming Languages3
CMSC 508Database Theory3
MATH upper-level (300 to 400) 3
Select one of the following:4-5
General Chemistry II
and General Chemistry Laboratory II
University Physics II
Introduction to Biological Sciences II
and Introduction to Biological Science Laboratory II
Term Hours:13-14
Secure approval from the undergraduate program director
Apply to the M.S. program
Senior year
Fall semester
CMSC 451Senior Project I3
MATH upper-level (300 to 400)3
Approved natural science elective (BIOL, CHEM or PHYS course that count toward the major in that science) 3
CMSC 501Advanced Algorithms3
CMSC 516Advanced Natural Language Processing3
Term Hours:15
Spring semester
CMSC 440Data Communication and Networking3
CMSC 452Senior Project II3
CMSC 525Introduction to Software Analysis, Testing and Verification (counts toward B.S. and M.S.)3
Fourth graduate course (counts toward B.S. and M.S.)3
Term Hours:12
Fifth year
Fall semester
M.S. foundational area courses (theory, systems and applied) 19
Term Hours:9
Spring semester
Graduate didactic course work9
Term Hours:9
1

See the Graduate Bulletin for the list of theory, systems and applied foundational area courses.

 

CMSC 101. Introduction to Computer Science. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: MATH 141 or the equivalent 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 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 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 255. Introduction to Programming. 4 Hours.

Semester course; 3 lecture and 2 laboratory hours. 4 credits. Prerequisite: calculus-level placement on the VCU Mathematics Placement Test within the one-year period immediately preceding enrollment in the course, or MATH 151 or equivalent. Students are expected to have fundamental computer skills. Introduction to object-oriented programming using Java. Topics include problem-solving, top-down design of algorithms using control structures, methods, arrays, basic I/O, basic concepts of objects and classes in Java, Java classes for manipulating strings, and introduction to program testing, UML notation and integrated development environments. Students may not receive credit for both CMSC 255 and INFO 250.

CMSC 256. Data Structures and Object Oriented Programming. 4 Hours.

Semester course; 3 lecture and 2 laboratory hours. 4 credits. Prerequisite: CMSC 255 with a minimum grade of C; corequisite: CMSC 302. Advanced programming using Java. Topics include introduction to object-oriented design, inheritance, polymorphism, exceptions, interfaces, linked lists, stacks, queues, binary trees, recursion, and basic searching and sorting techniques. Continued focus on program testing and UML notation. Students may not receive credit for both CMSC 256 and INFO 350.

CMSC 257. Computer Systems. 4 Hours.

Semester course; 3 lecture and 2 laboratory hours. 4 credits. Prerequisite: CMSC 256 with a minimum grade of C. Topics include UNIX essentials; system programming in C; machine-level representation and 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; network programming using sockets; 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. 3 credits. Prerequisite: CMSC 255 with minimum grade of C. Logic and proofs, sets, functions, sequences and sums, relations, graphs, trees, induction and recursion, advanced counting technique (recurrences).

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 311. Computer Organization. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 302 with minimum grade of C; corequisite: CMSC 257. 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.

CMSC 312. Introduction to Operating Systems. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 311 or EGRE 364. Computer systems design, I/O processing, secondary memory organization, command languages, memory management and job scheduling. Students will work in teams to design and implement an operating system simulation.

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

Semester course; 3 lecture hours (delivered online). 3 credits. Prerequisite: CMSC 210. 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. 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. Prerequisite: CMSC 210. 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 246, 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 403. Programming Languages. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC 256 and CMSC 303, both 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 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 409. Artificial Intelligence. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisites: CMSC 401 with a minimum grade of C and MATH 310. Covers problem spaces, problem-solving methods, game playing, knowledge representatives, expert systems, natural language understanding.

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 401 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 416. Introduction to Natural Language Processing. 3 Hours.

Semester course; 3 lecture hours. 3 credits. Prerequisite: CMSC 401 with a minimum grade of C. 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 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 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 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 451. Senior Project I. 3 Hours.

Semester course; 3 laboratory hours. 3 credits. Prerequisites: CMSC 355 with minimum grade of C; and UNIV 200 or HONR 200 or equivalent. Enrollment is restricted to computer science majors with senior standing who have 24 credits in computer science courses. Capstone project or experience for the computer science major; research and presentation methods in computer science. 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. Each student will write and revise a research paper on a technical topic associated with his or her project or experience. 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 452. Senior Project II. 3 Hours.

Semester course; 1 lecture and 2 laboratory hours. 3 credits. Prerequisites: CMSC 451 and CMSC 508, both with a minimum grade of C. Enrollment is restricted to students with senior standing in the computer science department. Capstone project or experience for the computer science major; research and presentation methods in computer science; ethical, legal and social issues in computing; and professional responsibilities of computer scientists. 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. 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. (This course cannot be counted as upper-level CMSC electives for students graduating under bulletins prior to 2008-09.).

CMSC 455. 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 475. Design and Implementation of User Interfaces. 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. 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 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.