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.
This course includes a study of problem-solving principles, computer programming, some of the principles behind programming languages and the structure of a computer.
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.
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.
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.
Required laboratory for CS 241, Introduction to Computer Science: Data Structures
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.)
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.
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.
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.
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.
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.
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.
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.
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.
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.
Required laboratory for CS 353, Architecture and Compilers
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.
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.
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.
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.
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.
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.
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.
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.
the required lab for CS 429
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.
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.
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.
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.
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.
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.
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.
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.
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.
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