Courses

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

CSCI 0101 - Introduction to Computing      

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?" (Seniors by waiver) 3 hr. lect./lab DED

Fall 2013, Spring 2014, Fall 2014, Spring 2015, Fall 2015, Spring 2016, Fall 2016, Spring 2017, Fall 2017, Spring 2018

More Information »

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

Fall 2013, Spring 2014, Fall 2014, Fall 2015, Spring 2016, Fall 2016, Spring 2017, Fall 2017, Spring 2018

More Information »

CSCI 0190 - Computing through Simulation      

Introduction to Computing through Multi-Agent Simulation
In this course we will introduce important topics in the discipline of computer science (including algorithmic reasoning, data abstraction, procedural abstraction, program design, and recursion) in the context of computer modeling and simulation. In particular, we will explore a type of computer simulation known as agent-based modeling as a means of studying phenomena from both biological and social sciences. A significant amount of time will be spent teaching the NetLogo programming language as a software tool for developing simulations. No prior experience in programming is assumed. This course counts as an environmental studies lab science cognate. 3 hrs. lect./lab DED

Fall 2013, Spring 2015, Spring 2016

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

Spring 2014, Fall 2014, Spring 2015, Fall 2015, Spring 2016, Fall 2016, Spring 2017, Fall 2017, Spring 2018

More Information »

CSCI 0201 - Data Structures      

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. (One CSCI course at the 0100-level) 3 hrs. lect./lab DED

Fall 2013, Spring 2014, Fall 2014, Spring 2015, Fall 2015, Spring 2016, Fall 2016, Spring 2017, Fall 2017, Spring 2018

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

Fall 2013, Fall 2014, Spring 2015, Fall 2015, Spring 2016, Fall 2016, Spring 2017, Fall 2017, Spring 2018

More Information »

CSCI 0301 - Theory of Computation      

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

Fall 2013, Fall 2014, Fall 2015, Fall 2016, Fall 2017, Spring 2018

More Information »

CSCI 0302 - Algorithms and Complexity      

Algorithms and Complexity
This course focuses on the development of correct and efficient algorithmic solutions to computational problems, and on the underlying data structures to support these algorithms. Topics include computational complexity, analysis of algorithms, proof of algorithm correctness, advanced data structures such as balanced search trees, and also important algorithmic techniques including greedy and dynamic programming. The course complements the treatment of NP-completeness in CSCI 0301. (CSCI 0200 and CSCI 0201) 3 hrs. lect./disc. DED

Spring 2014, Spring 2015, Spring 2016, Fall 2016, Spring 2017, Fall 2017, Spring 2018

More Information »

CSCI 0311 - Artificial Intelligence      

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

Fall 2014, Fall 2016

More Information »

CSCI 0312 - Software Development      

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

Fall 2015, Spring 2017, Spring 2018

More Information »

CSCI 0313 - Programming Languages      

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 DED

Spring 2015, Spring 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

Fall 2013, 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 0321 - Bioinformatics Algorithms      

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 or another language of their choice. (CSCI 201) 3 hrs. lect./lab. DED DED

Spring 2017

More Information »

CSCI 0333 - Quantum Computing      

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

Spring 2018

More Information »

CSCI 0390 - Spatial Agent-Based Modeling      

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, mathematics and computational sciences, and agent-based games. In this course we will explore advanced programming features of NetLogo such as links, GIS extensions, 3D modeling, and the profiler. Students will design and implement a significant term project. (CSCI 0190 or CSCI 0201). DED

Fall 2014, Spring 2018

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 0433 - Compiler Design      

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 DED

Fall 2014, Fall 2017

More Information »

CSCI 0441 - Advanced Algorithms      

Advanced Algorithms
In this course we will discuss advanced algorithms such as advanced graph and networking algorithms, randomized algorithms, approximation algorithms, and online algorithms. We will learn advanced techniques for the design and analysis of these algorithms and explore a variety of applications. (CSCI 0302) 3 hrs. lect./disc. DED

Fall 2015

More Information »

CSCI 0451 - Machine Learning      

Machine Learning
Machine Learning is the study and design of computational systems that automatically improve their performance through experience. This course introduces the theory and practice of machine learning and its application to tasks such as database mining, pattern recognition, and strategic game-playing. Possible topics include decision-tree methods, neural networks, Bayesian and statistical methods, genetic algorithms, and reinforcement learning. (CSCI 0200 and CSCI 0201) 3 hrs. lect./lab DED

Fall 2013, Fall 2017

More Information »

CSCI 0453 - Computer Vision      

Computer Vision
The goal of computer vision is to extract information from digital images and movies. Topics covered in this course include algorithms for edge and motion detection, stereo vision, object recognition, and recovering structure from motion. A range of mathematical techniques will be used to model problems and algorithms. Students will implement, test, and evaluate several computer vision techniques, and will gain experience with analyzing real, noise-contaminated image data. (CSCI 0202 and MATH 0200) 3 hrs. lect./lab DED

Spring 2016

More Information »

CSCI 0454 - Biometrics      

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

Fall 2017

More Information »

CSCI 0461 - Computer Graphics      

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 OpenGL. (CSCI 0202 and MATH 0200) 3 hrs. lect./lab DED

Spring 2015, Fall 2016

More Information »

CSCI 0463 - Cryptography      

Cryptography
Topics will be chosen from: classical cryptography, block ciphers and the Advanced Encryption Standard, public key cryptology, public key implementations, cryptographic hash functions, authentication techniques, digital signatures, advanced topics in mathematical cryptology. (CSCI 0301 or CSCI 0302) 3 hrs. lect./lab. DED

Spring 2015

More Information »

CSCI 0465 - Information Visualization      

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

Spring 2014, Spring 2016

More Information »

CSCI 0466 - Usable Mobile Interfaces      

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 0311 or CSCI 0312 or CSCI 0313 or CSCI 0314) 3 hrs. lect./lab, DED DED

Spring 2017

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.

Fall 2013, Winter 2014, Spring 2014, Fall 2014, Winter 2015, Spring 2015, Fall 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, Fall 2015, Spring 2016, Fall 2016, Spring 2017, Fall 2017, Spring 2018

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 2014, Spring 2015, Spring 2016, Fall 2016, Winter 2017, Spring 2017, Fall 2017, Winter 2018, Spring 2018

More Information »

CSCI 1002 - Web Database Systems      

Web Database Systems
In this course we will learn how to create an online database. We will cover the basics of database design using ER (Entity-Relation) modeling and SQL programming. We will build an SQL database and learn how to use PHP to create websites that interact with the database. Finally, we will learn how to create Java programs that interact with an SQL database. This course will count as an elective towards the CSCI major in the CSCI 0311-0314 category. (CSCI 0201) DED WTR

Winter 2014

More Information »

CSCI 1003 - Generative Art      

Generative Art
Generative art is process-driven creation in which the artist creates an autonomous system that produces the artwork as output. In this course we will write computer programs, focusing on algorithmic creation to generate images. We will discuss the nature of generative art and cover technical topics such as basic algorithmic drawing, image manipulation, randomness and noise, emergence, and visualization. There is no assumption of prior knowledge of programming, so significant time will be spent learning the basics of programming using Processing, a popular visually oriented programming language. DED WTR

Winter 2014

More Information »

CSCI 1004 - Programming for Novices      

Computer Programming for Novices
All 21st century learners should strive to attain basic programming skills. No matter what discipline we work in, we would all be better problem solvers and better users of computational tools if we had some facility with computer programming and some understanding of how software is built. In this course – for computer programming novices – we will learn the basics of coding using a variety of tools and languages including Scratch and JavaScript. Each class meeting will include both lecture and hands-on lab time. DED WTR

Winter 2015

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 »

CSCI 1011 - Computers and Society      

Computers and Society
In this course we will explore and write about important issues related to the impact of computers and computing technology on society. Topics to be explored include privacy and security, privacy and intellectual rights, environmental issues related to computing technologies, and the possibility of computer intelligence. (Approval required) CW WTR

Winter 2015

More Information »

CSCI 1099 - GUI Applications in C++/Qt      

GUI Applications in C++Qt
In this coding-intensive course, students will gain an understanding of the C++ language through the development of Graphical User Interface (GUI) applications within the cross-platform Qt development environment. We will begin with small, simple applications, culminating in application development projects of the students’ choosing, all the while building our understanding of fundamental C++ concepts such as classes, templates, pointers, constructors/destructors, and ownership. (Approval required)
WTR

Winter 2014

More Information »