CS Course Dependencies 2019-2020

The dependency diagram below shows which courses are prerequisites for others. Black lines indicate required courses; green lines indicated recommended courses. For lines of other colors, any one line of a given color satisfies a course prerequisite.

Move the mouse over a course to see its description. Click on a course to go to its website. For a discussion of intro CS course options, see Choosing an Introductory CS Course.

The CS department has tried hard to keep the chains of dependencies short, so we hope it won't be hard to satisfy them. Talk to the instructor of a course if you have any questions or concerns. We're happy to help.

To see the content that should be drawn here, please upgrade your browser to one that supports the HTML5 canvas element. The newest versions of Firefox and Chrome do.

JavaScript version created by: Scott D. Anderson, based on an imagemap original by Christina Pong '09 & Ewelina Oleszek '10
Date Created: 08/20/2012 (sanderso) | Last Modified: 08/29/2019 (fturbak) | Expires: 08/30/2019

CS 111 Computer Programming and Problem Solving
Davis, Freire, Lerner, Wood, Staff
An introduction to problem solving through computer programming. Students learn how to read, modify, design, debug, and test algorithms that solve problems. Programming concepts include control structures, data structures, abstraction, recursion, modularity, and object-oriented design. Students explore these concepts in the context of interactive programs involving graphics and user interfaces using the Python programming language. Students are required to attend an additional two-hour laboratory section each week. Required for students who wish to major or minor in computer science or elect more advanced courses in the field.
Prerequisite: Fulfillment of the basic skills component of the Quantitative Reasoning requirement. No prior background with computers is expected.
Distribution: Mathematical Modeling. Does not satisfy the laboratory requirement.
Offered: Spring; Fall
CS 112 Computation for the Sciences
Hildreth
An introduction to computer programming that provides the tools necessary for students to use computers effectively in scientific work, including physical sciences, biological sciences, medicine, mathematics, psychology, and economics. Students learn to write software to solve problems, visualize and analyze data, perform computer simulations, and implement and test computational models that arise in a wide range of scientific disciplines. The course introduces MATLAB, an extensive and widely used technical computing environment with advanced graphics, visualization, and analysis tools, and a rich high-level programming language. Students are required to attend an additional two-hour laboratory section each week.
Prerequisite: Fulfillment of the basic skills component of the Quantitative Reasoning requirement. No prior background with computers is expected.
Distribution: Mathematical Modeling. Does not satisfy the laboratory requirement.
Offered: Spring 2020
CS 115 Computing for the Socio-Techno Web
Bassem, Mustafaraj
Technologies and services made available from Computer Science, such as online environments Facebook, Twitter, and Wikipedia, are integral in today's world. Many problems exist in our real world that transfer to and get amplified in the virtual world created by highly interconnected and ubiquitous computing. What are the basic technologies that enable all this innovation? How do these new environments affect our lives? This course aims to answer these questions through investigation of the socio-techno web. On the technical side we study three languages: HTML5, CSS, and basic JavaScript. We interweave the technical with the social aspects by examining issues introduced by the use of the Social Web. In the process we learn how computers work.
Prerequisite: Permission of instructor. Normally mandatory credit/noncredit.
Distribution: Mathematical Modeling. Does not satisfy the laboratory requirement.
Offered: Every semester.
CS 125 First-Year Seminar: Brains, Minds, and Machines: The Science of Intelligence
Hildreth, Wiest
How is intelligent behavior produced by the brain and how can it be replicated in machines? This seminar explores human intelligence through the perspectives of neuroscience, cognitive science, and computer science, integrating studies of the brain, the mind, and the computations needed to create intelligent machines. This interdisciplinary approach has accelerated the pace of research aimed at understanding how intelligent agents use vision to recognize objects and events; navigate through a complex, dynamic environment; use language to communicate; and develop a conscious awareness of the world. Through exploration of current research and hands-on computer activities, students learn about methods used to probe neural circuits and visualize brain activity; investigate human performance and behavior; and build computer models that capture the remarkable abilities of biological systems.
Prerequisite: None.
Distribution: Natural and Physical Sciences
Offered: NOT OFFERED IN 2019-20
CS 203: Computer Music
Davis
This course explores how computer code can be used to produce music by examining topics such as digital signal processing, synthesis, protocols, networking, and modeling. Students work with a computer environment called SuperCollider, an open-source software designed for real-time audio synthesis. Students complete weekly programming assignments and create music ranging from synthesizers in popular songs to experimental algorithmic compositions.
Prerequisite: 111 or permission of the instructor
Distribution: Mathematical Modeling.
Offered: Spring
CS 204: Introduction to Front-End Web Development
Anderson
This course introduces modern web development using HTML, CSS and JavaScript. JavaScript is explored in detail, including scoping, closures, objects, prototype inheritance, and namespacing. The jQuery library is also introduced, and the course covers event handling and Ajax interactions. Students will build web pages using front-end templates such as bootstrap and JavaScript libraries for client-side templating. Designed web pages will be modern, responsive and accessible. The course also covers the jQuery UI (User Interface) library and its capabilities.
Prerequisite: 111 or permission of the instructor
Distribution: Mathematical Modeling.
Offered: Spring, Fall
CS 220 Human-Computer Interaction
Delcourt
Human-Computer Interaction is one of the areas that have transformed the way we use computers in the last 30 years. Topics include methodology for designing and testing user interfaces, interaction styles (command line, menus, graphical user interfaces, virtual reality, tangible user interfaces), interaction techniques (including use of voice, gesture, eye movements), design guidelines, and user interface software tools. Students will design a user interface, program a prototype, and test the results for usability.
Prerequisite: One of: 110, 111, 112, 115
Distribution: Mathematical Modeling.
Offered: Spring; Fall
CS 225: Making and Fabrication: Methods, Culture, and a Heuristic Approach to Technology
Tynes
Makerspaces often provide a grassroots workshop for members of a community to share ideas, identify needs, build technological skills, generate concepts and physically bring them into existence. This course will study the “maker movement” as a culture and ask students to become participants in our very own makerspace community. Students will investigate and utilize maker tools and techniques, including vector-based design, programming in Processing, VR, analog and digital microcontrollers, MAX/MSP/Jitter, image/video compression, photogrammetry, 3D modeling/scanning and printing. Students will be required to work collaboratively and independently in our makerspace to develop several projects that physically communicate their own academic interests.
Prerequisite: 111, 112, or 115
Distribution: Mathematical Modeling.
Offered: Not offered 2019-2020
CS 230 Data Structures
Bassem, Delcourt, Lerner, Metaxas
An introduction to techniques and building blocks for organizing large programs. Topics include: modules, abstract data types, recursion, algorithmic efficiency, and the use and implementation of standard data structures and algorithms, such as lists, trees, graphs, stacks, queues, priority queues, tables, sorting, and searching. Students become familiar with these concepts through weekly programming assignments using the Java programming language. Students are required to attend an additional two-hour laboratory section each week.
Prerequisite: CS 111 or permission of the instructor. Students who received a grade of C+ or lower in CS 111 must contact the instructor before enrolling.
Distribution: Mathematical Modeling. Does not satisfy the laboratory requirement.
Offered: Every semester
CS 231 Fundamental Algorithms
Bassem, Staff
An introduction to the design and analysis of fundamental algorithms. General techniques covered: divide-and-conquer algorithms, dynamic programming, greediness, probabilistic algorithms. Topics include: sorting, searching, graph algorithms, compression, cryptography, computational geometry, and NP-completeness.
Prerequisite: 230 and either MATH 225 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: Spring, Fall
CS 232 Artificial Intelligence
Mustafaraj
What is artificial intelligence (AI) and should humans fear it as one of "our biggest existential threats"? In this course we will grapple with these difficult questions and investigate them in different ways. We will follow the history of AI from Alan Turing's "Can Machines Think?" seminal paper to the recent Elon Musk musings on AI's threat to mankind. We will discuss the underlying theory of the symbolic, knowledge-rich approaches of the 20th century AI (e.g., rule-based systems) and the 21st century approaches relying on statistical learning from large amounts of data (e.g., machine learning algorithms). Finally, we will dissect some of the AI applications in modern life: personal assistant technology like Alexa and Siri, machine translation (Google Translate), and self-autonomous cars. By the end of the semester, students should be able to answer the starting questions in depth and with nuance.
Prerequisite: 230 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: Spring 2020. Alternate year course.
CS 234 Data, Analytics, and Visualization
Mustafaraj
As the number of our digital traces continues to grow, so does the opportunity for discovering meaningful patterns in these traces. In this course, students will initially learn how to collect, clean, format, and store data from digital platforms. By adopting a computational approach to statistical analysis, students will then implement in code different statistical metrics and simulation scenarios for hypothesis testing and estimation. Finally, students will generate meaningful visualizations for data exploration and communicating results. Additionally, we will discuss the ethics of data collection and think critically about current practices of experimenting with online users. Students will work in groups to create their own datasets, ask an interesting question, perform statistical analyses and visualizations, and report the results.

fulfills the QRF (QR overlay)

Prerequisite: 230 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: Fall 2019. Normally offered alternate years
CS 235 Theory of Computation
Tjaden, Freire
This course offers an introduction to the theory of computation. Topics include languages, regular expressions, finite automata, grammars, pushdown automata, and Turing machines. The first part of the course covers the Chomsky hierarchy of languages and their associated computational models. The second part of the course focuses on decidability issues and unsolvable problems. The final part of the course investigates complexity theory.
Prerequisite: 230 and either MATH 225 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: Spring, Fall
Foundations of Computer Systems with Laboratory
Davis, Wood
This course examines how computers run programs, introducing key software and hardware abstractions and implementations between programming languages and transistors. The course traces representation and translation of data and programs through three broad topics in computer systems: computer hardware implementation, including digital logic, computer arithmetic, and machine organization; the hardware-software interface, including instruction set architecture, assembly code, and the C programming language; and abstractions for practical systems, including the physical memory hierarchy, the operating system process model, virtual memory, and memory management. Students complete extensive hands-on projects in hardware and software systems. Students are required to attend one three-hour laboratory weekly.
Prerequisite: 111, 112, or permission of instructor. 230 is recommended.
Distribution: Mathematical Modeling. This course satisfies the laboratory requirement.
Offered: Spring, Fall
CS 242 Computer Networks
Staff
A systems-oriented approach to data networks, including a theoretical discussion of common networking problems and an examination of modern networks and protocols. Topics include point-topoint links, packet switching, internet protocols, end-to-end protocols, congestion control, and security. Projects may include client-server applications and network measurement tools.
Prerequisite: 230 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: NOT OFFERED IN 2019-20 Normally offered in Alternate years.
CS 251 Programming Languages
Wood
This course introduces principles underlying the design, semantics, and implementation of modern programming languages in major paradigms including function-oriented, imperative, and object-oriented. The course examines: language dimensions including syntax, naming, state, data, control, types, abstraction, modularity, and extensibility; issues in the runtime representation and implementation of programming languages; and the expression and management of parallelism and concurrency. Students explore course topics via programming exercises in several languages, including the development of programming language interpreters.
Prerequisite: 230 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: Spring, Fall
CS 301 Compiler and Runtime System Design
Wood
This course covers principle and practice in the design and implementation of modern compilers and programming language runtime systems. Topics include lexical analysis, parsing, symbols tables, semantic analysis, type checking, intermediate representations, program analysis and optimization, code generation, garbage collection, and other runtime support. As time permits, the course may also survey topics including just-in-time compilation, runtime optimization, concurrent runtime systems, or extended automatic program error detection. Students will construct a full compiler and runtime system for a simple statically-typed programming language over the course of the semester.
Prerequisite: CS 230 and at least one of CS 240 or CS 251. CS 235 is recommended, but not required.
Distribution: Mathematical Modeling.
Offered: Not offered 2019-2020 Normally offered in alternate years
CS 304 Databases with Web Interfaces
Anderson
A study of the three-layer architecture commonly used for Web-based applications such as e-commerce sites. We will learn to model and design databases uses entity-relationship diagrams, and the Standard Query Language (SQL) for managing databases. We will learn PHP, CGI/Python, and Java Servlets, which are three important technologies for Web-based architectures. We will also discuss performance, reliability and security issues. Finally, we will create dynamic Web sites driven by database entries.
Prerequisite: 230 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: Spring, Fall
CS 305 Machine Learning
Tjaden
Machine learning is the science of teaching computers how to learn from observations. It is ubiquitous in our interactions with society, showing up in face recognition, web search, targeted advertising, speech processing, genetic analysis, and even Facebook's selection of posts to display. It is currently at the forefront of research in artificial intelligence, and has been making rapid strides given the vast availability of data today. This course is a broad introduction to the field, covering the theoretical ideas behind widely used algorithms like support vector machines, neural networks, graphical models, decision trees, and many more. We will also study practical applications of these algorithms to problems in vision, speech, language, biology, and the social sciences. Grading is mandatory credit/noncredit
Prerequisite: CS 230 and either MATH 206 or MATH 220 or MATH 225.
Distribution: Epistemology and Cognition, Mathematical Modeling.
Offered: Spring, Fall
CS 307 Computer Graphics
Hildreth
A survey of topics in computer graphics with an emphasis on fundamental techniques. Topics include: graphics hardware, fundamentals of three-dimensional graphics including modeling, projection, coordinate transformation, synthetic camera specification, color, lighting, shading, hidden surface removal, animation, and texture-mapping. We also cover the mathematical representation and programming specification of lines, planes, curves, and surfaces. Students will build graphics applications using a browser-based platform.
Prerequisite: 230 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: Fall
CS 310 Foundations of Cryptology
Staff
When is a cryptographic system secure and how will we ever know? This course introduces the computational models and theory computer scientists use to address these issues. Topics include one-way functions, trapdoor functions, probabilistic complexity classes, pseudorandom generators, interactive proof systems, zero-knowledge proofs, and the application of these theories to modern cryptology.
Prerequisite: 231 or 235 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: NOT OFFERED IN 2019-20 Normally offered in alternate years.
CS 312 Logic in Computer Science
Freire
This course will introduce mathematical logic and its applications in Computer Science. Initially, we will cover syntax and semantics of propositional and first-order logics and how those theories are used in Computer Science. From there we will cover undecidability, logic programming, SAT solvers, proving systems and model checking. The goal is to prepare the students for using logic as a formal tool. background is expected.
Prerequisite: 230 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: NOT OFFERED IN 2019-20 Normally offered in alternate springs.
CS 313 Computational Biology
Tjaden
Many elegant computational problems arise naturally in the modern study of molecular biology. This course is an introduction to the design, implementation, and analysis of algorithms with applications in genomics. Topics include bioinformatic algorithms for dynamic programming, tree-building, clustering, hidden Markov models, expectation maximization, Gibbs sampling, and stochastic context-free grammars. Topics will be studied in the context of analyzing DNA sequences and other sources of biological data. Applications include sequence alignment, gene-finding, structure prediction, motif and pattern searches, and phylogenetic inference. Course projects will involve significant computer programming in Java. No biology background is expected.
Prerequisite: 230 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: Fall. Alternate year course.
CS 315 Data and Text Mining for the Web
Staff
In the past decade, we have experienced the rise of socio-technical systems used by millions of people: Google, Facebook, Twitter, Wikipedia, etc. Such systems are on the one hand computational systems, using sophisticated infrastructure and algorithms to organize huge amount of data and text, but on the other hand social systems, because they cannot succeed without human participation. How are such systems built? What algorithms underlie their foundations? How does human behavior influence their operation and vice-versa? In this class, we will delve into answering these questions by means of: a) reading current research papers on the inner-workings of such systems; b) implementing algorithms that accomplish tasks such as web crawling, web search, random walks, learning to rank, text classification, topic modeling; and c) critically thinking about the unexamined embrace of techno-solutionism using a humanistic lens.
Prerequisite: 230 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: NOT OFFERED IN 2019-20 Normally offered in alternate years.
CS 320 Tangible User Interfaces
Staff
Tangible user interfaces emerge as a novel human-computer interaction style that interlinks the physical and digital worlds. Extending beyond the limitations of the computer mouse, keyboard, and monitor, tangible user interfaces allow users to take advantage of their natural spatial skills while supporting collaborative work. Students will be introduced to conceptual frameworks, the latest research, and a variety of techniques for designing and building these interfaces. Developing tangible interfaces requires creativity as well as an interdisciplinary perspective. Hence, students will work in teams to design, prototype, and physically build tangible user interfaces.
Prerequisite: 220 or 215 or 230, or permission of instructor.
Distribution: Mathematical Modeling.
Offered: Fall Not offered 2019-2020
CS 321 Mixed and Augmented Reality
Tynes
Mixed and Augmented Reality technologies combine virtual content with the physical environment, allowing people to interact with computers and digital content in exciting new ways. These emerging human-computer interaction paradigms have been applied to a variety of fields including medicine, education, design, entertainment, and play. This course introduces fundamental methods, principles, and tools for designing, programming, and testing mixed and augmented reality applications. Topics include the history of virtual and augmented reality, application domains, hardware for 3D input and display, tracking and registration, 3D perception, and societal implications. Students will work individually and in teams to develop novel virtual and augmented reality experiences.
Prerequisite: CS 220 or CS 230
Distribution: Mathematical Modeling.
Offered: Spring
CS 323 Social Computing
Delcourt
Social Computing systems connect us to our closest friends, and globally to people all over the world. In recent decades, companies like Facebook, Snapchat, and even Amazon, have reshaped our social environments. All of these systems, at their core, are designed to facilitate interactions between people. What design decisions shape these systems? Students will learn the theoretical foundations of Social Computing drawn from the Social Sciences, and will learn software prototyping and design techniques to create new systems. This class will explore topics such as idenity, anonymity, reputation, moderation, crowdsourcing, and social algorithms. Students will work in teams to design, prototype, and build social computing systems.
Prerequisite: CS 220 or CS 230
Distribution: Mathematical Modeling.
Offered: Fall
CS 332 Visual Processing by Computer and Biological Vision Systems
Staff
This course explores models for deriving information about the threedimensional world from visual images. We examine methods used in computer vision systems to analyze digital images and strategies used by biological vision systems to interpret the retinal image. An interdisciplinary approach that combines computer science, psychology and neuroscience, and contributes to the design of effective computer vision systems and the understanding of human visual processing. Topics include: edge detection, stereo vision, motion analysis, shape from shading, color, object recognition, and image processing applications in medicine, security, information retrieval and intelligent vehicles. The course uses vision software written in MATLAB.
Prerequisite: 112 or 230 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: Fall Not offered in 2019-2020 Normally offered in alternate years
CS 341 Operating Systems
Bassem
This course is designed to provide a solid foundation in the design and implementation of key concepts in existing operating systems. These concepts include process management, scheduling, multitasking, synchronization, deadlocks, memory management, file systems, and I/O operations. Throughout the course, the mechanism design aspects of these concepts will be discussed and assessed from the point of view of a programmer. Moreover, more modern operating systems will be explored, such as virtual operating systems.
Prerequisite: 240
Distribution: Mathematical Modeling.
Offered: NOT OFFERED IN 2019-20 Normally offered in alternate years
CS 342 Computer Security and Privacy
Lerner
An introduction to computer security and privacy. Topics will include privacy, threat modeling, software security, web tracking, web security, usable security, the design of secure and privacy preserving tools, authentication, anonymity, practical and theoretical aspects of cryptography, secure protocols, network security, social engineering, the relationship of the law to security and privacy, and the ethics of hacking. Emphasis will include hands-on experience and the ability to communicate security and privacy topics to laypeople as well as experts. Assignments will include exercises with security exploits and tools in a Linux environment; problem sets including exercises and proofs related to theoretical aspects of computer security; and opportunities to research, present, and lead discussions on security- and privacy-related topics. Students are required to attend an additional 70-minute discussion section each week.
Prerequisite: 230 and 240 or permission of the instructor.
Distribution: Mathematical Modeling.
Offered: Spring
CS 343 Distributed Computing
Bassem
What is the “cloud”? What is a distributed system? This course is for students interested in understanding the fundamental concepts and algorithms underlying existing distributed systems. By the end of this course, students will have the basic knowledge needed to work with and build distributed systems, such as peer-to-peer systems and cloud computing systems. Topics include MapReduce, Spark, communication models, synchronization, distributed file systems, coordination algorithms, consensus algorithms, fault-tolerance, and security.
Prerequisite: CS 230 (required); CS 231 and CS 242 (recommended)
Distribution: Mathematical Modeling.
Offered: Spring
ARTS 105: Drawing I
An introduction to the fundamentals of drawing with attention to the articulation of line, shape, form, gesture, perspective, and value.
ARTS 108/CAMS 138: Photography I
An introductory course which explores photography as a means of visual communication by producing and analyzing photographic images.
ARTS 109 Two Dimensional Design
This introductory studio course focuses on the issue of composition in two-dimensional imagery. It introduces the fundamental elements of design (e.g. line, shape, value, space, color) and their function in the process of composition.
MATH 206 Linear Algebra
Tannenhauser (Fall), Trenk (Fall), Staff (Spring), Staff (Spring)
Linear algebra is one of the most beautiful subjects in the undergraduate mathematics curriculum. It is also one of the most important with many possible applications. In this course, students learn computational techniques that have widespread applications in the natural and social sciences as well as in industry, finance, and management. There is also a focus on learning how to understand and write mathematical proofs and an emphasis on improving mathematical style and sophistication. Topics include vector spaces, subspaces, linear independence, bases, dimension, inner products, linear transformations, matrix representations, range and null spaces, inverses, and eigenvalues.
Prerequisite: MATH 205 or MATH 215; or, with permission of the instructor, MATH 116, MATH 120, or the equivalent. At most two of the three courses MATH 206, MATH 210, and MATH 215 can be counted toward the MATH major or minor.
Distribution: Mathematical Modeling.
Offered: Every semester.
MATH 220 Probability
Tannenhauser
This course is about the mathematics of uncertainty, where we use the ideas of probability to describe patterns in chance phenomena. Probability is the basis of statistics and game theory, and is immensely useful in many fields including business, social and physical sciences, and medicine. The first part of the course focuses on probability theory (random variables, conditional probability, probability distributions), using integration and infinite series. The second part discusses topics from statistics (sampling, estimation, confidence interval, hypothesis testing). Applications are taken from areas such as medical diagnosis, quality control, gambling, political polls, and others.
Prerequisite: MATH 205. Open to students with a strong background in single-variable calculus (MATH 116, MATH 120, or the equivalent) by permission of the instructor.
Distribution: Mathematical Modeling
Offered: Fall 2019
MATH 225 Combinatorics and Graph Theory
Chan, Trenk
Combinatorics is the art of counting possibilities: for instance, how many different ways are there to distribute 20 apples to 10 kids? Graph theory is the study of connected networks of objects. Both have important applications to many areas of mathematics and computer science. The course will be taught emphasizing creative problemsolving as well as methods of proof, such as proof by contradiction and induction. Topics include: selections and arrangements, generating functions, recurrence relations, graph coloring, Hamiltonian and Eulerian circuits, and trees.
Prerequisite: MATH 116, MATH 120, or the equivalent; or CS 230 together with permission of the instructor
Distribution: Mathematical Modeling.
Offered: Every semester.