We recently announced that we are replacing CSE 142, 143 with CSE 121, 122, 123 starting in academic year 2022-2023. CSE 121 and CSE 122 will first be offered in Fall 2022, and CSE 123 will first be offered in Winter 2023.

Read more about this change. 

The content below has been updated below to reflect this change, but we will continue to update it as we gain more experience with the new courses.

We have also launched our guided self-placement to help students choose among CSE 121, CSE 122, and CSE 123 when registering.


Computer science and engineering increasingly shapes the way we live and interact with the world around us. Computing has transformed nearly every industry, from law and government, to education and health care, to travel and entertainment. It also has become an essential tool for researchers in every scientific and business discipline, as we have entered an age of data-driven discovery.

CSE courses serve as an entry point for students across the campus to explore the world of computing. We offer courses designed to enable all students, regardless of major, to develop computational thinking and hands-on programming skills. Some students discover after taking one of our classes that CSE is the right path for them. Others apply their new knowledge and skills to a field outside of CSE. No matter what path you choose, taking a CSE course—or courses!—can enrich your educational experience and enhance your career prospects.

This page describes our introductory courses (100-level courses), so you can find the best course to start -- or continue -- your journey.  

UW President Ana Mari Cauce and students participate in the Hour of Code
UW President Ana Mari Cauce does the Hour of Code

Introduction to Computer Programming I (CSE 121)

What is it?

CSE 121 is a computer programming course for students who are new to programming.  Students write programs to express algorithmic thinking and solve computational problems motivated by modern societal and scientific needs. You will learn procedural programming constructs (methods), control structures (loops, conditionals), and standard data types, including arrays – we do not expect any of these terms to be familiar to you yet.  The course uses the Java programming language and teaching you how to write, test, and debug small and useful programs.  

Each of CSE 121, CSE 122, and CSE 123 has two large class meetings and two small (< 25 students) weekly recitations sections each week, with the recitations sections led by a community of undergraduate TAs who foster a supportive and inclusive learning environment for beginning programmers.

Programming is for everyone!  If you haven't coded before, come experience the beauty and creativity of creating running code.

Who should take it?

Students without programming experience -- see our guided self-placement to help you choose among CSE 121, CSE 122, and CSE 123 if you haven't already taken any of them.  All three courses enthusiastically welcome students based on self-placement.

Capacity

CSE 121 will be offered every quarter starting Fall 2022, and we expect it will serve thousands of students each year, several hundred each quarter.  But remember two of the four weekly meetings will be in a recitation section of < 25 students.

What next?

While CSE 121 will teach you useful programming skills you can use in to solve real problems, the next course is CSE 122, which covers additional essential topics for writing well-designed programs using powerful data structures.

Introduction to Computer Programming II (CSE 122)

What is it?

CSE 122 is a programming course that uses the Java programming language to teach program design, style, and decomposition.  Students use data structures such as lists, dictionaries, and sets (no experience with what these are expected) to solve computational problems motivated by modern societal and scientific needs.  The course also uses basic object-oriented programming to separate an interface from an implementation.

Who should take it?

CSE 122 is designed to be a "second programming course" for students who have taking a range of first programming courses.  While it follows CSE 121, it is also the right starting point for students who took a programming course in high school that covered the CSE 121 programming features, such as AP Computer Science A.  Prior experience does not need to be in Java.  See our guided self-placement to help you choose among CSE 121, CSE 122, and CSE 123 if you haven't already taken any of them.  All three courses enthusiastically welcome students based on self-placement.

Capacity

CSE 122 will be offered every quarter starting Fall 2022, and we expect it will serve thousands of students each year, several hundred each quarter.  But remember two of the four weekly meetings will be in a recitation section of < 25 students.

What next?

After CSE 122, students can take any combination of CSE 123, CSE 154, and CSE 163, three complementary courses described below.

Introduction to Computer Programming III (CSE 123)

What is it?

CSE 123 emphasizes implementation and run-time analysis of data structures and algorithms using techniques including linked references, recursion, and object-oriented inheritance.  Students will see how they can implement the data structures and abstractions they used in CSE 122 and how to use additional object-oriented features to create and use flexible software.  They will use these techniques to solve computational problems motivated by modern societal and scientific needs.

Who should take it?

Students can take CSE 123 after CSE 122 self-place into CSE 123 if they have substantial prior experience such that they are already familiar with the CSE 122 material.  See our guided self-placement.  The course content is designed for students aiming toward academic and career plans where software implementation is a major component

Capacity

CSE 123 will be first offered Winter 2023 and will then be offered every quarter.  Like CSE 121 and CSE 122, we are committed to having enough capacity for everyone, regardless of major or interest, interested in the course.

What next?

After CSE 123, students can take various upper-division computing courses. A good next step for students who enjoyed CSE 123 would be CSE 373 Data Structures, a more advanced course designed for non-majors.  CSE 154 and CSE 163 complement CSE 123. Completion of CSE 123 satisfies the prerequisites for students to apply for admission to the Computer Science or Computer Engineering majors.

Data Programming (CSE 160)

Former CSE 160 student Krittika D'Silva tests a new smartphone app in India
Krittika D'Silva tests a new smartphone app in India

What is it?

CSE 160 teaches students to program for data analysis and visualization using Python, the standard programming language used in various scientific disciplines and in other data-driven fields. Students perform real data manipulation tasks and write programs that solve problems using actual data sets drawn from the sciences, engineering, business and the humanities.  See this article on how student Krittika D’Silva applied her programming skills to addressing real-world problems in health care for an example of how CSE 160 is useful in a variety of fields.

Who should take it?

CSE 160 offers a firm grounding in computer programming to any student, and no previous programming experience is assumed. Although it is aimed at those who are new to programming, students who have taken CSE 121, CSE 122, or CSE 142 (but not CSE 123 or CSE 143) can enroll in this course, but also see CSE 163, which is designed to follow CSE 122 or CSE 160.

CSE 160 is particularly beneficial to students who wish to perform data analysis. Students who are majoring in or intend to major in one of the natural, physical or social sciences, or another data-intensive discipline, are encouraged to consider CSE 160 as a first course. 

Capacity

CSE 160 is offered roughly twice per year to approximately 200 students.

What next?

After completing CSE 160, students can already use programming for a variety of data analyses. For more data programming, including using common tools and libraries for a variety of types of data, continue on to CSE 163 Intermediate Data Programming.  For students who are interested in taking additional programming classes or who intend to major in computer science or computer engineering, take CSE 122 (not CSE 121, which is for students without programming experience).  Students who would like to learn how to build websites and web-based applications and have achieved a grade of at least 2.0 in CSE 160 can enroll in CSE 154 Web Programming. 

 

Intermediate Data Programming (CSE 163)

What is it?

CSE 163 provides students who have taken CSE 122, CSE 142, or CSE 160 with a programming course about how to write programs that (a) manipulate different types of data (images, text, tables, etc.), (b) leverage the growing ecosystem of tools and libraries for data programming, (c) are both efficient and elegant, and (d) are medium-scale in size (100 to 200 lines). The course complements CSE 123, which focuses more deeply on fundamental programming concepts and the internals of data structures. In contrast, CSE163 emphasizes the efficient use of those concepts for data programming. CSE 163 uses the Python programming language.

Who should take it?

CSE 163 requires CSE122, CSE 123, CSE 142, CSE143, or CSE 160 (any one of these courses) as pre-requisites.  CSE 121 is not enough prior experience -- take CSE 122 or CSE 160 instead.

CSE 163 is designed for broad interests in data science, data analysis, and programming. Students in any major may benefit from this course. It is complementary to CSE 123 (or CSE 143), and CSE 154; the material in CSE 123, CSE 154, and CSE 163 have minimal overlap. CSE 123 (or 143) remains a prerequisite for admission to the Computer Science and Computer Engineering majors.

Capacity

The course is offered 2-3 times per year with each offering having capacity for approximately 300 students. We will continue to expand overall capacity as needed in the years ahead.

What next?

After completing CSE 163, students will be well-positioned to pursue various data-science courses across campus, including in majors that have data-science options. It is also great preparation for CSE 414 and CSE / STAT 416 — courses where any one of CSE 123, CSE 143, or CSE 163 are sufficient.

 

Web Programming (CSE 154)

What is it?

CSE 154 provides an introduction to programming languages and tools for creating websites and web-based applications—skills that are increasingly useful in a variety of fields, as many people conduct much of their professional and personal lives online. Students learn how to author web page content using Hypertext Markup Language (HTML), control design and layout through the use of Cascading Style Sheets (CSS), create interactive web pages with JavaScript, and run code and maintain data on web servers. 

Students must have achieved a grade of at least 2.0 in any one of CSE 122, CSE123, CSE 142, CSE 143, CSE 160, or CSE 163 to enroll in this course.

Capacity

CSE 154 is offered a couple times each year, with room for roughly 250 students per offering, sometimes more.

 

Introduction to Data Science (STAT/INFO/CSE 180)

What is it?

STAT/INFO/CSE 180, Introduction to Data Science (IDS), is a course offered every quarter. It is a survey course introducing the essential elements of data science: data integrity including the ethics and social context of data; data methods including using tables, graphs, and other visualizations; and data analysis, including statistics methods and machine learning.  It is not a programming course: rather than programming, students gain hands-on experience with other software tools and methods. 

This course is a joint project of Statistics, the Information School, and the Allen School, synthesizing the perspectives and expertise of the units. It was jointly developed, and each department/school leads one quarter’s offering each year. The offerings cover the same material.

Who should take it?

180 is designed for all undergraduates. No previous exposure to programming or statistics is expected. Many important decisions made by individuals and society at large are or should be data driven. Therefore, understanding the fundamentals of data science is essential for functioning as an informed citizen.

Capacity

Approximately 100 students per quarter.

What next?

While the course is not a direct prerequisite for other courses, students are likely to be motivated to follow-up with additional courses in computer science, informatics, and statistics. See CSE 121 and CSE 160 for programming-focused courses. In particular, the programming aspects of 180 are not sufficient by themselves to skip 121/160.

 

Computer Science Principles (CSE 110)

What is it?

CSE 110 (which had number CSE 120 until 2022) introduces students to the fundamental principles of computer science and to basic programming concepts as a means to develop their computational thinking. Students explore the creative aspects of computing, including abstraction, problem-solving and managing complexity, and have the opportunity to consider the social, ethical and legal ramifications of various computing technologies. CSE 110 is related to the Advance Placement course in Computer Science Principles.

CSE 120 was renumbered CSE 110 just to emphasize that it is not part of the CSE 121, CSE 122, CSE 123 sequence.  It did not change otherwise.

Who should take it?

Every student, no matter what his/her chosen field, should be familiar with the concepts and technologies that underpin computing and its role in our society. Anyone who seeks to acquire a basic understanding of computer science and to gain insights beyond what they know as mere consumers of technology would benefit from taking this course.

Capacity

Due to relatively low demand, we have not been offering this course every year.  We hope to relaunch it at some point.

What next?

Students have multiple options for building on what they learn in CSE 110. A natural next step may be to follow principle with practice by enrolling in one of our introductory programming courses, CSE 121 or CSE 160. While CSE 110 offers a great introduction to computer science concepts, it is not a necessary prerequisite for enrollment in those programming courses.

 

Science and Art of Digital Photography (CSE 131)

Examples of student work from CSE 131
Student projects from CSE 131

What is it?

CSE 131 offers students the opportunity to express their creativity while exploring the technical aspects of digital photography, including photographic composition, the science of optics and digital imaging, and the future of internet-enabled photography. Students practice using a variety of software tools and techniques for incorporating design elements such as line, color, texture and light, culminating in a final project organized around a theme. View examples of past student projects curated by course instructors here and here.

Capacity

CSE 131 was offered once per year with room for approximately 200 students through 2021, but the instructor and course creator has retired and he is still deciding whether he can return to teach this class in the coming years.

 

Computer Programming I (CSE 142)

The last offering of CSE 142 will be Summer 2022 as we transition to CSE 121, CSE 122, and CSE 123 in place of CSE 142 and CSE 143. We retain the information below as reference for students who took CSE 142 or corresponding courses at other institutions.

What is it?

CSE 142 is an entry-level course that introduces students to essential computing concepts and teaches them how to write programs in Java—the most widely-used programming language in the world and an integral part of the UW CSE curriculum. CSE 142 is designed for students with no programming experience. Students attend a combination of large lectures and small (< 25 students) weekly recitation sections led by a community of TAs who foster a supportive and inclusive learning environment for beginning programmers. Students also have access to the Introductory Programming Lab for individualized help.

UW CSE offers honors sections connected to CSE 142 and 143 in which students take part in readings and discussions exploring a variety of computer science topics, including the nature of computation, the mathematical underpinnings of computer science, social issues related to computing, and current trends in the field. Participating students earn one additional credit for the seminar; in addition, the Honors Program grants students who complete CSE 142 or 143 in conjunction with the seminar credit for one 5-unit math or science course in the core.

Enrollment in CSE 142 has increased dramatically, and the course has been particularly successful at engaging more women in computer science and engineering. CSE 190A, a seminar linked to a section of CSE 142, enables students to explore the role of women in the field through group discussions, hands-on activities, and guest speakers. Watch our video exploring the growing popularity of CSE 142 and its follow-on course, CSE 143, and how these courses contribute to greater diversity in computing.

Who should take it?

Group photo of undergraduate TAs
Our TAs enjoy introducing students to programming

Any student who is new to programming, and is interested in learning Java and general programming skills while working on entertaining assignments, would benefit from taking CSE 142.

Generally speaking, students who plan to major in computer science or computer engineering should complete CSE 142 and CSE 143 (or CSE 143X), as they are prerequisites for admission. Students may also need to complete CSE 142 and/or CSE 143 to satisfy requirements for majors from other departments.

What next?

Students have a number of options for further study. Three complementary courses are specifically designed to follow CSE 142: (1) CSE 143 is the continuation course for those who want to develop more advanced programming skills in Java and is the next step toward most upper-division CSE courses, (2) CSE 154 is a web programming course covering many technologies used to implement web pages, and (3) CSE 163 is a programming course focused on data analysis with a variety of data-science programming tools.

 

Computer Programming II (CSE 143)

Most students should take CSE 122 or CSE 123 instead of CSE 143.  We will offer CSE 143 during the 2022-2023 academic year for students who already completed CSE 142 or a corresponding course at another institution. 

What is it?

CSE 143 builds on the material in CSE 142 to develop more advanced programming skills, essential for writing more complex programs over larger and more interesting data. The format is similar to CSE 142, with two small weekly recitation sections.

UW CSE offers honors sections connected to CSE 142 and 143 in which students take part in readings and discussions exploring a variety of computer science topics, including the nature of computation, the mathematical underpinnings of computer science, social issues related to computing, and current trends in the field. Participating students earn one additional credit for the seminar; in addition, the Honors Program grants students who complete CSE 142 or 143 in conjunction with the seminar credit for one 5-unit math or science course in the core.

Who should take it?

CSE 143 is designed as a follow-on course to CSE 142. While students who already know the material covered in CSE 142 are allowed to take CSE 143 without formal approval, doing so is often not advised because the two courses are designed together. CSE 143 is a great choice for any student wanting to learn more after CSE 142, and CSE 123 or CSE 143 is generally required for entry to the CS or CE major. CSE 123 or CSE 143 also may be required for other majors on campus.

What next?

After CSE 143, students can take various upper-division computing courses. A good next step for students who enjoyed CSE 143 would be CSE 373 Data Structures and Algorithms, a more advanced course designed for non-majors. Other 100-level courses, such as CSE 154 and CSE 163, are also options (the exception is CSE 160, which cannot be taken after CSE 143). Completion of CSE 143 satisfies the prerequisites for students to apply for admission to the CS or CE major.

 

Accelerated Computer Programming I/II (CSE 143X)

With the transition to CSE 121, CSE 122, CSE 123, we have not yet determined what accelerated options we may offer in the future -- self-placement into CSE 122 or CSE 123 may be a sufficient choice for many students.  

What is it?

CSE 143X is an accelerated version of CSE 142 and CSE 143 that covers the material of both in a single quarter. This course doubles the pace of learning—not the assignment workload.

Who should take it?

CSE 143X is designed for students who want to take CSE 142 and CSE 143 but feel they have sufficient experience and ability to learn the material in a condensed time frame.

In the past, CSE 143X was usually offered in Fall Quarter to about 100 students.

What next?

Students who complete CSE 143X have the same options for further study as students who have completed CSE 123 or CSE 143.

Upper-Level Courses

In addition to our 100-level courses, we offer a selection of 300- and 400-level courses in which students can explore in some depth specific areas of computing in a format suited to non-majors. Topics include algorithms, intermediate programming, artificial intelligence and database systems. See our overview of UW CSE's non-major courses to learn about options for additional study.

Questions? Consider speaking to a UW CSE adviser. Visit our undergraduate advising page for more information.