Computer Science

Department Chair: James Schnepf

Faculty: Michael Heroux, Noreen Herzfeld, J. Andrew Holey, John Miller, Imad Rahal, James Schnepf, Lynn Ziegler

Computers and information technology now permeate human society. People in almost any career find themselves using computers, many on a daily basis. This activity is supported by computing professionals who work in many areas, including computer design, software development, systems management, technology, consulting and computing education. Study in the field of computer science provides both computer users and professionals with an understanding of what is computable, how it can be computed and how the power of computation affects human society.

The computer science curriculum stresses the underlying theory and abstraction of computing, providing students with a broad foundation on which to build more specialized understanding. At the same time, the curriculum seeks to combine these principles with the design of applications current to each topic.

With an emphasis on problem solving as a core component of the major, it provides a good foundation of skills valuable to many different careers and is not limited to those interested in software development.


The Computer Science Department is committed to using assessment for the improvement of its curriculum and programs. To this end, it engages in several assessment strategies.


The computer science department offers a major in computer science; it also offers a major in numerical computation jointly with the mathematics department. Information about the numerical computation major is in a separate section for that major. In addition, students may develop individualized majors which meet their particular interests. (See the section on individualizing a traditional major under Academic Regulations.)

Computer Science Major (52 credits)

This major focuses on the study and implementation of algorithms and the theoretical foundations of computing. It is appropriate for students interested in the full range of computing including software design, systems analysis, and graduate study in computer science.

Required Courses:

  • MATH 118 or 119 or 120;
  • CSCI 161, 162, 230, 239, 310, 338, 339 and 369;
  • CSCI 373 or 398;
  • Twelve additional upper division credits in computer science, or MATH 315 or 322 or 338 and eight additional upper division credits in computer science. 

Students who complete MATH 120 may substitute MATH 239 for CSCI 239.

Minor (28 credits)

Required Courses:

  • MATH 118 or 119 or 120;
  • CSCI 161, 162;
  • CSCI 230 or 239;
  • Twelve additional computer science credits of which CSCI 130 will count only if taken prior to CSCI 161.

Students who complete MATH 120 may substitute MATH 239 for CSCI 239. Students primarily interested in business computing should take 230 and at least one of 312, 330 or 331; those interested in computing systems should take 310 and either 312, 350 or both; those interested in theoretical computer science should take 338 and 339.

Criteria for admission to the major:
Students will be accepted into the Computer Science major if:

  1. They have completed the required mathematics course, CSCI 161, 162, and at least one of 230, 239 or 310,
  2. No more than one of the above courses has a grade below C, and
  3. The GPA in the above courses is 2.5 or better.

Students will be conditionally accepted into the Computer Science major if:

  1. They have not yet completed all the courses needed for unconditional acceptance into the major, but are currently enrolled in the courses which are lacking, and 
  2. They meet the other two criteria for acceptance on the courses completed thus far.

Students not accepted to the major must consult with Academic Advising. In exceptional circumstances, a student may be allowed to continue working toward a Computer Science major, subject to constraints determined by the Chair of the department in consultation with Academic Advising.

Courses (CSCI)

130 Computing: Science and Its Applications. (4)
An overview of computing and its applications from a scientific perspective, designed to equip students with the basic tools needed to understand computers and use them effectively. Students will study the basic architecture of computers, the structure of programming, and the design of spreadsheets and databases. Through regularly scheduled labs they will gain hands-on experience with applications to scientific and business problems. Not intended for students majoring in the sciences. Prerequisite: Math proficiency.

161 Introduction to Problem-Solving and Programming. (4)
Introduces the fundamental concepts of problem-solving and programming from an object-oriented perspective. Through the study of object-oriented design, this course also introduces the basics of human-computer interfaces, graphics, and the social implications of computing. Prerequisite: Math proficiency.

162 Problem Solving, Programming and Data Representation. (4)
Continues the introduction to object-oriented problem-solving begun in CSCI 161, with an emphasis on algorithms, data structures and the social context of computing, along with significant coverage of software development. Prerequisite: 161.

217 Topics in Computer Science. (0-4)
Selected computer science topics such as enrichment courses in particular programming languages. Prerequisite: Consent of instructor.

230 Software Development. (4)
Provides an intensive, implementation-oriented introduction to the software-development techniques used to create medium-scale interactive applications, focusing on standard techniques and skills for software design such as the Unified Modeling Language (UML) and design pattern, and for software coding such as class design by contract (DBC), package design, code documentation, debugging, testing, version controlling, and refactoring. Prerequisites: 162, MATH 118 or 119 or 120.

239 Discrete Computational Structures. (4)
Offers an intensive introduction to discrete mathematical structures as they are used in computer science. Topics include functions, relations, sets, propositional and predicate logic, simple circuit logic, proof techniques, elementary combinatorics, discrete probability and functional programming. Prerequisites: MATH 118 or 119 or 120.

271 Individual Learning Project. (1-4)

310 Computer Organization. (4)
Introduction to computer systems and architecture. Topics include digital systems, machine level data representation, processor design, assembly level machine organization, memory systems, system control, organization of operating systems, concurrency and scheduling. Prerequisite: 162, and either 239 or MATH 239.

312 Data Communications and Networks. (4)
Introduction to the concepts, terminology and approaches used in data communication systems. Topics include protocol stacks as models and implementations, signal encoding, media for transmission, analysis of network architectures, addressing and routing, error and flow control, connection management and security. Prerequisite: 310.

317 Topics in Computer Science. (1-4)
Selected computer science topics such as distributed processing systems, graphics or artificial intelligence. Prerequisite: consent of instructor. May be repeated for credit.

318 Topics in Software Development. (1-4)
Selected computer science topics requiring a major software development project. Prerequisite: consent of instructor. May be repeated for credit.

321 Computer Graphics. (4)
This course will survey programming techniques for producing three-dimensional computer graphics. Topics will include event-driven programming, geometric objects and transformations, viewing, shading, and animation. Prerequisites: 230 and either 239 or MATH 239.

330 Software Engineering. (4)
Examines the methods and tools used to determine information requirements of a business, construct logical models of business processes, prepare specifications for program development, prepare procedures and documentation, and test, install and maintain an information system. Prerequisite: 230.

331 Database Systems. (4)
Introduction to physical file organization and data organization techniques, including an examination of data models, file security, data integrity and query languages. Discussion will focus on examples which illustrate various data models. Prerequisite: 230.

338 Algorithm Design and Analysis. (4)
Introduction to formal methods for the design and analysis of complex algorithms, with an emphasis on developing students' problem-solving abilities. Focuses on computational resources and ways of conserving both time and memory. Prerequisites: 162 and either 239 or MATH 239.

339 Theoretical Foundations of Computer Science. (4)
Introduction to the theoretical structures of programming languages and computers. Topics include regular expressions, formal grammars, abstract automata and computability. Prerequisites: 161 and either 239 or MATH 239.

340 Organization of Programming Languages. (4)
The structure, design and application of various programming language paradigms, with emphasis on the principles and semantics of languages. Prerequisite: 339.

341 Compiler Theory. (4)
Introduction to the design and construction techniques of modern language compilers, including both parsing and code generation. Prerequisite: 339.

350 Operating Systems. (4)
The fundamentals of the software that drives the computer, including single-user, multi-user and multi-tasking systems. Topics include networks, file systems, task scheduling, multiprocessing, memory management, user interfaces and peripheral devices. Prerequisite: 310.

369 Ethical Issues in Computing. (4)
Examines a variety of philosophical and ethical questions that arise within the development and use of computer technology. Students will become familiar with several models of ethical reasoning and will apply these approaches to questions in a variety of areas of computer science, including artificial intelligence, nanotechnology, software development, and cyberspace. Prerequisite: 230 or 310 or 339.

371 Individual Learning Project. (1-4)

372 Individual Senior Research. (0-4)
Individualized experimental, theoretical or applied projects for seniors. Each student intensively explores a topic, writes a major research paper, and makes a formal presentation to the department. Prerequisite: Consent of department chair. May be repeated for up to 4 credits.

373 Senior Research in Computer Science. (4)
Directed research in computer science organized around a selected topic and conducted in a seminar format. Includes consideration of computer science research methodology and analysis of current research in the seminar topic. Each student intensively explores a topic, writes a major research paper and makes a formal presentation to the department.

Required for graduation with "Distinction in Computer Science." Prerequisite: HONR 396 and approval of the department chair and director of the Honors Thesis program. For further information see HONR 398.