Tony deLaubenfelsRoss SowellLeon Tabak (chair)

The technology of computing has developed with unprecedented speed and offers the prospect of continued rapid advance. Few technologies have so quickly become so pervasive. Few have so profoundly changed science, business and industry, and government. Some understanding of the potential and limitations of computing is essential to anyone who wishes to understand modern society.

Design, experiment, and analysis: these skills make the computer scientist part engineer, part scientist, and part mathematician. The student of computer science learns how to effectively communicate with teammates and clients to define problems and their solutions. Students learn how to divide a complex problem into pieces of manageable size, to organize and relate the pieces of information that describe the problem, and to order the steps of the solution. The study of computer science serves to increase a student's awareness of the necessity of constructing a hierarchy of abstractions as a means of building and understanding complex machines, the designer's need to give balanced consideration to competing goals, e.g., minimizing cost while maximizing computational speed, and the relationship between software and hardware.

Major: A minimum of ten course credits, including nine in Computer Science; also MAT120 or 121 (Calculus of a Single Variable). The courses in Computer Science must include CSC 140, 144, 151, 218, 301 and at least four other 300-level courses. One of the five required 300-level courses may be an Internship, Individual Project, or Group Project. The faculty strongly recommends additional study of mathematics and statistics, to includeSTA 201 (Statistical Methods I) and MAT 221 (Linear Algebra), for those students who intend to pursue software engineering careers or continue their study of computer science at the graduate level.

MinorMAT 120 or 121 (Calculus of a Single Variable) and a minimum of six course credits in Computer Science which include CSC 140, 144, 151, 218, 301 and at least one other 300-level course, excluding Internships, Individual Projects, and Group Projects.

131. Privacy, Piracy, and the Public Good
Reading, discussion, and writing on legal, ethical, and societal issues related to computing. Topics include first amendment issues, like filtering of on-line content; intellectual property issues, like "file sharing" and fair use exclusions to copyright; and fourth amendment issues including a detailed examination of the nature of our "right" to "privacy." Given these issues, classroom discussions often follow the format of group debates, both formal and informal. Throughout the course, there is an emphasis on building skills in locating, evaluating, and citing electronic-based information, including Internet and library resources. The lab portion of this course is project-oriented and introduces a variety of software including web page authoring and presentation software. Labs feature group work and emphasize learning how to learn software. (First Year Seminar)

140. Foundations of Computer Science
This course introduces students to problems that engage the interests of computer scientists and define the field. The course introduces students to object-oriented design, a principal discipline that computer scientists use to solve problems. Students learn to divide large problems into small problems, bundle related data with methods that operate on that data, and incorporate into new designs elements of previously completed designs. The course emphasizes creative expression using an abstract notation. Students practice designing, writing, testing, and presenting programs. Success in the course does not require previous programming experience. deLAUBENFELSSOWELL or TABAK

144. Software Architecture
Disciplined design, coding, and testing of substantial programs. Specification of relationships among components of a program using composition and inheritance. Discernment of a client's requirements. Evaluation of the communication between a computer program and its human user. Prerequisite: CSC 140. SOWELL

151. Discrete Mathematics for Computer Science
Logic, algorithms, combinatorics, trees, graphs, and other topics from discrete mathematics used in computer science. Prerequisite: three and one-half years of high school mathematics. (Mathematics) deLAUBENFELS or SOWELL

218. Computer Organization
A view of the layers in the design of modern computers that begins at the level of individual logic gates, and progresses upward through elementary circuits, the design of a microprocessor, and programming at the lowest levels. An examination of costs and advantages gained by shifting functions from hardware to software, or vice versa. Prerequisites: CSC 140 and 151. SOWELL

222. Geographic Information Systems
This course introduces students to computer science through a study of one of its important applications. Through work on projects related to their major fields of interest, students will learn how to use the visualization and statistical functions of geographic information systems as aids in making decisions. Students will learn how to represent, analyze, and display geographic data. Case studies will familiarize students with applications of the technology in the natural sciences, public policy, business, and other fields. Readings, discussions, and exercises will acquaint students with current standards, available tools, significant achievements, and the potential for the future development of geographic information systems. TABAK

255-260. Topics in Computer Science
A focus on some part of the social context in which computer scientists work: professional ethics, leadership, and creativity in the technical professions; the software engineer's opportunities and responsibilities for helping to solve pressing social problems; or how innovations in the technology of computing are changing the way ordinary people live, work, and learn. See Topics Courses.

280/380. Internship in Computer Science
Participation in a computer-related area such as working with a business, government, or other appropriate institution under the direction of the organization's leaders and a faculty supervisor. Prerequisites: junior or senior standing; at least two 300-level Computer Science courses; approval by the faculty supervisor, the participating institution, and the Department. The maximum credit that may be earned in a Computer Science internship is two term credits. See Courses 280/380. (CR)

289/389. Group Project: see Courses 289/389.

290/390. Individual Project: see Courses 290/390.

301. Algorithms and Data Structures
Measurements of complexity. Comparison of methods for searching and sorting data. Alternative ways of organizing data in lists, tables, and trees. Prerequisites: CSC 140, 144, 151, and MAT 120 or 121. TABAK

302. Electronics
Same course as PHY 302 (see for course description). Prerequisites: CSC 140 and 151 or knowledge of a programming language. Alternate years. (Laboratory Science) LICHTY

311. Systems Software
Process scheduling and synchronization, interprocess communication, allocation of memory and disk space. Creation and use of software, libraries, tools, and methods for the production of efficient, reliable software. Prerequisite: CSC 144 and 218. Alternate years.TABAK

314. Data Management Systems
Concepts and structures necessary to design and implement a database management system. Relational and object database models. Prerequisite: CSC 144 and 151. Alternate years.

315. Programming Language Concepts
Principles of design and implementation of high-level programming languages. Language definition structure, run-time behavior. Alternative programming paradigms, including functional languages. Programming examples from selected languages. Prerequisites: CSC 144 and 151. Alternate years. TABAK

317. Computer Networks
In this course, students examine the challenges of communication through dynamic networks, including the challenges of routing messages and making communication reliable and secure. The top-down approach begins with a study of application level protocols (application level protocols govern, for example, communication through the Web and via e-mail) and proceeds to a study of the lower level transport and network layer TCP/IP protocols that are at the heart of the Internet. At the still lower link layer, students explore methods for resolving addresses and allowing multiple access on local area networks. Measurement, analysis, and simulation of networks in the laboratory. Prerequisites: CSC 140, 151, and 218.

321. Computer Graphics
Introduction to the concepts and algorithms of computer graphics. Architecture of display systems, 2D and 3D geometry and algorithms, viewing transformations, interactive techniques, color concepts. Prerequisites: CSC 301. Alternate years.

355-360. Advanced Topics in Computer Science
A study in greater depth of a topic covered in the core curriculum, an introduction to an area of specialization within computer science, or readings in the research literature. Intended to broaden students' perspectives on the range of opportunities that will be available to them in professional practice and graduate-level study. Recent topics have included Algorithms, Computer Networks, Robotics, Client Server Systems, Structure and Interpretation of Computer Programs, and Bioinformatics. See Topics Courses. Prerequisites: CSC 140 and 151.

511. Extended Research in Computer Science (1/4)
Reading coupled with research on a specialized topic. This adjunct course must be taken over four successive terms. Prerequisites: departmental gpa of 3.0 or higher, prior completion of one course in the Department at or above the 200 level, and permission of instructor. (CR)