 |
Member of the Division of Science
Henry Walker, Chair, Janet Davis, Samuel Rebelsky, Nikolay Silkin, John Stone
People use computers, because they can provide services and help in the
solving of problems. Thus, many courses and much research throughout the College
utilize various aspects of computing.
The discipline of computer science includes all aspects of the effective use of
computers. Core areas within the undergraduate curriculum include multiple views of
problem-solving, hardware design, operating systems, data organization (structure)
and processing (algorithms), software design, concepts of programming languages,
and the theory of computation. Some topics, such as networks and compilers, explore
elements of computer systems in more detail, while other areas, such as artificial
intelligence, computational linguistics, and simulation, integrate computer science with
interdisciplinary studies.
Formal coursework is concentrated within the Department of Computer Science.
Introductory courses emphasize multiple views of problem-solving, each with a
different supporting computer programming language. All courses combine a strong
emphasis on basic concepts and fundamental techniques with laboratory work and
experimentation. Considerable use is made of the department's Local Area Network
(LAN), which includes more than 70 workstations.
Most students begin with Computer Science 151, although students interested in a general overview of
computer science take 105. After consultation with the department, students with
advanced preparation might start in 153 or a higher level course.
The computer science major prepares students who plan careers in computer science,
in the use of computing in other disciplines, in teaching, or in other professions.
The curriculum is strongly influenced by national recommendations of such professional
bodies as the Association for Computer Machinery, the Computer Society of the
Institute of Electrical and Electronics Engineers, and the Liberal Arts Computer Science
Consortium. Students regularly supplement this formal coursework with independent
projects, internships, and student-faculty research. In addition, students often work
with faculty throughout the College on a variety of special projects that involve
computing.
A minimum of 32 credits (at least 28 in Computer Science and at least
four in Mathematics). Required are Mathematics 218, one of Computer
Science 152 or 153, Computer Science 201, one of Computer Science 211 or 213, one of
Computer Science 223 or 362, and Computer Science 301, 302, and 341.
Computer Science courses numbered below 151 do not satisfy major requirements.
All majors are encouraged to take statistics (Mathematics 209 or
335-336), Physics 220, and a course in technology and society (such as
a foundation course in Technology Studies). Students considering
graduate school in computer science should take both Computer Science 211
and 213. Students planning to work in industry should take Computer
Science 223 together with coursework in another discipline that uses computing
in a significant way. Students considering a career in computing
are encouraged to participate in an independent project, internship, or
research experience.
To be considered for honors in computer science, graduating seniors, in
addition to meeting the College's general requirements for honors, must demonstrate excellence in
the major. The department applies the following criteria:
A. Completion of Computer Science 211 and 213, and a 300-level course
in mathematics or computer science that is not used to fulfill another requirement.
B. Participation in local activities related to computer science judged
to be excellent by members of the department. Such activities might include giving Math/CS
Journal Club talks, doing independent projects in computer science, carrying out summer
research under the direction of members of the department, or developing a successful software
package.
C. Performance in the study or use of computer science judged to be excellent by
computer scientists outside the department. Evidence of such performance might include a score
at or above the 75th percentile on the Graduate Record Examination in Computer
Science, an award in the Mathematical Competition in Modeling, a prize-winning or refereed talk
at a computer science conference or colloquium, a paper accepted by a refereed computer science journal,
summer research conducted elsewhere, or development of a successful software
package (assessed by outside referees or evaluators).
105 An Algorithmic and Social Overview of Computer Science (Spring) 4 credits
A study of core topics and great ideas in the field of computer
science, focusing on underlying algorithmic principles and social implications.
Topics may include multimedia and hypermedia, networks, architecture,
programming languages, software design, artificial intelligence, databases,
cryptography, and the theory of computing. Incudes formal laboratory work.
Prerequisites: None. WALKER.
151 Fundamentals of Computer Science I (Fall or Spring) 4 credits
A lab-based introduction to basic ideas of computer science,
including recursion, abstraction, state, information-hiding, and the design
and analysis of algorithms. Includes introductory programming in a high-level,
functional language. Prerequisites: None. STAFF.
152 Fundamentals of Computer Science II (Fall or Spring) 4 credits
Builds upon Computer Science 151
to study object-oriented problem-solving, the design and analysis of
common algorithms, fundamental abstract data types and data structures, and elements
of testing and verification. Also provides an overview of the field of computer science.
Includes team projects and formal laboratory work.
Prerequisite: Computer Science 151 or permission of instructor. STAFF.
153 Computer Science Fundamentals (Spring) 4 credits
Study of basic concepts of computer science, with an emphasis on
problem-solving techniques from functional and object-oriented
perspectives. Functional elements include data types, procedures as first-class
objects, recursion, and binding. Classes, objects, and methods are introduced as
basic elements of object-oriented problem-solving. Examples of core data types
and classes include stacks, queues, priority queues, trees, and lists.
Additional topics include the representation of data and some elements of
algorithm analysis. Includes formal laboratory work. A student who receives credit
for Computer Science 153 cannot receive credit for Computer Science 151
or 152. Prerequisite: Three semesters of high school computer science,
or departmental placement, or permission of instructor. STAFF.
201 Memory Management, Data Representation,
and Formal Methods (Spring) 4 credits
Study of machine-level representations of data and techniques for managing storage, using formal methods of program
design and a low- or mid-level programming language, such as C. Topics include
Boolean logic and proof, language semantics, assertions and invariants, numerical
approximations and errors, pointers, memory allocation and deallocation, and the run-time
stack. Prerequisites: Computer Science 152, or 153, or Computer Science 151 and
additional programming experience in an imperative language; or permission of
instructor. STAFF.
205 Computational Linguistics* (Fall) 4 credits+
An examination of computational techniques for producing and
processing text in natural languages and an introduction to the theoretical basis for
those techniques, both in linguistics and in computer science. Topics
include generative grammars, parsing, algorithms for automatic indexing,
information retrieval, and natural-language interfaces. Prerequisites:
Introduction to General Linguistics 114, and Computer Science 151, or 153; or permission of instructor. J. STONE.
211 Computer Organization and Architecture* (Fall) 4 credits+
Study of both traditional and alternative computer architectures.
Introduction to digital logic, microcode, Von Neumann architectures, data
representations, fetch/execute model, RISC/CISC, instruction formats and addressing,
machine and assembly language, memory architecture and algorithms, I/O
architecture, and elements of distributed systems. Includes formal laboratory
work. Prerequisite: Computer Science 201 or permission of
instructor. WALKER, STAFF.
213 Operating Systems and Parallel Algorithms* (Fall) 4 credits+
Study of the principal components of typical operating systems and
an introduction to parallel algorithms. Topics from operating systems:
storage management, scheduling, concurrent processing, synchronization,
data protection, and security. Discussion of models of parallelism and
algorithms for problems in such areas as lists, trees, searching, sorting, graphs,
geometry, and strings. Includes formal laboratory work. Prerequisite: Computer
Science 201 or permission of instructor. DAVIS, WALKER.
223 Software Design (Fall) 4 credits+
Study of software life cycle and its consequences. Consideration of
various algorithms with an emphasis on strategies that can be applied. Emphasis
on design, coding, testing, and documenting of large software packages
through work on a large project. Prerequisite: Computer Science 152, or 153, or permission of instructor. STAFF.
261 Artificial Intelligence* (Fall) 4 credits+
An introduction to current principles, approaches, and applications of
artificial intelligence, with an emphasis on problem-solving methods,
knowledge representation, reasoning with uncertainty, and heuristic search. Study of
a range of AI approaches, such as rule-based systems, neural networks,
and systems for machine learning. Review of several applications areas such
as game playing, natural language processing, robotics, theorem proving,
and perception. Prerequisite: Computer Science 152, or 153, or permission of instructor. J. STONE, WALKER.
301 Algorithms (Fall) 4 credits+
Study of structures used to organize data and of the algorithms used
to manipulate these structures. Assignments to implement data structures and
to use them in computer science and other applications programs. Emphasis
on mathematical principles behind the data structures. Prerequisites:
Computer Science 152, or 153, and Mathematics 218; or permission of instructor. STAFF.
302 Programming Language Concepts (Spring) 4 credits+
Description and analysis of key issues in the design, syntax, semantics,
and implementation of programming languages, with examples from several
high-level languages, illustrating important paradigms (functional,
object-oriented, imperative, declarative). Additional topics may include
denotational semantics, type-inference algorithms, program verification, and the
lambda calculus. Prerequisite: Computer Science 301 or permission of instructor. STAFF.
341 Automata, Formal Languages, and Computational Complexity (Spring) 4 credits+
Also listed as Mathematics 341. A formal study of computational
devices, their related languages, and the possibility and difficulty of
computations. Examples are pushdown automata and Turing machines,
context-free languages and recursively enumerable sets, and the halting problem and
NP-completeness. Prerequisites: Computer Science 152, or 153, and
Mathematics 218; or permission of instructor. J. STONE, WALKER.
362 Compilers* (Spring) 4 credits+
Study of traditional and modern techniques for implementation of
high-level languages, through either interpretation or translation to low-level
languages. Topics include formalisms for describing syntax and semantics of
languages, theory of parsing, regular expressions, intermediate languages, and
optimization. Students construct interpreters or compilers for high-level
languages. Includes formal laboratory work. Prerequisite: Computer Science 201 or
permission of instructor. REBELSKY, J. STONE.
364 Computer Networks* (Spring) 4 credits+
This course focuses on the communications protocols used in
computer networks: their functionality, specification, verification, implementation,
and performance. The course also considers the use of network architectures
and protocol hierarchies to provide more complex services. Existing protocols
and architectures are used as the basis of discussion and study. Includes
formal laboratory work. Prerequisite: Computer Science 201 or permission
of instructor. STAFF.
*Not offered every year.
|
 |