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.
-
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 and is widely used in the sciences: 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 takes a slow pace, 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. It is recommended for students who took
both CSE 140 and the one-credit add-on Java seminar CSE 190D — that
seminar is designed explicitly to help CSE 140 graduates transition
painlessly into CSE 143.
CSE 143 is also a possibility for a student who did well in CSE 140 and
is willing to spend extra effort at the beginning of the quarter 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
and will be admitted.
-
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.