Swarthmore CollegeWebsiteAcademic Catalog
Computer ScienceDepartment Website
BS Degree in Computer Sciencesource 1source 2source 3
CS Courses
- Introduction to Computer ScienceCPSC 021 (1)introCPSC 021: Introduction to Computer Science
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.
- Introduction to Computer SystemsCPSC 031 (1)sysCPSC 031: Introduction to Computer Systems
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.
- Data Structures and AlgorithmsCPSC 035 (1)introCPSC 035: Data Structures and Algorithms
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.
- Computer GraphicsorCPSC 040 (1)graphicsCPSC 040: Computer 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.
Computer AnimationorCPSC 056 (1)graphicsCPSC 056: Computer AnimationThe 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.
Artificial IntelligenceorCPSC 063 (1)aiCPSC 063: Artificial IntelligenceArtificial 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.
Natural Language ProcessingorCPSC 065 (1)aiCPSC 065: Natural Language ProcessingThis 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.
Machine LearningorCPSC 066 (1)aiCPSC 066: Machine LearningThis 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.
BioinformaticsorCPSC 068 (1)algssciCPSC 068: BioinformaticsThis 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.
Software EngineeringorCPSC 071 (1)softengCPSC 071: Software EngineeringSoftware 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.
Programming LanguagesorCPSC 073 (1)plsCPSC 073: Programming LanguagesThis 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.
Adaptive RoboticsCPSC 081 (1)aiCPSC 081: Adaptive RoboticsThis 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.
- AlgorithmsorCPSC 041 (1)algsCPSC 041: Algorithms
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.
Theory of ComputationorCPSC 046 (1)theoryCPSC 046: Theory of ComputationThis 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.
The Probabilistic MethodCPSC 049 (1)mathCPSC 049: The Probabilistic MethodIn 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.
- Computer NetworksorCPSC 043 (1)sysCPSC 043: Computer Networks
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.
Database SystemsorCPSC 044 (1)sysCPSC 044: Database SystemsThis 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.
Operating SystemsorCPSC 045 (1)sysCPSC 045: Operating SystemsThis 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.
CompilersorCPSC 075 (1)plsCPSC 075: CompilersThis 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.
Parallel and Distributed ComputingorCPSC 087 (1)sysCPSC 087: Parallel and Distributed ComputingThis 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.
Security and PrivacyorCPSC 088 (1)sysCPSC 088: Security and PrivacyThis 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.
Cloud Systems and Data Center NetworksCPSC 089 (1)sysCPSC 089: Cloud Systems and Data Center NetworksOn 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.
- Senior ComprehensiveCPSC 099 (0)capstoneCPSC 099: Senior Comprehensive
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.
Math/Stat Courses
Other Courses
- 4 × PE Course
- 2 × Free Elective
Goals for the Computer Science Major
Studnets should:
- be able to apply problem solving skills to formalize general problem statements into precise algorithmic solutions
- become proficient programmers
- demonstrate an understanding of the interplay between theory and practice
- demonstrate adequate competency in theory, systems, and applications, the three main areas of the computer science curriculum
- have a broad exposure to computer systems
- have experience conducting research and completing large projects; often such projects will require a team effort
- be able to apply the computational and algorithmic problem solving skills learned in computer science across many disciplines