TITLE: Workshop 1: A Course in Computational Thinking
AUTHOR: Eugene Wallingford
DATE: October 30, 2008 1:31 PM
[A transcript of the
SECANT 2008 workshop:
Table of Contents]
To open the workshop, the SECANT faculty at Purdue described
an experimental course they taught last spring, Introduction
to Computational Thinking. It was designed by a
multi-disciplinary team from physics, chemistry, biology,
and computer science for students from across the sciences.
The first thing that jumped out to me from this talk was
that the faculty first designed the projects that they
wanted students to do, and then figured out what students
would need to know in order to do the projects. This is
not a new idea (few ideas are), but while many people talk
about doing this, I don't see as many actually doing it.
It's always interesting to see how the idea works in
practice. Owen Astrachan
would be proud.
The second was the focus on visualization of results
as essential to science and as a powerful attractor for
students. It is not yet lunch time on Day 1, but I have
heard enough already to say that visualization will be a
key theme of the workshop. That's not too surprising,
because visualization was also a
last year's workshop.
Again, though, I am glad to be reminded of just how
important this issue is outside the walls of the Computer
Science building. It should affect how we prepare
students for careers applying CS in the world.
The four projects in the Purdue course's first offering
This looks like a broad set of problems, the sort of
interdisciplinary science that the core natural sciences
share and which we computer scientists often miss out on.
For CS students to take this course, they will need to
know a little about the several sciences. That would be
good for them, too.
Teaching CS principles to non-CS students required the
CS faculty to take an approach unlike what they are used
to. They took advantage of Python's strengths as a
high-level, dynamic scripting language to use powerful
primitives, plentiful libraries, and existing tools for
visualizing results. (They also had to deal with its
weaknesses, not the least of which for them was the
delayed feedback about program correctness that students
encounter in a dynamically-typed language.) They delayed
teaching the sort of software engineering principles that
we CS guys love to teach early. Instead, they tried to
introduce abstractions only on a need-to-know basis.
Each project raised particular issues that allowed the
students to engage with principles of computing. Audio
manipulation exposed the idea of binary representation,
and percolation introduced recursion, which exposed
the notion of the call stack. Other times, the mechanics
of writing and running programs exposed underlying
computing issues. For example, when a program ran
slower than students expected on the basis of previous
programs, they got to learn about the difference in
performance between primitive operations and user-defined
The panelists reported lessons from their first experience
that will inform their offering next spring:
- manipulating digital audio -- Data
representation is a jump for many students.
in grids -- Recursion is very hard, even for
very bright students. Immediate feedback, including
visualization, is helpful.
- Monte Carlo simulation of a physical system
- protein-protein interaction -- Graph
abstractions are also challenging for many students.
One of the open questions they are considering is, do
they need or want to offer different sections of this
course for different majors? This is a question many
of us are facing. Having a more homogeneous student
base would allow the use of different kinds of problem
and more disciplinary depth. But narrowing the problem
set would lose the insight available across disciplines.
At a school like mine, we also risk spreading the student
base so thin that we are unable to offer the courses at
Somewhere in this talk, speaker Susanne Hambrusch, the
workshop organizer and leader, said something that made
me think about what in my mind is the key to bringing
computation to the other disciplines most naturally:
We need to leave students thinking, "This helps me
answer questions in my discipline -- better, or faster,
or ...". This echoed something that Ruth Chabay said
at the end of
last year's workshop.
Students who see the value of computation and can use
computation effectively will use computation to solve
their own problems. That should be one of the primary
goals of any course in computing we teach for students
outside of CS.
- The problem-driven format was a big win.
- Having students write meaningful programs early was
a big win.
- Having students see the results of their programs
early via visualization was a big win.
- Python worked well in these regards.
- The science students' interest in computing is
bimodal. Computing either has a strong appeal to
them almost immediately, or the student exhibits
strong resistance to computing as a tool.
- On the political front, interaction with science
faculty is essential to succeeding. They have to
buy in to this sort of course, as do administrators
who direct resources.