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.
This webpage will help you decide among them.
-
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.
-
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 differential equations:
AMath 301
If you don't care, proceed to the next question.
-
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 want to solve differential equations: AMath 301
If you don't care, proceed to the next question.
-
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.
Some people may wish to take CSE 160
because they have already taken CSE 142 and CSE 143 but their
grades were not high enough to get into the CSE major.
We do
not recommend this strategy.
Note that you will not receive credit for CSE 160 if you have
already taken CSE 143.
If you do exceptionally well
in CSE 160, that might affect the admissions committee's
decision somewhat, but your time is likely better spent finding a
major for which you are better-suited.
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:
-
CSE 142 is an introduction to programming concepts and the Java
language, assuming no programming background. The conceptual
material is similar (but not identical) to CSE 160, though the
presentation and the application domain is different. Because of
the overlap in topics, a student who excelled in one of the two
classes may be bored taking the second one, so a different class
that teaches new material would be a better use of time. But some
graduates of CSE 160 may benefit from the fact that CSE 142 will
review some concepts from CSE 160, teaches a different programming
language, and has a different pedagogical style.
-
CSE 143 assumes knowledge of CSE 142 (in particular, familiarity
with Java), but it has no official prerequisites — any
student can take it without having taken CSE 142.
CSE 143 is a possibility for a student who did well
in CSE 160 and is willing to spend extra effort
to come up to speed on Java.
-
CSE 143X covers the
material of CSE 142 and CSE 143 in a single quarter. Students are
assumed to be familiar with programming concepts, though not
necessarily with Java. It is currently offered in the autumn quarter.
-
HCDE 310 assumes CSE 160 (previously numbered CSE 140) or CSE 142
as a prerequisite. It shows you how to use Python to process web
data and create Internet mashups. You address more ambitious
design problems than in CSE 160, and create prototypes of useful
services. The class is officially open only to HCDE majors, but
if you have taken CSE 160, you can petition to get in.
-
UW Professional and Continuing Education offers a
Certificate
in Python Programming, consisting of three classes (you can take as
many or as few as you like):
Programming
in Python,
Internet
Programming in Python, and
System
Development with Python.
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
(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.