Undergraduate Computer Science Courses

100-level courses

100-level courses are generally geared toward students with no prior experience in programming or computer science.  They differ in their choice of topics and focus.  Some, like COMP 112, delve into many of the details of programming in a current high-level programming language like Python or Java, whereas others, like COMP 115, focus more on the underlying foundations of how algorithms are designed.  They are all good courses to take to get a general introduction to computing for students who do not wish to pursue the COMP major, and they also serve as prerequisites for the gateway courses that must be taken to declare the COMP major.  All 100-level courses satisfy the prerequisite for COMP 211 as well as the MATH major requirement for "elementary knowledge of algorithms and computer programming."

COMP 112: Introduction to Programming

The course will provide an introduction to a modern high-level programming language including a discussion of input/output, basic control structures, types, functions, and classes. The lectures will also discuss a variety of algorithms as well as program design issues.

COMP 113: Bioinformatics Programming

An introduction for life science students with little or no prior programming experience, this course will introduce the fundamental concepts and mechanisms of computer programs using a language (Perl or Python) and examples (sequence matching and manipulation, database access, output parsing, etc.) frequently encountered in the use and development of informatics software.

COMP 114: How to talk to machines

How do we tell robots and computers how to do what they do? Getting a handle on this question is the goal of this course. Since telling a device how to do something depends a lot on what that device can do, along the way we will learn a bit about what is "in the box." We will start with the kind of programming one might use to instruct a robot how to interact with the world around it. That will lead us to the Turing machine, a beautiful mathematical model of a computer. We will adapt that model to something that is closer to how most computer systems today are designed. We will end with an introduction to high-level programming, learning the fundamentals of programming in a language such as Python or Java.

The goal of the course is to understand not just programming, but how computers are designed, and how those designs are reflected in the way we program them. After passing this course, students will have a basic knowledge of programming and how a computer works.

COMP 115:  How to design programs

In this course, students will learn to systematically design programs, going from a problem statement to a well-organized solution in a step-by-step fashion. We will apply these program design skills to many applications within computer science and in other disciplines. Students will develop their mathematical skills, because we will use a symbolic view of computation that explains the process of running a program as simple manipulations of its text. Students will also develop their technical reading and writing skills, such as understanding complex problem descriptions and precisely articulating the design of solutions. No prior experience with programming or computer science is expected.

200-level courses

Our 200-level courses consist primarily of the gateway sequence COMP 211-212, which is required in order to declare the COMP major.

COMP 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.

Prerequisite:  COMP 11x or equivalent programming experience.  Alternatively, students with a strong mathematical background may also do well in COMP 211 without prior programming experience.  If you have not taken a 100-level COMP course at Wesleyan, please contact the instructor to discuss your situation.

COMP 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.

Prerequisite:  COMP 211.

300-level courses

Our 300-level courses are major-level courses in the core areas that are required to complete the major as well as electives.

COMP 301: Automata Theory and Formal Languages (Core:  models of computation)

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.

Prerequisites: COMP 211 and MATH 228.

COMP 312: Algorithms and Complexity (Core:  algorithms)

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.

Prerequisites: COMP 212 and MATH 228.

COMP 321: Design of Programming Languages (Core:  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.

Prerequisites: COMP 212 and MATH 228.

COMP 323: Programming language implementation (Core:  programming languages)

This 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).

COMP 331: Computer Structure and Organization (Core:  systems)

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.

Prerequisites: COMP 212.

COMP 332:  Computer networks (Core:  systems)

This 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.

Prerequisites:  COMP 212 and MATH 228.

COMP 333:  Software engineering (Core:  systems)

Software 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.

Prerequisites:  COMP 212.

COMP 327: Evolutionary and Ecological Bioinformatics

Bioinformatic analysis of gene sequences and gene expression patterns has added enormously to our understanding of ecology and evolution. For example, through bioinformatic analysis of gene sequences, we can now reconstruct the evolutionary history of physiology, even though no traces of physiology exist in the fossil record. We can determine the adaptive history of one gene and all the gene's descendants. We can now construct the evolutionary tree of all of life. Bioinformatics is particularly promising for analysis of the ecology and biodiversity of microbial communities, since well over 99 percent of microorganisms cannot be cultured; our only knowledge of these organisms is through analysis of their gene sequences and gene expression patterns. For example, even when we cannot culture most of a microbial community, we can determine which metabolic pathways are of greatest significance through analysis of community-level gene expression. All these research programs are made accessible not only by breakthroughs in molecular technology but also by innovation in the design of computer algorithms. This course, team-taught by an evolutionary biologist and a computer scientist, will present how bioinformatics is revolutionizing evolutionary and ecological investigation and will present the design and construction of bioinformatic computer algorithms underlying the revolution in biology. Students will learn algorithms for reconstructing phylogeny, for sequence alignment, and for analysis of genomes, and students will have an opportunity to create their own algorithms.

Cross-listing: BIOL 327.

Prerequisites: [MB&B205 or BIOL205] OR [BIOL206 or MB&B206] OR BIOL207 OR COMP212 OR [COMP312 or COMP510] OR [MB&B225 or BIOL225] OR [MB&B181 or BIOL181] OR [MB&B195 or BIOL195] OR [BIOL182 or MB&B182]

COMP 350: Computational media:  videogame development

This course examines the interplay of art and science in the development of contemporary video games using "game tool" applications to achieve a variety of purposes. It combines a detailed understanding of computational media, including legal and commercial aspects, with hands-on experience in the creative process. There will be discussions with invited industry leaders in various subject areas. Students will have the opportunity to work as part of development teams and create working prototypes to understand the challenges and rewards of producing video games in a professional context.

This course is taught in the CIS with primary course listing IDEA 350.

 

COMP 360: Topics in Computer Science

Topics offered irregularly by both permanent and visiting faculty.  Recent topics have included Information Security and Privacy, Randomized Algorithms, Network Science, Advanced Functional Programming, Applied Logic and Logic Programming, and Artificial Intelligence.