Major

Eleven courses in computer science including:
132, 232, 251, 314, 332, 356, 491, 492
A Systems course (352, 354 or another designated special topics course).
One elective numbered 200 or higher (Upon prior approval of the department, an appropriate course outside of computer science may replace the 200-level elective).
One elective course numbered 300 or higher.

Two courses in mathematics:
MATH 170
MATH 211

Minor

Six courses in computer science numbered 132 or higher, including:
132, 232 and 251
One elective course numbered 200 or higher (Upon prior approval of the department, an appropriate course outside of computer science may replace the 200-level elective.)
Two elective courses numbered 300 or higher.

Note: 131 is a prerequisite for 132. Students with prior programming experience may place out of 131.

Suggested curricular flow through the major

The schedule given below is for a student who enters Dickinson knowing that she or he wishes to major in Computer Science, and includes recommendations for students who study abroad during the spring of their junior year. Many other paths through the major are possible. In particular, a student who takes COMP 131 in their sophomore year can complete the major by the end of their senior year, although this makes study abroad infeasible and limits flexibility in the junior and senior years.

First Year
COMP 131
COMP 132
MATH 170 (or MATH 151 and 170)

Sophomore Year
COMP 251
COMP 232
MATH 211

Junior Year
COMP 332
COMP 356
COMP 352/354 (if not studying abroad)
COMP elective

Senior Year
COMP 314
COMP 352/354 (if not already taken)
COMP 491
COMP 492
COMP elective

For information regarding the Computer Science major (including possible paths through the major), please feel free to contact a Computer Science faculty member.

Honors

Departmental honors is the highest distinction that the Department can award to a Major. Majors who receive departmental honors will be those who demonstrate a broad mastery of the discipline as well as an ability to complete and present high quality research. A broad mastery of the discipline is demonstrated by a GPA of 3.40 or higher in all courses related to the major. The ability to complete high quality research is demonstrated by the completion of a yearlong research project. This project will be characterized by an independent and in-depth study of an advanced topic including a literature search, reading of original sources and a novel formulation of results. Finally, the ability to present such research is demonstrated by the preparation of an honors thesis, a public presentation and a successful defense of the work to the department faculty. More detailed information is available on the department's web site.

Courses

131 Introduction to Computer Science I
An introduction to Computer Science as a major scientific discipline. Special emphasis is placed on problem solving and experimentation via programming in Java. Topics covered include the design of objects and the use of flow-of-control constructs, along with techniques for testing software.
Three hours classroom and two hours laboratory a week. This course fulfills either the DIV III lab science distribution requirement or QR graduation requirement. Offered every semester.

132 Introduction to Computer Science II
A problem-solving course that utilizes object-based software design using Java. Topics include code modularity and reusability, recursion, data storage, and the empirical and theoretical comparison of elementary algorithms. The lab component focuses on programming as a tool for solving problems and simulating real-world events.
Prerequisite: 131 or one year of object oriented programming in Java and instructor's permission. Three hours classroom and two hours laboratory a week. This course fulfills either the DIV III lab science distribution requirement or QR graduation requirement. Offered every semester.

203 Special Topics
Topics to be announced when offered.
Prerequisite: permission of the instructor. One-half or one course credit.

204 Special Topics
Topics to be announced when offered.
Prerequisite: permission of the instructor. One-half or one course credit.

232 Data Structures and Problem Solving
An advanced problem-solving course that focuses on the design and analysis of data structures including lists, stacks, queues, trees, and hash tables. Concepts in generic programming are also introduced. The lab component focuses on the implementation of data structures and their application to solving complex problems.
Prerequisite: 132. Three hours of classroom and two hours laboratory a week. This course fulfills either the DIV III lab science distribution requirement or QR graduation requirement. Offered every spring.

241 Numerical Methods
An introduction to numerical methods for solving mathematical problems. Topics chosen from interpolation, numerical differentiation and integration, solutions to linear and nonlinear systems, numerical solutions to differential equations and related topics.
Prerequisite: Completion of two of the following courses: MATH 170,171, 211 and 270. This course is cross-listed as MATH 241. This course fulfills the QR graduation requirement. Offered in even numbered spring semesters.

251 Computer Organization and Architecture
An introduction to the internal structure and operation of computers. Topics include an introduction to assembly language programming, data representation, machine arithmetic, digital logic, basic hardware components, input/output processing and a survey of modern machine architectures.
Prerequisite: 132. NOTE: Completion of both 251 and 332 fulfills the WR graduation requirement. Offered every fall.

314 Theoretical Foundations of Computer Science
An introduction to the theory of computation. Topics include formal language theory (grammars, languages, and automata including Turing machines), and an introduction to the concept of undecidable problems, including the halting problem.
Prerequisites: 132 and MATH 211. This course is cross-listed as MATH 314. Offered every spring.

331 Operations Research
An introduction to deterministic operations research, including linear programming, sensitivity analysis, and duality. Special topics may include transportation and assignment problems, network models, integer programming, and game theory.
Prerequisite: 262. This course is cross-listed as MATH 331. This course fulfills the QR graduation requirement. Offered in odd numbered fall semesters.

332 Analysis of Algorithms
A study of algorithmic approaches to problem-solving and techniques for analyzing and comparing algorithms. Approaches such as divide-and-conquer, dynamic programming, and backtracking will be explored in conjunction with complex structures such as trees and graphs. Topics in computational complexity include asymptotic complexity measures, intractability, and NP-complete problems.
Prerequisite: 232, MATH 211. NOTE: Completion of both 251 and 332 fulfills the WR graduation requirement. Offered every fall.

352 Computer Networks
An examination of the hardware, software and protocols used in computer networks. Topics include layered architectures, client server computing, reliable and unreliable protocols, data encoding and compression, error detection and correction, routing, examination of the internet as an example and an introduction to network programming.
Prerequisite: 232 and 251. Offered in odd numbered spring semesters.

354 Operating Systems
A study of the principles underlying the organization and implementation of computer operating systems. Topics include multiprogramming, time-sharing, mutual exclusion and synchronization, process scheduling, memory management, and file systems.
Prerequisites: 232 and 251. Offered in even numbered spring semesters.

356 Programming Language Structures
An examination of the major programming language paradigms. The course also explores the basic properties and special facilities of languages representing each paradigm. Topics include data types, scope rules, block structures, procedure calls and parameter types, and storage allocation considerations.
Prerequisite: 232. Offered every fall.

364 Artificial Intelligence
A survey of techniques for applying computers to tasks usually considered to require human intelligence. Topics include knowledge representation and reasoning, search and constraint satisfaction, evolutionary and genetic algorithms, machine learning, neural networks, and philosophical questions.
Prerequisites: 232 and MATH 211. Offered in even numbered fall semesters.

378 Database Systems
A study of the conceptual, technical and social issues involved in organizing, storing and accessing large volumes of data. Topics include data modeling, relational data base design, relational algebra, data definition languages and data manipulation languages.
Prerequisites: 232 and MATH 211. Offered in even numbered spring semesters.

393 Special Topics
Topics to be announced when offered. Possibilities include Software Engineering, Parallel Computing, and Compiler Design.
Prerequisite: permission of the instructor.

394 Topics
Topics to be announced when offered. Possibilities include Software Engineering, Parallel Computing, and Compiler Design.
Prerequisite: permission of the instructor.

491 Fall Senior Seminar
Students define and begin a year-long project. Written and oral presentation of project progress reports will be required. Contemporary social, ethical, technical and philosophical issues in computer science will also be examined.
Prerequisite: Senior standing. Offered every fall.

492 Spring Senior Seminar
A continuation of the project begun in 491 culminating in a written thesis and public presentation. Additional contemporary issues in computer science may be considered.
Prerequisite: 491. Offered every spring.