Skip to main content

Course Descriptions

Descriptions for a few planned courses like cloud computing and user experience design are
still under development; however, we have descriptions for the majority of our planned offerings listed in the following sections. This should give you a basic understanding of degree content
and options for specialization. Note that students must complete at least two classes from the
Software and Systems category and at least one class from each of the other three categories.

  • Summer Bridge Program

    CS 500: Fundamentals of Programming with Python

    An accelerated introduction to computer science using Python. Introduces students to the fundamental concepts of programming, computational problem solving and data structures. Topics will include general programming idioms such as variables, control structures, functions, 8 and object oriented programming. More abstract data structures including linked lists and queues will be investigated alongside algorithms used on these data structures.

  • Software and Systems

    CS 5xx: Server-Side Programming with Python

    Focuses on the design of code running on the server side of a client-server application in which the server-side code is written in Python supplemented by the Flask library. The course assumes basic familiarity with Python at the level of CS 151 but introduces enough of the basics of HTML to understand what is happening on the client side. It also covers enough of the theory of distributed systems to understand the relationship between the client and the server and the special considerations required for systems running in a distributed environment.

    CS 5xx: JavaScript Programming

    Covers advanced techniques in JavaScript programming as it is employed on both client-side and server-side web applications. The course begins by covering the basics of JavaScript as a programming language but then focuses on the techniques required to build modern websites, including promises, the async and await primitives, arrow functions, and web-based APIs. Coverage of server-side technologies includes an introduction to Node.js.

    CS 5xx: Computer Networks

    This course introduces the underlying functionalities through which networks and distributed systems, including many web services, function. The course will center around the principles of socket programming in low level languages, and the requirements in memory management, determinism and non-determinism, and state. Using socket programming, we will explore communication and communication protocols, concurrency, and data management that make up practical computer systems and the services agreements they must meet. Students will work collaboratively to implement a messaging service as a course project.

    CS 5xx: Cloud Computing

    This course introduces cloud computing as the solution to the problem of data-intensive programming at scale. We will survey the existing techniques in computing, their algorithmic basis, and explore them in practice. With the motivating example of the MapReduce programming model, will examine Microsoft Azure, Google Cloud, Amazon Web Services, three common commercial platforms for cloud computing, and Hadoop, an open-source alternative. The course will be supplemented with discussions of virtualization and cloud security.

    DATA 503: Fundamentals of Data Engineering

    Data management is core to both applied computer science and data science. This includes storing, managing, and processing datasets of varying sizes and types. This course introduces students to the various ways in which data is stored and processed including relational databases, file-based databases, cloud-based storage and data streaming. A key component of the course is learning which architectures fit which types of data science problem (and the strengths and weaknesses of each). Students will learn to work with data that is both clean and structured, and dirty and unstructured.

  • Algorithms and Complexity

    CS 5XX: Algorithmic Techniques

    Algorithms are common motifs in problem solving, especially in computing. But how can these algorithms be used to improve the lives of people? In this course, we explore the application of algorithmic thinking to real problems, approaching established applications such as Google's PageRank and MapReduce for organizing the internet, the intent protocol of "exponential back-off" to achieve high networking performance, "maximum flow" algorithms for scheduling, and more. The course will involve translating high level design specifications to actionable working code to instill best practices for computing performance and efficiency.

    DATA 505: Applied Machine Learning

    Machine learning is becoming a core component of many modern organizational processes. It is a growing field at the intersection of computer science and statistics focused on finding patterns in data. Prominent applications include personalized recommendations, image processing and speech recognition. This course will focus on the application of existing machine learning libraries to practical problems faced by organizations. Through lectures, cases and programming projects, students will learn how to use machine learning to solve real world problems, run evaluations and interpret their results.

  • Ethics and Policy

    DATA 504: Data Ethics, Policy and Human Beings

    This course explores the legal, policy, and ethical implications of data. These types of issue arise at each stage of the data science workflow including data collection, storage, processing, analysis and use. Armed with legal and ethical guidelines, students are then confronted with topics including privacy, surveillance, security, classification, discrimination, decisional-autonomy, and duties to warn or act. Using case studies and a lecture-discussion format, the course will address real-world problems in areas like criminal justice, national security, health, marketing and politics.

    COL 5XX: Critical Perspectives on Computing

    Computational infrastructure is an omnipresent component of our daily lives. Through social media, financial instrumentation, systems of data aggregation, surveillance, and artificial intelligence, the digital increasingly mediates our relationships to work, to information, and to each other. This course will aim to understand these digital worlds not only in their technological registers, but as socially structured phenomena. If these systems, codes, and algorithms have become fundamental to everyday life, and they are not the products of inevitable or essential meanings, but human interlocution, it is necessary to interrogate: the social contexts from which they emerge, the underlying social forces which continually map meaning onto them, and the social futures they attempt to bring into being. In this, we can better understand the underlying political, cultural, and ethical implications of engaging in the seemingly objective work of writing and analyzing code. To do so, we will examine a wide range of source material, with forays into: ethical philosophy, economics, aesthetics and artistic practice, media and social media artifacts, public policy, as well as specific computational technologies themselves. In short, this course endeavors to provide a series of critical tools to better assess our contemporary digital world.

    DATA 5XX: Cybersecurity

    Cybersecurity can be understood as a mindset or approach rather than a subfield of computer science, such as secure mobile computing, network and operating system security, secure data bases, and secure cryptography algorithms. This course prepares a general audience to incorporate security concepts and ethics into their daily lives and offers some basic familiarity with writing security oriented code.

  • Humans and Design

    CS 5XX: Human-Computer Interaction

    As computational systems have moved to become pervasive parts of our lives, it becomes even more important to consider how they can be best designed to be useful and usable by people (or "users"). But who is a "user", how do we understand what they want, and how can we design user interfaces that are effective and efficient for them? 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 also provides knowledge on current trends in human-computer interaction, the requirements, and constraints of interaction, and design processes, focusing on the ways of understanding user needs, requirements, and testing designs. At a basic level, we will cover Usability, User-Centered Design, prototyping, how this process fits into existing software product development, as well as looking at how the relationship between computers and humans is evolving, and how we might interact with computer systems in the future.

    COL 502: Information Design

    This graduate studio course will provide a comprehensive introduction to the theories, practices, and contexts of information visualization and communication. Using interdisciplinary data visualization techniques and principles, we will develop strategies to explore data and information in insightful and creative ways. Through rigorous process iteration and critique, students will structure and communicate data and information into engaging, compelling, and powerful forms. Information Design skills learned in this course emphasize information synthesis and communication rather than more exploratory data analysis. Through discussion and critique, this course also challenges students to consider our relationships with data, power structures inherent in knowledge generation and dissemination, who gets to tell stories with data, and the role of information design in society and on the planet today. Course projects encourage agency and empowerment through design: we will harness Information Design to ask better questions rather than merely display answers, learn to offer an audience exploratory entry points for investigating their unique data questions, and explore participatory modes and avenues for data-driven design. This course requires the use of Adobe Creative Cloud and several online data and software tools. We will host several guest speakers and critics over the course of the semester who will illuminate the creative, contextual, and critical breadth of this exciting and rapidly evolving field.

    DATA 502: Data Visualization and Presentation

    It’s one thing to conduct an analysis, it’s another to convince someone to change their behavior based on this analysis. In this course, students will study theories of visualization, communication and presentation with the purpose of translating technical results into actionable insight. Using a mix of case studies and code, the course begins with an examination of how to ask good research questions. It then covers the psychology of communication and the construction of compelling visualizations. Finally, students are tasked with writing and presenting their work in a manner suited to a non-technical audience.

Willamette University

Master's in Computer Science

Portland Center

Address
200 Market Street
Portland Oregon 97201 U.S.A.
Phone
971-717-7271