Sections
« Summer Study 2020  Fall 2020  Winter 2021 » 

CRN: 92461 
Algorithmic World
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


CRN: 92740 
Algorithmic World
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


CRN: 92534 
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, divideandconquer, 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


CRN: 92536 
Introduction to Computing


CRN: 92537 
Introduction to Computing


CRN: 92538 
Introduction to Computing


CRN: 92539 
Introduction to Computing


CRN: 91034 
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 problemsolving 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


CRN: 92745 
Computing for the Sciences


CRN: 92748 
Computing for the Sciences


CRN: 92749 
Computing for the Sciences


CRN: 92750 
Computing for the Sciences


CRN: 92752 
Computing for the Sciences


CRN: 91390 
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 0100level) (Juniors and Seniors by waiver) 3 hrs. lect./lab


CRN: 91604 
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 0100level) (Juniors and Seniors by waiver) 3 hrs. lect./lab


CRN: 90101 
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 objectoriented 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 0100level) (Juniors and Seniors by waiver) 3 hrs. lect./lab


CRN: 92527 
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 objectoriented 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 0100level) (Juniors and Seniors by waiver) 3 hrs. lect./lab


CRN: 92755 
Data Structures


CRN: 91419 
Data Structures


CRN: 91420 
Data Structures


CRN: 90102 
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) (Seniors by waiver) 3 hrs. lect./lab


CRN: 91573 
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) (Seniors by waiver) 3 hrs. lect./lab


CRN: 90103 
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, pushdown 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 nondeterministic computation, and a theoretical basis for the study of NPcompleteness. (CSCI 0200 and CSCI 0201) 3 hrs. lect./disc.


CRN: 92757 
Theory of Computation


CRN: 92761 
Theory of Computation


CRN: 92762 
Theory of Computation


CRN: 91539 
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 NPcompleteness in CSCI 0301. (CSCI 0200 and CSCI 0201) 3 hrs. lect./disc.


CRN: 91794 
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 NPcompleteness in CSCI 0301. (CSCI 0200 and CSCI 0201) 3 hrs. lect./disc.


CRN: 92038 
Software Development
Software Development
This course examines the process of developing largerscale 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


CRN: 92786 
Software Development


CRN: 92787 
Software Development


CRN: 92788 
Software Development


CRN: 92291 
Programming Languages
Programming Languages
A systematic approach to concepts and features of programming languages. The course focuses on four major programming paradigms: procedural, objectoriented, functional, and logic programming languages. Students will program in several languages representing the different paradigms. Topics include grammars, data types, control structures, runtime organization, procedure activation, parameter passing, higherorder functions, lambda expressions, and unification. (CSCI 0200 and CSCI 0202) 3 hrs. lect./lab


CRN: 92793 
Programming Languages


CRN: 92794 
Programming Languages


CRN: 92796 
Programming Languages


CRN: 91624 
Systems Programming
Systems Programming
Students will become intimately acquainted with the lowlevel software services that applications often take for granted. Through a broad, projectbased survey of core system libraries and UNIX system calls, students will explore process management, memory management, linking and loading, threading, synchronization, filesystem operations, and interprocess 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 userlevel software depends. (CSCI 0202) 3 hrs. lect


CRN: 92797 
Systems Programming


CRN: 92800 
Systems Programming


CRN: 92039 
Systems Programming


CrossListed As: CRN: 92809 
Computational Complexity
Computational Complexity
We will study models of computation and investigate whether a model of computation can solve a given problem efficiently or not. We will consider models that involve allknowing provers, constrained space, communication limitations, randomness, and quantum resources, among others. While not all of these models are realistic, by studying them, we will gain insight into why certain classes of problems are easy or difficult to solve. 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), a review paper (nonexpert computer science audience), and a popular science article (educated public audience). (CSCI 0301 and CSCI 0302, or instructor approval).3 hrs. sem./1 hr. disc. Hyflex: inperson participation will be on a rotating schedule, as there is a limited daily capacity.


CrossListed As: CRN: 92811 
Computational Complexity
Computational Complexity
We will study models of computation and investigate whether a model of computation can solve a given problem efficiently or not. We will consider models that involve allknowing provers, constrained space, communication limitations, randomness, and quantum resources, among others. While not all of these models are realistic, by studying them, we will gain insight into why certain classes of problems are easy or difficult to solve. 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), a review paper (nonexpert computer science audience), and a popular science article (educated public audience). (CSCI 0301 and CSCI 0302, or instructor approval).3 hrs. sem./1 hr. disc. Hyflex: inperson participation will be on a rotating schedule, as there is a limited daily capacity.


CRN: 92292 
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.


CRN: 90391 
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.


CRN: 90499 
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.


CRN: 90693 
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.


CRN: 90500 
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.


CRN: 90501 
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.


CRN: 90565 
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.


CRN: 91427 
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.


CRN: 91577 
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.


CRN: 91651 
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.


CRN: 91652 
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.


CRN: 91796 
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.


CRN: 91386 
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).


CRN: 91781 
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).


CRN: 92783 
Senior Seminar


CRN: 92784 
Senior Seminar


CRN: 92785 
Senior Seminar


CRN: 91540 
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.
