This list is a sampling of the kinds of courses offered through the Computer Science department curriculum. Not all courses shown here will be offered every semester. For a complete list of currently available courses, students may log into their account on Student Center.

Liberal arts introduction to the discipline of computer science and the use of computers in a variety of fields. Topics include a historical survey of technology and the use of computers, computer application, software systems design, programming with scripts, computer hardware and digital logic design, and implications of computing. Course is laboratoryoriented and includes several handson laboratory projects. Concurrent registration with CS 107 or CS 111 is not allowed; credit cannot be received for CS 103 after credit received for CS 107 or CS 111. Prerequisite: none.

Introduction to computer science with a scientific computation language (e.g., MATLAB). Emphasis is on fundamental programming constructs, algorithmic thinking and problemsolving, fundamental data structures, and recursion. Student projects include common scientific computing challenges and data visualization. Tailored for students interested in mathematics or the sciences. May be taken as an alternative to Computer Science 111, the usual beginning course for a major or minor in computer science. Concurrent registration with CS 111 is not allowed; credit cannot be received for both CS 107 and CS 111. Prerequisite: none.

Introduction to computer science with an emphasis on fundamental programming constructs, algorithmic thinking and problemsolving, fundamental data structures, and recursion. Students implement projects using the Java programming language. This course is the usual beginning course for students planning to pursue a major or minor in computer science. Concurrent registration with CS 107 is not allowed; credit cannot be received for both CS 107 and CS 111. Prerequisite: none.

Second course in the introductory sequence for computer science majors and students interested in the principles of programming. Special attention is given to objectoriented program design methods, algorithms, and elementary data structures. Prerequisite: Computer Science 107 or 111.

Study of the mathematics needed for an understanding of the theoretical foundations of computation. Topics include mathematical logic, set theory, mathematical induction, mathematical definitions and proofs, graph theory, and an introduction to finitestate automata. Applications and illustrative examples are drawn from computer science topics such as digital circuits, analysis and correctness of algorithms, automata, decidable problems, and efficient searching. Prerequisites: Computer Science 107/111 and Mathematics 111.

Introduction to major data structures and some of their applications. Topics include sets, queues, stacks, linked lists, string processing, trees, graphs, arrays, tables, files, and an introduction to the analysis of algorithms. Prerequisite: Computer Science 112.

Programming at the machine level, with emphasis on the logical connection of the basic components of the computer and systems programs. Topics include machine and assembly language programming, basic computer operations, data representation, hardware organization, systems software, and compilers. Prerequisite: Computer Science 112.

Introduction to the emerging field of bioinformatics, where biology and computer science intersect to interpret and use the rapidly expanding volume of biological information produced by genome sequencing and proteomic exploration of life processes. Application of bioinformatic software tools to the analysis of gene sequences and protein structures is emphasized. Students undertake a laboratory project combining in silico and in vitro approaches to isolate and then analyze a segment of their own DNA. An introduction to computer algorithms used in bioinformatic software is provided. Three class hours and laboratory. Biology 251 and CS 251 are crosslisted.

Study of the basic theoretical principles of the computational model. Topics include finite automata, regular expressions, contextfree grammars, Turing Machines, Church’s Thesis, P and NP classes, the halting problem, unsolvability, computational complexity, and program verification. Prerequisite: Computer Science 201.

Introduction to principles used to analyze and build a network of computers. Course covers concepts and issues relating to lowlevel communications and protocols of computer networking. Students study formal methods for integrating communication events into normal process cycles of the computer, then concentrate on a study of practices for defining and specifying a formal communications protocol. Throughout the course, students apply principles that they study to existing networks within the department. Prerequisite: Computer Science 216. Offered alternate years.

Study of fundamental concepts of operating systems. Topics include sequential processes, concurrent processes, processor management, memory management, scheduling algorithms, and computer security. Projects include writing of a program to simulate major components of an operating system. Prerequisite: Computer Science 216. Offered alternate years.

Introduction to techniques used to implement multiple processor problemsolving environments. Investigation includes several different environments for parallel computing, including SIMD (Single Instruction Multiple Data stream), MIMD (Multiple Instructions Multiple Data stream), and computing in a distributed workstation environment. Students work with actual implementations of each of these environments and explore their advantages and design algorithms appropriate for these environments. Prerequisite: Computer Science 216. Offered alternate years.

Study of fundamental concepts in the design of programming languages. Concepts include BNF grammar specification, abstract syntax trees, variables, expressions typing, scope, lexical address, procedures, data types, static/dynamic binding, and environmentpassing interpreters. Special emphasis is placed on the development of an interpreter using a functional programming language. Other languages are introduced to further illustrate these concepts. Prerequisite: Computer Science 216. Offered alternate years.

Study of fundamental concepts of database systems. Topics include physical organization of databases, indexing techniques, and query processing. Particular models studied include the EntityRelationship and Relational. Class projects stress design and implementation of a database. Prerequisite: Computer Science 216. Offered alternate years.

Study of modern techniques for creating software that behaves intelligently. Topics include uninformed and heuristic search, constraint satisfaction, stochastic optimization, gametree search, propositional reasoning, probabilistic reasoning, Bayesian networks with Markov chain Monte Carlo techniques, and robotics. Course concludes with a class robotics project. Prerequisite: Computer Science 216. Offered alternate years.

Study of methods and issues surrounding the construction of graphical images on the computer. Topics include windowing systems and user input, twodimensional graphics packages, curve drawing techniques, modeling in three dimensions, use of lighting and shading techniques, and the process of rendering images. Student work consists both of using existing packages to create images and of implementing algorithms used in graphical systems. Prerequisite: Computer Science 216. Offered alternate years.

Introduction to techniques used to translate highlevel computer languages into machine code. Course covers current implementation techniques and relevant theory. Topics include lexical scanning, parsing, abstract syntax trees, semantic analysis, intermediate code generation, and code generation. Students complete a major project involving the compilation of a particular computer language. Prerequisite: Computer Science 216. Offered alternate years.



Senior capstone course teaching a formal approach to techniques of computer project development. Integral part of course is the involvement of students, working as a team, in the development of a large project. Topics include formal requirement and specification, software testing techniques, written and spoken communication skills in technology, and user interfaces. Research option is available by permission of the instructor with a faculty research sponsor and recommendation from a previous research supervisor. Prerequisites: Computer Science 216, one 300level computer science course, and senior status or permission of department.

Individualized tutorial counting toward the minimum requirements in a major or minor, graded AF

Intensive study of a selected topic in computer science or a related area. Research project is completed in collaboration with a faculty member. Prerequisites: Computer Science 216 and permission of department.

Half credit internship, graded S/U.