CS Undergraduate Programs

  • Prospective Students

    The Department of Computer Science in the University of Virginia offers quality programs that emphasizes basic science, technical mastery, research opportunities and a firm grasp of scientific principles as well as strong communication skills and creative problem solving. The department offers a Bachelor of Science in Computer Science, a Bachelor of Arts in Computer Science (in collaboration with UVA’s College of Arts & Sciences), and a Bachelor of Science in Computer Engineering (in collaboration with the UVA Charles L. Brown Department of Electrical and Computer Engineering). The department also offers a Computer Science Minor for Undergraduates.

    Undergraduate students are not admitted to particular majors at the University of Virginia. Instead, they are admitted to a school at the University, and later declare a major.

    The Department of Computer Science resides within the School of Engineering and Applied Science (SEAS), but offers majors both to students admitted to SEAS and to students admitted to the College of Arts and Sciences. Students who perform adequately in early CS courses are admitted to a CS major upon major application regardless of their school.

    We would love for you to visit UVA! Start by viewing the Engineering School's "Visit Us" page for details.  

  • Admissions / Tuition

    Learn about the requirements, application process, transfer information, cost, and more at the Engineering School's undergraduate admissions page

    Questions regarding admissions should be directed to undergradadmission@virginia.edu

    For questions or more information specific to computer science, contact cs-admissions@virginia.edu

    The information contained on this website is for informational purposes only.  The Undergraduate Record represents the official repository for academic program requirements. This publication may be found here: www.virginia.edu/registrar/catalog/ugrad.html.

    The UVA Tuition and Fees page includes the costs per academic year by school. 

  • Undergraduate Degree Information and Advising

    The Department of Computer Science offers both a Bachelor of Science degree through the School of Engineering and Applied Science and a Bachelor of Arts degree through the College of Arts and Sciences. For more information about these degree programs, along with advising information and example schedules, please go to http://uvacsadvising.org.

    UVA CS Advising Page
  • Differences: BS vs. BA Degree

    The Department of Computer Science offers two Computer Science degrees: the Interdisciplinary Major in Computer Science degree offered through the College of Arts & Sciences (BACS), and the Bachelor of Science in Computer Science degree offered through the School of Engineering and Applied Sciences. In addition to the two Computer Science degrees, we also offer a Bachelor of Science in Computer Engineering (aka CpE) degree which is jointly administered with the Electrical and Computer Engineering Department .

    The main similarities and differences between the two Computer Science degrees are:

    1. The BACS degree is in the College of Arts & Sciences; the BSCS is in the School of Engineering and Applied Science. This means the degrees have different general requirements. The general requirements for the College of Arts & Sciences are the competency requirements (see the Undergraduate Record for details). For example, the traditional option for these includes two writing requirements, a foreign language, and area requirements in natural science and mathematics, social sciences, humanities, and historical studies. The general requirements for the School of Engineering and Applied Sciences include mathematics, chemistry, physics, technical electives, humanities electives, and science, technology, and society courses. To enroll in the BACS major, students must be enrolled in the College of Arts & Sciences. To enroll in the BSCS major, students must be enrolled in the School of Engineering and Applied Science.
    2. With the creation of the new curriculum as outlined at http://advising.uvacs.org, students in both degree programs will complete the same CS foundation requirements - CS 111X, CS 2100, CS 2120, CS 2130, CS 3100, CS 3120, CS 3130, and CS 3140.  BACS students need to complete CS 111X and CS 2100 in order to declare the major.
    3. BSCS students are required to take CS 3240 (Advanced Software Development) and a course counting toward the CS capstone requirement, while BACS students are not.

    4. Both degrees require additional courses be taken as CS electives, which are CS courses at the 3000-level or above that are in addition to a degree's required courses described above. The BACS degree requires 3 CS elective courses (9 credits), while the BSCS requires 5 courses (15 credits).

    5. The BACS degree requires four integration electives, which are not part of the BSCS degree. The integration electives are courses in other departments that have strong connections with computing. Look under the BACS tab at http://advising.uvacs.org for a list of pre-approved integration electives.

    6. The BSCS degree (like all Engineering School degrees) requires a fourth-year thesis. This involves taking STS 4500 (in which students write a thesis proposal) and STS 4600 (in which students complete a thesis report), and writing a technical thesis. BACS students are not required to complete a thesis, but may enter the distinguished majors program. To complete a distinguished major, a BACS student must complete a fourth year thesis project that is approved by two readers.
  • BSCS Curriculum

    School of Engineering and Applied Science General Requirements

    BSCS students must complete the unified set of general requirements for all engineering majors. More information can be found on the SEAS Curricular Requirements page. These courses are often completed during the first two years in SEAS, with the exception of STS 4500 and 4600, which are taken during the fall and spring of the fourth year, respectively.



    Introduction to Programming

    All SEAS students (including CS majors) must complete one Introduction to Programming course as a part of their general SEAS requirements. Students may also complete this requirement through Advanced Placement (AP), International Baccalaureate (IB), or dual-enrollment credit. Some students with programming experience may wish to take the place-out test, which satisfies the requirement but does not award degree credit. More information can be found in the Place-Out Tests section below.

    Choose one of the following:

    • CS 1110 - Introduction to Programming (Credits: 3) - A general introduction course, including a lecture and lab. Appropriate for all students, whether they have programming background or not.
    • CS 1111 - Introduction to Programming (Credits: 3) - An introduction course for students who have some programming experience but not enough to place-out of the course or who wish to review the material. Proof of programming experience may be required.
    • CS 1112 - Introduction to Programming (Credits: 3) - An introduction course only for students with no programming experience. Lecture and lab are combined.
    • CS 1113 - Introduction to Programming (Credits: 3) - A special topics introduction course that is offered occasionally. Check the specific course offering for more information.


    Foundation Courses

    These courses are the next set of courses students take after finishing Introduction to Programming and comprise the set of prerequisites needed for upper-level courses. The 2000 level courses should be taken before the 3000 level courses and note that there are other prerequisites that govern the order that these courses should be taken. An example schedule can be found in the Degree Handouts and Resources section.


    Upper-Level Required Courses

    BSCS majors must take one upper-level course in software engineering and one course to complete the SEAS senior thesis.

    The senior thesis should be taken during the student’s last year and consists of the STS 4500/4600 sequence (see the General Requirements listed above) together with one of the following options:


    Computer Science Electives

    BSCS majors must complete 15 credits of CS courses at the 3000 level or higher. These courses must have the CS mnemonic. Courses from other disciplines will only be accepted under rare circumstances and by approval of the CS Undergraduate Curriculum Committee. Additional CS electives may be required as part of the CS 4991 option for the senior thesis or to fill in missing credits due to place-out test.

    Guidelines for CS Electives:

    • Must have a CS mnemonic.
    • Must be at the 3000 level or higher.
    • Must not be a foundation course or upper-level required course
    • Second digit of course number must not be 0 or 9, except as noted below
    • Two electives with significant overlap of material cannot both count toward the CS degree.
    • Up to three (3) credits of CS 4993 - Independent Study may count toward the CS elective requirement. Credits beyond this limit may be applied to the unrestricted elective requirement.


    Applied Mathematics Electives

    BSCS majors must take three (3) additional courses in Applied Mathematics beyond the SEAS General Requirements. Equivalent courses from the Department of Mathematics may be substituted for matching APMA courses.

    Choose two of these four:


    • APMA 3120 and APMA 3150 are both statistics courses with substantial overlap and thus cannot both count toward the BSCS degree. Students interested in taking these courses should choose one or the other.
    • APMA 3110 - Applied Statistics and Probability does not count toward the BSCS degree. Students switching to the BSCS major who have already had this course should consult with their advisor on further APMA courses.
    • STAT 3080 - From Data to Knowledge cannot be used in place of APMA 3150 due to differences in content.


    Humanities and Social Science (HSS) Electives

    BSCS majors must complete a total of fifteen (15) credits of HSS electives, which includes the nine (9) credits of HSS courses required by the general SEAS requirements. HSS electives are selected from an approved list (available in A122 Thornton Hall or in the UVA Engineering Undergraduate Handbook) of humanities and social science offerings. Communication courses in the student’s native or first language, regardless of their level, may not be used to satisfy this requirement. See the SEAS page regarding electives for more information.

    Unrestricted Electives

    BSCS majors must complete fifteen (15) credits of unrestricted electives. Unrestricted electives may be chosen from any graded course in the University except mathematics courses below MATH 1310; courses that substantially duplicate any others offered for the degree, including PHYS 2010, PHYS 2020, CS 1010, CS 1020; any introductory programming course; or SCPS courses. APMA 1090 counts as a three credit unrestricted elective. See the SEAS page regarding electives for more information.

    GPA Requirement

    BSCS majors must have a 2.0 GPA average for CS courses in order to graduate. For courses that must be repeated due to a failing grade or not obtaining the needed grade as a prerequisite for a later course, all grades (including the original grade) count toward the CS GPA.

    Capstone Information

    The BSCS Capstone is seperate but related to the SEAS Senior Thesis requirement for graduation. As a part of the SEAS Senior Thesis, students will take STS 4500 and STS 4600 during their last two semesters at UVA. Through these courses, students will create a Senior Thesis Portfolio accordoing to the SEAS Thesis Portfolio Guide. The Portfolio contains several parts, most of which will be done through the STS courses.

    However, the part that intersects with the CS Capstone is the “Technical Report.”

    The CS Capstone is comprised of two parts:

    1. Three credits of student work, either through independent research or a CS elective
    2. Writing the technical report as a part of the SEAS Senior Thesis

    There are two primary options for completing these two steps:

    Option 1) Take 3 credits of CS 4980 (or CS 4993) and write the technical report at the end of this course. Whoever you take CS 4980 with will sign off on the paper as being your technical report component for your senior thesis portfolio that you do with STS during 4500 and 4600. Reach out to faculty to see what projects they may have or check out http://ug-research.cs.virginia.edu for ideas!

    Option 2) Take a 6th CS elective (CS 3000 or higher) -AND- take the 0-credit CS 4991 course. The 6th CS elective will cover your required 3 credits needed for the capstone slot in your SIS Academic Requirements report. CS 4991 is the course in which we track and evaluate a your technical report that you come up with on your own. This course is pass/fail and you need a pass to graduate.

    Undergraduate Record



  • BACS Curriculum

    BACS Prerequisites

    To declare the degree, you must have completed the following:

    • An introductory computer science course, such as CS 1110 , CS 1111 , CS 1112 , CS 1113 or CS 1120 , or an equivalent course; or successful completion of the associated place-out test.
    • CS 2100 - Data Structures and Algorithms 1 (with C+ or higher) or equivalent or successful completion of the associated place-out test.


    BACS Required CS Courses

    All BACS majors must complete the following courses (20 credits):


    Computer Science Electives

    All BACS majors must complete 9 credits (normally 3 courses) of CS electives. These are CS courses at the 3000-level or above, in addition to the required courses listed above. At most, 3 credits of CS 4993 (Independent Study) can be counted towards this requirement. CS 4980 and CS 4998 cannot be counted towards this requirement.


    Integration Electives

    All BACS majors must complete 12 credits of Integration Electives. These are non-CS courses that contribute to this program of study by exploring applications of computing to arts and sciences fields in a significant way or by providing fundamental computing depth and background. Integration electives are courses offered by departments in the College of Liberal Arts and Sciences. The list of approved courses can be found in the BACS section of the UG Record.


    Distinguished Majors Program

    Prof. David Evans manages the BACS Distinguished Majors Program (DMP), and details about that program can be found at https://csdmp.github.io/. Students who apply to and are accepted to be in the Distinguished Majors Program must complete the usual degree requirements as well as a fourth year thesis project. This requires two semesters of CS 4998 - Distinguished BA Majors Research (3 credits each semester) in addition to the usual requirements.

  • Declaring a Major or Minor

    BS Major | CS Minor | BA Major


    Declaring the BS Major

    First-year students: All first-year Engineering students choose their major in the Spring semester of their first year. At that time, students seeking either the BSCpE or BSCS major will submit their preference to ENGINEERING DEAN'S OFFICE which manages that process. 

    Engineering Students Changing Majors or Seeking a Second Major: It is strongly suggested for students to be enrolled in (or to have already completed) CS 2100 prior to applying to the BSCS major. Applications from students who are currently enrolled in CS 2100 may not be processed until after the grade is posted in SIS. In order to apply for the BSCS major, please complete and submit the appropriate DocuSign below. 

    At this time, Engineering students are not eligible to apply for the BACS (i.e., the College degree) as a second major. 

    Intra-University Transfer Students: Engineering accepts transfer applications for non-SEAS UVa students, currently once a year. Qualified applicants who want to transfer into Engineering to become BSCpE or BSCS majors will be considered on a space-available basis given our target caps for each class year. Such students should follow the Engineering application process, and must contact the Computer Science (CS) department contact person listed in the Engineering webpage before applying. Contact LISA LAMPE and MARK SHERRIFF for more information.  

    Transfer Students from Outside the University: Students transferring into the University from other institutions must apply to the department to be allowed to declare the BSCS or BSCpE major. Qualified applicants will be considered on a space-available basis, given our target caps for each class year. Applications will be considered the summer before a transfer student begins classes, and the application process will be discussed during the summer orientation session. If an incoming transfer does not attend summer orientation, they must meet with a department advisor before classes begin to discuss applying. 

    Transfer students without the CS 1110 equivalent before their first semester in residence cannot be accepted into the major. Due to prerequisite dependencies, it is difficult for rising 3rd-year students who have not completed CS 2110 and CS 2102 or CS 2100 and CS 2120 to complete the BSCS in the 4 remaining semesters. It is important that students transferring to the University as third-years complete the equivalent of these courses before coming to UVa. In exceptional cases, students in this situation may apply for the major, but the ability to complete the degree in a timely fashion is one factor that will determine if you are accepted into the degree program. 


    Declaring a Minor in CS

    Any undergraduate student in the university who has completed CS 2100 with a C- or higher can apply for the minor. To apply for the minor, complete and submit the Engineering School’s MINOR APPLICATION FORM via DocuSign.  

    The Computer Science minor requires credit for six CS courses as described in the UNDERGRADUATE RECORD.    

    Any student who has not declared but is able to complete all of the requirements for a minor in Computer Science before graduation will be awarded the minor if they submit the minor request form at the beginning of their graduation semester.  

    BS in Computer Engineering majors: When the CpE program was created, it was decided by the two departments that CpE students could not declare the minor in CS. Because the CpE combines CS and EE, graduates with this degree will automatically have the equivalent of the minor in CS.   


    Declaring a BA Major

    Can I declare? The BACS was created for College students who want to combine the study of computer science with coursework that combines computing with other fields of the arts and sciences. Engineering students are not eligible to declare the BACS and should instead declare the CS minor or the BSCS as a second major. Students from other schools should contact the Director of the BACS program at bacsdirector@virginia.edu

    To declare the BACS, you must have completed the prerequisites at the time you submit your major declaration. They are:  CS1110 or equivalent with a C+ or higher, and CS2110 or CS 2100 or equivalent with a C+ or higher.

    Incoming transfer students who believe they have met the prerequisites should contact the BACS Director by emailing bacsdirector@virginia.edu to be advised and have any questions about course equivalencies resolved.

    How do I declare? To declare you will complete a CS department declaration form and submit that when you submit the College’s Major Declaration form using DocuSign. Information on how to do all of this can be found at this link: https://bit.ly/bacs-declaring.  Be sure to follow the instructions on that page (and don’t just follow the College website’s instructions about DocuSign).

    When can I declare? You can submit your declaration any time, but our staff may not necessarily process it immediately. (In particular, those submitted in summer may not be processed until mid-August.) Declaration forms will be reviewed on a rolling basis and pending submissions will normally be handled by the 15th of each month (but not in the summer). We will attempt to process declaration forms submitted at peak times (start of fall term, right before course registration) more promptly.

    Will I be accepted into the major? All College students who meet the prerequisites will be allowed to declare. Currently there are no “caps” or limits on the number of College students who can declare the BACS. So it is not a competitive admissions situation.

    Questions? Send email to cs-admissions@virginia.edu with a subject line "BACS application question".

  • Bachelor of Science in Computer Engineering

    The Computer Engineering Program (a program that CS offers in collaboration with the Charles L. Brown Department of Electrical and Computer Engineering) gives students an opportunity to work with some of the top researchers in the country and to participate in new research initiatives.

    CPE Undergraduate Curriculum
  • Cyber Security Focal Path

    The Department of Computer Science is a National Center of Excellence in Cyber Defense (NCAE-CD).  As part of the NCAE-CD program, students can complete a rigorous focal path in cybersecurity. A focal path is a selection of courses that covers the cybersecurity  Knowledge Units (KUs) specified by the NCAE program office. The Department of Computer Science Cybersecurity Focal Path requires ten courses. 

    Cybersecurity Focal Path required courses
  • Accreditation

    The Bachelor of Science in Computer Science degree offered by the Department of Computer Science is accredited by the Computing Accreditation Commission of ABET, https://www.abet.org.

    The Bachelor of Science in Computer Engineering degree offered jointly by our department and the Department of Electrical and Computer Engineering is accredited by the Engineering Accreditation Commission of ABET, https://www.ABET.org

    Each degree program has defined Program Educational Objectives (PEOs), which are broad statements that describe the career and professional accomplishments that the program is preparing graduates to achieve. In addition, each program has defined Student Outcomes (SOs), which are are narrower statements that describe what students are expected to know and be able to do by the time of graduation. These relate to the skills, knowledge, and behaviors that students acquire in their matriculation through the program.

    These objectives and outcomes for the BS in Computer Engineering are found on this page.

    Those for the BS in Computer Science are documented below.

    Program Educational Objectives for the BSCS

    Graduates of the Bachelor of Science program in Computer Science at the University of Virginia:

    1. have the knowledge and skills that allow them to make tangible contributions in their profession.
    2. have the knowledge and skills that allow them meet new technical challenges.
    3. are able to contribute effectively to society.
    4. are able to work effectively as team members.
    5. have the ability to be innovators in the design, analysis and application of computer systems.


    Student Outcomes for the BSCS

    By the time of graduation, students in the BS in Computer Science program at the University of Virginia are able to: 

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


    Enrollment & Graduation Statistics

    The Bachelor of Science in Computer Science (BSCS) enrollment and graduation statistics can be found on the UVA Engineering School's Enrollment & Graduation Statistics page

UVA Undergraduate Program in Computer Science

Discover UVA computer science’s welcoming, supportive culture and outcomes-oriented curriculum.