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 Programming3
CMSC   257Computer Systems3
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 Hours49

Open electives

Select 9-11 open elective credits9-11

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 3
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: 16
Sophomore year
Fall semester
CMSC   257 Computer Systems 3
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: 16
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 9
 Term Hours: 15
 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. 3 Hours.

Semester course; 3 lecture hours. 3 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. 3 Hours.

Semester course; 3 lecture hours. 3 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   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.