Computer Science is the study of information processes. Computer scientists learn how to describe information processes, how to reason about and predict properties of information processes, and how to implement information processes elegantly and efficiently in hardware and software. The Computer Science curriculum concentrates on developing the deep understanding of computing and critical thinking skills that will enable graduates to pursue a wide variety of possible fields and to become academic, cultural, and industrial leaders. The core curriculum focuses on developing methods and tools for describing, implementing, and analyzing information processes and for managing complexity including abstraction, specification, and recursion. Computing connects closely with a wide range of disciplines including, but not limited to, the visual arts, music, life sciences including biology and cognitive science, the physical sciences, linguistics, mathematics, and the social sciences. The Computer Science major provides students with a strong foundation in computer science, combined with courses in arts, humanities, and sciences, in order to develop broad understanding of other areas and their connections to computing.
Before declaring the computer science major, students should have taken one introductory computer science course (either cs1120, cs1110, cs1111, or cs1112) with a grade of C+ or better, or have comparable experience. For most students, we recommend taking cs1120: Introduction to Computing — Explorations in Language, Logic, and Machines as the prerequisite course. Students may be permitted to declare the major while they are currently taking the introductory course.
The major requires the College Competency and Area Requirements as well as at least 27 credits in Computer Science courses and 12 credits in Integration Electives.
CS2220: Engineering Software (offered Fall semesters) or CS2110: Software Development Methods (offered both semesters) (previously CS205 and CS201)
Covers tools and techniques used to manage complexity needed to build, analyze, and test complex software systems including abstraction, analysis, and specification.
CS2220 Prerequisite: CS1120
CS2110 Prerequisite: CS1110, CS1111, or CS1112
CS2102: Discrete Mathematics I (offered both semesters) (previously CS202)
Introduces discrete mathematics and proof techniques involving first order predicate logic and induction. Application areas include sets (finite and infinite), elementary combinatorial problems, and finite state automata. Development of tools and mechanisms for reasoning about discrete problems.
Prerequisite: CS1110, CS1111, CS1112, or CS1120
CS 2150: Program and Data Representation (offered both semesters) (previously CS 216)
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.
Prerequisite: (CS 2220 or CS 2110) and C 2102 with grades of C- or higher.
CS 3330: Computer Architecture (offered both semesters but recommended for CS students in the Fall) (previously CS 333)
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.
Prerequisite: (CS2110 on CS2220) and CS2330
Note: We recommend BACS students take CS3330 in the Fall. It may not be necessary to have taken CS2330 for some Fall offerings of CS3330.
CS 4102: Algorithms (offered both semesters) (previously CS 432)
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 asymptotic worst
case, expected time, amortized analysis, and reductions between problems.
Prerequisite: CS2150
Four computing-intensive electives selected from a list of approved courses. The list of approved courses will initially comprise current Computer Science courses at 300-level or above as well as CS2330 (Digital Logic Design). Additional courses that may be jointly offered by CLAS and CS departments will be added to the list of approved computing electives based on approval by the BA committee.
Four courses selected with the approval of the student’s advisor from the list of computing-related courses approved by the BA CS committee. These courses are typically offered by departments other than Computer Science, and should either provide fundamental computing depth and background or explore applications of computing to arts and sciences fields. See http://www.cs.virginia.edu/ba/integration.html for a list of approved integration electives.
Distinguished majors complete the BA degree requirements in addition to a fourth-year thesis project that is approved by two advisors, typically one from Computer Science and one from Arts and Sciences. Both advisors must approve the student’s plan of study, thesis proposal, and thesis report.
For more information on the DMP, see http://www.cs.virginia.edu/ba/dmp/.