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 computer security, machine learning, software development, systems and networks, human and computer interaction. 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, and build basic skills which can be applied to solving real world problems generated from other domains. 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. Others 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 PC and UNIX-based systems and a number of labs with specially-selected equipment to support graphics or experimental 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 151, Introduction to Programming with Python. Students with scores of four should confer with the department about possible credit.
Requirements for the Computer Science Major (Bachelor of Science) (40 semester hours)
32 semester hours in Computer Science, 4 semester hours in Mathematics, and 4 semester hours in Data Science
Required Core (24 semester hours)
- CS 151 Introduction to Programming with Python (4)
- CS 152 Data Structures (4)
- CS 351 Analysis of Algorithms (4)
- DATA 351 Data Management with SQL (4)
- DATA 352W Ethics, Teamwork, and Communication (4)
- MATH 251W Foundations of Advanced Mathematics (4)
Structured Electives (8 semester hours):
- Choose two classes from the following list:
Open Electives (8 semester hours)
- Eight hours of electives at any level chosen from classes with CS, DATA, or MATH prefixes. MATH 130 may not be used to to satisfy any part of this requirement.
Requirements for the Computer Science Minor (20 semester hours)
- CS 151 Introduction to Programming with Python (4)
- CS 152 Programming with Data Structures (4)
- CS 351 Analysis of Algorithms (4)
- MATH 251W Foundations of Advances Mathematics (4)
- 4 hours of elective coursework at any level chosen from classes with CS, DATA, or MATH prefixes. MATH 130 may not be used to satisfy this requirement
Requirements for the accelerated 3+1 BS/MS in Computer Science (64 semester hours)
The 3+1 program consists of six semesters of undergraduate studies and three semesters of primarily graduate classes (Fall, Spring, and Summer), including five core classes and three electives. Students must complete 136 credits total to earn both their Bachelors and Masters Degrees in Computer Science. If a student has completed 124 credits (inclusive of graduate classes) by May of their final year (e.g. after eight semesters), they will receive their bachelors diploma.
Required undergraduate Core (16 semester hours):
- CS 151 Introduction to Programming with Python (4)
- CS 152 Programming with Data Structures (4)
- CS 351 Analysis of Algorithms (4)
- MATH 251W Foundations of Advances Mathematics (4)
Undergraduate Electives (8 semester hours):
- Eight hours of electives at any level chosen from classes with CS or DATA or MATH prefixes, or capstone or internship. MATH 130 may not be used to satisfy any part of this requirement.
Required graduate Core (36 semester hours):
- DATA 504W Data Ethics, Policy, and Human Beings (4)
Two classes in Software and Systems:
- DATA 503 Fundamentals of Data Engineering (4)
- CS 529: Topics in Software and Systems (4)
Algorithms and Complexity (pick one from the following list):
- DATA 505 Applied Machine Learning (4)
- CS 540 Principles of Cybersecurity (4)
- CS 549: Topics in Algorithms and Complexity (4):
Humans and Design (pick one from the following list):
- DATA 502 Data Visualization and Presentation (4)
- CS 580 Human-Computer Interaction (4)
- CS 589: Topics in Humans and Design (4)
Graduate Electives (16 semester hours):
- Sixteen hours of graduate electives with DATA prefix or CS prefix.
Indicators of Achievement
The goals of the computer science department are:
- To introduce students to the fundamentals of computer programming, theory and underlying mathematical and scientific principles.
- To prepare students for employment in the computing industry or for postgraduate study in computer science.
- To provide students with an understanding of professional responsibilities and the importance of life-long learning.
- To develop skills for teamwork including collaboration and oral and written communications.
Student Learning Outcomes for the Computer Science Major
- Students will achieve proficiency in discrete math
- Students will achieve proficiency in Computer Science skills (fundamentals of programming, computer organization, architecture, algorithms, theory, designing and implementing software)
- Students will demonstrate the ability to communicate effectively both orally and in writing
- Students will demonstrate the ability to work effectively as part of a team
- Students will demonstrate the ability to work independently to analyze and solve problems
- Students will be engaged in the professional community
Course Listings
CS 151 Introduction to Programming with Python (4)
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.
- General Education Requirement Fulfillment: Mathematical Sciences
- Offering: Every semester
- Instructor: Staff
CS 152 Data Structures (4)
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.
- General Education Requirement Fulfillment: Mathematical Sciences
- Prerequisite: CS 151
- Offering: Spring
- Instructor: Staff
CS 199 Topics in Computer Science (1-4)
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.
- General Education Requirement Fulfillment: Topic dependent
- Prerequisite: Topic dependent
- Offering: Occasionally
- Professor: Staff
CS 261 Software Development (4)
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.)
- Prerequisite: CS 152
- Offering: Annually
- Professor: Staff
CS 262 Web Development (4)
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.
- Prerequisite: CS 152
- Offering: Occasionally
- Professor: Staff
CS 263 Mobile Development (4)
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.
- Prerequisite: CS 152
- Offering: Occasionally
- Professor: Staff
CS 271 Networks and Systems (4)
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.
- Prerequisite: CS 152
- Offering: Annually
- Professor: Staff
CS 276 Advanced Collaborative Computing (4)
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.
- Prerequisite: CS 152
- Offering: Annually
- Professor: Staff
CS 299 Topics in Computer Science (1-4)
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.
- General Education Requirement Fulfillment: Topic dependent
- Prerequisite: Topic dependent
- Offering: Occasionally
- Professor: Staff
CS 351 Analysis of Algorithms (4)
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.
- General Education Requirement Fulfillment: Mathematical Sciences
- Prerequisite: CS 152 and MATH 251
- Offering: Spring
- Instructor: Staff
CS 370 Python for Data Science (4)
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.
- General Education Requirement Fulfillment: Mathematical Sciences
- Prerequisite: CS 151
- Offering: Spring
- Instructor: Staff
CS 391 Independent Study (2 or 4)
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.
- General Education Requirement Fulfillment: Mathematical Sciences
- Prerequisite: Consent of instructor
- Offering: On demand
- Instructor: Staff
CS 399 Topics in Computer Science (1-4)
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.
- General Education Requirement Fulfillment: Topic dependent
- Prerequisite: Topic dependent
- Offering: Occasionally
- Professor: Staff
CS 429 Topics in Computer Science (1-4)
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.
- General Education Requirement Fulfillment: Topic dependent
- Prerequisite: Topic dependent
- Offering: Occasionally
- Professor: Staff
CS 475 Machine Learning with Python (4)
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.
- General Education Requirement Fulfillment: Mathematical Sciences
- Prerequisite: CS 370
- Offering: Alternate years
- Professor: Staff
CS 497 Research in Computer Science (2 or 4)
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.
- Prerequisite: Consent of instructor
- Offering: On demand
- Professor: Computer Science Staff