Computer Science

Department Chair: J. Andrew Holey

Faculty: Michael Heroux, Noreen Herzfeld, J. Andrew Holey, 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.

Assessment

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, including the following:

  • all senior computer science majors take the ETS Major Field Test in Computer  Science, a nationally normed instrument
  • a lab final in selected classes which uses standardized programming problems and a predetermined scoring rubric
  • regular surveys of current students and alumni

Major

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 (50 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 119 or 120 or 123;
  • 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 119 or 120 or 123;
  • CSCI 161, 162 and 239;
  • CSCI 230 or 310 or 339;
  • Eight additional upper-division credits in computer science.

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 321, 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 339 and at least one of 338, 340 or 341.

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 239, and at least one of 230, 310 or 339,
  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 engineering. Prerequisite: 161.

217 Topics in Computer Science. (1-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 the use of large object-oriented libraries to create well-designed graphical user interfaces. Topics include event-driven programming, computer graphics, human-computer interaction and graphical user interfaces. Prerequisites: 162, MATH 119 or 120 or 123.

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 119 or 120 or 123.

271 Individual Learning Project. (1-4)
Supervised reading or research at the lower-division level. Permission of department chair required. Consult department for applicability towards major requirements. Not available to first-year students.

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, 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 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: 200.

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 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 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. (2)
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)
Supervised reading or research at the upper-division level. Permission of department chair and completion and/or concurrent registration of 12 credits within the department required. Consult department for applicability towards major requirements. Not available to first-year students.

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.

398 Honors Senior Essay, Research or Creative Project. (4)
Required for graduation with "Distinction in Mathematics/Computer Science" or "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.