Which programming class should I take?

UW offers many excellent introductory programming classes. These options include CSE 142, CSE 143, CSE 143X, CSE 160, and AMath 301. Different classes are best for different people — no one class is better than the others. Below are some suggestions to help you decide among them. You should also visit this page for a much more in depth description of introductory courses offered in CSE.

  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 160. CSE 160 is intended for beginners.
    • If you know how to program in Java: CSE 143
    • If you know how to program, but not in Java: CSE 143X
    • If you know how to program, but want to learn Python: See The Python Tutorial (for Python 2 or Python 3), Learn Python The Hard Way (which should really be titled, "Learn Python by programming in it"), and the other recommended readings and self-study resources.
  2. What programming language do you want to learn?
    • If you want to learn Java, which is the #1 programming language in the world and is used throughout the CSE curriculum: CSE 142
    • If you want to learn Python, which is a fun, easy-to-use language that is just as powerful as Java: CSE 160
    • If you want to learn MATLAB for solving problems from engineering and science that can be expressed as differential equations : AMath 301
    If you don't care, proceed to the next question.
  3. What style of problem motivates you?
    • If you are more motivated by puzzles and games: CSE 142
    • If you are more motivated by problems drawn from engineering, the physical sciences, and the social sciences: CSE 160
    • If you are more motivated by solving problems from engineering and science that can be expressed as differential equations: AMath 301
    If you don't care, proceed to the next question.
  4. What are your schedule constraints?
    • CSE 142 is taught every quarter at multiple times, so it offers more scheduling flexibility.
    • CSE 160 is taught less frequently.

Frequently Asked Questions about CSE 160

Substituting CSE 160 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 160, 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 160 cannot substitute. If the prerequisite exists because students should have a general knowledge of computational thinking and programming, then the substitution makes sense. Note that some departments may not yet be aware of the new course number for CSE 160 Data Programming, which was previously numbered CSE 140. CSE 160 is the same as the old CSE 140, only the course number changed.

What programming class should I take after CSE 160?

What programming class should you take after CSE 160? You don't have to take any more programming classes. After CSE 160, 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:

Self-study

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.

In addition to the UW Professional and Continuing Education courses listed above, there are online courses available from a variety of sources. Below are listed a few related to either Python or data programming that may be of interest. Some of these have fees but many of them have their videos and assignments available for free if you are not interested in receiving a certification. Usually you still have to sign up (even when it is free) in order to view the videos etc. Sometimes you can't tell if there is a free option until you try to sign up. So try it!