Which programming class should I take?
UW offers many excellent introductory programming classes. These options
include CSE 142, CSE 143, CSE 143X, CSE 140, 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 140. CSE 140 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 140
- If you want to learn Python and Java: CSE 140 plus its
optional Java seminar CSE 190D, or
CSE 142 plus its optional non-graded Python seminar
- 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 140
- 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 140 is taught less frequently.
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:
-
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 140, 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 140 may benefit from the fact that CSE 142 will
review some concepts from CSE 140, 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 140 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 CSE140 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 140, and create
prototypes of useful services. The class is officially open only to
HCDE majors, but if you have taken CSE 140, 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.