Skip to main content

CS 125 Problem Solving with MATLAB

An introduction to programming using MATLAB. Topics include MATLAB interactive environment, programming basics, MATLAB scripts, functions, vectors, matrices, data analysis, and graphic visualization. Students will learn programming and numerical analysis techniques through hands-on projects and develop computer-based problem solving skills that can be applied in science, engineering, artificial intelligence, and economics.


CS 125Y Lab: Problem Solving With MATLAB


CS 141 Introduction to Programming

This course includes a study of problem-solving principles, computer programming, some of the principles behind programming languages and the structure of a computer.


CS 151 Introduction to Python

An introduction to computer science using Python. Introduces students to the fundamental concepts of programming and computational problem solving. Students will study and create programs that perform various tasks, including text and file manipulation, internet scraping, data structures, and testing. Topics will include general programming idioms such as variables, logic and loops as well as Python specific idioms such as list comprehension and generators. Object-oriented programming will be introduced.


CS 152 Data Structures

Theoretical and practical study of programming and abstract data typeS 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.


CS 199 Topics in Computer Science

A semester-long study of topics in Computer Science. Topics and emphases will vary according to the instructor. This course may be repeated for credit with different topics.


CS 241Y Lab: Data Structures

Required laboratory for CS 241, Introduction to Computer Science: Data Structures


CS 261 Software Development

This course will provide students with an understanding of modern professional software development practices, including processes, tools, and teamwork. The class will be structured as a simulated development team, with students taking on various ro^les as they would in a real-world development environment. Although the instructor will provide a framework for the class and guidance on general topics, students in this seminar course will be responsible for collectively determining specific topical choices (e.g., specific tools or development methodologies) through a process of investigation, presentation, discussion, and finally group vote.As a development team, we will use a content project to focus our investigations into tools and practices. This project will be a programming task of modest size and complexity which we will undertake as a group-the tools and processes will then be instantiated (chosen, studied, used, critiqued, etc.) in the context of developing this content project. Basic tool and process concepts will be introduced during weekly scheduled discussion hours, but students will be responsible, individually and in small groups, for the investigation of alternatives and the specific choices to be used by the team. Much of the work for the class will therefore occur outside the weekly class meetings, with students returning to make presentations and to participate in team meetings to guide further development and investigation. A particular emphasis will be placed on documenting this entire process, so that a running archive of residuals (code, documentation, meeting notes, etc.) is maintained by the group. This archive should be useful both as a showcase for employers and for later teachings of the course. (A legacy project which persists between different course offerings may be used to enrich the latter.)


CS 262 Web Development Interaction

This is a hands-on, project-based course that delves into both frontend and backend development technologies to create fully functional data-driven websites. Topics include an introduction to web architectures, responsive frontend design frameworks, backend technologies (web APIs, data modeling), testing frameworks, and deployment strategies. Students will gain practice using version control, translating software requirements, building incremental software, maintaining code quality, and deploying code to a server.


CS 263 Mobile Development Interaction

Students will explore how to design and build mobile apps. Topics include installation of tools, building UIs, event handling, displaying data, debugging, supporting multiple screen sizes, networking, basic data persistence, testing on an emulator and a real device, and the process for publishing and distributing an app.


CS 271 Systems Programming and Computer Architecture

Systems programmers study the boundary between abstractions in language and implementation at engineering and physical levels. This course will prepare computer scientists to reason at and across this abstraction boundary to more fully embrace the power of computation. Students will learn the systems language of C, systems libraries such as POSIX, and about UNIX-based systems such as Linux.


CS 276 Advanced Collaborative Computing Interaction

A semester-long study of topics in Computer Science that specifically includes a collaborative programming project that applies or extends the content of CS 152 or more advanced classes. Topics and emphases will vary according to the instructor. This course may be repeated for credit with different topics. See the section description for details and applicability to other majors/minors.


CS 280 Foundations of Human-Computer Interaction

This course covers the foundations of Human-Computer Interaction - the study of how computer systems can be designed to support the needs of the people whom we intend to use them. The course focuses on the methods and principles for designing persuasive systems and provides an introduction to User-Centered Design (UCD), User Interface (UI), and User Experience (UX) design.


CS 293 Individual Study of a Programming Langua

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 under the supervision of an instructor. Arrangements for this course must be made with a faculty member before registration. The course may be offered in different languages; a student may earn credit for at most two offerings for a maximum of .5 credit.


CS 299 Topics in Computer Science

A semester-long study of topics in Computer Science. Topics and emphases will vary according to the instructor. This course may be repeated for credit with different topics. See the New and Topics Courses page on the Registrar's webpage for descriptions and applicability to graduation requirements.


CS 351 Analysis of Algorithms

In this course students will study methods to analyze algorithms for their correctness and run time efficiency as well as general design and analysis techniques. Topics include: asymptotic analysis, searching and sorting algorithms, divide and conquer techniques, greedy algorithms, dynamic programming, graph algorithms, efficient data structures, and NP-completeness.


CS 353 Architecture and Compilers

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.


CS 353Y Lab: Architecture/Compilers

Required laboratory for CS 353, Architecture and Compilers


CS 354 Functional Programming

This course provides an introduction to programming in the functional style, including motivations, history, programming techniques and theory. Functional programming provides concise and elegant solutions to many problems, using an approach based on mathematics, logic and proof. The course will be taught in Haskell, a powerful, modern programming language which can be used for both mathematical investigations and serious system development. Topics covered will include symbolic representation of data, list manipulation, recursion, algebraic data types, higher-order functions and type systems. The study of functional programming languages provides a useful foundation and perspective for further study of topics in algebra, logic, programming languages, computer science theory and linguistics.


CS 354Y Lab: Functional Programming


CS 363 Simulation of Natural and Computer Syste

Design and implementation stimulations of natural systems and computer 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.


CS 363Y Lab: Simulation of NCS


CS 370 Python for Data Science

Data Science is the study of knowledge extraction from massive amounts of data. It requires an integrated skill set including aspects of mathematics, statistics, and computer science, as well as effective problem-solving techniques. This course will introduce students to this rapidly growing field, including the understanding of basic concepts, techniques, and tools they need to solve pratical problems arising in various fields. Students will experience the cycle of data obtaining, wrangling, curating, managing and processing, exploring, defining questions, performing analyses, and communicating the results.


CS 370Y Lab: Fundamentals of Data Science


CS 389 Computer Science Junior Seminar

Junior Seminar will include group studies of contemporary computer science problems and research. Topics include networking and communications, data science, high performance computing. Students will research and present theoretical background of these topics, implement projects and report their project outcome.


CS 391 Independent Study

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.


CS 392 Independent Project

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 students knowledge of computer science. Arrangements for this course must be made with a faculty member before registration.


CS 394 Major Internship 1


CS 399 Topics in Computer Science

A semester-long study of topics in Computer Science. Topics and emphases will vary according to the instructor. This course may be repeated for credit with different topics. See the New and Topics Courses page on the Registrar's webpage for descriptions and applicability to graduation requirements.


CS 429 Topics in Computer Science

A semester-long study of topics in Computer Science. Topics and emphases will vary according to the instructor. This course may be repeated for credit with different topics. See the New and Topics Courses page on the Registrar's webpage for descriptions and applicability to graduation requirements.


CS 429Y Lab: Topics in Computer Science

the required lab for CS 429


CS 435 Computational Science and Applications

A project-oriented course in which students apply computational tools to solve problems in science, mathematics, statistics, and economics through modeling, simulation, implementation of algorithms, numerical analysis, and software development.


CS 435Y Lab: Computational Science & Application


CS 445 Computer Graphics

This course is an introduction to computer graphic with an emphasis how 3D objects and scenes are modeled, shaded, and rendered. 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.


CS 451 Topics in Computer Science

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.


CS 451Y Lab: Topics in Computer Science


CS 465 Language, Logic and Computation

Language is the basic for complex communication, whether as natural language between humans or as formal language between humans and computers. In programming, different kinds of formal languages are crucial tools in all stages of development, from the logics used to specify requirements, to the programming languages used to implement algorithms and the mathematical notations used to analyze their behavior. In this course we will study the general phenomenon of formal language by exploring the syntax, semantics and logics of a broad range of examples, beginning with the simplest numeral notations and operator algebras and continuing through to computationally complete languages and sophisticated type systems. In addition to studying abstract descriptions of syntax and semantics, students will reinforce their understanding by implementing language-based tools in a functional meta-language.


CS 470 Introduction to Data Science

Data Science is the study of knowledge extraction from massive amounts of data. It requires an integrated skill set including aspects of mathematics, statistics, and computer science. Students will be introduced to concepts, techniques, and tools they need to solve practical problems arising in various fields. Specific topics include: 1) ethical issues, 2) data collection, cleaning, and exploratory analysis, 3) machine learning algorithms (including: regression, classification, and clustering), 4) predictive modeling, 5) data visualization, and 6) effective communication.


CS 470Y Lab: Intro to Data Science


CS 475 Machine Learning With Python

Selected topics in supervised learning, unsupervised learning, and reinforcement learning: perceptron, logistic regression, linear discriminant analysis, decision trees, neural networks, naive Bayes, support vector machines, k-nearest neighbors algorithm, hidden Markov Models, expectation-maximization algorithm, K-means, Gaussian mixture model, bias-variance tradeoff, ensemble methods, feature extraction and dimentionality reduction methods, principal component analysis, Markov decision processes, passive and active learning.


CS 475Y Lab: Machine Learning


CS 480W Capstone 1: Project Development

This four-credit seminar invites students to cultivate a practice of collaborative problem solving and project development. Students work as teams to develop proposals and action plans. The bulk of the semester's work will be organized around developing a project that requires integration and application of knowledge and skills acquired in earlier course work.


CS 494 Professional Internship 1


CS 495W Senior Seminar in Computer Science 1

Students research and develop a proposal for a substantial project that will integrate the students knowledge in computer science and supporting areas. Weekly meetings will study methodologies and offer a forum for presentations and discussions. A paper and final presentation on the proposal topic is required. Required for major in Computer Science.


CS 496W Senior Seminar in Computer Science 2

Students implement their project (proposed in CS 495W). Weekly meetings offer a forum for progress reports and practice presentations. A final write-up and presentation of the project is required. Required for majors in Computer Science.


CS 497 Research in Computer Science

Individualized program of investigative research, in which a student works directly with a faculty member in the faculty member's area of research expertise. May be repeated for credit until a maximum of 8 total credits.


Willamette University

Computer Science