Computer science is the study of algorithms and their implementation.
This includes the study of computer systems; methods to specify
algorithms (for people and computer systems); and the formulation of
theories and models to aid in the understanding and analysis of the
properties of algorithms, computing systems, and their
interrelationship.
The computer science curriculum is designed to
provide students with a flexible set of computing choices that can be
tailored to satisfy various interests and depths of study. All courses
emphasize the fundamental concepts of computer science, treating
today’s languages and systems as current examples of the underlying
concepts. The computer science laboratory provides up-to-date software
and hardware facilities.
The Academic Program
The Computer Science Department offers course majors and minors and
honors majors and minors. Students interested in any of these options
are encouraged to meet with the chair of the Computer Science
Department as early as possible in their college career. Students who
are interested in a computer science major or minor are encouraged to
take
CPSC 021,
CPSC 031 and
CPSC 035
sometime in their first four semesters at Swarthmore. The minor in
computer science is designed for students who desire a coherent
introduction to the core topics in the field. Students completing the
minor will possess intellectual skills that are useful in many
disciplines.
First course recommendations
CPSC 021:
Introduction to Computer Science presents fundamental ideas in
computer science while building skill in software development. No
previous experience with computers is necessary. This course is
appropriate for all students who want 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.
CPSC 031: Introduction to Computer Systems assumes that the student has completed
CPSC 021
or its equivalent. It is the best entry point for students intending to
be Computer Science majors or minors who already have extensive
computing experience.
CPSC 035: Data Structures and Algorithms assumes that the student has completed
CPSC 021 or its equivalent. It is an appropriate entry point for students with extensive computing experience.
Students who think they may qualify for
CPSC 031 or
CPSC 035 and have not taken
CPSC 021
should see the instructor or department chair. Students or advisers who
want more advice on placement in computer science courses should feel
free to contact any computer science faculty member by phone or in
person.
Interdisciplinary recommendations
The department recommends that students with an interest in computer science should consider using
MATH 027 (Linear Algebra) and/or
MATH 029 (Discrete Math) to satisfy the math requirement for the major and minor. Statistics courses at the level of
STAT 031 (Data Analysis and Visualization) or above can also be used to satisfy the math requirement.
The Computer Science department offers three courses approved as cognitive science courses:
CPSC 063 (Artificial Intelligence),
CPSC 065 (Natural Language Processing) and
CPSC 081 (Adaptive Robotics). Students with an interest in Cognitive Science are encouraged to consider
COGS 001 (Introduction to Cognitive Science).
In addition to courses offered by computer science faculty, the
department recommends that students with an interest in computer
engineering consider courses offered by the Engineering department,
including three courses that are cross-listed by the Computer Science
department:
CPSC 052 (Computer Architecture),
CPSC 072 (Computer Vision) and
CPSC 082 (Mobile Robotics).
The following are the requirements for a major in computer science:
- Nine courses in computer science:
- CPSC 021. (If exempted from CPSC 021 without AP credit, substitute one course from any Group listed below.)
- CPSC 031 or CPSC 033.
- CPSC 035 and CPSC 097.
- One course from each of the following three groups:
- Group 1: CPSC 041 or CPSC 046.
- Group 2: CPSC 043, CPSC 044, CPSC 045, CPSC 075, or CPSC 087.
- Group 3: CPSC 037, CPSC 040, CPSC 063, CPSC 065, CPSC 068, CPSC 071, CPSC 081
- Two CPSC courses numbered above CPSC 035 (must be different than the choices in part c).
- Two MATH/STAT courses at the level of Linear Algebra or above (Discrete Math and Linear Algebra are recommended).
Students graduating in or prior to 2016 may use the requirements
found in older editions of the course catalog. See the Computer Science
department for more information.
Course Minor
The minor in computer science provides students with a well-rounded
background in computer science sufficient to develop significant,
creative applications and to keep up with the rapid changes in the
field.
The following are the requirements for a minor in computer science:
- Six courses in computer science.
- CPSC 021. (If exempted from CPSC 021 without AP credit, substitute one course from any Group listed below.)
- CPSC 031 or CPSC 033.
- CPSC 035.
- Two upper-level courses drawn from different groups:
- Group 1: CPSC 041 or CPSC 046.
- Group 2: CPSC 043, CPSC 044, CPSC 045, CPSC 075, or CPSC 087.
- Group 3: CPSC 037, CPSC 040, CPSC 063, CPSC 065, CPSC 068, CPSC 071, CPSC 081
- One CPSC course numbered above CPSC 035 (must be different than the choices in part c).
- One MATH/STAT course at the level of Linear Algebra or above (Discrete Math recommended).
Students graduating in or prior to 2016 may use the requirements
found in older editions of the course catalog. See the Computer Science
department for more information.
Honors Major
An honors major
in computer science will consist of completion of the course major, two
2-credit preparations, one 2-credit research report or thesis.
The following will be submitted to external examiners for evaluation:
Two 2-credit preparations to be selected from the combinations of
courses listed under Approved Preparations. Each of these 2-credit
preparations will be examined by a 3-hour written examination and an
oral examination.
The two 2-credit preparations must include four
distinct courses. In certain circumstances, the Computer Science
Department may be willing to consider other groupings of courses,
seminars, or courses with attachments. If the required courses and
preparations would not satisfy a course major, additional computer
science courses must be taken to meet course major requirements. In all
cases, the Computer Science Department must approve the student’s plan
of study.
One research report or thesis to be read by an external examiner and examined in an oral examination.
At a minimum, this will involve a review of scholarly papers from the
primary literature of computer science and the writing of a scholarly,
scientific paper. The paper will report on a research experience
involving the student and faculty (here or elsewhere). It is expected
that most of the research or scholarly groundwork will be completed
before the fall semester of the senior year, either by 1 credit of work
in the spring semester of the junior year or full-time summer work.
Students will register for at least 1 credit of thesis work to complete
the work and write the paper in the fall of the senior year. It is
recommended that the paper be completed by the end of the fall
semester.
Acceptance Criteria
To be eligible for an honors major in computer science, students must complete the following:
- Have a B+ average in all computer science courses completed by the end of junior year. These must include CPSC 021 and CPSC 035, and at least two of, CPSC 031, CPSC 037, CPSC 041, CPSC 046 or CPSC 075.
- Have demonstrated proficiency in mathematical argument and
reasoning by the end of the junior year. Ordinarily, this proficiency
will be assumed if the student has done one of the following:
- Completed Discrete Mathematics and Linear Algebra with a grade of B+ or better
- Completed Linear Algebra Honors with a grade of B or better
- Completed Introduction to Real Analysis or Introduction to Modern Algebra with a grade of B- or better
- Completed by the end of the senior year a set of courses that would qualify for an ordinary computer science major as well as CPSC 180 (Thesis).
Honors Minor
An honors minor in computer science will consist of completion of the course minor and one 2-credit preparation.
The following will be submitted to external examiners for evaluation:
One 2-credit preparation to be selected from the combinations of
courses listed under Approved Preparations. This 2-credit preparation
will be examined by a 3-hour written examination and an oral
examination.
The 2-credit preparation must include two distinct
courses. In certain circumstances, the Computer Science Department may
be willing to consider other groupings of courses, seminars, or courses
with attachments. If the required courses and preparations would not
satisfy a course minor, additional computer science courses must be
taken to meet course minor requirements. In all cases, the Computer
Science Department must approve the student’s plan of study.
Acceptance Criteria
To be eligible for an honors minor in computer science, a student
must satisfy course requirements for a regular minor in computer
science and in addition:
- Have a B+ average in all computer science courses completed by the end of the junior year.
- Take one 2-credit preparation to be selected from the combinations
of courses listed under Approved Preparations. An examiner will set
both a 3-hour written examination and an oral examination for the
preparation.
Approved Preparations for the Honors Major and Minor
The following are the approved preparations. These may not all be available to all students because of the faculty’s schedules.
Preparation |
Course Combinations
|
Algorithms and Theory
|
CPSC 041. Algorithms
CPSC 046. Theory of Computation
|
Intelligent Systems
|
CPSC 063. Artificial Intelligence
CPSC 081. Adaptive Robotics
|
Parallel and Distributed Systems
|
CPSC 045. Operating Systems
CPSC 087. Parallel and Distributed Computing
|
Natural Language Models
|
CPSC 063. Artificial Intelligence
CPSC 065. Natural Language Processing
|
High-performance Computing
|
CPSC 40. Computer Graphics
CPSC 87. Parallel and Distributed Computing
|
| Network Systems |
CPSC 43. Computer Networks
CPSC 45. Operating Systems
|
| Distributed Computing |
CPSC 43. Computer Networks
CPSC 87. Parallel and Distributed Computing
|
| Data Systems |
CPSC 44. Database Systems
CPSC 45. Operating Systems
|
| Statistical Machine Learning |
CPSC 65. Natural Language Processing
CPSC 68. Bioinformatics
|
| Bioinformatics |
CPSC 63. Artificial Intelligence
CPSC 65. Natural Language Processing
|
Programming Languages and Compilers
|
CPSC 037. Structure and Interpretation of Computer Programs
CPSC 075. Compiler Design and Construction
|
Parallel Systems and Algorithms
|
CPSC 041. Algorithms
CPSC 087. Parallel and Distributed Computing
|
Thesis / Culminating Exercise
Senior Conference is the comprehensive requirement for computer
science course and honors majors. It provides an opportunity to delve
more deeply into a particular topic in computer science, synthesizing
material from previous courses.
Application Process and Acceptance Criteria for Majors/Minors
In addition to the process described by the Dean’s Office and the
Registrar’s Office for how to apply for a major, we also ask that
students complete a departmental form outlining how they intend to
fulfill the requirements for their intended major, minor, honors major
or honors minor. Successful completion of at least two computer science
courses including
CPSC 035
is ordinarily required to be admitted as a computer science major or
minor. If after applying a student is deferred, he or she will be
re-evaluated upon completion of additional computer science courses.
Advanced Placement
Students who receive a 4 or 5 on the computer science Advanced
Placement exam will be awarded one credit upon successful completion of
one computer science course taken at Swarthmore. Students must notify
the department after completion of one computer science course in order
to receive AP credit. Students should consult with any computer
science faculty member about placement. Students who are placed out of
CPSC 021
with AP credit need to take only 8 additional courses in computer
science to complete the major, and 5 additional courses in computer
science to complete the minor.
Off-Campus Study
Students planning to major or minor in computer science may opt to
study abroad for one semester or a whole year. Because some advanced
courses in computer science are offered in only alternate years, some
selections will be unavailable to some students. The chair of the
Computer Science Department should preapprove all courses of study
abroad in advance of the student’s departure. The department will
credit appropriate courses based on sufficient evidence of work
completed presented by the student upon returning to Swarthmore.
Life After Swarthmore
Graduate School
Students interested in graduate study in computer science will be
well prepared with a computer science major. Some graduate programs
will also accept students who have majored in mathematics or
engineering and completed a sufficient number and selection of computer
science courses. The choice of the appropriate major and computing
courses will depend on the student’s interests and should be made in
consultation with the chair of the Computer Science Department. Other
majors are also reasonable for students with special interests. For
example, a major in linguistics or psychology might be appropriate for a
student interested in artificial intelligence or cognitive science. In
such cases, students should consult with the chair of the department
as early as possible to ensure that they take the necessary mathematics
and computing courses for graduate work in computer science.
Courses
CPSC 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.
Lab work required, programming intensive. No prerequisites.
Natural sciences and engineering practicum.
1 credit.
Each semester. Staff.
CPSC 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.
Prerequisites:
CPSC 021 or equivalent.
Lab work required.
Natural sciences and engineering practicum.
1 credit.
Each semester. Staff.
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.
Prerequisite:
CPSC 021 or equivalent.
Discrete Mathematics is recommended.
Lab work required.
Natural sciences and engineering practicum.
1 credit.
Each semester. Staff.
CPSC 037. Structure and Interpretation of Computer Programs
This course is a serious introduction to the study of computer
programs and, through programs, some central ideas in computer science.
By studying programs that make repeated and deep use of abstraction,
students will learn how to generate precise specifications from vaguely
formulated and perhaps partially understood descriptions. Topics to be
covered include programming idioms and paradigms, recursion,
information retrieval, binding and scope, interpreters, and compilers.
Prerequisite:
CPSC 035.
Lab work required.
1 credit.
Not offered 2013–2014.
CPSC 040. Computer Graphics
(Cross-listed as
ENGR 026)
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.
Prerequisites:
CPSC 031,
CPSC 035 and
Linear Algebra required or permission of the instructor. (
Linear Algebra may be taken concurrently.)
Lab work required.
Natural sciences and engineering practicum.
1 credit.
Spring 2015. Danner.
CPSC 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.
Prerequisites:
CPSC 035 required. Mathematics background at the level of
Linear Algebra or higher is required (may be taken concurrently).
Lab work required.
1 credit.
Fall 2013. Brody.
CPSC 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.
Prerequisite:
CPSC 031 and
CPSC 035 required.
Lab work required.
1 credit.
Fall 2013. Webb.
CPSC 044. Database Systems
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.
Prerequisite:
CPSC 031 and
CPSC 035 required.
Lab work required.
1 credit.
Spring 2014. Soni.
CPSC 045. Operating Systems
(Cross-listed as
ENGR 022)
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.
Prerequisite:
CPSC 031 and
CPSC 035 required.
Lab work required.
Natural sciences and engineering practicum.
1 credit.
Spring 2014. Newhall.
CPSC 046. Theory of Computation
(Cross-listed as
MATH 046)
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.
Prerequisite:
CPSC 035 required. Mathematics background at the level of
Linear Algebra or higher is required (may be taken concurrently).
Lab work required.
1 credit.
Spring 2014. Danner.
CPSC 052. Principles of Computer Architecture
(See
ENGR 025)
Natural sciences and engineering practicum.
1 credit.
Next offered when staffing permits.
CPSC 063. Artificial Intelligence
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 will include neural networks, decision trees,
genetic algorithms, and reinforcement techniques.
Prerequisites:
CPSC 035 required.
Lab work required.
Natural sciences and engineering practicum.
1 credit.
Fall 2013. Meeden.
CPSC 065. Natural Language Processing
(Cross-listed as
LING 020)
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.
Prerequisite:
CPSC 035 required.
Lab work required.
1 credit.
Fall 2014. Wicentowski.
CPSC 068. Bioinformatics
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,
pairwise-sequence alignment, phylogenetic trees, motif finding,
gene-expression analysis, and protein-structure prediction. No prior
biology experience is necessary.
Prerequisite:
CPSC 035 required.
Lab work required.
1 credit.
Spring 2015. Soni.
CPSC 071. Software Engineering: iOS Development
This course is an introduction to software engineering, with a focus
on iOS development. iOS is the name of the operating system that runs
on many of Apple’s products including the iPhone, iPod Touch, and iPad.
In this course, students will learn how to write iOS apps in Objective
C using Apple’s Xcode IDE (integrated development environment). Topics
will also include readings on user interface design, project
implementation and unit testing. Students do not need to own an iOS
device to take the course.
Prerequisite: CPSC 035 required.
Lab work required.
1 credit.
Spring 2015.
CPSC 072. Computer Vision
(See
ENGR 027)
Natural sciences and engineering practicum.
1 credit.
Spring 2015.
Zucker.
CPSC 075. Principles of Compiler Design and Construction
(Cross-listed as
ENGR 023)
This course introduces the design and construction of language
translators for imperative, procedure-oriented programming languages.
Topics covered include formal grammars, lexical analysis and finite
automata, syntax analysis and pushdown automata, LL and LR parsing,
semantic analysis and table handling, error detection and recovery,
code generation and optimization, and compiler writing tools.
Prerequisite:
CPSC 031 and
CPSC 035 required.
CPSC 031 may be taken concurrently.
Lab work required.
Natural sciences and engineering practicum.
1 credit.
Fall 2013. Waterman.
CPSC 081. Adaptive Robotics
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.
Eligible for Cognitive Science credit.
Prerequisite:
CPSC 035 required.
CPSC 063 is recommended.
Lab work required.
Natural sciences and engineering practicum.
1 credit.
Spring 2014. Meeden.
CPSC 082. Mobile Robotics
(See
ENGR 028)
Natural sciences and engineering practicum.
1 credit.
Fall 2014. Zucker.
CPSC 087. Parallel and Distributed Computing
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
Prerequisites:
CPSC 031 and
CPSC 035 required.
CPSC 045 is recommended.
Lab work required.
1 credit.
Not offered 2013–2014.
CPSC 091. Special Topics in Computer Science
Subject matter for
CPSC 091
is generally dependent on group need or individual interest. The course
is normally restricted to upper-level students and offered only when
interest and staff availability make it practicable to do so.
Lab work required.
1 credit.
Staff.
CPSC 093. Directed Reading and/or Research Project
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 097. Senior Conference
This course provides honors and course majors an opportunity to delve
more deeply into a particular topic in computer science, synthesizing
material from previous courses. Topics have included sensing for
healthcare (2012), data management systems (2010, 2011), computer
perception (2008, 2009), computational geometry and geographic
information systems (2006, 2007), computer security (2005), natural
language processing (2004); advanced algorithms (2003); networking
(2001, 2002); distributed computing (2000); evolutionary computation
(1998 and 1999); complexity, encryption, and compression (1996); and
parallel processing (1995).
CPSC 097
is the usual method used to satisfy the comprehensive requirement for a
computer science major and the senior honors study requirement for a
computer science honors major.
Lab work required.
Writing course.
1 credit.
Fall 2013. Ylvisaker.
CPSC 180. Thesis
CPSC 199. Senior Honors Study