Computer Science

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 network, to human and computer interactions. 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, building basic skills that can be applied to solving real world problems generating 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. 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 141, Introduction to Programming, or 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 (28 semester hours)

  • CS 151 Introduction to Programming with Python (4)
  • CS 152 Data Structures (4)
  • CS 261 Software Development (4)
  • CS 271 Networks and Systems (4)
  • CS 351 Analysis of Algorithms (4)
  • DATA 352W Ethics, Teamwork, and Communication (4)
  • MATH 251W Foundations of Advanced Mathematics (4)

Electives (12 semester hours):

  • Twelve hours of electives at any level chosen from classes with CS, DATA, or MATH prefixes

 

Requirements for the Computer Science Minor (20 semester hours)

  • CS 151 Introduction to Programming with Python (4)
  • CS 152 Programming with Data Structures (4)
  • Twelve hours of electives at any level chosen from classes with CS prefixes

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

  1. Students will achieve proficiency in discrete math
  2. Students will achieve proficiency in Computer Science skills (fundamentals of programming, computer organization, architecture, algorithms, theory, designing and implementing software)
  3. Students will demonstrate the ability to communicate effectively both orally and in writing
  4. Students will demonstrate the ability to work effectively as part of a team
  5. Students will demonstrate the ability to work independently to analyze and solve problems
  6. 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 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 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

Back to Top