Skip to main content

MSCS courses are taught by faculty members in the School of Computing and Information Sciences as well as highly-credentialed adjunct faculty with connections to local industry. The selection of courses varies every program year, with frequent new additions.

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. 


1. Software and systems

Cloud application development (4)

Cloud Application Development covers fundamental cloud computing concepts, cloud infrastructure and virtualization, cloud-native development environments, web application development basics, cloud storage services and databases, cloud security and compliance, deployment strategies, scaling techniques, monitoring, logging, and troubleshooting cloud applications. It culminates in a final project where students design and develop a cloud-based web application, followed by presentations.

Server-Side Programming with Python (4)

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.

JavaScript Programming (4)

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.

Computer Networks (4)

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.

Fundamentals of Data Engineering (4)

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.


2. Algorithms and Complexity

Algorithmic Techniques (4)

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.

Applied Machine Learning (4)

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.

Principles of Cybersecurity (4)

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.

3. Ethics and Policy 

Data Ethics, Policy and Human Beings (4)

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.

Critical Perspectives on Computing (4)

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.


4. Humans and Design

Human-Computer Interaction (4)

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.

Data Visualization and Presentation (4)

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.


Summer bridge (optional)

Fundamentals of Programming with Python (2)

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, and object oriented programming. More abstract data structures including linked lists and queues will be investigated alongside algorithms used on these data structures.

Willamette University

School of Computing and Information Systems