Computer Science

LISA MEEDEN, Professor and Chair
TIA NEWHALL, Professor
ANDREW DANNER, Associate Professor
RICHARD WICENTOWSKI, Associate Professor and Associate Provost
JOSHUA BRODY, Assistant Professor
AMEET SONI, Assistant Professor
KEVIN WEBB, Assistant Professor
ADAM LAMMERT, Visiting Assistant Professor
JASON WATERMAN, Visiting Assistant Professor
JEFFREY KNERR, System Administrator and Visiting Instructor
BRIDGET M. ROTHERA, Administrative Assistant

 

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

Course Major

The following are the requirements for a major in computer science:

  1. Nine courses in computer science:
    1. CPSC 021. (If exempted from CPSC 021 without AP credit, substitute one course from any Group listed below.)
    2. CPSC 031, CPSC 035 and CPSC 097.
    3. One course from each of the following three groups:
    4. Two CPSC courses numbered above CPSC 035 (must be different than the choices in part c).
  2. Two MATH/STAT courses at the level of Linear Algebra or above (Discrete Math and Linear Algebra are recommended).

To be eligible for a computer science major, a student must have at least a B- average in the introductory courses (CPSC 021, CPSC 31 and CPSC 035). In addition, students must have at least a C in CPSC 031 and CPSC 035 to be eligible to take upper-level computer science courses. Students who have not met this criterion may re-take CPSC 031 or CPSC 035 to obtain the necessary foundation for success in upper-level courses. Students who are deferred have one year from the date of their application to satisfy these requirements.

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:

  1. Six courses in computer science.
    1. CPSC 021. (If exempted from CPSC 021 without AP credit, substitute one course from any Group listed below.)
    2. CPSC 031.
    3. CPSC 035.
    4. Two upper-level courses drawn from different groups:
      1. Group 1: CPSC 041 or CPSC 046.
      2. Group 2: CPSC 043, CPSC 044, CPSC 045, or CPSC 087.
      3. Group 3: CPSC 040, CPSC 063, CPSC 065, CPSC 068, CPSC 071 or CPSC 081
    5. One CPSC course numbered above CPSC 035 (must be different than the choices in part c).
  2. One MATH/STAT course at the level of Linear Algebra or above (Discrete Math recommended).

The requirements for acceptance into the minor are the same as for acceptance into the major.

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:

  1. Have a B+ average in all computer science courses completed by the end of junior year. These must include CPSC 021, CPSC 031 and CPSC 035, and at least one of, CPSC 041 or CPSC 046.
  2. 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:
  3. 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:

  1. Have a B+ average in all computer science courses completed by the end of the junior year.
  2. 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

Bioinformatics

CPSC 063. Artificial Intelligence

 
CPSC 068. Bioinformatics
Data Systems
CPSC 044. Database Systems
 
CPSC 045. Operating Systems
Distributed Computing
CPSC 043. Computer Networks
 
CPSC 087. Parallel and Distributed Computing
High-performance Computing
CPSC 040. Computer Graphics
 
CPSC 087. Parallel and Distributed Computing
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
Network Systems
CPSC 043. Computer Networks
 
CPSC 045. Operating Systems
Parallel Systems and Algorithms
CPSC 041. Algorithms
 
CPSC 087. Parallel and Distributed Computing
Statistical Machine Learning
CPSC 065. Natural Language Processing
 
CPSC 068. Bioinformatics

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 031 or 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.

CPSC 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.
Prerequisite: CPSC 021 or equivalent. Discrete Mathematics is recommended.
Lab work required.
Natural sciences and engineering practicum.
1 credit.
Each semester. Staff.

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.
Fall 2014. 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.
Spring 2015. 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.
Prerequisites: CPSC 031 and CPSC 035 required.
Lab work required.
1 credit.
Fall 2015. 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.
Prerequisites: CPSC 031 and CPSC 035 required.
Lab work required.
1 credit.
Spring 2015. 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.
Prerequisites: CPSC 031 and CPSC 035 required.
Lab work required.
Natural sciences and engineering practicum.
1 credit.
Next offered when staffing permits.

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.
Fall 2015. Staff.

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 typically include neural networks, decision trees, genetic algorithms, and reinforcement techniques.
Prerequisites: CPSC 035 required.
Lab work required.
Natural sciences and engineering practicum.
Eligible for COGS credit.
1 credit.
Spring 2015. 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.
Eligible for COGS credit.
1 credit.
Next offered when staffing permits.

CPSC 068. Bioinformatics

(Cross-listed as BIOL 068)
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.
Fall 2014. 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.
Next offered when staffing permits.

CPSC 072. Computer Vision

(See ENGR 027)
Natural sciences and engineering practicum.
1 credit.
Spring 2015. Zucker.

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.
Prerequisite: CPSC 035 required. CPSC 063 is recommended.
Lab work required.
Natural sciences and engineering practicum.
Eligible for COGS credit.
1 credit.
Next offered when staffing permits.

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.
Spring 2016. Newhall.

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 dynamic analysis (2013, 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 2014. Waterman.

CPSC 180. Thesis
CPSC 199. Senior Honors Study