CS Curricula

←All schools

Swarthmore CollegeWebsiteAcademic Catalog

Computer ScienceDepartment Website

Majors

Courses

source 1

CPSC 021: Introduction to Computer Science (1) intro

This course presents fundamental ideas in computer science while building skills in software development. Students implement algorithms as programs in a high-level programming language. Introducing object-oriented programming and data structures allows students to construct correct, understandable, and efficient algorithms. CPSC 031 and CPSC 035 present a deeper coverage of these topics. CPSC 021 is appropriate for all students who want to be able to write programs. It is the usual first course for computer science majors and minors. Students with Advanced Placement credit or extensive programming experience may be able to place out of this course. Students who think that they may fall into this latter category should consult with any computer science faculty member.

CPSC 031: Introduction to Computer Systems (1) sys

This course is a broad introduction to computer science that focuses on how a computer works and how programs run on computers. We examine the hardware and software components required to go from a program expressed in a high-level programming language like C or Python to the computer actually running the program. This course takes a bottom-up approach to discovering how a computer works. Topics include theoretical models of computation, data representation, machine organization, assembly and machine code, memory, I/O, the stack, the operating system, compilers and interpreters, processes and threads, and synchronization. This course also introduces parallel and distributed computing with a specific focus on shared memory parallelism for multicore and SMP systems.

CPSC 035: Data Structures and Algorithms (1) intro

This course completes the broad introduction to computer science begun in CPSC 021. It provides a general background for further study in the field. Topics to be covered include object-oriented programming in C++, advanced data structures (trees, priority queues, hash tables, graphs, etc.) and algorithms, and software design and verification. Students will be expected to complete several programming projects illustrating the concepts presented.

CPSC 040: Computer Graphics (1) graphics

Computer graphics focuses on the creation and manipulation of digital imagery. We cover the modeling, rendering, and animating of geometric object in two (2D) and three (3D) dimensions. Topics include drawing algorithms for 2D geometric primitives (points, lines, polygons), geometric matrix transformations, projective geometry, geometric object representations, hidden surface removal, hierarchical modeling, shading, lighting, shadows, ray-tracing, procedural (non-geometric) modeling, texture mapping, and animation. Labs will explore various tools for rendering graphics, including pixel buffers, OpenGL, shading languages, and general purpose GPU computing.

CPSC 041: Algorithms (1) algs

The study of algorithms is useful in many diverse areas. As algorithms are studied, considerable attention is devoted to analyzing formally their time and space requirements and proving their correctness. Topics covered include abstract data types, trees (including balanced trees), graphs, searching, sorting, NP complete optimization problems, and the impact of several models of parallel computation on the design of algorithms and data structures.

CPSC 043: Computer Networks (1) sys

This course covers the design, implementation and applications of computer networks, primarily focused on the protocols that enable the Internet and network applications. Additionally, this course will cover network security, such as viruses, worms, and botnets. Topics will include: data communication theory; packet-switched routing; the Internet and its protocols; socket and network application programming; overlays and P2P networks; and network security.

CPSC 044: Database Systems (1) sys

This course provides an introduction to relational database management systems. Topics covered include data models (ER and relational model); data storage and access methods (files, indices); query languages (SQL, relational algebra, relational calculus, QBE); query evaluation; query optimization; transaction management; concurrency control; crash recovery; and some advanced topics (distributed databases, object relational databases). A project that involves implementing and testing components of a relational database management system is a large component of the course.

CPSC 045: Operating Systems (1) sys

This course is an introduction to the theory, design, and implementation of operating systems. An operating system is the software layer between user programs and the computer hardware. It provides abstractions of the underlying hardware that are easier to program, and it manages the machine's resources. The following topics will be covered: processes (including synchronization, communication, and scheduling); memory (main memory allocation strategies, virtual memory, and page replacement policies); file systems (including naming and implementation issues); I/O (including devices, drivers, disks, and disk scheduling); and security.

CPSC 046: Theory of Computation (1) theory

This study of various models of computation leads to a characterization of the kinds of problems that can and cannot be solved by a computer. Solvable problems will be classified with respect to their degree of difficulty. Topics to be covered include formal languages and finite state devices; Turing machines; and other models of computation, computability, and complexity.

CPSC 049: The Probabilistic Method (1) math

In mathematics and theoretical computer science, we often consider classes of objects (say graphs, circuits or matrices) and we'd like to know if there are objects that have certain nice properties. One way to show these nice objects exist is to look at a random object, and show it has the nice property with nonzero probability. If this is true, there must be some object with this nice property. This is the Probabilistic Method in a nutshell. It has become an essential tool for understanding structure of lots and lots of things in theoretical computer science and combinatorics, even in problems and applications which involve no randomness at all. This class will start from the ground up, first introducing discrete probability theory, then covering the probabilistic method in detail: how it works, extensions, and most of all lots of applications. We'll also spend a few weeks discussing NP-Completeness and randomized algorithms.

CPSC 052: Principles of Computer Architecture (1) sys

This course covers the physical and logical design of a computer. Topics include current microprocessors, CPU design, RISC and CISC, pipelining, superscalar processing, caching, virtual memory, assembly and machine language, and multiprocessors. Labs cover performance analysis via simulation and microprocessor design using CAD tools.

CPSC 056: Computer Animation (1) graphics

The goal of this course is to give students a foundation for programming animated and interactive graphics. In particular, we will “look under the hood” at the algorithms used by game engines and modeling tools to create authorable, interactive characters and special effects. Labs will give students hands on experience implementing algorithms in C++ as well as opportunities to derive their own unique animations. Topics will include mathematical foundations (coordinate systems, transformations, quaternions), interpolation techniques, keyframing, motion capture and procedural animation, and physically-based systems.

CPSC 063: Artificial Intelligence (1) ai

Artificial intelligence (AI) can be defined as the branch of computer science that is concerned with the automation of intelligent behavior. Intelligent behavior encompasses a wide range of abilities; as a result, AI has become a very broad field that includes game playing, automated reasoning, expert systems, natural language processing, modeling human performance (cognitive science), planning, and robotics. This course will focus on a subset of these topics and specifically on machine learning, which is concerned with the problem of how to create programs that automatically improve with experience. Machine learning approaches studied typically include neural networks, decision trees, genetic algorithms, and reinforcement techniques.

CPSC 065: Natural Language Processing (1) ai

This course is an introduction to the fundamental concepts in natural language processing, the study of human language from a computational perspective. The focus will be on creating statistical algorithms used in the analysis and production of language. Topics to be covered include parsing, morphological analysis, text classification, speech recognition, and machine translation. No prior linguistics experience is necessary.

CPSC 066: Machine Learning (1) ai

This course will introduce algorithms and frameworks that train computers to learn from data in order to better complete specific tasks. The first part of the course will focus on the task of making predictions (supervised learning). The course will then cover other areas of the field including structured learning, unsupervised learning, and semi-supervised learning, among others. The course will also develop general machine learning methodologies; frameworks for analyzing and validating algorithms and theoretical foundations.

CPSC 068: Bioinformatics (1) algssci

This course is an introduction to the fields of bioinformatics and computational biology, with a central focus on algorithms and their application to a diverse set of computational problems in molecular biology. Computational themes will include dynamic programming, greedy algorithms, supervised learning and classification, data clustering, trees, graphical models, data management, and structured data representation. Applications will include genetic sequence analysis, pair wise-sequence alignment, phylogenetic trees, motif finding, gene-expression analysis, and protein-structure prediction. No prior biology experience is necessary.

CPSC 071: Software Engineering (1) softeng

Software engineering is the application of systematic, measurable, and disciplined approach to the creation of computer programs. In this course, students will learn how to plan, organize, and maintain large software projects. Topics include software development methodologies, design principles, collaboration techniques, the use of modern libraries and frameworks, quality assurance, and timeline management.

CPSC 072: Computer Vision (1) ai

This course covers the principles of computer vision.

CPSC 073: Programming Languages (1) pls

This course presents a collection of features central to programming languages' design and implementation. Core topics include identifiers and scope, higher-order functions, types and type checking, state and mutation, objects, and memory management. The course explores these concepts through the implementation of interpreters and other programs that manipulate programs, and through exercises that explore choices in the space of programming language design.

CPSC 075: Compilers (1) pls

This course explores the conversion of programs from source code to executable forms. Topics covered include lexical analysis, formal grammars and parsing, runtime representation decisions, code transformation and generation, and static optimization techniques.

CPSC 081: Adaptive Robotics (1) ai

This seminar addresses the problem of controlling robots that will operate in dynamic, unpredictable environments. In laboratory sessions, students will work in groups to program robots to perform a variety of tasks such as navigation to a goal, obstacle avoidance, and vision-based tracking. In discussion sessions, students will examine the major paradigms of robot control through readings from the primary literature with an emphasis on adaptive approaches.

CPSC 082: Mobile Robotics (1) ai

This course addresses the problems of controlling and motivating robots to act intelligently in dynamic, unpredictable environments. Major topics will include mechanical design, robot perception, kinematics and inverse kinematics, navigation and control, optimization and learning, and robot simulation techniques. To demonstrate these concepts, we will be looking at mobile robots, robot arms and positioning devices, and virtual agents. Labs will focus on programming robots to execute tasks and to explore and interact with their environment.

CPSC 087: Parallel and Distributed Computing (1) sys

This course covers a broad range of topics related to parallel and distributed computing, including parallel and distributed architectures and systems, parallel and distributed programming paradigms, parallel algorithms, and scientific and other applications of parallel and distributed computing. In lecture/discussion sections, students examine both classic results as well as recent research in the field. The lab portion of the course includes programming projects using different programming paradigms, and students will have the opportunity to examine one course topic in depth through an open-ended project of their own choosing. Course topics may include: multi-core, SMP, MPP, client-server, clusters, clouds, grids, peer-to-peer systems, GPU computing, scheduling, scalability, resource discovery and allocation, fault tolerance, security, parallel I/0, sockets, threads, message passing, MPI, RPC, distributed shared memory, data parallel languages, MapReduce, parallel debugging, and parallel and distributed applications.

CPSC 088: Security and Privacy (1) sys

This course will cover the breadth of security and privacy topics in Computer Systems including software system security, applied cryptography, denial-of-service, and privacy-preserving mechanisms. This course will also include applied aspects of security and privacy including public policy and legal frameworks of censorship and anonymity. Course topics may include: Buffer overflows and defences, cryptography, symmetric encryption, hash functions, web security, certificates, authentication, denial of service attacks, internet crime - ransomware, botnets, and spam, privacy preserving mechanisms, and internet censorship.

CPSC 089: Cloud Systems and Data Center Networks (1) sys

On the Internet today, popular services like Google, Facebook, and many others are too large to be hosted by just a few servers. Instead, service providers “scale out” across a coordinated set of hundreds to thousands of machines. Such clusters yield an interesting operating environment, the data center, in which a single administrative entity owns a network at the scale that resembles the Internet. To meet customer demands, administrators often face stringent inter-machine coordination constraints. In this course, we'll examine the current state of the art in providing cloud-based services, including many interesting problems in distributed systems, networking, failure recovery, and OS virtualization.

CPSC 091S: Special Topics: Game Systems (1) sys

This course studies games using the lens of computing systems; exploring the design and implementation of historic and modern computing systems for games, including the hardware, software, and their interface. This course will go beyond only creating games, and will challenge students to critically reflect on how the architectural and programming choices in games can encode inequality and particular worldviews procedurally, as much as other game elements like visuals, audio and narrative. We will cover the low-level aspects of games platforms: graphics programming, networking, and peripherals; mid-level concerns: software engineering, design patterns, concurrency, and interfaces; and higher-level issues related to emulation, ethics, platform studies and media archaeology.

CPSC 091T: Special Topics: Randomized Algorithms (1) algs

In the past 40 years, randomization has proved to be a key tool in the design and analysis of algorithms. Randomized algorithms can be simpler and/or more efficient than deterministic algorithms. It can also better capture several computational problems that arise in nature. This course provides an introduction to algorithm design with a focus on randomized algorithms and data structures. Topics include analysis of algorithms, basics of discrete probability including tail inequalities, the probabilistic method, NP-Completeness, and applications to graph algorithms, streaming algorithms, communication complexity, and machine learning.

CPSC 093: Directed Reading and/or Research Project (1) special

A qualified student may undertake a program of extra reading and/or a project in an area of computer science with the permission of a staff member who is willing to supervise.

CPSC 099: Senior Comprehensive (0) capstone

For the culminating senior capstone experience, students will create a poster based on a project from either a course taken in the Computer Science Department at Swarthmore or from a summer research project with a Swarthmore CS faculty member. Seniors will present their work at a poster session to be held late in the Fall semester of their senior year. The Chair will send out information at the start of the Fall semester detailing the scheduling of the poster session and other relevant dates. This course must be satisfactorily completed in order to complete the major.

CPSC 180: Senior Honor Thesis (1) capstone

For Computer Science Honors Majors only.