Philip Caplan
Assistant Professor of Computer Science
- Office
- 75 Shannon 219
- Tel
- (802) 443-5000
- pcaplan@middlebury.edu
- Office Hours
- Spring 2024: Monday 3:30 - 4:30pm, Wednesday 2 - 3pm, Thursday 9 - 10am, Thursday 12:30 - 1pm, Thursday 3 - 4pm, and by appointment.
Courses Taught
CSCI 0145
Introduction to Computing
Course Description
Introduction to Computing
In this course we will provide a broad introductory overview of the discipline of computer science, with no prerequisites or assumed prior knowledge of computers or programming. A significant component of the course is an introduction to algorithmic concepts and to programming using Python; programming assignments will explore algorithmic strategies such as selection, iteration, divide-and-conquer, and recursion, as well as introducing the Python programming language. Additional topics will include: the structure and organization of computers, the Internet and World Wide Web, abstraction as a means of managing complexity, social and ethical computing issues, and the question "What is computation?" (Juniors and Seniors by waiver) (formerly CSCI 0101) 3 hr. lect./1 hr. lab
Terms Taught
Requirements
CSCI 0200
Math Foundations of Computing
Course Description
Mathematical Foundations of Computing
In this course we will provide an introduction to the mathematical foundations of computer science, with an emphasis on formal reasoning. Topics will include propositional and predicate logic, sets, functions, and relations; basic number theory; mathematical induction and other proof methods; combinatorics, probability, and recurrence relations; graph theory; and models of computation. (CSCI 0145 or CSCI 0146 or CSCI 0150) (Juniors and Seniors by waiver) 3 hrs. lect./lab
Terms Taught
Requirements
CSCI 0201
Current
Data Structures
Course Description
Data Structures
In this course we will study the ideas and structures helpful in designing algorithms and writing programs for solving large, complex problems. The Java programming language and object-oriented paradigm are introduced in the context of important abstract data types (ADTs) such as stacks, queues, trees, and graphs. We will study efficient implementations of these ADTs, and learn classic algorithms to manipulate these structures for tasks such as sorting and searching. Prior programming experience is expected, but prior familiarity with the Java programming language is not assumed. (CSCI 0145 or CSCI 0146 or CSCI 0150) (Juniors and Seniors by waiver) 3 hrs. lect./lab
Terms Taught
Requirements
CSCI 0422
Geometric Modeling
Course Description
Geometric Modeling
The ability to describe three-dimensional geometric objects is fundamental for computer-aided design, scientific computing, and computer graphics. In this course we will investigate common methods for building and manipulating digital representations of three-dimensional curves, surfaces, and solids using polygonal and polyhedral meshes. This includes topics in mesh parameterization, adaptation, and registration, as well as surface reconstruction and deformation. We will also review common numerical methods used in scientific computing, including the finite element method, and study techniques for visualization, analysis, and design. Students will implement labs and projects using C++, within a framework provided by the instructor. (CSCI 0202 and MATH 0200) 3 hrs. sem
Terms Taught
Requirements
CSCI 0461
Computer Graphics
Course Description
Computer Graphics
Computer graphics is the study of how computers represent, manipulate, and ultimately display visual information. In this course we will focus primarily on three-dimensional graphics, touching on topics such as modeling (meshes, hierarchical models, and transformations), rendering (lighting, texturing, rasterization, and clipping), animation, and GPU programming. We will look at the mathematical foundations of these techniques as well as implementation techniques using WebGL. (CSCI 0202 and MATH 0200) 3 hrs. lect./lab
Terms Taught
Requirements
CSCI 0500
Current
Upcoming
Advanced Study
Course Description
Advanced Study
Individual study for qualified students in more advanced topics in computer science theory, systems, or application areas. Particularly suited for students who enter with advanced standing. (Approval required) 3 hrs. lect.
Terms Taught
CSCI 0701
Senior Seminar
Course Description
Senior Seminar
This senior seminar provides a capstone experience for computer science majors at Middlebury College. Through lectures, readings, and a series of two to three week individual and group assignments, we will introduce important concepts in research and experimental methods in computation. Examples will include: reading research papers; identifying research problems; dealing with big data; experimental design, testing and analysis; and technical writing in computer science. This course fulfills the Responsible Computing requirement for the Computer Science major. (Approval only).
Terms Taught
CSCI 0702
Senior Thesis
Course Description
Senior Thesis
The senior thesis is recommended for students interested in pursuing graduate study in Computer Science. Students will spend the semester researching and writing, and developing and experimenting as appropriate for their topic. All students will be expected to report on their work in the form of a written thesis, a poster, and an oral presentation at the end of the semester. In addition, throughout the semester, students will meet as a group to discuss research and writing, and will be expected to attend talks in the Computer Science lecture series. Before approval to join the class is granted, students are expected to have chosen a thesis adviser from the CSCI faculty, and determined a thesis topic with the guidance and approval of that adviser. (Approval required) 3 hrs. lect./disc.
Terms Taught