Courses offered in the past four years.
▲ indicates offered in the current term
▹ indicates offered in the upcoming term[s]
CSCI0150 - Computing for the Sciences
Computing for the Sciences
In this course we will provide an introduction to the field of computer science geared towards students interested in mathematics and the natural sciences. We will study problem-solving approaches and computational techniques utilized in a variety of domains including biology, chemistry, physics, and engineering. Students will learn how to program in Python and other languages, how to extract information from large data sets, and how to utilize a variety of tools employed in scientific computation. The course has no prerequisites and assumes no prior experience with programming or computer science. 3 hrs. lect./lab DED
CSCI0200 - Math Foundations of Computing
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. (One CSCI course at the 0100-level) 3 hrs. lect./lab DED
Fall 2014, Spring 2015
CSCI0202 - Computer Architecture ▲ ▹
A detailed study of the hardware and software that make up a computer system. Topics include assembly language programming, digital logic design, microarchitecture, pipelines, caches, and RISC vs. CISC. The goal of the course is teach students how computers are built, how they work at the lowest level, and how this knowledge can be used to write better programs. 3 hrs. lect./lab DED
Spring 2015, Fall 2015, Fall 2016, Spring 2017, Fall 2017
CSCI0314 - Operating Systems
An operating system manages the complex resources of modern computers and provides an interface between the user and the hardware. This course covers the key concepts of operating systems, including process, memory, and storage management; synchronization and deadlock; protection and security; and distributed systems. (CSCI 0200 previously or concurrently, and CSCI 0202) 3 hrs. lect./lab DED
CSCI0315 - Systems Programming ▹
Students will become intimately acquainted with the low-level software services that applications often take for granted. Through a broad, project-based survey of core system libraries and UNIX system calls, students will explore process management, memory management, linking and loading, threading, synchronization, filesystem operations, and inter-process communication (networking). In each area, students will build software using these building blocks, gaining an understanding of the behavior and efficiency of the tools at their disposal. Students will also gain experience building larger, more complex systems upon which applications can be built. This course is ideal for students who wish to understand and construct the software infrastructure upon which user-level software depends. (CSCI 0202) 3 hrs. lect DED
CSCI0413 - Functional Programming
In this course we will explore an approach to describing computation that focuses on functions (in the mathematical sense) rather than objects or procedures. In the process of learning a widely-used functional programming language, students will gain experience with existing patterns of higher-level abstraction in computation (exemplified by the Map-Reduce model popularized by Google), practice identifying and implementing their own higher-level abstractions, learn about classes of real-world problems that are particularly amenable to functional solutions, and implement solutions to some of those problems. Students in this course will learn approaches to problem solving using computers that will be relevant no matter what languages they use in the future. (CSCI 0200 and CSCI 0201) 3 hrs. lect./lab. DED
CSCI0431 - Computer Networks
Computer networks have had a profound impact on modern society. This course will investigate how computer networks are designed and how they work. Examples from the Internet as well as our own campus network will be discussed. (CSCI 0200 and CSCI 0202) 3 hrs. lect./lab DED
CSCI0500 - 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.
Winter 2015, Spring 2015, Winter 2016, Spring 2016, Fall 2016, Winter 2017, Spring 2017, Fall 2017, Spring 2018
CSCI0701 - 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. (Approval only).
CSCI0702 - Senior Thesis ▲
The senior thesis is required for all CSCI majors who wish to be considered for high and highest departmental honors, and 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. (CSCI 0701 and approval required) 3 hrs. lect./disc.
CSCI1005 - Crash Course/Systems Security
Crash Course in Systems Security
In this course students will learn the theory and practice of computer systems security. Morning lectures will be complemented by afternoon lab-sessions in which, under the close guidance of the instructor, students will complete both individual and group projects that will deepen their understanding of how (in)secure systems are implemented. Students will learn to use industry-standard tools for performing analysis of system vulnerabilities; be introduced to the systems security research landscape; and gain an understanding of ethical, political, and financial issues surrounding systems security research. (Approval required; CSCI 0202) DED WTR
Winter 2015, Winter 2016, Winter 2017