Course Information

  1. CS Course Prerequisite Chart
  2. UVA Course Equivalencies
    1. CS Courses
    2. APMA Courses
    3. Other SEAS Courses
    4. Courses That ARE NOT Equivalent
  3. Transferring Courses to UVA
  4. Which CS1 Course Should I Take
  5. AP/IB/Dual Enrollment Credit
    1. UVA AP Credit Information
  6. CS Course Descriptions

CS Course Prerequisite Chart

Prerequisite Chart

UVA Course Equivalencies

These courses have been approved and entered into SIS to count for each other in all cases. If you find a discrepancy in your academic record, please email cs-office@virginia.edu.

CS Courses

  • CS 2120 == CS 2102
  • CS 3100 == CS 4102
  • CS 3120 == CS 3102

APMA Courses

  • APMA 1090 == MATH 1310
  • APMA 1110 == MATH 1320
  • APMA 2120 == MATH 2310
  • APMA 2130 == MATH 3250
  • APMA 3080 == MATH 3351
  • APMA 3100 == MATH 3100
  • APMA 3120 == STAT 3120

Other SEAS Courses

  • MAE 2300 == CE 2300
  • MAE 2310 == CE 2310
  • MAE 2320 == CE 2320

Courses That ARE NOT Equivalent

  • STAT 3080 - From Data to Knowledge cannot be used in place of APMA 3150 due to differences in content.

Transferring Courses to UVA

See our dedicated page on transferring courses

Which CS1 Course Should I Take

If you have never programmed before, take CS 1110, 1112, 1113, or 1120. If you have programmed a little, take CS 1111 (or 1110 or 1113 if you can’t get into 1111). If you have programmed a fair amount, you can probably get transfer credit or test out of CS 111x. More details follow.

  • CS 1110 - A basic introductory course that focuses on learning the basics of programming and computational thinking. No prerequisite required. Language: Python. Requires a lecture section and a lab.
  • CS 1111 - Only students with some programming experience may take this course. This programming experience can be in any language. CS 1111 has the same assignments and tests as CS 1110, but does not require lab and moves slightly faster through some material since students are expected to have some exposure to basic concepts. Language: Python.
  • CS 1112 - Only students with no programming experience may take this course. Offered as a lecture + lab combination that meets three times a week. Language: Python.
  • CS 1113 - CS1 special topics and can vary from semester to semester. In the past we have offered a version focused on a mathematical approach to computing and a version emphasizing uses of computing in engineering disciplines.
  • CS 1120 - A course designed as an introductory course for the BACS, it now counts the same for all majors and schools.

Note - You can only receive credit for 1 CS 111X or 1120 course.

AP/IB/Dual Enrollment Credit

Advanced Placement

  • For Computer Science - 4 or 5 gives credit for CS 1110
  • For CS Principles - 4 or 5 gives credit for CS 1000T and the student is encouraged to take the CS 1110 Placement Test

International Baccalaureate

For Computer Science:

  • 5 on High Level gives credit for CS 1110
  • 6 or 7 on High Level gives credit for CS 1110 and CS 2100

Dual Enrollment

Please discuss with a CS advisor or the SEAS dean’s office.

UVA AP Credit Information

Please see the undergraduate record for information about what AP credit UVA accepts.

CS Course Descriptions

CS 1010: Introduction to Information Technology

Foundation

(3 credits / Prerequisites: None)
How computers create, preserve, manipulate and communicate information and the concepts and tools used to that end. Units include how computers work, web technologies, creating web pages, algorithms and logic, basic programming, and solving problems with spreadsheets. Students will learn to recognize computational problems and develop basic skill sets to solve future problems in their discipline of study. No prior programming experience required. Cannot be taken for credit by students in SEAS.

CS 1110: Introduction to Programming

Foundation

(3 credits / Prerequisites: None)
A first course in programming, software development, and computer science. Introduces computing fundamentals and an appreciation for computational thinking. No previous programming experience required. Note: CS 1110, 1111, 1112, 1113, and 1120 provide different approaches to teaching the same core material; students may only receive credit for one of these courses.

CS 1111: Introduction to Programming

Foundation

(3 credits / Prerequisites: None)
A first course in programming, software development, and computer science. Introduces computing fundamentals and an appreciation for computational thinking. Prerequisite: Students should have some experience with programming. Note: CS 1110, 1111, 1112, 1113, and 1120 provide different approaches to teaching the same core material; students may only receive credit for one of these courses.

CS 1112: Introduction to Programming

Foundation

(3 credits / Prerequisites: None)
A first course in programming, software development, and computer science. Introduces computing fundamentals and an appreciation for computational thinking. Prerequisite: Students must have no previous programming experience. Note: CS 1110, 1111, 1112, 1113, and 1120 provide different approaches to teaching the same core material; students may only receive credit for one of these courses.

CS 1113: Introduction to Programming

Foundation

(3 credits / Prerequisites: None)
A first course in programming, software development, and computer science. Introduces computing fundamentals and an appreciation for computational thinking. Special domain topics and materials will differ by section and semester. Note: CS 1110, 1111, 1112, 1113, and 1120 provide different approaches to teaching the same core material; students may only receive credit for one of these courses.

CS 1120: Introduction to Computing: Explorations in Language, Logic, and Machines

Foundation

(3 credits / Prerequisites: None)
This course is an introduction to the most important ideas in computing. It focuses on the big ideas in computer science including the major themes of recursive definitions, universality, and abstraction. It covers how to describe information processes by defining procedures using the Scheme and Python programming languages, how to analyze the costs required to carry out a procedure, and the fundamental limits of what can be computed.

CS 1501: Special Topics in Computer Science

(1 credits / Prerequisites: None)
Student led special topic courses which vary by semester.

CS 1511: Special Topics in Computer Science

(3 credits / Prerequisites: None)
Content varies, depending on instructor interests and the needs of the Department. Taught strictly at the undergraduate level. Prerequisite: Instructor permission; additional specific requirements vary with topics.

CS 2100: Data Structures and Algorithms 1

Foundation

(4 credits / Prerequisites: CS 1110, 1111, 1112, 1113, or 1120 with a grade of C- or higher; or the CS 1110 placement test.)
A second course in computing with an emphasis on foundational data structures and program analysis. The course provides a introduction to object oriented programming and the Java programming language, concurrency, and inheritance / polymorphism. Additionally, foundational data structures and related algorithms / analysis are studied. These include lists, stacks, queues, trees, hash tables, and priority queues.

CS 2102: Discrete Mathematics

Deprecated

(3 credits / Prerequisites: CS 1110, 1111, 1112, 1113, or 1120 with a grade of C- or higher; or the CS 1110 placement test.)
NOTE: This course is no longer being offered. See CS 2120. Introduces discrete mathematics and proof techniques involving first order predicate logic and induction. Application areas include finite and infinite sets, elementary combinatorial problems, and graph theory. Development of tools and mechanisms for reasoning about discrete problems.

CS 2110: Software Development Methods

Deprecated

(3 credits / Prerequisites: CS 1110, 1111, 1112, 1113, or 1120 with a grade of C- or higher; or the CS 1110 placement test.)
NOTE: This course is no longer being offered. A second course in computing with an emphasis on modern software development and principles central to computer science. Topics include software requirements, testing, object-oriented design, abstraction, encapsulation, recursion, and time-complexity.

CS 2120: Discrete Mathematics and Theory 1

Foundation

(3 credits / Prerequisites: CS 1110, 1111, 1112, 1113, or 1120 with a grade of C- or higher; or the CS 1110 placement test.)
Introduces discrete mathematics and proof techniques involving first order predicate logic and induction. Application areas include sets, tuples, functions, relations, and combinatorial problems.

CS 2130: Computer Systems and Organization 1

Foundation

(4 credits / Prerequisites: CS 1110, 1111, 1112, 1113, or 1120 with a grade of C- or higher; or the CS 1110 placement test AND either familiarity with Java, C++, or another C-like language, or concurrent enrollment in CS 2100)
This course covers topics on the computer architecture abstraction hierarchy ranging from a step above silicon to a step below modern programming languages. Students in this course will learn to write low-level code in C and Assembly, how data is stored in memory, the basics of hardware design from gates and registers through general-purpose computers, and legal, ethical, and security issues related to these topics.

CS 2150: Program and Data Representation

Deprecated

(3 credits / Prerequisites: CS 2110 with grades of C- or higher, or the CS 2110 placement test; co-requisite CS 2102 or CS 2120)
NOTE: This course is no longer being offered. Introduces programs and data representation at the machine level. Data structuring techniques and the representation of data structures during program execution. Operations and control structures and their representation during program execution. Representations of numbers, arithmetic operations, arrays, records, recursion, hashing, stacks, queues, trees, graphs, and related concepts.

CS 2330: Digital Logic Design

Deprecated

(3 credits / Prerequisites: None)
NOTE: This course is no longer required for CS majors. Introduction to analysis and design of digital systems from switches to gates to components to CPU. Analysis and design of combinational and sequential components including multiplexers and demultiplexers, decoders and encoders, comparators, adders and ALU, registers and register files, counters and timers, RTL design, culminating in the design of a simple programmable processor. 10-12 studio design activities. Cross-listed as ECE 2330.

CS 2501: Special Topics in Computer Science

(1 - 3 credits / Prerequisites: Instructor permission; additional specific requirements vary with topics.)
Content varies, depending on instructor interests and the needs of the Department. Taught strictly at the undergraduate level.

CS 2910: CS Education Practicum

(1 credits / Prerequisites: None)
An overview of computer science education for undergraduate students. Topics include ethics, diversity, tutoring and teaching techniques, and classroom management. Students enrolled in this course serve as a teaching assistant for a computer science course as part of their coursework.

CS 2993: Independent Study

(1 - 3 credits / Prerequisites: None)
In-depth study of a computer science or computer engineering problem by an individual student in close consultation with departmental faculty. This version of Independent Study is appropriate for students who have not completed CS 2150.

CS 3100: Data Structures and Algorithms 2

Foundation

(3 credits / Prerequisites: CS 2150 or (CS 2100 & CS 2120); APMA 1090 or MATH 1210 or MATH 1310 or equivalent)
Builds upon previous analysis of algorithms and the effects of data structures on them. Algorithms selected from areas such as searching, shortest paths, greedy algorithms, backtracking, divide-and-conquer, dynamic programming, and machine learning. Analysis techniques include asymptotic worst case, expected time, amortized analysis, and reductions.

CS 3102: Theory of Computation

Deprecated

(3 credits / Prerequisites: (CS 2102 or CS 2120) and (CS 2100 or CS 2110 or CS 2501 topic “DSA 2” or the CS 2110 placement test); both with grades of C- or higher)
NOTE: This course is no longer being offered. Introduces computation theory including grammars, finite state machines, pushdown automata, and Turing machines.

CS 3120: Discrete Mathematics and Theory 2

Foundation

(3 credits / Prerequisites: CS 4102 or CS 3100 with a grade of C- or better)
The goal of this course is to understand the fundamental limits on what can be efficiently computed. These limits reveal properties about information, communication, and computing, as well as practical issues about how to solve problems. Introduces computation theory including grammars, automata, and Turing machines.

CS 3130: Computer Systems and Organization 2

Foundation

(4 credits / Prerequisites: CS 2100 and CS 2130 with a grade of C- or better)
A second course in computer systems, this course will explore a more realistic model of processors and how they and the operating system work together to provide various functionality we depend on as application programmers. Course topics include permission models, system architecture, concurrency, virtual memory, cryptographic primitives, and TCP/IP networking.

CS 3140: Software Development Essentials

Foundation

(3 credits / Prerequisites: CS 2100 with a C- or better.)
A first course in software engineering and software construction, this course focuses on bringing the programming concepts learned in a first course in data structures and algorithms together to begin to teach students how to build more complex systems. The course covers introductory topics in testing, software design principles, design patterns, functional programming, and data storage and manipulation.

CS 3205: HCI in Software Development

CS Elective

(3 credits / Prerequisites: CS 2110 or CS 2100 with a grade of C- or better)
Human-computer interaction and user-centered design in the context of software engineering. Examines the fundamental principles of human-computer interaction. Includes evaluating a system’s usability based on well-defined criteria; user and task analysis, as well as conceptual models and metaphors; the use of prototyping for evaluating design alternatives; and physical design of software user-interfaces, including windows, menus, and commands.

CS 3240: Software Engineering

BSCS Required / BACS Elective

(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
Analyzes modern software engineering practice for multi-person projects; methods for requirements specification, design, implementation, verification, and maintenance of large software systems; advanced software development techniques and large project management approaches; project planning, scheduling, resource management, accounting, configuration control, and documentation. Formerly known as Advanced Software Development Techniques.

CS 3250: Software Testing

CS Elective

(3 credits / Prerequisites: CS 2150 or (CS 2100 and CS 2120) with a grade of C- or better)
An introduction to testing for assuring software quality. Covers concepts and techniques for testing software, including testing at the unit, module, subsystem, and system levels; automatic and manual techniques for generating and validating test data; the testing process; static vs. dynamic analysis; functional testing; inspections; testing in specific application domains; and reliability assessment.

CS 3330: Computer Architecture

Deprecated

(3 credits / Prerequisites: CS 2150 or CS 3130 with a grade of C- or better)
NOTE: This course is being updated for the new curriculum. Includes the organization and architecture of computer systems hardware; instruction set architectures; addressing modes; register transfer notation; processor design and computer arithmetic; memory systems; hardware implementations of virtual memory, and input/output control and devices.

CS 3501: Special Topics in Computer Science

CS Elective

(1 - 3 credits / Prerequisites: Instructor permission; additional specific requirements vary with topics.)
Content varies, depending on instructor interests and the needs of the Department. Taught strictly at the undergraduate level.

CS 3710: Introduction to Cybersecurity

CS Elective

(3 credits / Prerequisites: CS 2150 or (CS 2100 or CS 2100 place-out test and CS 2130) with a grade of C- or better)
Introduces students to the fields of cybersecurity. Both non-technical issues, such as ethics and policy, and technical issues are covered. Students see and experiment with a wide range of areas within cybersecurity, including: binary exploitation, encryption, digital forensics, networks, and modern threats.

CS 4102: Algorithms

Deprecated

(3 credits / Prerequisites: CS 2150 or CS 3120 with a grade of C- or better)
NOTE: This course is being redesigned for the new curriculum. Introduces the analysis of algorithms and the effects of data structures on them. Algorithms selected from areas such as sorting, searching, shortest paths, greedy algorithms, backtracking, divide-and-conquer, and dynamic programming. Data structures include heaps and search, splay, and spanning trees. Analysis techniques include asymtotic worst case, expected time, amortized analysis, and reductions between problems.

CS 4240: Principles of Software Design

CS Elective

(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
Focuses on techniques for software design in the development of large and complex software systems. Topics will include software architecture, modeling (including UML), object-oriented design patterns, and processes for carrying out analysis and design. More advanced or recent developments may be included at the instructor’s discretion. The course will balance an emphasis on design principles with an understanding of how to apply techniques and methods to create successful software systems.

CS 4260: Internet Scale Applications

CS Elective

(3 credits / Prerequisites: CS 3240 with a grade of C- or better)
A survey of methods for building large-scale internet websites and mobile apps, with a focus on how theory meets practice. Topics covered include performance engineering, scaling, security, and large team software engineering. Results in students building a working scalable online application.

CS 4330: Advanced Computer Architecture

Deprecated

(3 credits / Prerequisites: CS 3330 with a grade of C- or better)
NOTE: This course is being redesigned for the new curriculum. Provides an overview of modern microprocessor design. The topics covered in the course will include the design of super-scalar processors and their memory systems, and the fundamentals of multi-core processor design.

CS 4414: Operating Systems

Old Curriculum

(3 credits / Prerequisites: CS 3330 or (CS 2501 COA 2 & CS 2150) or (CS 3130 and CS 3100) with a grade of C- or better or ECE 3430 or ECE 3502 Embedded Computing & Robotics 2)
Analyzes process communication and synchronization; resource management; virtual memory management algorithms; file systems; and networking and distributed systems.

CS 4434: Dependable Computing Systems

CS Elective

(3 credits / Prerequisites: CS 3330 or CS 2501 topic "COA 2" or ECE 3430 or ECE 4435 or ECE 3502 topic "ECR II" or CS 3130 and CS 3140; APMA 3100, APMA 3110, MATH 3100, or equivalent. Must complete CS courses with a grade of C- or better.)
Focuses on techniques for designing & analyzing dependable computer-based systems. Topics include basic dependability concepts & attributes, fault models & effects, combinatorial & state-space modeling, hardware redundancy, error detecting & correcting codes, time redundancy, software fault tolerance, checkpointing & recovery, reliable networked systems, error detection techniques, & experimental dependability evaluation techniques.

CS 4444: Introduction to Parallel Computing

CS Elective

(3 credits / Prerequisites: CS 2150 and CS 3330 or CS 2501 topic "COA 2" or ECE 3430 or ECE 4435 or ECE 3502 topic "ECR II" or CS 3100 and CS 3130. Must complete CS courses with a grade of C- or better.)
Introduces the student to the basics of high-performance parallel computing and the national cyber-infrastructure. The course is targeted for both computer science students and students from other disciplines who want to learn how to significantly increase the performance of applications.

CS 4457: Computer Networks

CS Elective

(3 credits / Prerequisites: CS 3330 or CS 2501 topic "COA 2" or ECE 3430 or ECE 4435 or ECE 3502 topic "ECR II" or CS 3130. Must complete CS courses with a grade of C- or better.)
A first course in communication networks for upper-level undergraduate students. Topics include the design of modern communication networks; point-to-point and broadcast network solutions; advanced issues such as Gigabit networks; ATM networks; and real-time communications. Cross-listed as ECE 4457.

CS 4458: Internet Engineering

CS Elective

(3 credits / Prerequisites: CS 4457 with a grade of C- or better.)
An advanced course on computer networks on the technologies and protocols of the Internet. Topics include the design principles of the Internet protocols, including TCP/IP, the Domain Name System, routing protocols, and network management protocols. A set of laboratory exercises covers aspects of traffic engineering in a wide-area network.

CS 4501: Special Topics in Computer Science

CS Elective

(1 - 3 credits / Prerequisites: Instructor permission; additional specific requirements vary with topics.)
Content varies annually, depending on instructor interests and the needs of the department. Similar to CS 5501 and CS 7501, but taught strictly at the undergraduate level.

CS 4610: Programming Languages

CS Elective

(3 credits / Prerequisites: CS 2150 or (CS 2120 and 3140) with a grade of C- or better)
Presents the fundamental concepts of programming language design and implementation. Emphasizes language paradigms and implementation issues. Develops working programs in languages representing different language paradigms. Many programs oriented toward language implementation issues.

CS 4620: Compilers

CS Elective

(3 credits / Prerequisites: CS 2150 or (CS 2120 and 3140) with a grade of C- or better)
Provides an introduction to the field of compilers, which translate programs written in high-level languages to a form that can be executed. The course covers the theories and mechanisms of compilation tools. Students will learn the core ideas behind compilation and how to use software tools such as lex/flex, yacc/bison to build a compiler for a non-trivial programming language.

CS 4630: Defense Against the Dark Arts

CS Elective

(3 credits / Prerequisites: CS 3710 with a grade of C- or better)
Viruses, worms, and other malicious software are an ever-increasing threat to computer systems. There is an escalating battle between computer security specialists and the designers of malicious software. This course provides an essential understanding of the techniques used by both sides of the computer security battle.

CS 4640: Programming Languages for Web Applications

CS Elective

(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
Presents programming languages and implementations used in developing web applications. Both client and server side languages are presented as well as database languages. In addition, frameworks that enable interactive web pages are discussed as well as formatting languages. Language features and efficiencies including scoping, parameter passing, object orientation, just in time compilation and dynamic binary translation are included.

CS 4710: Artificial Intelligence

CS Elective

(3 credits / Prerequisites: CS 2150 or CS 3100 with a grade of C- or better)
Introduces artificial intelligence. Covers fundamental concepts and techniques and surveys selected application areas. Core material includes state space search, logic, and resolution theorem proving. Application areas may include expert systems, natural language understanding, planning, machine learning, or machine perception. Provides exposure to AI implementation methods, emphasizing programming in Common LISP.

CS 4720: Mobile Application Development

CS Elective

(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
Mobile computing devices have become ubiquitous in our communities. In this course, we focus on the creation of mobile solutions for various modern platforms, including major mobile operating systems. Topics include mobile device architecture, programming languages, software engineering, user interface design, and app distribution.

CS 4730: Computer Game Design

CS Elective

(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
This course will introduce students to the concepts and tools used in the development of modern 2-D and 3-D real-time interactive computer video games. Topics covered in this include graphics, parallel processing, human-computer interaction, networking, artificial intelligence, and software engineering.

CS 4740: Cloud Computing

CS Elective

(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
Investigates the architectural foundations of the various cloud platforms, as well as examining both current cloud computing platforms and modern cloud research. Student assignments utilize the major cloud platforms.

CS 4750: Database Systems

CS Elective

(3 credits / Prerequisites: CS 2150 or (CS 2120 and 3140) with a grade of C- or better)
Introduces the fundamental concepts for design and development of database systems. Emphasizes relational data model and conceptual schema design using ER model, practical issues in commercial database systems, database design using functional dependencies, and other data models. Develops a working relational database for a realistic application.

CS 4753: Electronic Commerce Technologies

CS Elective

(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
History of Internet and electronic commerce on the web; case studies of success and failure; cryptographic techniques for privacy, security, and authentication; digital money; transaction processing; wired and wireless access technologies; Java; streaming multimedia; XML; Bluetooth. Defining, protecting, growing, and raising capital for an e-business.

CS 4760: Network Security

CS Elective

(3 credits / Prerequisites: CS 3710 with a grade of C- or better)
This course covers the principles of secure network communications and the application of network security. Topics include: attack types, attack surfaces, attack phases, network security devices.(a)symmetric key encryption, cryptographic hash function, authentication/identification techniques, key distribution, and data integrity assurance. Also, currently used security mechanisms and protocols will be discussed.

CS 4774: Machine Learning

CS Elective

(3 credits / Prerequisites: CS 2150 or CS 3100 with a grade of C- or better; APMA 3100, APMA 3110, MATH 3100, or equivalent and Math 3350 or APMA 3080 or equivalent)
An introduction to machine learning: the study of algorithms that improve their performance through experience. Covers both machine learning theory and algorithms. Introduces algorithms, theory, and applications related to both supervised and unsupervised learning, including regression, classification, and optimization and major algorithm families for each.

CS 4780: Information Retrieval

CS Elective

(3 credits / Prerequisites: CS 2150 or CS 3100 with a grade of C- or better; APMA 3100, APMA 3110, MATH 3100, or equivalent)
An introduction to modern information retrieval technologies. Topics include indexing, query processing, document ranking, query recommendation, personalization, and other current topics in information retrieval. Students develop a custom search engine as part of this course.

CS 4810: Introduction to Computer Graphics

CS Elective

(3 credits / Prerequisites: CS 2150 or (CS 3100 and 3130) with a grade of C- or better)
Introduces the fundamentals of three-dimensional computer graphics: rendering, modeling, and animation. Students learn how to represent three-dimensional objects (modeling) and the movement of those objects over time (animation). Students learn and implement the standard rendering pipeline, defined as the stages of turning a three-dimensional model into a shaded, lit, texture-mapped two-dimensional image.

CS 4970: Capstone Practicum I

CS Elective

(3 credits / Prerequisites: CS 2150 or CS 2501 topic DSA2 with a grade of C- or higher, and BSCS major)
This course is one option in the CS fourth-year thesis track. Under the practicum track, students will take two 3-credit courses, CS 4970 and CS 4971. These courses would form a year-long group-based and project-based practicum class. There would be an actual customer, which could be either internal (the course instructor, other CS professors, etc.) or external (local companies, local non-profits, etc.).

CS 4971: Capstone Practicum II

Capstone

(3 credits / Prerequisites: CS 4970)
This course is one option in the CS fourth-year thesis track and is the continuation from CS 4970. Under the practicum track, students will take two 3-credit courses, CS 4970 and CS 4971. These courses would form a year-long group-based and project-based practicum class. There would be an actual customer, which could be either internal (the course instructor, other CS professors, etc.) or external (local companies, local non-profits, etc.).

CS 4980: Capstone Research

Capstone

(1 - 3 credits / Prerequisites: CS 2150 or CS 2501 topic DSA2 with a grade of C- or higher, and BSCS major)
This course is one option in the CS fourth-year thesis track. Students will seek out a faculty member as an advisor, and do an independent project with said advisor. Instructors can give the 3 credits across multiple semesters, if desired. This course is designed for students who are doing research, and want to use that research for their senior thesis. Note that this track could also be an implementation project, including a group-based project.

CS 4991: Capstone Technical Report

Capstone

(0 credits / Prerequisites: BSCS 4th years (both first & second majors) and pre- or co-requisite STS 4500)
Supports the writing of the technical report component of the fourth-year thesis, credit for which is given in STS 4600. Students will write the report assuming a non-technical audience. The course is part of the CS 4XXX elective option in the fourth-year CS thesis track.

CS 4993: Independent Study

CS Elective

(1 - 3 credits / Prerequisites: Instructor permission.)
In-depth study of a computer science or computer engineering problem by an individual student in close consultation with departmental faculty. The study is often either a thorough analysis of an abstract computer science problem or the design, implementation, and analysis of a computer system (software or hardware).

CS 4998: Distinguished BA Majors Research

BACS DMP

(3 credits / Prerequisites: CS 2150 or CS 2501 topic DSA2 with a grade of C- or higher, and BACS major)
Required for Distinguished Majors completing the Bachelor of Arts degree in the College of Arts and Sciences. An introduction to computer science research and the writing of a Distinguished Majors thesis.

CS 5010: Programming and Systems for Data Science

(3 credits / Prerequisites: CS 1110, Math 1310 or APMA 1110, Math 3351 or APMA 3080, Math 3100, APMA 3010 or APMA 3110)
The objective of this course is to introduce basic data analysis techniques including data analysis at scale, in the context of real-world domains such as bioinformatics, public health, marketing, security, etc. For the purpose of facilitating data manipulation and analysis, students will be introduced to essential programming techniques in Python, an increasingly prominent language for data science and “big data” manipulation.

CS 5012: Foundations of Computer Science

(3 credits / Prerequisites: CS 5010, CS 1110 or equivalent, Math 1210 or equiv, Math 3351 or equiv, Math 3100 or equiv.)
Provide a foundation in discrete mathematics, data structures, algorithmic design and implementation, computational complexity, parallel computing, and data integrity and consistency for non-CS, non-CpE students. Case studies and exercises will be drawn from real-world examples (e.g., bioinformatics, public health, marketing, and security).

CS 5014: Computation as a Research Tool

(3 credits / Prerequisites: None)
This course is an introduction to programming for students who will be using computational methods for their research but are not computer science or computer engineering students. No previous programming experience is required. We use a multi-language/multi-domain approach. The first part of the course covers basic programming concepts for a given language. The last third of the course splits into domain specific tracks of interest to students.

CS 5487: Real-Time Systems

(3 credits / Prerequisites: CS 3330 and CS 4414, knowledge of C or C++, or instructor permission.)
This course presents the underlying theory, concepts, and practice for real-time systems, such as avionics, process control, space travel, mobile computing and ubiquitous computing. The goals of the course include: introducing the unique problems that arise when time constraints are imposed on systems, identifying basic theory and the boundary between what is known today and what is still research, stressing a systems integration viewpoint in the sense of showing how everything fits together rather than presenting a collection of isolated solutions, and addressing multiprocessing and distributed systems. This course also presents some of the basic results from what might be called the classical technology of real-time computing and presents these results in the context of new applications of this technology in ubiquitous/pervasive computer systems.

CS 5501: Selected Topics in Computer Science

(1 - 3 credits / Prerequisites: Instructor permission.)
Content varies annually, depending on students’ needs and interests. Recent topics included the foundations of computation, artificial intelligence, database design, real-time systems, Internet engineering, and electronic design automation.

CS 5787: Security in Information Systems

(3 credits / Prerequisites: CS 3240 and either CS 4457 or CS 4414 or instructor permission.)
This course focuses on security as an aspect of a variety of software systems. We will consider software implementations of security related policies in the context of operating systems, networks, and data bases. Topics include: operating system protection mechanisms, intrusion detection systems, formal models of security, cryptography and associated security protocols, data base security, worms, viruses, network and distributed system security, and policies of privacy and confidentiality.

CS 6111: Cloud Computing

(3 credits / Prerequisites: CS2150 Program and Data Representation or CS 111x Introduction to Programming, CS 4457 Computer Networks or equivalent background.)
This course introduces a basic grounding in designing and implementing cloud systems. It aims to acquaint students with principles and technologies of server clusters, virtualized datacenters, Internet clouds, and applications. Students will gain hands-on experience on public cloud such as Amazon EC2.

CS 6160: Theory of Computation

(3 credits / Prerequisites: CS 3102 or equivalent.)
Analyzes formal languages, the Chomsky hierarchy, formal computation and machine models, finite automata, pushdown automata, Turing machines, Church’s thesis, reductions, decidability and undecidability, and NP-completeness.

CS 6161: Design and Analysis of Algorithms

(3 credits / Prerequisites: CS 4102 or equivalent.)
Analyzes concepts in algorithm design, problem solving strategies, proof techniques, complexity analysis, upper and lower bounds, sorting and searching, graph algorithms, geometric algorithms, probabilistic algorithms, intractability and NP-completeness, transformations, and approximation algorithms.

CS 6190: Computer Science Perspectives

(1 - 3 credits / Prerequisites: CS graduate student or instructor permission.)
This ‘acclimation’ seminar helps new graduate students become productive researchers. Faculty and visitors speak on a wide variety of research topics, as well as on tools available to researchers, including library resources, various operating systems, UNIX power tools, programming languages, software development and version control systems, debugging tools, user interface toolkits, word processors, publishing systems, HTML, JAVA, browsers, Web tools, and personal time management.

CS 6222: Introduction to Cryptography

(3 credits / Prerequisites: CS 2102, 3102, and 4102 (or equivalent experience).)
This course will provide an introduction to modern cryptography and its applications to computer security. This course will cover the fundamentals of symmetric cryptography (i.e., encryption and message authentication) and public-key cryptography (i.e., key-exchange and signatures) as well as cryptographic protocols like zero-knowledge proof systems.

CS 6240: Software Engineering

(3 credits / Prerequisites: CS 3240 or equivalent.)
Analyzes project management, software tools, requirements and specification methods; top-down, bottom-up, and data-flow design; structured programming, information hiding, programming language issues, and coding standards; software development environments, fault tolerance principles, and testing.

CS 6316: Machine Learning

(3 credits / Prerequisites: Calculus, Basic linear algebra, Basic Probability and Basic Algorithm. Statistics is recommended. Students should already have good programming skills.)
This is a graduate-level machine learning course. Machine Learning is concerned with computer programs that automatically improve their performance through experience. This course covers introductory topics about the theory and practical algorithms for machine learning from a variety of perspectives. Topics include supervised learning, unsupervised learning and learning theory.

CS 6333: Mobile and IoT Security

(3 credits / Prerequisites: None)
This course focuses on aspects of system security that arise in this challenging and ever-evolving space of mobile communication systems, primarily focusing on smartphones and IoT platforms. One of the main goals of the course is to improve knowledge and awareness of security issues faced by mobile application and system developers. The material will cover standards and research challenges in both deployed and future systems.

CS 6354: Computer Architecture

(3 credits / Prerequisites: CS 3330 or proficiency in assembly language programming.)
Study of representative digital computer organization with emphasis on control unit logic, input/output processors and devices, asynchronous processing, concurrency, and parallelism. Memory hierarchies.

CS 6415: Performance Analysis of Communication Networks

(3 credits / Prerequisites: CE/ECE 4457, APMA 3100, or instructor permission.)
Analyzes the topologies arising in communication networks; queuing theory; Markov Chains and ergodicity conditions; theory of regenerative processes; routing algorithms; multi-access and random-access transmission algorithms; mathematical methodologies for throughput and delay analyses and evaluations; performance evaluation; performance monitoring; local area networks (LANs); interactive LANs. Cross-listed as ECE 6415.

CS 6434: Dependable Computing Systems

(3 credits / Prerequisites: A basic knowledge of probability and computer architecture is required. A working knowledge of programming is required for homework and mini projects.)
Focuses on techniques for designing and analyzing dependable computer-based systems. Topics include basic dependability concepts and attributes, fault models and effects, combinatorial and state-space modeling, hardware redundancy, error detecting and correcting codes, time redundancy, software fault tolerance, checkpointing and recovery, reliable networked systems, error detection techniques, and experimental dependability evaluation techniques.

CS 6444: Introduction to Parallel Computing

(3 credits / Prerequisites: CS 3330, 4414, and 4610, or instructor permission.)
Introduces the basics of parallel computing. Covers parallel computation models, systems, languages, compilers, architectures, and algorithms. Provides a solid foundation on which advanced seminars on different aspects of parallel computation can be based. Emphasizes the practical application of parallel systems. There are several programming assignments.

CS 6456: Operating Systems

(3 credits / Prerequisites: Undergraduate course in OS; CS 6354 or instructor permission.)
Covers advanced principles of operating systems. Technical topics include support for distributed OSs; microkernels and OS architectures; processes and threads; IPC; files servers; distributed shared memory; object-oriented OSs; reflection in OSs; real-time kernels; multiprocessing; multimedia and quality of service; mobile computing; and parallelism in I/O.

CS 6465: Human-Robot Interaction

(3 credits / Prerequisites: None)
Interactions between robots and humans are influenced by form, function and expectations. Quantitative techniques evaluate performance of specific tasks and functions. Qualitative techniques are used to evaluate the interaction and to understand expectations and perceptions of the human side of the interaction. Students use humanoid robots to develop and evaluate interactions within a specific application context.

CS 6478: Text Mining

(3 credits / Prerequisites: CS2150 is the prerequisite of this course.)
Given the dominance of text information over the Internet, mining high-quality information from text becomes increasingly critical. In this course, we will cover important topics in text mining including: text analysis techniques, basic natural language processing algorithms, text categorization and clustering, sentiment analysis, social network and social media analysis, and probabilistic topic models.

CS 6501: Special Topics in Computer Science

(3 credits / Prerequisites: Instructor permission.)
Course content varies by section and is selected to fill timely and special interests and needs of students. See CS 7501 for example topics. May be repeated for credit when topic varies.

CS 6610: Programming Languages

(3 credits / Prerequisites: CS 4610 or equivalent.)
Examines modern and non-imperative languages, the theoretical techniques used to design and understand them, and the implementation techniques used to make them run. Topics include functional languages, object-oriented languages, language safety and classification of errors, type systems, formal semantics, abstraction mechanisms, memory management, and unusual control-flow mechanisms. Example languages include Standard ML, Modula-3, CLU, Scheme, Prolog, and Icon.

CS 6620: Compilers

(3 credits / Prerequisites: CS 3330 or instructor permission.)
Study of the theory, design, and specification of translation systems. Translation systems are the tools used to translate a source language program to a form that can be executed. Using rigorous specification techniques to describe the inputs and outputs of the translators and applying classical translation theory, working implementations of various translators are designed, specified, and implemented.

CS 6666: Data Mining - Principles and Algorithms

(3 credits / Prerequisites: None)
This graduate-level course introduces the fundamental techniques, algorithms, and applications of data mining. Topics to be covered include frequent pattern mining, clustering, classification, anomaly detection, feature selection, graph and network analysis, correlation analysis, distance/similarity metric learning, streaming data mining, spatiotemporal data mining, visualization of patterns, recommendation systems, and evaluation and validation.

CS 6750: Database Systems

(3 credits / Prerequisites: CS 4750 or equivalent.)
Studies new database systems, emphasizing database design and related system issues. Explores advanced topics such as object-oriented and real-time database systems, data warehousing, data mining, and workflow. Makes use of either commercial or research database systems for in-class projects.

CS 6762: Signal Processing, Machine Learning and Control

(3 credits / Prerequisites: None)
This is a core Cyber Physical Systems (CPS) class. It provides fundamental core material in signal processing, machine learning, and feedback control. However, the material is not presented in a traditional manner and does not replace deep domain expertise in these topics. Rather, the principles and skills taught in this class highlight the intersection of the cyber and the physical.

CS 6763: Cyber-Physical Systems: Formal Methods, Safety and Security

(3 credits / Prerequisites: None)
Cyber-physical systems (CPS) are smart systems that include co-engineered interacting networks of physical and computational components. This course will teach students the required skills to analyze the CPS that are all around us, so that when they contribute to the design of CPS, they are able to understand important safety and security aspects and feel confident designing and analyzing CPS systems.

CS 6777: Advances in Software Testing

(3 credits / Prerequisites: CS 3240 or equivalent.)
This course will examine fundamental software testing techniques, the state-of-the-art in software testing, and open challenges and research problems in testing. Topics include fault and failure models, test coverage criteria, automated test generation, test oracles, testing evolving software, and testing in specific application domains and cutting-edge software development environments.

CS 6840: Computer Graphics

(3 credits / Prerequisites: Knowledge of C/C++.)
Analyzes display devices, line and circle generators; clippings and windowing; data structures; 2-D picture transformations; hidden line and surface algorithms; shading algorithms; free form surfaces; color graphics; 3-D picture transformation. Cross-listed as ECE 6435.

CS 6888: Software Analysis and Applications

(3 credits / Prerequisites: CS 3240)
This course provides an overview of the state of the art in software analysis including static and dynamic analysis techniques and verification and validation. It explores the various ways that the analyses are used to predict software behavior. The applications include inference, symbolic execution, fault localization, model checking, security and performance. The course combines theory with practical implementation and usage.

CS 6890: Industrial Applications

(1 credits / Prerequisites: None)
A graduate student returning from Curricular Practical Training can use this course to claim one credit hour of academic credit after successfully reporting, orally and in writing, a summary of the CPT experience to his/her academic advisor.

CS 6993: Independent Study

(1 - 12 credits / Prerequisites: None)
Detailed study of graduate course material on an independent basis under the guidance of a faculty member.

CS 7457: Computer Networks

(3 credits / Prerequisites: CS 6456 or instructor permission.)
Analyzes network topologies; backbone design; performance and queuing theory; data-grams and virtual circuits; technology issues; layered architectures; standards; survey of commercial networks, local area networks, and contention-based communication protocols; encryption; and security. Course equivalent to ECE 7457.

CS 7501: Selected Topics in Computer Science

(3 credits / Prerequisites: Instructor permission.)
Content varies based on the interest and needs of students. Topics may include safety critical systems, parallel processing, information retrieval, data communications, computer networks, real-time computing, distributed multimedia systems, electronic commerce, and advanced combinatorics and graph theory.. May be repeated for credit when topic varies.

CS 7620: Advanced Compilers

(3 credits / Prerequisites: CS 6160 and 6610, or equivalent.)
Study of advanced compilation techniques with a focus on code generation and optimization techniques, advanced execution environments, and compilation of emerging programming languages.

CS 7993: Independent Study

(1 - 12 credits / Prerequisites: None)
Detailed study of graduate course material on an independent basis under the guidance of a faculty member.

CS 7995: Supervised Project Research

(3 credits / Prerequisites: None)
Formal record of student commitment to project research for the Master of Computer Science degree under the guidance of a faculty advisor.

CS 8000: Non-UVa Transfer/Test Credit Approved

(1 - 48 credits / Prerequisites: None)
Non-UVa Transfer/Test Credit Approved

CS 8501: Special Topics in Computer Science

(3 credits / Prerequisites: None)
Special Topics in Computer Science

CS 8524: Topics in Software Engineering

(1 - 3 credits / Prerequisites: CS 6240 or instructor permission.)
A special topics course in software engineering. Topics are determined by the individual instructor, but might include software reliability; engineering real-time systems; managing large software projects; resource estimation; validation and verification; or advanced programming environments.

CS 8535: Topics in Computer Architecture

(3 credits / Prerequisites: CS 6354 or instructor permission.)
Studies selected advances in the architecture of computer systems. May include distribution processor systems, memory hierarchies, and secondary storage management schemes.

CS 8561: Topics in Programming Languages

(3 credits / Prerequisites: CS 6610 or instructor permission.)
Studies selected advanced topics in design, definition, and implementation of programming languages. Typical recent topics: parallel language design; formal semantics of programs. May be repeated for credit when the topics vary.

CS 8575: Topics in Database Systems

(3 credits / Prerequisites: CS 6750 or instructor permission)
Analyzes the implementation of database systems, concurrent and distributed access, backup, and security; query languages and optimization of query access; multi-attribute dependencies and retrieval. Data warehousing and web-based data systems are explored.

CS 8897: Graduate Teaching Instruction

(1 - 6 credits / Prerequisites: None)
For master’s students who are teaching assistants.

CS 8999: Thesis

(1 - 12 credits / Prerequisites: None)
Formal record of student commitment to thesis research for the Master of Science degree under the guidance of a faculty advisor. May be repeated as necessary.

CS 9897: Graduate Teaching Instruction

(1 - 6 credits / Prerequisites: None)
For doctoral students who are teaching assistants.

CS 9999: Dissertation

(1 - 12 credits / Prerequisites: None)
Formal record of student commitment to doctoral research under the guidance of a faculty advisor. May be repeated as necessary.


Table of contents