This is the preliminary (or launch) version of the 2023-2024 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.
Student learning outcomes
Upon completing this program, students will know and know how to do the following:
- Analyze a complex computing problem and apply principles of computing and other relevant disciplines to identify solutions
- Design, implement and evaluate a computing-based solution to meet a given set of computing requirements in the context of the program’s discipline
- Communicate effectively in a variety of professional contexts
- Recognize professional responsibilities and make informed judgments in computing practice based on legal and ethical principles
- Function effectively as a member or leader of a team engaged in activities appropriate to the program’s discipline
- Apply computer science theory and software development fundamentals to produce computing-based solutions
Special requirements
The B.S. in Computer Science requires a minimum of 120 credits. Students must receive a minimum grade of C in all computer science courses in order to graduate.
Based on the results of the Computer Science Placement Test, students may be required to take CMSC 254, which then can count toward the degree requirements as an elective.
Degree requirements for Computer Science, Bachelor of Science (B.S.)
Course | Title | Hours |
---|---|---|
General education | ||
Select 30 credits of general education courses in consultation with an adviser. | 30 | |
Major requirements | ||
• Major core requirements | ||
CMSC 235 | Computing and Data Ethics | 3 |
CMSC 255 | Introduction to Programming | 4 |
CMSC 256 | Data Structures and Object Oriented Programming | 4 |
CMSC 257 | Computer Systems | 4 |
CMSC 302 | Introduction to Discrete Structures | 3 |
CMSC 303 | Introduction to the Theory of Computation | 3 |
CMSC 311 | Computer Organization | 3 |
CMSC 312 | Introduction to Operating Systems | 3 |
CMSC 355 | Fundamentals of Software Engineering | 3 |
CMSC 401 | Algorithm Analysis with Advanced Data Structures | 3 |
CMSC 403 | Programming Languages | 3 |
CMSC 440 | Data Communication and Networking | 3 |
CMSC 441 & CMSC 451 | Senior Design Studio I (Laboratory/Project Time) and Senior Project I | 3 |
CMSC 442 & CMSC 452 | Senior Design Studio II (Laboratory/Project Time) and Senior Project II | 3 |
CMSC 508 | Database Theory | 3 |
• Major electives | ||
CMSC upper-level electives | 9 | |
Ancillary requirements | ||
ECON 205 | The Economics of Product Development and Markets (satisfies general education BOK for social/behavioral science and AOI for global perspectives) | 3 |
ENGR 395 | Professional Development | 1 |
MATH 200 | Calculus with Analytic Geometry I (satisfies general education quantitative foundations) | 4 |
MATH 201 | Calculus with Analytic Geometry II | 4 |
STAT 212 | Concepts of Statistics | 3 |
Humanities electives (from list below) | 6 | |
MATH course (300 to 400 level) | 3 | |
Natural science option: Select from BIOL, CHEM or PHYS sequence (3-5 credits satisfy general education BOK for natural science and AOI for scientific and logical reasoning) 1 | 8-10 | |
Open electives | ||
Select any course. | 8-10 | |
Total Hours | 120 |
The minimum number of credit hours required for this degree is 120.
CMSC upper-level electives
Course | Title | Hours |
---|---|---|
CMSC 409 | Artificial Intelligence | 3 |
CMSC 410 | Introduction to Quantum Computing | 3 |
CMSC 411 | Computer Graphics | 3 |
CMSC 412 | Social Network Analysis and Cybersecurity Risks | 3 |
CMSC 413 | Introduction to Cybersecurity | 3 |
CMSC 414 | Computer and Network Security | 3 |
CMSC 415 | Introduction to Cryptography | 3 |
CMSC 416 | Introduction to Natural Language Processing | 3 |
CMSC 420 | Software Project Management | 3 |
CMSC 425 | Introduction to Software Analysis and Testing | 3 |
CMSC 428 | Mobile Programming: iOS | 3 |
CMSC 435 | Introduction to Data Science | 3 |
CMSC 455 | Software as a Service | 3 |
CMSC 475 | Design and Implementation of User Interfaces | 3 |
CMSC 491 | Topics in Computer Science | 1-3 |
CMSC 492 | Independent Study | 2-4 |
CMSC 506 | Computer Networks and Communications | 3 |
Approved humanities electives
Course | Title | Hours |
---|---|---|
Select six credits from the following programs or subject areas: | 6 | |
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 semester | Hours | |
CMSC 235 | Computing and Data Ethics | 3 |
CMSC 255 | Introduction to Programming | 4 |
UNIV 111 ![]() | Focused Inquiry I (satisfies general education UNIV foundations) | 3 |
General education course | 3 | |
Humanities elective (from list) | 3 | |
Term Hours: | 16 | |
Spring semester | ||
CMSC 256 | Data Structures and Object Oriented Programming | 4 |
CMSC 302 | Introduction to Discrete Structures | 3 |
ECON 205 | The Economics of Product Development and Markets (satisfies general education BOK for social/behavioral science and AOI for global perspectives) | 3 |
MATH 200 | Calculus with Analytic Geometry I (satisfies general education quantitative foundations) | 4 |
UNIV 112 ![]() | Focused Inquiry II (satisfies general education UNIV foundations) | 3 |
Term Hours: | 17 | |
Sophomore year | ||
Fall semester | ||
CMSC 257 | Computer Systems | 4 |
CMSC 311 | Computer Organization | 3 |
MATH 201 | Calculus with Analytic Geometry II | 4 |
UNIV 200 | Advanced Focused Inquiry: Literacies, Research and Communication (satisfies general education UNIV foundations) | 3 |
General education course (select BOK for humanities/fine arts) | 3 | |
Term Hours: | 17 | |
Spring semester | ||
CMSC 303 | Introduction to the Theory of Computation | 3 |
CMSC 355 | Fundamentals of Software Engineering | 3 |
ENGR 395 | Professional Development | 1 |
STAT 212 | Concepts of Statistics | 3 |
General education course | 3 | |
Humanities electives (from list) | 3 | |
Term Hours: | 16 | |
Junior year | ||
Fall semester | ||
CMSC 312 | Introduction to Operating Systems | 3 |
CMSC 401 | Algorithm Analysis with Advanced Data Structures | 3 |
Natural science option (satisfies general education BOK for natural science and AOI for scientific and logical reasoning) (select one): | 3-5 | |
CHEM 101 & CHEZ 101 | General Chemistry I and General Chemistry Laboratory I | 4 |
PHYS 207 | University Physics I | 5 |
BIOL 151 & BIOZ 151 | Introduction to Biological Sciences I and Introduction to Biological Science Laboratory I | 4 |
General education course | 3 | |
Term Hours: | 13-14 | |
Spring semester | ||
CMSC 403 | Programming Languages | 3 |
CMSC 508 | Database Theory | 3 |
MATH course (300 to 400 level) | 3 | |
Natural science option (select one): | 4-5 | |
CHEM 102 & CHEZ 102 | General Chemistry II and General Chemistry Laboratory II | 4 |
PHYS 208 | University Physics II | 5 |
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 441 | Senior Design Studio I (Laboratory/Project Time) | 2 |
CMSC 451 | Senior Project I | 1 |
CMSC upper-level electives | 6 | |
Open electives | 6 | |
Term Hours: | 15 | |
Spring semester | ||
CMSC 440 | Data Communication and Networking | 3 |
CMSC 442 | Senior Design Studio II (Laboratory/Project Time) | 2 |
CMSC 452 | Senior Project II | 1 |
CMSC upper-level elective | 3 | |
Open electives | 2-4 | |
Term Hours: | 13 | |
Total Hours: | 120-122 |
The minimum number of credit hours required for this degree is 120.
Accelerated B.S. and M.S.
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.
Entrance to the accelerated program
Interested undergraduate students should consult with their adviser as early as possible to receive specific information about the accelerated program, determine academic eligibility and submit (no later than two semesters prior to graduating with a baccalaureate degree, that is, before the end of the spring semester of their junior year) an Accelerated Program Declaration Form to be approved by the graduate program director. Limited spaces may be available in the accelerated program. Academically qualified students may not receive approval if capacity has been reached.
Minimum qualifications for entrance to this accelerated program include completion of 30 undergraduate credit hours including six computer science courses CMSC 255, CMSC 256, CMSC 257, CMSC 302, CMSC 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.
Once enrolled in 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.
Admission to the graduate program
Entrance to the accelerated program enables the student to take the approved shared courses that will apply to the undergraduate and graduate degrees. However, entry into an accelerated program via an approved Accelerated Program Declaration Form does not constitute application or admission into the graduate program. Admission to the graduate program requires a separate step that occurs through a formal application to the master’s program, which is submitted through Graduate Admissions no later than a semester prior to graduation with the baccalaureate degree, that is, before the end of the fall semester of the senior year. In order to continue pursuing the master’s degree after the baccalaureate degree is conferred, accelerated students must follow the admission to graduate study requirements outlined in the VCU Bulletin. 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. Students who do not meet the minimum GPA requirements may submit GRE scores to receive further consideration.
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:
Course | Title | Hours |
---|---|---|
Use course picker to select shared courses. Maximum for shared credits is 12. | ||
CMSC 501 | Advanced Algorithms | 3 |
CMSC 502 | Parallel Algorithms | 3 |
CMSC 510 | Regularization Methods for Machine Learning | 3 |
CMSC 516 | Advanced Natural Language Processing | 3 |
CMSC 525 | Introduction to Software Analysis, Testing and Verification | 3 |
CMSC 591 | Topics in Computer Science | 3 |
Total Hours | 18 |
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.
Course | Title | Hours |
---|---|---|
Junior year | ||
Fall semester | ||
CMSC 312 | Introduction to Operating Systems | 3 |
CMSC 401 | Algorithm Analysis with Advanced Data Structures | 3 |
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 403 | Programming Languages | 3 |
CMSC 508 | Database Theory | 3 |
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 451 | Senior Project I | 3 |
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 501 | Advanced Algorithms | 3 |
CMSC 516 | Advanced Natural Language Processing | 3 |
Term Hours: | 15 | |
Spring semester | ||
CMSC 440 | Data Communication and Networking | 3 |
CMSC 452 | Senior Project II | 3 |
CMSC 525 | Introduction 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 697 | Directed Research | 3 |
M.S. foundational area courses (theory and systems) 1 | 6 | |
Term Hours: | 9 | |
Spring semester | ||
CMSC 697 | Directed Research | 6 |
M.S. foundational area course (applied) 1 | 3 | |
Term Hours: | 9 |
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.
Course | Title | Hours |
---|---|---|
Junior year | ||
Fall semester | ||
CMSC 312 | Introduction to Operating Systems | 3 |
CMSC 401 | Algorithm Analysis with Advanced Data Structures | 3 |
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 403 | Programming Languages | 3 |
CMSC 508 | Database Theory | 3 |
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 451 | Senior Project I | 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 | |
CMSC 501 | Advanced Algorithms | 3 |
CMSC 516 | Advanced Natural Language Processing | 3 |
Term Hours: | 15 | |
Spring semester | ||
CMSC 440 | Data Communication and Networking | 3 |
CMSC 452 | Senior Project II | 3 |
CMSC 525 | Introduction 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) 1 | 9 | |
Term Hours: | 9 | |
Spring semester | ||
Graduate didactic course work | 9 | |
Term Hours: | 9 |
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 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 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 235. Computing and Data Ethics. 3 Hours.
Semester course; 3 lecture hours. 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.
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 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 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 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 441, CMSC 451 and CMSC 508, 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 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 441, CMSC 451 and CMSC 508, 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 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.