CS Undergraduate Degrees and Advising Info

Frequently Asked Questions (Spring 2022)

  • Advice for Students With Credit for CS 2110 and the New Curriculum

    The CS Undergraduate Curriculum Committee met on Wednesday, November 3, and made the following decisions regarding students who have taken CS 2110 but want to continue with the New Curriculum instead of the Old Curriculum:

    • Students who have taken CS 2110 (or have credit for CS 2110 through dual enrollment or IB) are allowed to take CS 2100 to continue with the New Curriculum.
    • If a student makes this choice, CS 2110 will not count at all toward their degree program (University rules prohibit two courses with substantial material overlap from counting toward your degree).  It will be as if you are "retaking" a course.
    • Students who have taken CS 2110 can opt to take the CS 2100 place out test.  This test will focus on the material that is NOT in CS 2110, but IS in CS 2100 so that we can ensure you would be sufficiently prepared for CS 3100.
    • The place out test will be ready prior to the first day of classes in January.  While it may be available befor then, we cannot guarantee this as we are still creating and evaluating the test.  We will update this page when it becomes available.

    The CS Undergraduate Curriculum Committee advises that students who have credit for CS 2110 continue on with the Old Curriculum for a variety of reasons:

    • You have already invested time/energy into CS 2110.
    • The New Curriculum is a redistribution of topics from the Old Curriculum.  While there is some new material (and some material removed from the Old Curriculum), you will still be just as prepared for later CS courses.

    Some reasons to potentially take CS 2100 if you have had CS 2110 include:

    • You do not feel that you fully grasped all the concepts in CS 2110 and repeating the course would aid your mastery of the material.
    • If you have a specific cohort that you wish to progress through the CS degree with.
  • What if I have to choose between CS 2100 and CS 2130?

    If you have to choose between CS 2100 and CS 2130, take CS 2100.  CS 2100 is (effectively) a co-requisite for CS 2130, unless you have decent knowledge of a programming language other than Python (like Java, C#, C++) as it will rely on you knowing things like how curly braces work in programs, etc.

  • When do CS courses open to non-majors?

Old Curriculum

The information in these sections is intended for students who declared the BSCS or CS minor before the fall semester of 2021 and students who declared the BACS before the spring semester of 2022.  BSCS students who declare in fall 2021 or later and BACS students who declare in spring 2022 or later should refer to the New Curriculum section below.

  • Bachelor of Science Degree

    Old Curriculum

    The information on this page is intended for students who declared the BSCS major before the fall semester of 2021.  Students who will declare the major after fall 2021 (or have previously taken CS 2100) should refer to the new curriculum page.

    Undergraduate Record

    The official undergraduate record contains the official rules for completing the degree program.  If there is any disagreement between these pages and the rules in the undergraduate record, the record is the final authority.

    Declaring the Major

    Students declare their major in the School of Engineering and Applied Science either in their second semester if they entered the school as a first year student or upon transfer to the School.  More information can be found on the SEAS page for major declaration.

    Degree Handouts

    Degree checklist, example schedule, and prerequisite chart: http://bscsoldchecklist.uvacs.org

    Degree Requirements

    All students completing the Bachelor of Science degree in Computer Science must fulfill the following requirements.

    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.

    • APMA 1090 - Single Variable Calculus I (Credits: 4)

    • APMA 1110 - Single Variable Calculus II (Credits: 4)

    • APMA 2120 - Multivariable Calculus III (Credits: 4)

    • CHEM 1410/1411 - Introductory Chemistry I & Lab (Credits: 4)

    • CS 1110/1111/1112/1113 - Introduction to Programming (Credits: 3) (more info below)

    • ENGR 1624 - Introduction to Engineering

    • PHYS 1425/1429 - Introductory Physics I & Lab (Credits: 4)

    • PHYS 2415/2419 - Introductory Physics II & Lab (Credits: 4)

    • STS 1500 - Science, Technology, and Contemporary Issues (Credits: 3)

    • STS 2000 or 3000 level - STS Elective (Credits: 3) (see Department of Engineering and Society for more information)

    • STS 4500 - STS and Engineering Practice (Credits: 3)

    • STS 4600 - The Engineer, Ethics, and Professional Responsibility (Credits: 3)

    • Math and Science Elective (Credits: 3)

    • Humanities or Social Science Electives (Credits: 9) (more info below)

    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.

    Lower-Level Required 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.

    • CS 2110 - Software Development Methods (Credits: 3)

    • CS 2120 (or CS 2102) - Discrete Mathematics and Theory 1 (Credits: 3)

    • CS 2150 - Program and Data Representation (Credits: 3)

    • CS/ECE 2330 - Digital Logic Design (Credits: 3)

    Upper-Level Required Courses

    BSCS majors must take five upper-level courses and one course to complete the CS capstone (as a part of the SEAS senior thesis requirement):

    • CS 3102 (or CS 3120) - Theory of Computation (Credits: 3)

    • CS 3240 - Advanced Software Development Techniques (Credits: 3)

    • CS 3330 - Computer Architecture (Credits: 3)

    • CS 4102 (or CS 3100) - Algorithms (Credits: 3)

    • CS 4414 - Operating Systems (Credits: 3)

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

      • CS 4980 - Capstone Research (Credits: 3)

      • CS 4971 - Capstone Practicum II (Credits: 3)

      • CS 4991 - Capstone Technical Report (Credits: 0) AND a three-credit, graded CS 4000 course not used to fulfill any other CS degree requirement

      • NOTE: CS 4971 may not be offered every year.  It will not be offered in Spring 2022.

    Computer Science Electives

    BSCS majors must take five (5) 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

    • Must be three (3) credits (or more)

    • 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 3100 - Probability (Credits: 3)

    • Choose two of these four:

      • APMA 2130 - Ordinary Differential Equations (Credits: 4)

      • APMA 3080 - Linear Algebra (Credits: 3)

      • APMA 3120 - Statistics (Credits: 3)

      • APMA 3150 - From Data to Knowledge (Credits: 3)

    Note that 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.  Also, 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.

    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.

  • Bachelor of Arts Degree

    Old Curriculum

    The information on this page is intended for students who can declare the BACS major before the end of spring semester of 2022 (i.e. have completed the prerequisites to declare the major by Fall 2021).  Students who will not have completed the prerequisites to declare the major by the end of Fall 2021 should refer to the new curriculum page.

    Undergraduate Record

    The official undergraduate record contains the official rules for completing the degree program.  If there is any disagreement between these pages and the rules in the undergraduate record, the record is the final authority.

    Declaring the Major

    Information on how to declare the BACS major can be found at: https://bit.ly/bacs-declaring

    Degree Handouts

     

    Advising for Spring 2021

    If you have completed CS 2110 with a C+ or higher (or a CR during a “covid” semester) by the end of fall 2021:

    • You will continue with the old curriculum through graduation.  Nothing in the new curriculum section applies to you.
    • If you have not yet declared the BACS degree, you will be able to declare the current BACS Interdisciplinary Major and follow the degree requirements given in the 2021-22 Undergraduate Record above.
    • You should complete CS 2150 in spring 2021 or fall 2022 (the last semester we plan to offer it).

    If you WON’T complete CS 2110 with a C+ or higher (or a CR during a “covid” semester) by the end of fall 2021, please see the New Curriculum section of this page for your degree requirements.

  • Computer Science Minor

    Old Curriculum

    The information on this page is intended for students who declared the CS minor before the fall semester of 2021.  Students who will declare the minor after fall 2021 should refer to the new curriculum page.

    Undergraduate Record

    The official undergraduate record contains the official rules for completing the CS minor.  If there is any disagreement between these pages and the rules in the undergraduate record, the record is the final authority.

    CS Minor Requirements

    The Computer Science minor requires credit for six CS courses as described below. Any undergraduate student in the university who will complete the requirements for the CS minor before graduation can submit the minor application form during the first week of their final semester in order to graduate with the CS Minor listed on their transcript.  (See Declaring a Major or Minor.)

    To obtain a minor in computer science, a student must complete the following requirements:

    • CS 1110 (or equivalent) - Introduction to Programming (Credits: 3)

    • CS 2110 - Software Development Methods (Credits: 3)

    • CS 2120 (or CS 2102) - Discrete Mathematics and Theory 1 (Credits: 3)

    • CS 2150 - Program and Data Representation (Credits: 3)

    • Two additional CS courses numbered 3000 or higher

    Students with a computer science or computer engineering major are ineligible for the CS minor.

    Any student who completes 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.

    Notes:

    (1) If you place out of CS 1110 via the placement exam, you still have to take 6 C  courses; if you receive course credit for it via the AP exam or transfer credit, then you need not substitute a course in its place.

    (2) At most 3 credits of CS4993, Independent Study, can count as a CS elective for the minor.

New Curriculum

The information in these sections is intended for students who declared the BSCS or CS minor during the fall semester of 2021 and after and students who declared the BACS during the spring semester of 2022 and after.  BSCS students who declared before fall 2021 or have taken CS 2110 and BACS students who declared before spring 2022 or have taken CS 2110 should refer to the Old Curriculum section.

  • What is the New Curriculum?

    Q: Is there a place I can find out the whole story about the new curriculum and why the change was made?

    A: Yes!  Prof. Tychonievich and Prof. Sherriff wrote a paper on the curriculum change and it has been accepted for publication at the 2022 ACM SIGCSE Technical Symposium.  A preprint version of the paper can be found at: http://www.cs.virginia.edu/~sherriff/papers/New_Curriculum_SIGCSE_TS_2022.pdf

    Q: What is the new curriculum?

    A: The new curriculum is the culmination of eight years of work by the CS faculty evaluating our old curriculum against national trends in CS curriculua and determining what we needed to do to improve our current courses.  The main outcome of this effort is the new "foundation" set of courses.  Other changes are being considered, but are not yet ready to be implemented.

    Q: What is the new foundation?

    A: A redistribution of the "core" required CS content into a new set of courses.  This includes the material in CS 2102, CS 2110, CS 2150, CS 2330, CS 3102, CS 3330, and CS 4102.

    Q: Why is CS making this change?

    A: To reduce duplication of material, better balance material between courses, better serve more degree programs, create a better base for some electives, and update some content to better reflect advances in the field.

    Q: Is the new or old curriculum harder?

    A: Content-wise, we expect them to be equivalent in this respect. By rebalancing the amount of content in each course, we expect there to be less difference in difficulty between courses.

    Q: Is there material that is being removed?

    A: The BS CS will require fewer topics from digital logic design, computer architecture, and operating systems.  The BA CS will require fewer topics from computer architecture.  That material will remain in our curriculum, but will now be elective for those degree programs.

    Q: Is there material that is being added?

    A: The BS CS's required courses will cover more concurrency, security, functional programming, and software development tools.  The BA CS's required courses will cover more concurrency, security, functional programming, computational theory, and software development methods and tools.  All computing degrees programs will cover more of the social and ethical considerations of computing.  Some electives will be able to go into more depth because of a better fit between prerequisites and course content.

    Q: Can I take a mix of pre-change and post-change courses?

    A: In general, no. Because content has been redistributed, mixing courses would result in significant content overlap and gaps and will not make progress towards a degree in SIS. There are three courses that have had small enough changes you can take either the pre- or post-change versions (see https://engineering.virginia.edu/cs-undergraduate-curriculum-transition-...), but otherwise you should plan to either take all the pre-change courses or all the post-change courses.

    Q: How do I pick between old and new?

    A: If you have completed or are on track to complete CS 2110 by the end of 2021, take the pre-change courses. If you have not completed CS 2110 by the end of 2021, take the post-change courses.  Pre-change courses will be phased out over time. If you will have a gap due to leave, suspension, study abroad, etc, and wish to discuss how that will impact your ability to complete the pre-change sequence, please contact the CS Curriculum Change Coordinator as listed on https://engineering.virginia.edu/cs-undergraduate-curriculum-transition-...

     

  • New Curriculum Transition Plan

    Please see https://engineering.virginia.edu/cs-undergraduate-curriculum-transition-plan for information about which semesters we will begin offering the new curriculum courses and stop offering the old curriculum courses.

  • Bachelor of Science Degree

    New Curriculum

    The information on this page is intended for students who declare or plan to declare the BSCS major in the fall of 2021 or later.  Students who declared before fall 2021 (or have previously taken CS 2110) should see the information for the old curriculum.

    Undergraduate Record

    The official undergraduate record contains the official rules for completing the degree program.  If there is any disagreement between these pages and the rules in the undergraduate record, the record is the final authority.

    Declaring the Major

    Students declare their major in the School of Engineering and Applied Science either in their second semester if they entered the school as a first year student or upon transfer to the School.  More information can be found on the SEAS page for major declaration.

    Degree Handouts

    Degree checklist, example schedule, and prerequisite chart: http://bscschecklist.uvacs.org

    Degree Requirements

    All students completing the Bachelor of Science degree in Computer Science must fulfill the following requirements.

    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.

    • APMA 1090 - Single Variable Calculus I (Credits: 4)

    • APMA 1110 - Single Variable Calculus II (Credits: 4)

    • APMA 2120 - Multivariable Calculus III (Credits: 4)

    • CHEM 1410/1411 - Introductory Chemistry I & Lab (Credits: 4)

    • CS 1110/1111/1112/1113 - Introduction to Programming (Credits: 3) (more info below)

    • ENGR 1624 - Introduction to Engineering

    • PHYS 1425/1429 - Introductory Physics I & Lab (Credits: 4)

    • PHYS 2415/2419 - Introductory Physics II & Lab (Credits: 4)

    • STS 1500 - Science, Technology, and Contemporary Issues (Credits: 3)

    • STS 2000 or 3000 level - STS Elective (Credits: 3) (see Department of Engineering and Society for more information)

    • STS 4500 - STS and Engineering Practice (Credits: 3)

    • STS 4600 - The Engineer, Ethics, and Professional Responsibility (Credits: 3)

    • Math and Science Elective (Credits: 3)

    • Humanities or Social Science Electives (Credits: 9) (more info below)

    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.  Example schedules can be found at http://bscschecklist.uvacs.org.

    • CS 2100 - Data Structures and Algorithms 1 (Credits: 3)

    • CS 2120 - Discrete Mathematics and Theory 1 (Credits: 3)

    • CS 2130 - Computer Systems and Organization 1 (Credits: 4)

    • CS 3100 - Data Structures and Algorithms 2 (Credits: 4)

    • CS 3120 - Discrete Mathematics and Theory 2 (Credits: 3)

    • CS 3130 - Computer Systems and Organization 2 (Credits: 4)

    • CS 3140 - Software Development Essentials (Credits: 3)

    Upper-Level Required Courses

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

    • CS 3240 - Advanced Software Development Techniques (Credits: 3)

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

      • CS 4980 - Capstone Research (Credits: 3)

      • CS 4971 - Capstone Practicum II (Credits: 3)

      • CS 4991 - Capstone Technical Report (Credits: 0) AND a three-credit, graded CS 4000 course not used to fulfill any other CS degree requirement.

    Computer Science Electives

    BSCS majors must take five (5) 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

    • Must be three (3) credits (or more)

    • 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 3100 - Probability (Credits: 3)

    • Choose two of these four:

      • APMA 2130 - Ordinary Differential Equations (Credits: 4)

      • APMA 3080 - Linear Algebra (Credits: 3)

      • APMA 3120 - Statistics (Credits: 3)

      • APMA 3150 - From Data to Knowledge (Credits: 3)

    Note that 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.  Also, 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.

    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.

  • Bachelor of Arts Degree

    New Curriculum

    Students who will have completed CS 2110 with a C+ or higher (or a CR during a “covid” semester) by the end of fall 2021, can declare the current BACS major (see "Old Curriculum") and follow the requirements in the 2021-22 Undergraduate Record.

    Students who have not completed CS 2110 by the end of fall 2021 should follow the guidance below.

    Currently the “BACS” degree at UVA is officially one of several majors that are part of the College’s Bachelor of Arts (BA) in Interdisciplinary degree program. Efforts are underway to transition its official status so that it is separated from the Interdisciplinary degree program.

    Thus a request to establish a Bachelor of Arts in Computer Science has been submitted to the State Council of Higher Education for Virginia (SCHEV) for review and approval.  The following guidance for this degree is offered for planning purposes only pending SCHEV approval.  The College of Arts and Sciences will know by November 2021 if this degree program will be available effective Spring 2022 and will revise the below guidance as needed consistent with SCHEV’s decision.

    Below we will refer to this “new” degree as the “New-BACS” major, and refer to the current degree with its interdisciplinary degree status as the “INTER-CS” major.  The INTER-CS option will continue to exist and be available to students until the New-BACS degree becomes officially available.

    Undergraduate Record

    The official undergraduate record has not yet been updated for the new BACS degree program.

    Declaring the Major

    Information on how to declare the BACS major can be found at: https://bit.ly/bacs-declaring

    Degree Handouts

     

    Advising for Spring 2021

    If you have completed CS 2110 with a C+ or higher (or a CR during a “covid” semester) by the end of fall 2021:

    • None of these new changes will affect your your path to graduation.
    • You will be able to declare the INTER-CS major and follow the degree requirements given in the 2021-22 Undergraduate Record.
    • You should complete CS 2150 in spring 2021 or fall 2022 (the last semester we plan to offer it).

     

    If you WON’T complete CS 2110 with a C+ or higher (or a CR during a “covid” semester) by the end of fall 2021: 

    • In spring 2022 or later, you should plan to take CS 2100, the new Data Structures and Analysis 1 course, instead of CS 2110 and you should plan to follow the “new degree requirements” listed below.
    • If SCHEV approval for the New-BACS happens before spring semester (and we believe it very likely will), you will only be allowed to declare the “new” degree.
    • If SCHEV approval is delayed, you may have a choice of declaring either the New-BACS or the existing INTER-CS major. But exact details of what this means and how the requirements for the INTER-CS major will be updated have not yet been determined.
    • For spring 2022, it’s enough to know that taking CS 2100, CS 2120, or CS 2130 in Spring 2022 or later will count towards either degree. So plan to follow the “new degree requirements” listed below.

     

    Degree Requirements

    These are the requirements for the New-BACS degree, as submitted in the proposal to SCHEV.

    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

     

    The following courses satisfy the major requirements for the New-BACS degree:

    Required CS courses (20 credits):

    • CS 2120 – Discrete Mathematics and Theory 1 (3 credits)
    • CS 2130 – Computer Systems and Organization 1 (4 credits)
    • CS 3100 – Data Structures and Algorithms 2 (3 credits)
    • CS 3120 – Discrete Mathematics and Theory 2 (3 credits)
    • CS 3130 – Computer Systems and Organization 2 (4 credits)
    • CS 3140 – Software Development Essentials (3 credits)

     

    CS elective courses (9 credits, normally 3 courses):
    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 (12 credits):
    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:
    Students who apply to and are accepted to be in the Distinguished Majors Program must complete the degree requirements listed above 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 above requirements. See the department website for more details.

     

  • Computer Science Minor

    New Curriculum

    The information on this page is intended for students who newly declared the CS minor starting in the fall of 2021.  Students who declared before this time (or have previously taken CS 2110) should see the information for the old curriculum.

    CS Minor Requirements

    The Computer Science minor requires credit for six CS courses as described below. Any undergraduate student in the university who will complete the requirements for the CS minor before graduation can submit the minor application form during the first week of their final semester in order to graduate with the CS Minor listed on their transcript.  (See Declaring a Major or Minor.)

    To obtain a minor in computer science, a student must complete the following requirements:

    • CS 1110 / 1111 / 1112 / 1113 - Introduction to Programming (Credits: 3)

    • CS 2100 - Data Structures and Algorithms 1 (Credits: 3)

    • CS 2120 - Discrete Mathematics and Theory 1 (Credits: 3)

    • CS 2130 - Computer Systems and Organization 1 (Credits: 4)

    • CS 3140 - Software Development Essentials (Credits: 3)

    • One additional CS course numbered 3000 or higher

    Students with a computer science or computer engineering major are ineligible for the CS minor.

    Any student who completes 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.

  • Course Prerequisite Chart

    prereqs-2021-11-09.png

General Information

The information in these sections is intended for all students interested in CS courses.  It includes information regarding which Introduction to Programming course to take, place-out tests, and more.

  • Which CS 1 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 one of twelve labs. Final course size will be around 530 students. For more information, see http://cs1110.cs.virginia.edu
    • 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. Students must submit a permission of instructor request  through SIS to request a seat in the course.
    • 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, or 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 2110 (or CS 1110 and CS 2100, as appropriate)

    Dual Enrollment

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

  • Place-Out Tests

    CS 1110 Place-Out Test

    The place-out test allows a student to take a course that requires a CS 1 course as a prerequisite, but it does not grant course credit.

    Place-out tests are only available as follows:

    One week prior to the beginning of the semester (fall and spring), through the first seven business days of the semester; then again seven business days prior to course registration for the following semester. Typically, this is around the middle of October in the fall semester, and around the last week of March/first week of April in the spring semester.

    Students who wish to take the place-out test can email cs-office@virginia.edu to receive a link to the exam. The exam must be submitted within 48 hours of receiving the link. The student is allotted 90 minutes to take the exam, beginning when the exam is first opened. Students cannot use books, notes, computers, or help from other people while taking the exam. A student can only take the exam once, and students who have enrolled in CS 1110 are not allowed to take the placement exam beyond Wednesday of second week of the semester. The exam will be graded within a few days, and the results will be emailed to the student. Students who pass do not receive credit, and if CS 1110 was required as part of a degree program may be required to take some other course at UVA in lieu of CS111X (this is true, for example, of the CS degree offered by SEAS); however, it does meet prerequisites. Students may use any of the following languages on the test: Java, Python, C++, C, Javascript, or C#

    The place-out test is made up of several multiple-choice, short answer, and coding questions. Students interested in taking the test need to be familiar with:

    • variables (creation and manipulation)
    • functions/methods (creation and usage)
    • how to read and interpret code
    • if / else statements
    • various loop constructs (for, while)
    • string manipulation
    • input and output
    • arrays / lists

    CS 2110 Place-Out Test Information

    Place-out tests are only available as follows:

    One week prior to the beginning of the semester (fall and spring), through the first seven business days of the semester; then again seven business days prior to course registration for the following semester. Typically, this is around the middle of October in the fall semester, and around the last week of March/first week of April in the spring semester.

    Students who wish to take the place-out test can email cs-office@virginia.edu to receive a link to the exam. The exam must be submitted within 48 hours of receiving the link. The student is allotted 90 minutes to take the exam, beginning when the exam is first opened. Students cannot use books, notes, computers, or help from other people while taking the exam. A student can only take the exam once, and students who have enrolled in CS 2110 are not allowed to take the placement exam, beyond Wednesday of the second week of the semester.

    The exam will be graded within a few days, and the results will be emailed to the student. Students who pass do not receive credit, and will be required to take some other course at UVA in lieu of CS 2110. Students should use the Java programming language on the test. The placement test is made up of several multiple-choice, short answer, true/false, implementation, and coding questions. Students interested in taking the test need to be familiar with:

    Basic Java Programing

    • Including knowledge of ArrayLists

    Java Classes

    • Fields/instance variables
    • Constructor (one or more in a class)
    • toString() method
    • equals() method
    • Getters/setters
    • Methods (“behavior”)
    • Be able to declare, instantiate and initialize an object of a certain type (class)
    • Classes using other classes

    Basic Software Engineering

    • Phases of the software development lifecycle
    • Specifications and Requirements: focus on users, functional and non-functional requirements (and constraints)
    • Design: inheritance hierarchies, abstract classes, interfaces

    OO Design and Programming

    • Inheritance / understand the Object Class (in particular, the toString() and equals() methods…)
    • Interfaces
    • Comparable Interface // compareTo() method
    • Comparator Interface // compare() method
    • How to extend a class (inheriting methods, overriding methods, overriding abstract methods, use of super in constructor, use of super in other methods)
    • How Java decides which class's version of a method to invoke
    • Sets and Maps
    • Set data structure, Map data structure, Collection interface
    • TreeSet / TreeMap / HashSet / HashMap
    • Java Collections Framework (general)
    • List, Set, Map interfaces

    Algorithms

    • Definition of an “algorithm” and how to tell if something is one

    Asymptotic Analysis

    • Big-O
    • Comparison of common complexity classes (1, lg(n), n, n lg(n), n^2, n^3, 2^n)
    • Given code (non-recursive only), find its complexity class and identify its critical section
    • Searching and Sorting
    • Sequential search (“linear”)
    • Binary Search: how it works. What’s its complexity? (O(lg n)) How does this compare to sequential search? What must be true of the list before we use this? (Sorted)
    • Sorting: good sorts are O(n lg n). Be able to name the sorts in this complexity class (e.g. MergeSort)

    Data Structures

    • Trees definitions and common terms
    • Note recursive definition
    • Ability to draw trees and/or discuss illustrations of them
    • Tree traversal (in-order, pre-order, and post-order traversals on Binary Trees)
    • Heaps
    • Heap definition
    • Minheap/maxheap
    • How items are stored in a heap
    • Methods for heap: adding and removal (do not need to know how to code this)
  • Transferring to Computer Science

    Transferring from Another Major

    Please contact the program director of the program you wish to transfer into to determine whether this will be possible or not.

    Transferring Between the School of Engineering and Applied Science and the College of Arts and Sciences

    Transferring between schools at UVA is handled by the dean's office of each school.  For information on how to transfer, please contact the appropriate dean's office.  For students who are already declared as either BSCS or BACS, if you are allowed to transfer between schools, your degree will be switched to the appropriate one for your new school.  This will affect some of your graduation requirements, so make sure to speak with your CS academic advisor.

    Transferring from the Virginia Community College System

    Please see the transfer information at http://transfercredit.uvacs.org for specific information about course transfers and degree plans if you are transferring from a community college in Virginia.

    Transferring Credits from Another University

    Individual courses in Computer Science may be transferred from another university or college based on how the content in the course compares with our own.  Please see your academic advisor in CS or email cs-student-support@virginia.edu with the syllabus of the course.

    Notes about Transferring Courses

    Some courses will transfer automatically when coming to UVA, but some will require manual intervention from CS office staff.  Please see your academic advisor in CS for assistance with this process.

  • Fifth Year Masters Program

    General Information

    Please see the information on the Computer Science Graduate Program page at https://engineering.virginia.edu/departments/computer-science/cs-graduate-program#accordion403365

    UVAccelerate

    https://at.virginia.edu/uvaccelerate

    Current UVA undergraduate students can apply to a Master of Engineering (M.E.), Master of Computer Science (M.C.S.), or Master of Materials Science and Engineering (M.M.S.E.) degree program in the third year of your undergraduate studies. These programs require 30 credits of course work as part of an approved plan of study, and with the right planning you may be able to get a head start on taking graduate-level courses while finishing your bachelor’s degree. Save time and money by accelerating your time to completion of a master’s degree! See the link for more information.

     

  • Student Email Lists

    All Undergrad CS Students Department List (cs-ugrads@virginia.edu): A list called cs-ugrads@virginia.edu is used to send important messages to all our undergraduate computing majors (BSCS, BACS, and BSCpE majors). At least once a year, we update these lists and add all our majors.

    Computing Jobs Mailing List (computingjobs@collab.itc.virginia.edu): CS faculty and staff routinely receive emails from various organizations, companies, individuals, and colleagues at UVa that are interested in hiring students, either for full time positions or internships. There is a Collab site called "Computing Jobs" that you can join and browse the email archive there. Faculty and staff will forward opportunities that we get to this Collab site. You are welcome to join and unjoin from the site at your leisure. To join the site, login to Collab and in the Home tab, choose Membership. In the Membership screen, select Joinable Sites and then search for Computing Jobs. You can then add the site to your list of Collab sites and will receive job postings as they come in.

  • Undergraduate Research Opportunities

    Facutly are often looking for undergrads interested in research, either for paid positions or course credit.  See http://research.cs.virginia.edu for a list of projects and faculty.

  • CS Department Grading Guidelines

    This document was approved as an official guideline for the CS department and its associated courses by vote of the CS faculty on 2019-02-18.

    CS Grading Guidelines

    The giving of grades is a well-established component of our educational system, but the meaning of those grades is not. In an effort to provide some clarity and consistency, the CS department provides the following guidelines. These guidelines are not a grading system, but rather definitions which resulting grades should approximate. Individual courses may establish different definitions in their beginning-of-course memo. Using the definitions in this document will help students understand which subsequent courses and experiences they are prepared to excel in and which they are not yet ready to undertake.

    Course grading practice should be described in syllabi or beginning-of-course memos. Such descriptions should explain how the activities and assessments in the course contribute to student grades. Grading practices should result in final grades that approximate the definitions contained in this document.

    It is traditional for grades to reflect a combination of several kinds of learning objectives, including but not limited to communication skills, creativity, learning, participation, professionalism, skill, teamwork, timeliness, understanding, etc. Each course may combine these learning objectives differently while still satisfying the following definitions.

    • "A" is used for students who demonstrate mastery of all learning objectives. An “A” should be seen as a recommendation that the student would likely do well in areas that depend on these objectives in the future.
    • "B" is used for students who demonstrate competence in all significant learning objectives. A “B” should be seen as an acknowledgement that the student would be able to do well in areas that depend on these objectives in the future, but that their learning was incomplete; they are encouraged to review and improve in this topical area if it is a significant part of their future plans.
    • "C" is used for students who demonstrate sufficient competence in enough of the learning objectives that subsequent work can be contemplated. A “C” should be seen as a caution that some aspects of the course seem to be missing or misunderstood and that future efforts in areas that depend on these objectives are likely to be challenging unless those gaps are first filled.
    • "D" is used for students who demonstrate minimal competence in learning objectives, but not enough to recommend further studies or activities in related areas. A “D” should be seen as a prediction that future efforts in areas that depend on these objectives are unlikely to be successful unless the course that gave the “D” is first retaken.
    • "F" is used for students who failed to demonstrate minimal competence in learning objectives. An “F” should be seen as indicating that future efforts in areas that depend on these objectives should not be undertaken without first retaking the course that gave the “F”.

    Misconduct or lack of professionalism may result in a lower grade than demonstrated competence would otherwise indicate. The scope and nature of such reductions, if any, may be determined independently for each course offering.