Professors: Amy Briggs(on leave academic year 2008-09), Matthew Dickerson (chair), Robert Martin; Associate Professors: Timothy Huang, Daniel Scharstein. Department Coordinator: Amy Comes
Computing and technology play an increasingly important role in our society and in many aspects of our lives. Computer science is a rich and dynamic discipline that seeks to understand and use effectively the great potential of computing. The Department of Computer Science at Middlebury offers a wide variety of courses that integrate computer science into the liberal arts curriculum.
Our program is designed to serve the needs of all Middlebury College students: (1) those who choose to major or minor in computer science, emphasizing a liberal arts approach to computer science and its applications; (2) those who need computer science or programming as an integral part of their chosen major or minor; and (3) those majoring in areas outside the sciences who seek to understand computing and modern computer technology. Our goal is to help students studying computer science develop strong algorithmic problem-solving skills as well as a deep understanding of the conceptual organization of computers and the fundamental principles of computer science.
The starting point for most students interested in learning about the field is CSCI 0101 (The Computing Age). This course presents a broad view of the discipline of computer science and introduces programming in Java. This course has no prerequisites and is offered every semester. Next in the introductory sequence is CSCI 0102 (Mathematical Foundations of Computing), which provides the necessary mathematical background for subsequent coursework in computer science. The department also offers CSCI 0190 (Topics in Introductory Computer Science), which presents non-majors an opportunity to study computing in the context of a particular application area.
The intermediate-level courses are CSCI 0201 (Data Structures), CSCI 0202 (Computer Architecture), CSCI 0301 (Theory of Computation), and CSCI 0302 (Algorithms and Complexity). These courses form a solid foundation for further study in the discipline and are prerequisites for many of the 0300-level and 0400-level electives.
The core group of electives consists of CSCI 0311 (Artificial Intelligence), CSCI 0312 (Software Development), CSCI 0313 (Programming Languages), and CSCI 0314 (Operating Systems). These four courses build a broad base for understanding the core areas of computer science, and are offered on a regular basis every two years. Advanced electives in the areas of computational geometry, networks, compiler design, machine learning, computer vision, robotics, graphics, and cryptology give students an opportunity to sample a variety of specialization and application areas of computer science. These electives are not specifically required and are offered on a less frequent basis. Students are required to take four electives for the computer science major, at least two of which must come from the core group of electives CSCI 0311-0314.
A typical schedule follows for a computer science major beginning with CSCI 0101 in the fall semester of the first year:
| |
Fall |
Spring |
| Year 1 |
MATH 0122 or 0200, CSCI 0101 |
CSCI 0102 |
| Year 2 |
CSCI 0201, CSCI 0202 |
CSCI 0302 |
| Year 3 |
CSCI 0301, CSCI 0311 or 0313 |
CSCI 0312 or 0314 |
| Year 4 |
CSCI elective |
CSCI elective, CSCI 0702 |
Note that there are many alternatives to this schedule. For example, CSCI 0101 and CSCI 0102 may be taken concurrently in the Spring, and CSCI 0201 and CSCI 0202 may be taken concurrently in the fall.
Required for the Major in Computer Science: CSCI 0101, CSCI 0102, CSCI 0201, CSCI 0202, CSCI 0301, CSCI 0302; two courses from among CSCI 0311, CSCI 0312, CSCI 0313, CSCI 0314; one of MATH 0122 or MATH 0200; the senior seminar CSCI 0702; and two CSCI electives at the 0300-level or above. One elective can be substituted with a mathematics course from among MATH 0200, MATH 0241, MATH 0310, MATH 0311, MATH 0315, MATH 0318, MATH 0345, MATH 0410, or MATH 0451.
Senior Project: All majors and joint majors must complete the senior seminar CSCI 0702 during the senior year. In this course they will complete a major capstone project, which can take the form of either a senior thesis supervised by a member of the department, or a group programming project approved by the computer science faculty.
Departmental Honors: A grade point average consistent with the guidelines given for honors in the College Handbook and an extra elective at the 0300-level or higher is required for departmental honors. Departmental service is also considered in the awarding of honors.
Required for the Minor in Computer Science: CSCI 0101, CSCI 0102, CSCI 0201, CSCI 0202, and two CSCI electives at the 0300-level or above. Students beginning at an advanced level must complete a minimum of four courses at the 0200-level or higher for a computer science minor.
Joint Majors: The computer science component of a joint major requires: CSCI 0101, CSCI 0102, CSCI 0201, CSCI 0202; one course from CSCI 0301 and CSCI 0302; two CSCI electives at the 0300-level or above; and CSCI 0702.
Advanced Placement and Waivers: Majors typically begin their study of computer science in CSCI 0101. First-year students whose secondary training indicates they can bypass one or more beginning courses should speak to a faculty member to determine the appropriate first course. Credit for CSCI 0101 is given to students who achieve a score of 4 or 5 on the AP computer science A exam. Credit for CSCI 0201 is given for a score of 4 or 5 on the computer science AB exam. CSCI 0102 may be waived for students who have completed MATH 0310 or MATH 0318 or both MATH 0200 and MATH 0247, or in consultation with the department chair.
CSCI 0101 The Computing Age (Fall, Spring)
In this course we provide a broad introductory overview of the discipline of computational 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 Java; computer labs and programming assignments will explore algorithmic strategies such as selection, iteration, divide-and-conquer, and recursion, as well as introducing the Java 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?" (Formerly CSCI 0100/0101) 3 hr. lect., 1.25 hr. lab DED (fall: D. Scharstein, M. Dickerson; spring: R. Martin, T. Huang)
CSCI 0102 Mathematical Foundations of Computing (Spring)
An introduction to the mathematical foundations of computer science, with an emphasis on formal reasoning. Topics 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 0101 previously or concurrently) 3 hrs. lect./disc. DED (M. Dickerson)
CSCI 0190 Computer Models and Environmental Simulation (Not offered 2008-09)
In this course we will explore computer models and simulations as a means of studying environmental and natural phenomena. We will use NetLogo as a software/programming tool for developing environmental simulations. We will also introduce some of the important topics in the discipline of computer science, including algorithmic reasoning and data abstraction. In addition to the NetLogo programmable modeling environment, students will also be introduced to Java programming. No prior experience in programming is expected or required. This course counts as an environmental studies lab science cognate. 3 hrs. lect./lab DED
CSCI 0201 Data Structures (Fall, Spring)
This course builds on CSCI 0101 and stresses ideas and structures helpful in designing algorithms and writing programs for solving large, complex problems. The course introduces 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. Familiarity with the Java programming language is assumed. (CSCI 0101) 3 hrs. lect./lab DED (T. Huang)
CSCI 0202 Computer Architecture (Fall)
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 DED (R. Martin)
CSCI 0301 Theory of Computation (Fall)
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 0102 and CSCI 0201) 3 hrs. lect./disc. DED (M. Dickerson)
CSCI 0302 Algorithms and Complexity (Spring)
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 0102 and CSCI 0201) 3 hrs. lect./disc. DED (R. Martin)
CSCI 0311 Artificial Intelligence (Not offered 2008-09)
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 0102 and CSCI 0201) 3 hrs. lect./lab DED
CSCI 0312 Software Development (Not offered 2008-09)
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 0102 previously or concurrently, and CSCI 0201) 3 hrs. lect./lab DED
CSCI 0313 Programming Languages (Spring)
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 0102 previously or concurrently, and CSCI 0202) 3 hrs. lect./lab DED (D. Scharstein)
CSCI 0314 Operating Systems (Fall)
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 0102 previously or concurrently, and CSCI 0202) 3 hrs. lect./lab DED (T. Huang)
CSCI 0425 Computational Geometry (Spring)
Computational geometry involves the design and analysis of algorithms and data structures for the solution to problems of a geometric and computational nature. It is an old field, involving aspects of algorithms, geometry, combinatorics and probability, whose roots can be found in algorithmic questions posed by Euclid. Modern applications of computational geometry include geographic information systems, medical imaging, computer-aided design, and robotics. This course will explore some famous problems in computational geometry, including convex hulls, Voronoi diagrams, proximity problems, and triangulations. (CSCI 0102 and CSCI 0201) 3 hrs. lect./lab DED (M. Dickerson)
CSCI 0431 Computer Networks (Not offered 2008-09)
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 0202) 3 hrs. lect./lab DED
CSCI 0433 Compiler Design (Not offered 2008-09)
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
CSCI 0451 Machine Learning (Not offered 2008-09)
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 0102 and CSCI 0201) 3 hrs. lect./lab DED
CSCI 0453 Computer Vision (Not offered 2008-09)
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
CSCI 0461 Computer Graphics (Fall)
The mathematical techniques for creating graphics on the computer. Topics include clipping, perspective, coordinate transformations, hidden surface algorithms, and animation. (CSCI 0202 and MATH 0200) 3 hrs. lect./lab DED (R. Martin)
CSCI 0463 Cryptology (Not offered 2008-09)
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
CSCI 0500 Advanced Study (Fall, Winter, Spring)
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. (Staff)
CSCI 0702 Senior Seminar (Spring)
Each student will complete a major capstone project in this course. This project can take the form of either (1) a thesis on a topic chosen with the advice of a faculty member, or (2) a group programming project approved by the computer science faculty. All students will present their work at the end of the semester. In addition, during the academic year, all seniors are expected to attend a series of lectures designed to introduce and integrate ideas of computer science not covered in other coursework. 3 hrs. lect./disc. (D. Scharstein)