CSCI0101AF14
CRN: 90089

The Computing Age
The Computing Age
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?" 3 hr. lect./lab
 Instructors:
 Christopher Andrews
 Location:
 McCardell Bicentennial Hall 104
 Schedule:
 11:15am12:05pm on Monday, Wednesday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0101BF14
CRN: 90580

The Computing Age
The Computing Age
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?" 3 hr. lect./lab
 Instructors:
 Christopher Andrews
 Location:
 McCardell Bicentennial Hall 104
 Schedule:
 1:45pm2:35pm on Monday, Wednesday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0101WF14
CRN: 92257

The Computing Age
The Computing Age Lab
The Computing Age
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?" 3 hr. lect./lab
 Instructors:
 Christopher Andrews
 Location:
 McCardell Bicentennial Hall 505
 Schedule:
 8:00am8:50am on Friday (Sep 8, 2014 to Dec 5, 2014)

CSCI0101XF14
CRN: 92258

The Computing Age
The Computing Age Lab
The Computing Age
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?" 3 hr. lect./lab
 Instructors:
 Christopher Andrews
 Location:
 McCardell Bicentennial Hall 505
 Schedule:
 11:15am12:05pm on Friday (Sep 8, 2014 to Dec 5, 2014)

CSCI0101YF14
CRN: 92259

The Computing Age
The Computing Age Lab
The Computing Age
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?" 3 hr. lect./lab
 Instructors:
 Christopher Andrews
 Location:
 McCardell Bicentennial Hall 505
 Schedule:
 1:45pm2:35pm on Friday (Sep 8, 2014 to Dec 5, 2014)

CSCI0101ZF14
CRN: 92260

The Computing Age
The Computing Age Lab
The Computing Age
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?" 3 hr. lect./lab
 Instructors:
 Christopher Andrews
 Location:
 McCardell Bicentennial Hall 505
 Schedule:
 9:30am10:20am on Thursday (Sep 8, 2014 to Dec 5, 2014)

CSCI0150AF14
CRN: 91385

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 common technique employed in scientific computation. The course has no prerequisites and assumes no prior experience with programming or computer science. 3 hrs. lect./lab
 Instructors:
 Daniel Scharstein
 Location:
 McCardell Bicentennial Hall 505
 Schedule:
 9:05am9:55am on Monday, Wednesday, Friday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0150BF14
CRN: 92263

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 common technique employed in scientific computation. The course has no prerequisites and assumes no prior experience with programming or computer science. 3 hrs. lect./lab
 Instructors:
 Daniel Scharstein
 Location:
 McCardell Bicentennial Hall 505
 Schedule:
 10:10am11:00am on Monday, Wednesday, Friday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0200AF14
CRN: 92261

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 previously or concurrently; formerly CSCI 0102) 3 hrs. lect./lab
 Instructors:
 Peter Johnson
 Location:
 McCardell Bicentennial Hall 411
 Schedule:
 9:30am10:45am on Tuesday, Thursday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0201AF14
CRN: 90134

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) 3 hrs. lect./lab
 Instructors:
 Ananya Christman
 Location:
 McCardell Bicentennial Hall 538
 Schedule:
 11:15am12:05pm on Monday, Wednesday, Friday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0201BF14
CRN: 92262

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) 3 hrs. lect./lab
 Instructors:
 Ananya Christman
 Location:
 McCardell Bicentennial Hall 538
 Schedule:
 1:45pm2:35pm on Monday, Wednesday, Friday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0201XF14
CRN: 92511

Data Structures
Data Structures Lab
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) 3 hrs. lect./lab
 Instructors:
 Ananya Christman
 Location:
 McCardell Bicentennial Hall 632
 Schedule:
 2:50pm3:40pm on Monday (Sep 8, 2014 to Dec 5, 2014)

CSCI0201YF14
CRN: 92518

Data Structures
Data Structures Lab
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) 3 hrs. lect./lab
 Instructors:
 Ananya Christman
 Location:
 McCardell Bicentennial Hall 632
 Schedule:
 1:55pm2:45pm on Tuesday (Sep 8, 2014 to Dec 5, 2014)

CSCI0201ZF14
CRN: 92519

Data Structures
Data Structures Lab
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) 3 hrs. lect./lab
 Instructors:
 Ananya Christman
 Location:
 McCardell Bicentennial Hall 632
 Schedule:
 2:50pm3:40pm on Wednesday (Sep 8, 2014 to Dec 5, 2014)

CSCI0202AF14
CRN: 90135

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 previously or concurrently) 3 hrs. lect./lab
 Instructors:
 Christopher Andrews
 Location:
 McCardell Bicentennial Hall 632
 Schedule:
 9:05am9:55am on Monday, Wednesday, Friday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0301AF14
CRN: 90136

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.
 Instructors:
 Amy Briggs
 Location:
 McCardell Bicentennial Hall 309
 Schedule:
 9:30am10:45am on Tuesday, Thursday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0311AF14
CRN: 92264

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
 Instructors:
 Ananya Christman
 Location:
 McCardell Bicentennial Hall 309
 Schedule:
 10:10am11:00am on Monday, Wednesday, Friday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0390AF14
CRN: 92183

Spatial AgentBased Modeling
Spatial AgentBased Modeling
In this course students will learn efficient data structures and design techniques for spatiallyexplicit agentbased modeling using the NetLogo programming language. Agentbased modeling techniques will be applied to problems in the social and natural sciences, mathematics and computational sciences, and agentbased 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).
 Instructors:
 Matthew Dickerson
 Location:
 McCardell Bicentennial Hall 505
 Schedule:
 11:00am12:15pm on Tuesday, Thursday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0433AF14
CRN: 92265

Compiler Design
Compiler Design
An introduction to the design and construction of compilers and translators. Topics include contextfree grammars, lexical analysis, symbol tables, topdown and bottomup parsing, parser generators, error recovery, runtime 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
 Instructors:
 Daniel Scharstein
 Location:
 McCardell Bicentennial Hall 632
 Schedule:
 1:45pm2:35pm on Monday, Wednesday, Friday (Sep 8, 2014 to Dec 5, 2014)
 Requirements Satisfied:
 DED

CSCI0500AF14
CRN: 90521

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.
 Location:
 Main
 Schedule:
 7:00pm8:29pm on Sunday (Sep 8, 2014 to Dec 5, 2014)

CSCI0500BF14
CRN: 90656

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.
 Instructors:
 Amy Briggs
 Location:
 Main
 Schedule:
 7:00pm8:29pm on Sunday (Sep 8, 2014 to Dec 5, 2014)

CSCI0500CF14
CRN: 90879

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.
 Instructors:
 Daniel Scharstein
 Location:
 Main
 Schedule:
 7:00pm8:29pm on Sunday (Sep 8, 2014 to Dec 5, 2014)

CSCI0500DF14
CRN: 90657

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.
 Instructors:
 Matthew Dickerson
 Location:
 Main
 Schedule:
 7:00pm8:29pm on Sunday (Sep 8, 2014 to Dec 5, 2014)

CSCI0500EF14
CRN: 90658

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.
 Instructors:
 David Kauchak
 Location:
 Main
 Schedule:
 7:00pm8:29pm on Sunday (Sep 8, 2014 to Dec 5, 2014)

CSCI0500FF14
CRN: 90736

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.
 Instructors:
 Ananya Christman
 Location:
 Main
 Schedule:
 7:00pm8:29pm on Sunday (Sep 8, 2014 to Dec 5, 2014)

CSCI0500GF14
CRN: 92596

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.
 Instructors:
 Christopher Andrews
 Location:
 Main
 Schedule:
 7:00pm8:29pm on Sunday (Sep 8, 2014 to Dec 5, 2014)

CSCI0701AF14
CRN: 92254

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.
 Instructors:
 Peter Johnson
 Location:
 McCardell Bicentennial Hall 538
 Schedule:
 1:30pm2:45pm on Tuesday, Thursday (Sep 8, 2014 to Dec 5, 2014)
