Wesleyan UniversityWebsiteAcademic Catalog
Mathematics and Computer ScienceDepartment Website
BS Degree in Computer Sciencesource 1source 2source 3
CS Courses
- Computer Science I (Gateway)COMP 211 (1)introCOMP 211: Computer Science I (Gateway)
This is the first course in a two-course sequence (COMP211-212) that is the gateway to the computer science major. It is intended for prospective computer science majors and others who want an in-depth understanding of programming and computer science. Topics to be covered in COMP211-212 include an introduction to the fundamental ideas of programming in imperative and functional languages, correctness and cost specifications, and proof techniques for verifying specifications. Specifics such as choice of programming language, which topics are covered in which semesters, etc., will vary according to the tastes of the faculty offering the courses.
- Computer Science II (Gateway)COMP 212 (1)introCOMP 212: Computer Science II (Gateway)
This is the second course in a two-course sequence (COMP211-212) that is the gateway to the computer science major. It is intended for prospective computer science majors and others who want an in-depth understanding of programming and computer science. Topics to be covered in COMP211-212 include an introduction to the fundamental ideas of programming in imperative and functional languages, correctness and cost specifications, and proof techniques for verifying specifications. Specifics such as choice of programming language, which topics are covered in which semesters, etc., will vary according to the tastes of the faculty offering the courses.
- Automata Theory and Formal LanguagesCOMP 301 (1)theoryCOMP 301: Automata Theory and Formal Languages
This course is an introduction to formalisms studied in computer science and mathematical models of computing machines. The language formalisms discussed include regular, context-free, and recursively enumerable languages. The machines discussed include finite-state automata, pushdown automata and Turing machines.
- Algorithms and ComplexityCOMP 312 (1)algsCOMP 312: Algorithms and Complexity
The course will cover the design and analysis of correct and efficient algorithms. Basic topics will include greedy algorithms, divide-and-conquer algorithms, dynamic programming, and graph algorithms. Some advanced topics in algorithms may be selected from other areas of computer science.
- Design of Programming LanguagesorCOMP 321 (1)plsCOMP 321: Design of Programming Languages
This course provides an introduction to various concepts in programming languages. Topics will include parameter passing, type checking and inference, control mechanisms, data abstraction, module systems, and concurrency. Basic ideas in functional, object-oriented, and logic programming languages will also be discussed.
Programming Language ImplementationCOMP 323 (1)plsCOMP 323: Programming Language ImplementationThis course is an introduction to the implementation of programming languages. Students will learn how to formally describe and implement major components of the implementation pipeline. Topics may include lexical analysis and parsing (checking whether source code is well-formed and converting it to an internal programmatic representation), type-checking and -inference (static program analysis for safety features), interpretation (direct execution of a high-level language program), and compilation (translation to a low-level language such as assembly or bytecode).
- Computer Structure and OrganizationorCOMP 331 (1)sysCOMP 331: Computer Structure and Organization
The purpose of the course is to introduce and discuss the structure and operation of digital computers. Topics will include the logic of circuits, microarchitectures, microprogramming, conventional machine architectures, and an introduction to software/hardware interface issues. Assembly language programming will be used to demonstrate some of the basic concepts.
Computer NetworksorCOMP 332 (1)sysCOMP 332: Computer NetworksThis course will provide an introduction to the fundamentals of computer networks. Computer networks have become embedded in our everyday lives, from the Internet to cellular phones to cloud networking, enabling applications such as email, texting, web browsing, on-demand video, video conferencing, peer-to-peer file sharing, social networking, cloud computing, and more. This course will delve into the infrastructure and protocols that have allowed computer networks to achieve their current ubiquity. While the primary focus of the course will be on the Internet's architecture, protocols, and applications, we will also touch on other types of computer networks. Programming assignments will be done using Python; prior knowledge of Python is not required.
Software EngineeringCOMP 333 (1)softengCOMP 333: Software EngineeringSoftware engineering is the application of engineering principles to the software development process. Eliciting requirements from stakeholders, designing the architecture of a program, performing usability studies, and testing a codebase are some of the aspects that elevate program development to software engineering. Focusing on web and mobile apps, students in this course will gain expertise in state-of-the-art frontend, backend, and mobile technologies, as well as related tooling. We will also cover the collaborative organization of software projects, software licensing, software business models, and ethical considerations for professional software engineers.
Math/Stat Courses
- Discrete MathematicsorMATH 228 (1)mathMATH 228: Discrete Mathematics
This course is a survey of discrete mathematical processes. Students will be introduced to the process of writing formal mathematical proofs, including mathematical induction. Topics may include set theory, logic, number theory, finite fields, permutations, elementary combinatorics, or graph theory.
Introduction to Abstract AlgebraMATH 261 (1)mathMATH 261: Introduction to Abstract AlgebraThis course is an introduction to abstract principles based on the special properties of the integers, rational, real and complex numbers. The course will cover general algebraic structures as well as their quotients and homomorphisms, with emphasis on fundamental results about groups and rings.
- Math Elective (200+)
Other Courses
- 16 × Free Elective
Student Learning Goals
- 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.
- Programming: 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 their first or sophomore years by taking the gateway sequence COMP211–212.
- Analysis: 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 COMP312 (Design and Analysis of Algorithms) and COMP321 (Design of Programming Languages).
- Creation: 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.
- Limits: 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 COMP301 (Automata Theory and Formal Languages).
History of the Major
2023 | |
2022 | |
2021 | |
2020 | |
2019 | |
2018 | Replace Linear Algebra → Math Elective. Allow COMP 323 (Programming Language Implementation) instead of COMP 321 (Programming Languages). Allow COMP 332 (Computer Networks) or COMP 333 (Software Engineering) instead of COMP 331 (Computer Structure and Organization). |
2017 |