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, graphs, 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. See the New and Topics Courses page on the Registrar’s webpage for descriptions and applicability to majors/minors in other departments.
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 roles 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" that 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.
Networks and systems form the boundary between abstractions firmly rooted in language and deeper questions in computing regarding the implementation of thinking machines 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 low level languages of C and assembly, use command line tools to study these languages, use features of the operating system including parallelism and networking, and learn how to make changes to operating systems.
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 New and Topics Courses page on the Registrar’s webpage for descriptions and applicability to majors/minors in other departments.
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 majors/minors in other departments.
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.
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 practical 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.
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.
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 majors/minors in other departments.
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 majors/minors in other departments.
Selected topics in supervised learning, unsupervised learning, and reinforcement learning: perception, logistic regression, linear discriminant analysis, decision trees, neural networks, naïve 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 dimensionality reduction methods, principle component analysis, Markov decision processes, passive and active learning.
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