Introduction to Computing
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 laboratory-oriented and includes several hands-on 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 Scientific Computation
Introduction to computer science with a scientific computation language (e.g., MATLAB). Emphasis is on fundamental programming constructs, algorithmic thinking and problem-solving, 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.
Computer Science I
Introduction to computer science with an emphasis on fundamental programming constructs, algorithmic thinking and problem-solving, 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.
Computer Science II
Second course in the introductory sequence for computer science majors and students interested in the principles of programming. Special attention is given to object-oriented program design methods, algorithms, and elementary data structures. Prerequisite: Computer Science 107 or 111.
The Mathematics of Computation
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 finite-state 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.
Computer Organization and Assembly Language Programming
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 Bioinformatics
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 cross-listed.
The Theory of Computation
Study of the basic theoretical principles of the computational model. Topics include finite automata, regular expressions, context-free 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 Computer Networks
Introduction to principles used to analyze and build a network of computers. Course covers concepts and issues relating to low-level 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.
Principles of Operating Systems
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.
Parallel and Distributed Processing
Introduction to techniques used to implement multiple processor problem-solving 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.
Survey of Programming Languages
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 environment-passing 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.
Principles of Database Systems
Study of fundamental concepts of database systems. Topics include physical organization of databases, indexing techniques, and query processing. Particular models studied include the Entity-Relationship and Relational. Class projects stress design and implementation of a database. Prerequisite: Computer Science 216. Offered alternate years.
Introduction to Artificial Intelligence
Study of modern techniques for creating software that behaves intelligently. Topics include uninformed and heuristic search, constraint satisfaction, stochastic optimization, game-tree 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, two-dimensional 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 high-level 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.
Advanced Systems Design
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 300-level computer science course, and senior status or permission of department.
Individualized tutorial counting toward the minimum requirements in a major or minor, graded A-F
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
Half credit internship, graded S/U.