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.
-
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 problems from engineering and science that can be expressed as 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 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.
-
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
- I have already taken CSE 143? Can I take CSE 160? -
You will not receive credit for CSE 160 if you have
already taken CSE 143. CSE 160 is intended for beginners.
- I have already taken CSE 142? Can I take CSE 160? - We do
allow this, and you can receive credit for taking CSE 160 if you
have already taken CSE 142. However, note that CSE 160 is intended
for beginners. The conceptual material in CSE 160 is similar (but
not identical) to CSE 142. CSE 160 uses a different programming
language, and the presentation of topics and the application
domain are different. Because of the overlap in topics, a student
who excelled in CSE 142 may be bored taking CSE 160, so a
different class that teaches new material could be a better use of
time.
- Is CSE 160 meant to be a "gentler" introduction to
programming than CSE 142? - Both CSE 142 and CSE 160 are
intended to be introductions to programming, and both are aimed at
students who have not programmed before. Both classes require hard
work to succeed, but any student can succeed in either class!
Neither class is intended to be easier or "gentler" than the other.
You should pick the course that best fits your goals - and plan to
work hard in either class to achieve those goals.
- I am planning on applying to the CSE major, will taking CSE
160 help me be accepted to the major? - First, note that you
will not receive credit for CSE 160 if you have already taken
CSE 143. CSE 142 and CSE 143 are the standard prerequisites
for CSE admission, and must be taken before applying to the
major. The admission committee relies on strong grades in these
classes to show preparation for the major. While a very high or
low grade in CSE 160 may have some impact on your chance of
admission, it is not a standard course considered by the
admissions committee.
- Can I take CSE 142 or CSE 143 AFTER taking CSE 160? -
Most definitely YES! CSE 160 is designed to give you enough skills
so that afterwards you can use Python to address your own data
analysis questions. However if you enjoy the class and want to take
more CSE courses or decide to apply to the CSE major you CAN receive
credit for CSE 142 and CSE 143 if they are taken after CSE
160. Please see the discussion of What class to
take after CSE 160 below.
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
163 Advanced Data Programming is a natural course to take
after taking CSE 160. The course has as its pre-requisite EITHER
CSE160 or CSE142. The first week or so of the course is a crash
course in Python syntax to ensure students who have not taken CSE
160 can use Python. That part will mostly be a review for students
who have taken CSE 160, but after that the course will ramp up
quickly. You will learn to use more Python libraries (numpy,
Pandas), process more types of data (geospatial, text), as well as
use more tools for working with Python (e.g. Python notebooks). This
is really the perfect course for you if you liked what we did in
CSE 160 and would like to keep growing in that direction.
-
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 could 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.
A student who struggled in CSE 160 may may find CSE 142
useful (and vice versa!) in reinforcing the concepts, because they are
explained differently and applied in different contexts.
-
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 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 may be able to 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 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!
- Coursera (e.g. UW Intro to Data Science, UW 5-course sequence in Machine Learning, DNA Sequencing Algorithms, Genomics, Signal Processing for Music, U Michigan 5-course sequence)
- edX (e.g. Intro to Python, Big Data, Intro to Python, Intro to CS from authors of our textbook Course 1, Course 2, Artificial Intelligence)
- Software Carpentry