TITLE: Computing Everywhere: Indirection
AUTHOR: Eugene Wallingford
DATE: January 26, 2013 5:52 PM
Alice: The hardest word you'll ever be asked to spell is
A few of us have had fun with the quotations in English and
Scheme over the last few days, but this idea is bigger than
symbols as data values in programs or even words and strings
in natural language. They are examples of a key element of
computational thinking, indirection, which occurs in real life
all the time.
A few years ago, my city built a new water park. To account
for the influx of young children in the area, the city dropped
the speed limit in the vicinity of the pool from 35 MPH to 25
MPH. The speed limit in that area has been 35 MPH for a long
time, and many drivers had a hard time adjusting to the change.
So the city put up a new traffic sign a hundred yards up the
road, to warn drivers of the coming change. It looks like this
The white image in the middle of this sign is a quoted version
of what drivers see down the road, the usual:
Now, many people slow down to the new speed limit well in
advance, often before reaching even the warning sign. Maybe
they are being safe. Then again, maybe they are confusing
a sign about a speed limit sign with the speed limit
If so, they have missed a level of indirection.
I won't claim that computer scientists are great drivers, but
I will say that we get used to dealing with indirection as a
matter of course. A variable holds a value. A pointer holds
the address of a location, which holds a value. A URL refers
to a web page. The list
Indirection is a fundamental element in the fabric of computation.
As computation becomes an integral part of nearly everyone's
daily life, there is a lot to be gained by more people
understanding the idea of indirection and recognizing
opportunities to put it to work to mutual benefit.
Over the last few years,
has been making a valiant attempt to bring this issue to the
attention of computer scientists and non-computer scientists
alike. He often starts with the idea of a hyperlink in a web
page, or the URL to which it is tied, as a form of computing
indirection that everyone already groks. But his goal is to
capitalize on this understanding to sneak the communication
strategy of pass by reference into people's mental models.
most people use hyperlinks every day but don't use them as well
as they might, because the distinction between "pass by value"
and "pass by reference" is not a part of their usual mental
Bob: Yikes. Which word?
The real problem, I think, is that if you're a newspaper editor, or
a city official, or a citizen, pass-by-reference just isn't part of
your mental toolkit. We teach the principle of indirection to
programmers. But until recently there was no obvious need to teach
it to everybody else, so we don't.
He has made the community calendar his working example of pass by
reference, and his crusade:
In the case of calendar events, you're passing by value when you
send copies of your data to event sites in email, or when you log
into an events site and recopy data that you've already written
down for yourself and published on your own site.
You're passing by reference when you publish the URL of your
calendar feed and invite people and services to subscribe to your
feed at that URL.
"Pass by reference rather than by value" is one of Udell's
seven ways to think like the web,
his take on how to describe computational thinking in a world
of distributed, network media. That essay is a good start on an
essential module in any course that wants to prepare people to
live in a digital world. Without these skills, how can we hope
to make the best use of technology when it involves two levels
of indirection, as
shared citations and marginalia
Quotation in Scheme and pass-by-reference are different issue,
but they are related in a fundamental way to the concept of
indirection. We need to arm more people with this concept than
just CS students learning how programming languages work.