Information for Majors and Non-majors
The Undergraduate Computer Science Major
The field of computer science studies the process of computing, using ideas drawn from the fields of system design, mathematics, and engineering. The mathematical ideas are reflected in the courses on formal languages, algorithms, and the theory of computation; ideas from system design and engineering are reflected in the courses on data structures, computer structure and organization, and compilers. Upon completing the major, we expect students to be well-versed in:
- Understanding abstraction
- At its heart, Computer Science is the study of abstractions for the purpose of understanding computation, and as such students must learn appropriate levels of abstraction for solving computational problems. All courses in the curriculum contribute to this goal.
- Students must learn how to program in a high-level language, as such programming is the primary tool in Computer Science. This is typically how students are first exposed to the field, and our majors achieve this goal in the freshman or sophomore year by taking the gateway sequence COMP 211—212.
- Students must learn how to reason about computation; this includes analyzing algorithms and proving properties such as correctness and complexity and requires an understanding of appropriate mathematical tools. The courses that focus primarily on this goal are COMP 312 (Design and analysis of algorithms) and COMP 321 (Design of programming languages).
- Students must learn how to create original computational structures; this requires an understanding of fundamental techniques in algorithm and data structure design and an ability to combine established techniques in novel ways. All courses in the curriculum contribute to this goal.
- Students must understand not only how to analyze and create computational structures, but also the limits of computation itself; this requires an understanding of the mathematical foundations and formalisms of Computer Science. This goal is primarily addressed in COMP 301 (Automata theory and formal languages).
The various courses in the computer science curriculum are discussed below; for additional details, consult the catalog descriptions of the courses. Students may also consult the department's advisory committee (CADCOM).
Computer Science I and II (COMP 211, 212) constitute the introductory sequence. These courses focus on algorithmic problem-solving (as embodied in programming) and the role of data structures in supporting the development of algorithms and software systems. The course on discrete mathematics (MATH 228) is typically taken concurrently with COMP 212. These four courses are typically taken in the first two years of study.
Core CoursesFormal Languages and Automata Theory (COMP 301) studies formal models of computing devices and the the foundations of complier technology. Algorithms and Complexity (COMP 312) studies the design of algorithms and analyzes time and space requirements. Programming Languages (COMP 321) studies various types of programming languages and language issues such as data abstraction, modules, and concurrency. Computer Structure and Operation (COMP 331) studies the organization and operation of computers.
In addition to the core courses, the program provides several advanced courses as well as a selection of topics courses under the heading COMP 360. For example, in the last few years courses have been offered on cryptography, networking, databases, bioinformatics, software development, and graphics.
Research opportuntiesWe strongly encourage students to get involved in research with faculty, and all the faculty are happy to have students doing research. Please visit the Faculty by research area page to learn more about individual faculty member's research interests, or just stop by our offices! Our Student Projects page lists current and past student research. Typically research starts by enrolling in COMP 401 or 402 (Individual Tutorial) or COMP 403 or 404 (Department Project). The former courses are usually for more theoretical topics, the latter for more applied topics, though there is no strict division. Students can often start thinking about research as early as the freshman year, though some topics require more course background than others.
All Computer Science students are encouraged to write a Senior Thesis under the direction of one of the faculty. Students wishing to complete a Senior thesis must sign up for COMP 409 and COMP 410 in their Senior year. A student who plans to write a thesis must find a faculty advisor in their Junior year, and will typically do an individual tutorial or project with that advisor before the Senior year. Please see our Student Projects page for a list of recent theses.
Undergraduate Courses for Non-Majors
Many Wesleyan students may want to take some computer science courses without necessarily completing a computer science major. The following courses provide this opportunity; none of them have programming prerequisites.
- Introduction to Programming (COMP 112) provides a detailed introduction to programming and data structures using an imperative programming language.
- Bioinformatics Programming (COMP 113) is similar to COMP 112, but the focus of the examples is topics in informatics such as sequence matching and database access.
- Computer Science I (COMP 211) is an intensive introduction to programming and Computer Science. Although intended for likely majors, non-majors also take the course. It is a significantly more challenging course than COMP 112.
- We offer several first-year initiative (FYI) courses that are taken by majors and non-majors alike; please see the Undergraduate Computer Science Courses page for more information.