The Bachelor of Science in Computer Science is built on a rigorous, highly concentrated, accredited curriculum of computer science courses. 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. Computing and math  
    An ability to apply knowledge of computing and mathematics appropriate to the program’s student outcomes and to the discipline 
  2. Problem analysis and requirement specification  
    An ability to analyze a problem, and identify and define the computing requirements appropriate to its solution
  3. Design, implement and test programs and systems
    An ability to design, implement and evaluate a computer-based system, process, component or program to meet desired needs
  4. Teamwork  
    An ability to function effectively on teams to accomplish a common goal
  5. Ethical issues  
    An understanding of professional, ethical, legal, security and social issues and responsibilities
  6. Oral and written communications  
    An ability to communicate effectively with a range of audiences
  7. Local and global impact of computing  
    An ability to analyze the local and global impact of computing on individuals, organizations and society
  8. Continuing professional development  
    Recognition of the need for and an ability to engage in continuing professional development
  9. Current techniques, skills and tools  An ability to use current techniques, skills and tools necessary for computing practice

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.)

General Education requirements

University Core Education Curriculum
UNIV 111 Play VideoPlay course video for Focused Inquiry IFocused Inquiry I3
UNIV 112 Play VideoPlay course video for Focused Inquiry IIFocused 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

Select one of the following options:8-10
Option A:
General Chemistry
and General Chemistry Laboratory I
General Chemistry
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 (satisfies quantitative literacy)4
MATH 201Calculus with Analytic Geometry4
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

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 355Software Engineering: Specification and Design3
CMSC 401Algorithm Analysis with Advanced Data Structures3
CMSC 403Programming Languages3
CMSC 451
CMSC 452
Senior Project
and Senior Project (capstone courses)
6
CMSC 508Database Theory3
CMSC upper-level electives9
Total Hours51

Open electives

Select seven to nine open elective credits7-9

Total minimum requirement 120 credits

CMSC upper-level electives

CMSC 409Artificial Intelligence3
CMSC 411Computer Graphics3
CMSC 412Social Network Analysis and Cybersecurity Risks3
CMSC 413Introduction to Cybersecurity3
CMSC 414Computer and Network Security3
CMSC 415Introduction to Cryptography3
CMSC 416Introduction to Natural Language Processing3
CMSC 420Software Engineering: Project Management3
CMSC 491Topics in Computer Science1-3
CMSC 492Independent Study2-4
CMSC 506Computer Networks and Communications3

Approved humanities electives

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 255 Introduction to Programming 4
UNIV 111 Play VideoPlay course video for Focused Inquiry I Focused Inquiry I 3
Approved humanities electives 6
Approved natural/physical sciences 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 3
MATH 200 Calculus with Analytic Geometry 4
UNIV 112 Play VideoPlay course video for Focused Inquiry II Focused Inquiry II 3
 Term Hours: 17
Sophomore year
Fall semester
CMSC 257 Computer Systems 4
CMSC 355 Software Engineering: Specification and Design 3
MATH 201 Calculus with Analytic Geometry 4
UNIV 200 Inquiry and the Craft of Argument 3
Approved humanities/fine arts 3
 Term Hours: 17
Spring semester
CMSC 303 Introduction to the Theory of Computation 3
CMSC 311 Computer Organization 3
STAT 212 Concepts of Statistics 3
Approved humanities elective 4
Approved social/behavioral sciences 3
 Term Hours: 16
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 count toward the major in that science) 3
Select one of the following: 4-5
CHEM 101
CHEZ 101
General Chemistry
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
 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
CHEM 102
CHEZ 102
General Chemistry
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 451 Senior Project (capstone) 3
CMSC upper-level electives 6
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 452 Senior Project (capstone) 3
CMSC upper-level elective 3
Open electives 7
 Term Hours: 13
 Total Hours: 120-122

Total minimum requirement 120 credits

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 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 couse, 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. Combinatorial and sequential circuits, algorithms and algorithm analysis, recursion, recurrence relations, graphs, trees.

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 355. Software Engineering: Specification and Design. 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 the software engineering process and software life-cycle models. Gives a detailed study of the analysis, specification and design phases. Students will work in teams to gain experience in software development methodology, developing specification and design documents and developing 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 with a grade of C or better and CMSC 303. 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 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 Engineering: 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 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 451. Senior Project. 3 Hours.

Semester course; 3 laboratory hours. 3 credits. Prerequisites: senior standing in the computer science department; 24 credits in computer science, including CMSC 355 and CMSC 508, both with minimum grades of C; UNIV 200 or HONR 200 or equivalent. 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. 3 Hours.

Semester course; 1 lecture and 2 laboratory hours. 3 credits. Prerequisites: senior standing in the computer science department; CMSC 451 with a minimum grade of C. 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 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 493. Computer Science Internship. 1-3 Hours.

Semester course; variable hours. 1-3 credits. May be repeated for up to 3 credits. Prerequisites: CMSC 401 and CMSC 403. Approval of Computer Science Undergraduate Credentials Committee is required prior to registration. A minimum of 30 clock hours per credit in an information technology environment. The internship is designed to provide practical experience in the computing industry. Student must present a written report reflecting upon internship experience. Graded as pass/fail. Not applicable toward the computer science major.