B.S. in Computer Science

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.


All students must complete the unified set of general requirements for all engineering majors. 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.

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.

B.S. in Computer Science Curriculum

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.

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.


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 separate 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:

  • Three credits of student work, either through independent research or a CS elective
  • 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. 

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.

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.

The information contained on this website is for informational purposes only.  The Undergraduate Record and Graduate Record represent the official repository for academic program requirements. These publications may be found here.