TITLE: Let's Not Forget: CS 1 Is Hard For Most Students
AUTHOR: Eugene Wallingford
DATE: December 27, 2014 8:47 AM
... software is hard. It's harder than
As students were leaving my final CS 1 lab session of the semester,
I overheard two talking about their future plans. One student
mentioned that he was changing his major to actuarial science.
I thought, wow, that's a tough major. How is a student who is
struggling with basic programming going to succeed there?
When I checked on his grades, though, I found that he was doing fine
in my course, about average. I also remembered that he had enjoyed
best the programming exercises that computed terms of infinite
arithmetic series and other crazy mathematical values that his
classmates often found impenetrable. Maybe actuarial science, even
with some hard math, will be a good fit for him.
It really shouldn't surprise us that some students try computer
science and decide to major in something else, even something that
looks hard to most people. Teaching CS 1 again this semester after
a long break reminded me just how much we expect from the students
in our introductory course:
anything else I've ever had to do.
In a single course, we expect students to perform tasks in all three
of these modes, while mastering a heavy load of details. We expect
them to learn by deduction, induction, and
covering many abstract ideas and many concrete details. Many
disciplines have challenging first courses, but CS 1 requires an
unusual breadth of intellectual tools.
Yes, we can improve our students' experience with careful pedagogy.
Over the last few decades we've seen many strong efforts. And yes,
we can help students through the process with structural support,
emotional support, and empathy. In the end, though, we must keep this
in mind: CS 1 is going to be a challenge for most students. For many,
the rewards will be worth the struggle, but that doesn't mean it won't
take work, patience, and persistence along the way -- by both the
students and the teachers.
- Details. Lots and lots of details. Syntax. Grammar.
Vocabulary, both in a programming language and about programming
more generally. Tools for writing, editing, compiling, and
- Experimentation. Students have to design and execute
experiments in order to figure out how language constructs
work and to debug the programs they write. Much of what they
learn is by trial and error, and most students have not yet
developed skills for doing that in a controlled fashion.
- Design. Students have to decompose problems and combine
parts into wholes. They have to name things. They have to
connect the names they see with ideas from class, the text, and
their own experience.
- Abstraction. Part of the challenge in design comes from
abstraction, but abstract ideas are everywhere in learning about
CS and how to program. Variables, choices, loops and recursion,
functions and arguments and scope, ... all come not just as
concrete forms but also as theoretical notions. These notions
can sometimes be connected to the students' experience of the
physical world, but the computing ideas are often just different
enough to disorient the student. Other CS abstractions are so
different as to appear unique.