Support WU
A-Z Index

2004-2005 CLA Catalog


Quick Links

Jump to a Discipline

Jump to a Specific Course

Willamette University

900 State Street
Salem, Oregon 97301

503-370-6300 voice

Computer Science View this department's website

The computing revolution is transforming our world in ways we are only beginning to understand, but it is clear that a knowledge of computing is invaluable to any 21st-century citizen. Computer science is the study of the principles of computing: it is founded in the basic skills of programming and problem-solving, but a university education in the subject requires the development of deeper insights into the nature of algorithms, the languages we use to describe them and the machines on which we realize them. In addition to these subjects, students at Willamette have the opportunity to explore advanced topics ranging from 3D graphics to artificial intelligence, from genetic algorithms (in which populations of programs are "bred" for success) to the theoretical foundations of language and computation. Whichever topics they pursue, the Willamette curriculum is designed to provide students with a principled education that will support their goals of life-long learning in a constantly-changing field.

Introductory computing classes at Willamette provide non-majors and pre-majors with a broader perspective on computing, build basic skills which can be applied to other fields and foster the creative use of graphics and animation in collaboration with music and the arts. These classes are designed to synergize with other studies and thus to contribute to a broad liberal-arts education.

The study of computer science opens up a number of options in later life: many graduates with a computer science major or minor find careers in programming, design, consulting or system support. Other choose to deepen their studies in graduate school, ultimately providing contributions to basic research in the field or pursuing influential development opportunities in industry. Finally, some students combine these options, first building up practical work experience in a business or industrial setting and then consolidating these experiences through graduate study.

The University has excellent computing facilities open to students, including both general-access labs with Windows and Macintosh computers and a number of labs with specially-selected equipment to support graphics or laboratory use. Wired access in dorm rooms and a campus-wide wireless network allow students great flexibility in the pursuit of their studies, in communication with family and friends and in general access to the resources of the Internet.

Entering students with a score of five on the Computer Science Advanced Placement exam are awarded credit for CS 231, Introduction to Programming. Students with scores of four should confer with the department about possible credit.

Requirements for the Computer Science Major (12 Credits)

8 credits in Computer Science, 4 in Mathematics

  • CS 231 (QA*) Introduction to Programming (1)
  • CS 241 (QA) Introduction to Computer Science: Data Structures (1)
  • CS 343 Analysis of Algorithms (1)
  • CS 353 Architecture and Compilers (1)
  • CS 496 (W) Senior Seminar in Computer Science (1)
  • MATH 142 (QA*) Calculus II (1)
  • MATH 251 (W) Foundations of Advanced Mathematics (1)
  • MATH 263 (QA) Discrete Mathematics (1)
  • Three additional credits in courses numbered CS 440 through CS 459

One credit from the following (1)

  • MATH 253 (QA) Linear Algebra (1)
  • MATH 349 (QA) Numerical Analysis (1)
  • MATH 366 (QA) Applied Mathematics: Optimization (1)
  • MATH 466 Probability and Statistics I (1)

Requirements For The Computer Science Minor (5 Credits)

  • CS 231 (QA*) Introduction to Programming (1)
  • CS 241 Introduction to Computer Science: Data Structures (1)
  • CS 343 Analysis of Algorithms (1) or
  • CS 353 Architecture and Compilers (1)
  • Two additional Computer Science credits at the 300 or 400 level (2) (Excluding CS 391 and CS 392)

Faculty

  • Karl Fritz Ruehr, Associate Professor of Computer Science, Chair
  • Genevieve B. Orr, Associate Professor of Computer Science
  • Sahnny Johnson, Associate Professor of Computer Science
  • James R. Levenick, Associate Professor of Computer Science

Course Listings

CS 130 (QA) Computing Concepts and Problem Solving (1)

This course introduces the computer as a tool to solve everyday problems. Students' problem-solving abilities are enhanced by use of practical computer applications and by programming. Topics include: problem-solving by computer, program structure, use of computer applications software and computer networks, and discussions of the impact of computers on our society.

General Education Requirement Fulfillment: Quantitative and Analytical Reasoning

  • Offering: Every semester
  • Instructor: Staff

CS 140 (CA) Computer Graphics: The Art of Ray Tracing (1)

Ray tracing is a technique for creating realistic 3D computer-generated images by tracing the rays of light that start at a light source, bounce off objects and ultimately make their way into the eyes of the viewer. Each time a ray hits an object, the colors present in the ray are absorbed and/or reflected depending on the physical properties of the object’s surface. The interaction is modeled using simple rules of physics and geometry. In this course, students will learn how ray tracing works and will use the ray tracing program POV-Ray to create a portfolio of images. A primary focus will be to learn about creative design in the context of computer graphics.

Mode of Inquiry: Creating in the Arts

Prerequisites: MATH 130 or equivalent or consent of instructor.

  • Offering: Spring
  • Instructor: Orr

CS 231 (QA*) Introduction to Programming (1)

This course includes a study of problem-solving principles, computer programming, some of the principles behind programming languages and the structure of a computer. The course is normally taken for a full credit, but students who have credit for CS 130 receive only one-half credit for CS 231.

General Education Requirement Fulfillment: Quantitative and Analytical Reasoning (*)

  • Offering: Every semester
  • Instructor: Staff

CS 241 (QA) Introduction to Computer Science: Data Structures (1)

Theoretical and practical study of programming and abstract data types in Java including lists, stacks, queues, trees and algorithms used on these data structures. The course includes object implementation of structures and sharpens programming skills learned in previous courses. 

Prerequisite: Programming experience in some higher-level programming language.

General Education Requirement Fulfillment: Quantitative and Analytical Reasoning

  • Offering: Every semester
  • Instructor: Staff

CS 293 Individual Study of a Programming Language (.25)

This course enables students who already know some high-level structured programming language to extend their capabilities in another language. It is self-paced for individual study; a student does not register for the course in advance but gets the materials and does the work on whatever schedule is appropriate; credit is awarded by examination. The course may be offered in different languages; a student may earn credit for at most two offerings for a maximum of .5 credit.

Prerequisite: CS 241 or equivalent

  • Offering: On demand
  • Instructor: Staff

CS 330 (CA) Computer Animation Production (1)

Students learn and experience the process of computer animation production while also examining the work of professional animators (computer and traditional). Topics include story development, storyboarding, timing using story-reels, post-production, and computer modeling and animation using professional 3D animation software. Students work in teams to produce a complete computer animation. A key component of this course includes interactive work with students in MUSC 339 Digital Music Techniques to combine animation with original music.

Prerequisite: Students should be very comfortable working on the computer and learning new software.

Mode of Inquiry: Creating in the Arts

  • Offering: Fall
  • Instructor: Orr

CS 343 Analysis of Algorithms (1)

This course examines traditional and adaptive algorithms, formal methods of analyzing their efficiency and the empirical verification thereof. Topics include asymptotic analysis, recursion, mathematical induction, greedy algorithms, and dynamic-programming, Students study several problem domains such as sorting, searching and graphs.

Prerequisite: CS 241, MATH 251 (may be taken concurrently)

  • Offering: Spring
  • Instructor: Staff

CS 348 Programming Languages (1)

This course introduces students to the issues involved with the design and evaluation of modern programming languages. These issues are presented in the context of a survey of high-level programming languages such as Icon, Scheme and Prolog. Students learn about the underlying paradigms and structures used by these and other modern programming languages.

Prerequisite: CS 241

  • Offering: Every third semester
  • Instructor: Staff

CS 353 Architecture and Compilers (1)

An investigation into how computers and programs work, from the lower levels of internal logic to the higher levels of programming languages designed for human use. Topics covered include: digital representation and digital logic; the internal structure and organization of computers; the hierarchy of programming languages; and techniques used to translate computer programs into machine-readable form. Includes a significant lab component in which students implement the concepts developed in the course.

Prerequisite: CS 241

  • Offering: Annually
  • Instructor: Ruehr

CS 391 Independent Study (.5 or 1)

This course is intended for the qualified advanced student who wishes to do an intensive independent study in an area not covered by an existing course in the department. Arrangements for this course must be made with a faculty member before registration.

Prerequisite: CS 241

  • Offering: Every semester
  • Instructor: Staff

CS 392 Independent Project (.5 or 1)

This course is intended for the qualified advanced student who wishes to do an independent project under faculty supervision. The project will involve substantial preparatory study and will extend the student's knowledge of computer science. Arrangements for this course must be made with a faculty member before registration.

Prerequisite: CS 241

  • Offering: Every semester
  • Instructor: Staff

CS 441 Operating Systems (1)

Introduction to operating systems principles, including processes, input/output, memory management, file systems and concurrency. The course will have a strong implementation component, with required programming exercises.

Prerequisite: CS 241 Recommended

  • Offering: Alternate years, Spring
  • Instructor: Staff

CS 444 Simulation Using Graphical User Interfaces (1)

Design and implementation of graphical user interfaces (GUIs) to simulations of models of natural systems. Students (individually and in teams) will utilize object-oriented programming techniques to create graphical user interfaces to both existing simulations and simulations of their own design.

Prerequisite: CS 343

  • Offering: Alternate years
  • Instructor: Levenick

CS 445 Computer Graphics (1)

This course is an introduction to computer graphics with an emphasis on 3D modeling, shading and rendering. Topics include color representation, geometric transformations, culling, hidden line elimination, clipping, anti-aliasing, texturing, global illumination models, and the 3D rendering pipeline. Extensive programming will be required.

Prerequisite: CS 343

  • Offering: Alternate years
  • Instructor: Orr

CS 446 Automata Theory (1)

This course introduces formal models of computation such as finite state machines, pushdown automata and Turing machines. We study classes of problems that can be solved on each model, intractable classes of problems for which no efficient algorithms are likely to exist and problems with well-defined solutions that are inaccessible to any computational process.

Prerequisite: CS 241

  • Offering: Every third semester
  • Instructor: Staff

CS 448 Machine Learning (1)

A survey of machine learning techniques and philosophical issues concerning artificial intelligence. Learning techniques include perceptrons, PDP back-propagation and induction of environmental regularities via Holland's genetic algorithm. Philosophical issues include "Can a machine be intelligent?" and "How could intelligence in a machine be verified?"

Prerequisite: CS 343

  • Offering: Alternate years
  • Instructor: Levenick

CS 451 Topics in Computer Science (1)

This course provides the flexibility to offer special topics of interest in computer science. Topics will generally not be repeated within a two-year period in order to provide a variety of offerings. May be repeated for up to three credits.

Prerequisite: Usually CS 241

  • Offering: Every semester
  • Instructor: Staff

CS 454 Functional Programming (1)

This course provides a broad introduction to functional programming, including motivations, history, programming techniques and language implementation issues. Functional programming allows concise and elegant solutions to many problems and offers a fresh perspective on computer science. Programming in traditional languages is often improved by exposure to the functional style. The study of functional languages also provides a useful foundation for research topics in programming languages and computer science theory.

Prerequisite: CS 241 and MATH 251 or consent of the instructor

  • Offering: Alternate years in fall
  • Instructor: Ruehr

CS 496 (W) Senior Seminar in Computer Science (1)

Each student undertakes a substantial project that integrates the student's knowledge in computer science and supporting areas. The seminar also meets weekly to discuss methodologies and participate in presentations on computer science areas. Required for majors in Computer Science. This is a year-long course, but students may enroll in either Spring or Fall.

General Education Requirement Fulfillment: Writing centered

Prerequisite: Senior standing

  • Offering: Every semester
  • Instructor: Staff