Peter Johnson

Assistant Professor of Computer Science

 fall: Monday through Thursday, 2-3pm; and by appointment
 McCardell Bicentennial Hall 634



Course List: 

Courses offered in the past four years.
indicates offered in the current term
indicates offered in the upcoming term[s]

CSCI 0150 - 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

Spring 2016, Spring 2018

More Information »

CSCI 0200 - 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

More Information »

CSCI 0202 - Computer Architecture      

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. (CSCI 0201) 3 hrs. lect./lab DED

Spring 2015, Fall 2015, Fall 2016, Spring 2017, Fall 2017

More Information »

CSCI 0314 - Operating Systems      

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

Spring 2016

More Information »

CSCI 0315 - Systems Programming      

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

Fall 2017

More Information »

CSCI 0413 - Functional Programming      

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

Fall 2016

More Information »

CSCI 0431 - Computer Networks      

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 0315) 3 hrs. lect./lab DED

Fall 2015, Spring 2018

More Information »

CSCI 0500 - Advanced Study      

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, Winter 2018, Spring 2018

More Information »

CSCI 0701 - Senior Seminar      

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

Fall 2014

More Information »

CSCI 0702 - Senior Thesis      

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.

Spring 2017, Fall 2017

More Information »

CSCI 1005 - 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, Winter 2018

More Information »