# 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.

## 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.

## 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 (56 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 150 (130 or 140);
- CSCI 160, 200, 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 (24 credits)

Required Courses:

- MATH 118 or 119 or 120;
- CSCI 130 or 140 or 150;
- CSCI 160;
- Twelve additional computer science credits of which at least 4 are at the 300 level.

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:

- They have completed the required mathematics courseand three CSCI courses,
- No more than one of the above courses has a grade below C, and
- The GPA in the above courses is 2.5 or better.

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

- 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
- 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 Concepts of Computing: Business and Society. (4)

Introduces fundamental concepts of computer science that underlie all computing application, motivated by computational problems in business. 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 business problems. Intended for students with an interest in computing in business. Prerequisites: Math 115 or four years of college preparatory mathematics or permission from the chair of the department.

140 Concepts of Computing: Science and Mathematics. (4).

Introduces fundamental concepts of computer science that underlie all computing applications, motivated by computational problems in science and mathematics. Topics include programming, modeling and simulation applied to a wide range of scientific problems along with an introduction to fundamental structures of computing. Intended for students with an interest in computing in science. Prerequisites: MATH 115 or four years of college preparatory mathematics or permission from the chair of the department.

150 Introduction to the Science of Computing (4)

Introduces fundamental concepts of computer science that underlie all computing applications, motivated by computational problems in multimedia, robotics and other computer science areas. Regularly scheduled labs will explore the processes, possibilities and limits of computing. Intended for computer science majors and minors. Prerequisites: MATH 115 or four years of college preparatory mathematics or permission from the chair of the department.

160 Problem Solving, Programming and Computers (4)

Examines the fundamental skills of computer programming which underlie all of computer science. Using an advanced programming language, the laboratories will emphasize the use of control and abstraction as well as program libraries to solve problems. Supporting mathematical structures are also covered. Prerequisite: 130 or 140 or 150

200 Abstraction, Data Structures and Large Software Systems (4)

Examines the software implementation of data structures and objects along with careful analysis of time and space complexity. Students will use software components to construct larger software systems. Laboratories will include both software development and testing. Prerequisite: 160, completion of calculus requirements

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: 160 or 161

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)

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: 160 or 161, 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: 200 or 230.

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: 200 or 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 or 200 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: 160 or 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: 200.

341 Compiler Theory. (4)

Introduction to the design and construction techniques of modern language compilers, including both parsing an code generation. Prerequisite: 200.

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: 162 or 200, 310 recommended.

351 Principles of Parallel Computing (4)

Presents the theoretical foundations of parallel computing and an overview of several parallel computing models. Exposes students to current parallel programming models and systems through projects. Teaches students the ability to determine the most appropriate model for a given task. Prerequisite: 200 or 230, 310 recommended

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: 200 or 230 and jr/sr standing.

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. Prerequisite: 200 or 230 and jn/sr standing

398 Honors Senior Essay, Research or Creative Project. (4)

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.