middCourses
Algorithmic World
CSCI 0105

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.

3 reviews
Programming through Simulation
CSCI 0110

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)

6 reviews
Introduction to Computing
CSCI 0145

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

102 reviews
Intensive Intro to Computing
CSCI 0146

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.

6 reviews
Computing for the Sciences
CSCI 0150

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.

32 reviews
Math Foundations of Computing
CSCI 0200

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)

68 reviews
Data Structures
CSCI 0201

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)

66 reviews
Computer Architecture
CSCI 0202

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)

65 reviews
Theory of Computation
CSCI 0301

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.

35 reviews
Algorithms and Complexity
CSCI 0302

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.

30 reviews
Artificial Intelligence
CSCI 0311

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.

16 reviews
Software Development
CSCI 0312

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.

35 reviews
Programming Languages
CSCI 0313

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.

3 reviews
Systems Programming
CSCI 0315

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

21 reviews
OOP & GUI Application Dev
CSCI 0318

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./disc.

2 reviews
Bioinformatics Algorithms
CSCI 0321

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.

6 reviews
Quantum Computing
CSCI 0333

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.

4 reviews
Spatial Agent-Based Modeling
CSCI 0390

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

8 reviews
Computational Complexity
CSCI 0401

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

2 reviews
Advanced Operating Systems
CSCI 0414

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.

1 review
Parallel Computing
CSCI 0416

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

1 review
Geometric Modeling
CSCI 0422

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

1 review
Computer Networks
CSCI 0431

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.

4 reviews
Compiler Design
CSCI 0433

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.

10 reviews
Embedded Systems
CSCI 0435

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.

0 reviews
Network Science
CSCI 0442

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.

0 reviews
Machine Learning
CSCI 0451

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

13 reviews
Image Processing
CSCI 0452

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.

2 reviews
Drone Robotics
CSCI 0455

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.

0 reviews
Natural Language Processing
CSCI 0457

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.

11 reviews
Computer Graphics
CSCI 0461

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.

4 reviews
Information Visualization
CSCI 0465

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.

5 reviews
Usable Mobile Interfaces
CSCI 0466

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.

1 review
Generative Art
CSCI 0467

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)

6 reviews
Senior Seminar
CSCI 0701

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

1 review
Senior Thesis
CSCI 0702

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.

0 reviews
Crash Course/Systems Security
CSCI 1005

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.

10 reviews
Deep Learning
CSCI 1051

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

5 reviews
Randomized Algorithms
CSCI 1052

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 or 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!/

1 review
Amy BriggsAnanya DasAndrea VaccariChristopher AndrewsDaniel ScharsteinFrank SwentonJason GrantJohn FoleyLaura BiesterMatthew DickersonMichael LindermanPeter JohnsonPhil ChodrowPhilip CaplanRaylen WitterShelby KimmelShrutarshi BasuSiegfried Bleher
CSCI0145 with Laura Biester11 days ago

This course was a witch hunt for AI use. The homework was far too difficult and high stakes for an intro class. If you have absolutely no experience coding in any language-- DO NOT take this course. They transitioned to no-partial-credit written exams, which made this course very hard to do well in. So many people bombed the midterm that they had to implement an exchange program to gain points back by doing extra homework. This was nice, but it doubled my weekly workload. Biester was very nice, but it seemed like Andrews called all the shots, and he was not as forgiving (in grading or generally). So many people got flagged for AI use (sometimes wrongly), which is clearly a result of the homework problems being too hard. If you couldn't complete a homework problem, you got no credit and no chance to redo it, AND if you couldn't complete a few over the course of the semester, it was impossible to get an A (even if it was a result of only a minor coding error). Overall, this course is far too intense for an intro, and they need to figure out how they are handling AI usage. **This is not a reflection of Biester as an instructor- she was wonderful- it seems that there are bigger systemic problems within the course and the department.

This course was a witch hunt for AI use. The homework was far too difficult and high stakes for an intro class. If you have absolutely no experience coding in any language-- DO NOT take this course. They transitioned to no-partial-credit written exams, which made this course very hard to do well in. So many people bombed the midterm …Read more

Lots of HomeworkDifficult ExamsTough Grading
7hrs / week Extremely difficulty Average value Would not take again
CSCI0312 with Michael Linderman23 days ago

Professor Linderman is one of the best professors in the CS department, so I'd recommend taking SoftDev with him. The class has 4 main programming assignments to be completed in the first half of the course and the second half will be implementing contents from those assignments into your group projects. There are also 10 practicals which are small programming assignments which will help with the project too. Resubmissions are allowed for everything so its a chill class.

Professor Linderman is one of the best professors in the CS department, so I'd recommend taking SoftDev with him. The class has 4 main programming assignments to be completed in the first half of the course and the second half will be implementing contents from those assignments into your group projects. There are also 10 practicals …Read more

Chill and RelaxedProject-HeavyEasy Grading
5hrs / week Low difficulty Extremely high value Would take again
CSCI0200 with Shelby Kimmel30 days ago

Prof Kimmel uses a learning target style of grading. Instead of exams there are learning targets where you can pick and choose which targets to complete. Your grade is based off how much primary / secondary targets you have by the end ilofbtbe year. Great for retrying skills and earning full credit for them even after messing up on a previous assessment, but if missing 1 or 2 problems could change your grade a lot

Prof Kimmel uses a learning target style of grading. Instead of exams there are learning targets where you can pick and choose which targets to complete. Your grade is based off how much primary / secondary targets you have by the end ilofbtbe year. Great for retrying skills and earning full credit for them even after messing up on a …Read more

Fair GradingFast-PacedNo Exams
4hrs / week Some difficulty Average value Would take again
Login to access 583 more Computer Science reviews