Courses
Courses offered in the past four years. Courses offered currently are as noted.
CSCI 0105
Current
Algorithmic World
Course Description
Understanding Our Algorithmic World
In this course through lectures, labs, and discussions, we will examine the nature of computers and their role in our lives. We will use the lens of multimedia programming to learn basic computer programming and how computers represent and manipulate many common forms of data, such as text and images. We will also talk about the history of computers and learn how they interoperate to create the world we know today, and we will examine the societal impacts of technology on our lives, including implications for privacy, access to resources, and the increasing role of algorithms in shaping our world. (not open to students who have taken CSCI 0145 or higher) 3 hrs. lect./lab
Terms Taught
Requirements
CSCI 0110
Programming through Simulation
Course Description
Introduction to Programming through Simulation
In this course we will introduce computer programming through the exploration and writing of computer simulations with applications to ecological sciences and social sciences. We will use NetLogo as a software/programming tool for developing agent-based simulations. Students will learn basic programming constructs such as variables, conditionals, loops, procedures, and recursion as well as tools for experimenting with computer simulations. No prior experience in programming is expected or required. (not open to students who have taken CSCI 0145 or higher) (formerly CSCI 0190) 3 hrs. lect./disc. 1 hour lab.
Terms Taught
Requirements
CSCI 0145
Current
Upcoming
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 0146
Current
Intensive Intro to Computing
Course Description
Intensive Introduction to Computing
In this course we will provide an introduction to the field of computer science, geared towards students with some prior computer science or programming experience, or a background in quantitative problem-solving (e.g., advanced math coursework). Students will learn a variety of algorithmic strategies, including iterative and recursive approaches, and how to implement those strategies as Python programs. We will study computational techniques utilized in the natural sciences, social sciences and other disciplines. Additional topics will include large-scale data analysis and the ethical issues introduced by computing technologies. (Open to first years and sophomores; others by waiver)
Terms Taught
Requirements
CSCI 0150
Computing for the Sciences
Course Description
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. (Juniors and Seniors by waiver) 3 hrs. lect./lab
Terms Taught
Requirements
CSCI 0200
Current
Upcoming
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
Upcoming
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 0202
Current
Upcoming
Computer Architecture
Course Description
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 teaching 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) (Seniors by waiver) 3 hrs. lect./lab
Terms Taught
Requirements
CSCI 0301
Current
Upcoming
Theory of Computation
Course Description
Theory of Computation
This course explores the nature of computation and what it means to compute. We study important models of computation (finite automata, push-down automata, and Turing machines) and investigate their fundamental computational power. We examine various problems and try to determine the computational power needed to solve them. Topics include deterministic versus non-deterministic computation, and a theoretical basis for the study of NP-completeness. (CSCI 0200 and CSCI 0201) 3 hrs. lect./disc.
Terms Taught
Requirements
CSCI 0302
Current
Upcoming
Algorithms and Complexity
Course Description
Algorithms and Complexity
This course focuses on the development of correct and efficient algorithmic solutions to computational problems, on the underlying data structures to support these algorithms, and on the social implications of algorithms. Topics include computational complexity, analysis of algorithms, proof of algorithm correctness, some advanced data structures, algorithmic techniques including greedy and dynamic programming, and the consequences of real-world applications of algorithms. The course complements the treatment of NP-completeness in CSCI 0301. (CSCI 0200 and CSCI 0201) 3 hrs. lect./disc.
Terms Taught
Requirements
CSCI 0311
Current
Artificial Intelligence
Course Description
Artificial Intelligence
Artificial Intelligence (AI) is the study of computational systems that exhibit rational behavior. Applications include strategic game playing, medical diagnosis, speech and handwriting recognition, Internet search, and robotics. Course topics include intelligent agent architectures, search, knowledge representation, logical reasoning, planning, reasoning under uncertainty, machine learning, and perception and action. We will also discuss the social implications of AI systems. This course fulfills the Responsible Computing requirement for the Computer Science major. (CSCI 0200 and CSCI 0201) 3 hrs. lect./lab
Terms Taught
Requirements
CSCI 0312
Current
Upcoming
Software Development
Course Description
Software Development
This course examines the process of developing larger-scale software systems. Laboratory assignments emphasize sound programming practices, tools that facilitate the development process, and teamwork. (CSCI 0200 and CSCI 0201) 3 hrs. lect./lab
Terms Taught
CSCI 0313
Programming Languages
Course Description
Programming Languages
A systematic approach to concepts and features of programming languages. The course focuses on four major programming paradigms: procedural, object-oriented, functional, and logic programming languages. Students will program in several languages representing the different paradigms. Topics include grammars, data types, control structures, run-time organization, procedure activation, parameter passing, higher-order functions, lambda expressions, and unification. (CSCI 0200 and CSCI 0202) 3 hrs. lect./lab
Terms Taught
Requirements
CSCI 0315
Current
Systems Programming
Course Description
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
Terms Taught
Requirements
CSCI 0318
Current
OOP & GUI Application Dev
Course Description
Object-Oriented Programming and GUI Application Development
In this coding-intensive course students will deepen their understanding of data structures, algorithms, and object-oriented programming concepts through development of GUI (Graphical User Interface) applications. After a brief introduction to C++ and our development environment, Qt, we will immerse ourselves in them through work on an array of application development projects. Along the way, we will be introduced to a number of software development principles and build an understanding of fundamental object-oriented concepts in C++, including classes and inheritance, templates, pointers, constructors/destructors, and ownership. (CSCI 0202 or by waiver) 3 hrs lect./lab.
Terms Taught
Requirements
CSCI 0321
Bioinformatics Algorithms
Course Description
Bioinformatics Algorithms
In this course we will explore and implement algorithmic solutions to modern biology questions. Students will be introduced to motivating biological questions—such as, “How do we compare DNA sequences?”—and then implement solutions to those problems using dynamic programming, graph, randomized, combinatorial and/or other algorithmic approaches. At the completion of the course students will be able to precisely define computational biology problems, design an algorithmic solution and implement that solution in software. No biology background is assumed, but students are expected to be able to implement sophisticated algorithms in Python. This course fulfills the Responsible Computing requirement for the Computer Science major.(CSCI 201) 3 hrs. lect./lab.
Terms Taught
Requirements
CSCI 0333
Current
Quantum Computing
Course Description
Quantum Computing
In this course we will explore how quantum mechanics can be applied to problems in communications, algorithms, detection, and cryptography. We will learn how features such as entanglement, superposition, and no-cloning can sometimes give quantum systems an advantage over standard “classical” computers. We will also discuss the current situation and challenges facing experimental quantum computers, as well as the limits of quantum computing. No previous experience with quantum mechanics is required. (MATH 0200 or CSCI 0200) 3 hrs lect./disc.
Terms Taught
Requirements
CSCI 0390
Upcoming
Spatial Agent-Based Modeling
Course Description
Spatial Agent-Based Modeling
In this course students will learn efficient data structures and design techniques for spatially-explicit agent-based modeling using the NetLogo programming language. Agent-based modeling techniques will be applied to problems in the social and natural sciences (such as graph pandemic modeling and population dynamics), mathematics and computational sciences (such as graph algorithms), and agent-based games. We will also explore some advanced programming features of NetLogo. We also discuss ethical aspects of computer simulation and how agent-based modeling might or might not fit in a framework of responsible computing.Students will design and implement a significant term software project. This course fulfills the Responsible Computing requirement for the Computer Science major. (CSCI 0201).
Terms Taught
Requirements
CSCI 0401
Computational Complexity
Course Description
Computational Complexity
We will investigate the computational power of various resources. Examples include determining whether a computer with limited time or limited space can solve more difficult problems, attempting to characterize creativity as a resource, and comparing probabilistic and quantum computation. We will learn why we do not yet have answers to many of the most fundamental questions in computational complexity (like whether P=NP), and we will think critically about the value of studying these topics. Students enrolled in the College Writing (CW) section of the course will explore these ideas through writing, in particular, in three contexts that are critical for theoretical computer science: the proof (expert audience), the review paper (non-expert computer science audience), and the popular science article (educated public audience). (CSCI 0301).3 hrs. sem./1 hr. disc.
Terms Taught
Requirements
CSCI 0414
Advanced Operating Systems
Course Description
Advanced Operating Systems
An operating system manages the complex resources of modern computers and provides an interface between the user and the hardware. In this course, we will explore the key concepts of operating systems, including process, memory, and storage management; synchronization and deadlock; protection and security; and distributed systems. (not open to students who have taken CSCI 0314) (CSCI 315) 3 hrs lect.
Terms Taught
Requirements
CSCI 0416
Upcoming
Parallel Computing
Course Description
Parallel Computing
Most modern computer architectures are parallel at multiple scales. In this course students will learn to develop programs that can efficiently use those parallel resources to improve performance and solve ever larger problems. Through a project-based survey students will be introduced to parallel hardware (multicore processors, clusters, GPUs), memory models (shared vs. non-shared), locality, synchronization, and different parallel programming models (threads, MapReduce, message-passing, SIMT, and more). Programming assignments will be implemented in multiple languages. (CSCI 0202) 3hrs. 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 0431
Upcoming
Computer Networks
Course Description
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
Terms Taught
Requirements
CSCI 0433
Compiler Design
Course Description
Compiler Design
An introduction to the design and construction of compilers and translators. Topics include context-free grammars, lexical analysis, symbol tables, top-down and bottom-up parsing, parser generators, error recovery, run-time organization, declaration processing, type checking, code generation, and optimization. Through the course of the semester students will implement a complete compiler for a simple programming language. (CSCI 0202 and CSCI 0301) 3 hrs. lect./lab
Terms Taught
Requirements
CSCI 0435
Embedded Systems
Course Description
Embedded Systems
In this course we will learn about microcontrollers (compact single-chip integrated circuits at the core of embedded systems), including their architecture and how they interface with the outside world. In laboratory assignments, we will experiment with different families of microcontrollers, analyze various types of interfaces, and learn how to connect with external sensors and devices. While gaining hands-on familiarity with the different aspects of embedded systems, teams of students will engage in a semester-long project to design and build their own embedded system. (CSCI 0202) 3 hrs. lect./1.5 hrs. lab.
Terms Taught
Requirements
CSCI 0442
Upcoming
Network Science
Course Description
Network Science
Many social, ecological, and technological systems are networked – their structure arises from connections between many individual components. Network science is the scientific study of connected systems using tools from mathematics, computer science, physics, and beyond. In this course, we will study measurements of centrality, hierarchy, and segregation in networks; random graph models; algorithms for network data mining; models of agents interacting on networks; and network data visualization. Students will write mathematical arguments; perform simulation experiments; implement analysis techniques; read contemporary research papers; navigate existing software packages for network analysis; and complete a substantial group project. (MATH 0200 and CSCI 0302 or instructor approval) 3 hrs. lect./lab.
Terms Taught
Requirements
CSCI 0451
Upcoming
Machine Learning
Course Description
Machine Learning
Machine learning algorithms detect patterns in data and use these patterns to make decisions. This course introduces the theory and practice of machine learning. Tasks considered may include classification, regression, clustering, dimensionality reduction, text embedding, and reinforcement learning. Applications may include predictive analytics, data visualization, pattern recognition, and strategic game-playing. We will also discuss the social implications of automated decision systems. This course fulfills the Responsible Computing requirement for the Computer Science major. (Not open to students who have already taken CSCI 1051.) (CSCI 0200 and CSCI 0201 and MATH 0200) 3 hrs. lect./lab
Terms Taught
Requirements
CSCI 0452
Image Processing
Course Description
Image Processing
In this course students will learn basic image processing concepts and explore practical cross-disciplinary case studies in teams. They will use open-source tools to tackle real-world image and video analysis problems ranging from enhancing and denoising to tracking and extracting information from images and videos. Collaboratively, students will get to apply these tools to a problem of their choice in a semester-long project. (MATH 0200 and CSCI 201) 3 hrs. lect./lab.
Terms Taught
Requirements
CSCI 0454
Biometrics
Course Description
Biometrics
Biometric recognition, or simply biometrics, is the science of establishing the identity of a person based on physical or behavioral attributes. In this course we will cover the three primary modalities of biometric recognition, namely fingerprint, face, and iris. We will also introduce other emerging technologies such as recognition of gait, hand geometry, and ear. Other topics will include the security of biometrics, statistics for biometric evaluation, spoofing, ethical issues related to biometric technology, the relation to forensic science, and the impact biometric recognition has had on the judicial system. (CSCI 0200 and CSCI 201) 3 hrs. lect./lab.
Terms Taught
Requirements
CSCI 0455
Drone Robotics
Course Description
Drone Robotics
In this course we will introduce the fundamental concepts of robotics, specifically focusing on drones using current research and applications. Topics will include drone control, flight planning, obstacle avoidance, and sensing. We will utilize tools from computer vision, image processing, and artificial intelligence, and we will complete experiments using small drones in compliance with college policy. (CSCI 0200 and CSCI 201) 3 hrs. lect./lab
Terms Taught
Requirements
CSCI 0457
Upcoming
Natural Language Processing
Course Description
Natural Language Processing
In this course we will explore computational models for processing natural (human) language. We will introduce statistical and algorithmic techniques that are used to classify, generate, and understand language at the syntactic and semantic levels. We will explore applications such as parsing, information extraction, language modeling, and sentiment analysis. Assignments will involve constructing and modifying systems and will incorporate a variety of large corpora. We will also discuss the ethical concerns associated with current methods for collecting and labeling large corpora, and how language technologies might reflect and reinforce social hierarchies. This course fulfills the Responsible Computing requirement for the Computer Science major. (CSCI 0200 and CSCI 0201)
Terms Taught
Requirements
CSCI 0461
Upcoming
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 0465
Information Visualization
Course Description
Information Visualization
Information visualization is used to reveal patterns, trends, and outliers within abstract data. In this course we will cover topics such as the transformation of data to visual representations, common approaches to dealing with different types of data, perceptual issues that govern how visualizations are interpreted, and the development of interactive visualization tools. This course will culminate in a significant final visualization project. (CSCI 0201)
Terms Taught
Requirements
CSCI 0466
Usable Mobile Interfaces
Course Description
Usable Interface Design for Mobile Applications
In this course we will explore the fundamental concepts of human-computer interaction and interface design. We will focus on applying an iterative, human-centric design process to mobile development. Topics will include user interface design, user experience, usability, prototyping, user testing, and mobile development. A significant portion of the class will be spent developing a mobile app, walking it through the various prototyping and testing stages. (CSCI 0312) 3 hrs. lect./lab.
Terms Taught
Requirements
CSCI 0467
Current
Generative Art
Course Description
Generative Art
In this course we will explore the field of generative art – the artistic practice based on the creation of processes that yield art and design as an output. Through projects, we will find new applications for computing techniques such as visualization, physical simulation, stochastic processes, agent-based modeling, iterated function systems, fractals, genetic algorithms and machine learning. A portion of the class will also be devoted to reading research literature and discussing the nature of computation creativity. A background in art is not required. (CSCI 0201) 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
Upcoming
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
Current
Upcoming
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
CSCI 1005
Upcoming
Crash Course/Systems Security
Course Description
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)
Terms Taught
Requirements
CSCI 1012
Bias, Belonging, Power in Tech
Course Description
Bias, Belonging, and Power in Technology
Algorithms and big data are informing increasingly important decisions, from hiring to setting bail. While we like to think that computers act objectively, in this class we will examine how technology reflects and often reinforces the biases and power structures of the culture that creates it. Since technology is a reflection of the society that creates it, we will also learn about who has been historically welcomed to or excluded from the spaces where computing technology is made. The course will involve reading, discussion, written reflections, an oral presentation, as well as a coding project that creatively engages with the course topics. (One CSCI course at the 0100-level)
Terms Taught
Requirements
CSCI 1015
Intro to Rocket Propulsion
Course Description
Introduction to Rocket Propulsion
In this course we will investigate the following questions: What is rocket propulsion? How do we send humans and robots to space? How do chemical and electrical rockets work and what applications are they suitable for? How do spacecraft travel to other planets? How can we use computers to design rockets and their trajectories? We will dive into topics including chemical combustion, energy conversion, ionized gases, launch vehicle design and trajectories, Kepler’s Laws, orbit transfers, and much more. We will also read Hidden Figures and have weekly discussions about the text. Assignments will consist of readings, handwritten problem sets, programming assignments, and a short reflection paper on Hidden Figures. (CSCI 101 or CSCI 0145 or CSCI 150, or equivalent and PHYS 109 or equivalent and MATH 0121 or equivalent)
Terms Taught
Requirements
CSCI 1051
Upcoming
Deep Learning
Course Description
Deep Learning
As data becomes ubiquitous and computing resources cheaper, many disciplines have turned to deep learning to solve complicated problems. While it has achieved remarkable success in a variety of "human" tasks, deep learning is often treated as a black-box. In this course, we will study deep learning from its foundations and build an intuitive understanding for why it works. Pairing lectures with labs, we will develop cutting-edge deep learning solutions to a variety of real-world problems. We will cover neural networks, convolutional networks designed for object detection, and recurrent networks used for natural language processing. We may also explore other topics including transformers, reinforcement learning, and generative adversarial networks subject to time and interest.(Not open to students who have already taken CSCI 0451.) (CSCI 0200, CSCI 0201, MATH 0200)
Terms Taught
Requirements
CSCI 1052
Randomized Algorithms
Course Description
Randomized Algorithms for Data Science
In this class, we will discover how data science techniques are deployed at scale. The questions we investigate will include: How do services such as Shazam recognize song clips in seconds? In settings with hundreds of features, how do we find patterns? Given a social network, how can we detect groups? And how can we use vibrations to "see" into the earth? We'll answer these questions and more by exploring how randomization lets us get away with far fewer resources than we'd otherwise need. Topics include random variables, concentration inequalities, dimensionality reduction, singular value decomposition, spectral graph theory, and approximate linear regression. (MATH 0200, CSCI 0200 and CSCI 0302)
Teal Witter is a PhD candidate at NYU Tandon. He graduated from Middlebury in 2020 and can't wait to return to snowy Vermont for the winter term!/
Terms Taught
Requirements