Which programming class should I take?

UW offers many excellent introductory programming classes. These options include CSE 140, CSE 142, CSE 143, CSE 143X, and AMath 301. Different classes are best for different people — no one class is better than the others. This webpage will help you decide among them.

  1. Do you already know how to program?
    If you are confident in your ability to write small programs, you would be bored or would waste your time in CSE 140. CSE 140 is intended for beginners.
  2. What programming language do you want to learn? If you don't care, proceed to the next question.
  3. What style of problem motivates you? If you don't care, proceed to the next question.
  4. What are your schedule constraints?

Some people wish to take CSE 140 because they have already taken CSE 142 and CSE 143 but their grades were not high enough to get into the CSE major. This is not a good strategy. If you do exceptionally well in CSE 140, that might affect the admissions committee's decision somewhat, but we have no evidence that that has happened in the past, and your time is likely better spent finding a major for which you are better-suited.

Substituting CSE 140 for other classes

Some departments/classes have AMath 301 or CSE 142 as requirements/electives/prerequisites. Many departments and instructors are accommodating about permitting an exception to these requirements if you have taken CSE 140, but of course you will have to explicitly request such permission. If the prerequisite exists because of specific skills, such as a need for knowledge of Java, MATLAB, or differential equations, then CSE 140 cannot substitute. If the prerequisite exists because students should have a general knowledge of computational thinking and programming, then the substitution makes sense.

What programming class should I take after CSE 140?

What programming class should you take after CSE 140? You don't have to take any more programming classes. After CSE 140, you will have the ability to write small programs to solve real-world data analysis and transformation problems. You will also know enough to use resources such as books and websites to learn more. But, you may find that you enjoy programming so much that you want to progress to the next level. Or, you may want to solve larger and more challenging problems. Here are some options:


The best way to learn to program is to do it! When you encounter a task that could be done via programming, do it that way even if that takes you a little while longer. You will get better the more practice you get. Try to get feedback on your programming — either from thoughtful introspection or from a more expert programmer — since that is the best way to improve.

Books are useful, but only if you then put the ideas into practice. That said, you should return to the resources listed on the syllabus, reading the parts that weren't assigned (or that you didn't read) during the quarter. Some other books you might find useful are Learn Python The Hard Way (which should really be titled, "Learn Python by programming in it"), and Practical Programming: An Introduction to Computer Science Using Python (for Python 2 or Python 3).

In addition to the UW PCE courses, there are online courses available from Software Carpentry, edX (you have to search for "6.00x"), and elsewhere.