TITLE: Golden Rules, and a Favorite Textbook
AUTHOR: Eugene Wallingford
DATE: January 21, 2006 2:50 PM
DESC: There are some golden rules for teaching, for teaching computer science. But sometimes we do not follow them. When writing textbooks is one such time.
Reading through his slides reminded me a bit of his
talk. He titled his address "Ten Golden Rules for
Teaching Computer Science", and they all deserve
Items 1-3 and 9-10 aim to keep us professors focused
on ideas, not on the accidents and implementations of
the day. Those accidents and implementations are the
examples we can use to illustrate ideas at work, but
they will pass. Good advice.
Items 4-5 and 7 remind us that we and our students need
to understand systems inside and out, and that complexity
is an essential feature of the problems we solve.
Interfaces, implementations, and interactions are the
Items 6 and 8 reflect a particular view of computing that
Tanenbaum and many others espouse: computer science is
about building things. I agree that CS is about building
things, but I don't want us to discount the fact that,
as we build things and study the results, we are in fact
laying a scientific foundation for an engineering
discipline. We are doing both. (If you have not yet read
Herb Simon's The Sciences of the Artificial,
hie thee to the library!) That said, I concur with
Tanenbaum's reminder to make sure that we apply theory
in a way that helps us builds systems better.
I especially liked one slide, which related a story from
his own research. One of his students implemented the
mkfs program for MINIX using a complex block
caching mechanism. The mechanism was so complex that they
spent six months making the implementation work correctly.
But Tanenbaum estimates that this program "normally runs
for about 30 sec[onds] a year". How's that for unnecessary
The other part of the talk I liked most was his pairwise
comparison of a few old textbooks, to show that some authors
had thought had captured and taught timeless principles,
while others had mostly taught the implementations of the
day. He held up as positive examples Per Brinch Hansen's
operating systems text and John Hayes's architecture text.
I immediately thought of my favorite data structures book
ever, Thomas Standish's
Data Structure Techniques.
I am perhaps biased, as this was the textbook from which
I learned data structures as a sophomore in college. In
the years that have followed, many, many people have written
data structures books, including Standish himself. The trend
has been to make these books language-specific ("... in C",
"... using Java") or to have them teach other content at
the same time, such as object-oriented programming or
software engineering principles. Some of these books are
fine, but none seem to get to the heart of data structures
as well as Standish did in 1980. And this book made me
feel like I was studying a serious discipline. Its dark
blue cover with spare lettering; its tight, concise text;
its small, dense font; its mathematical notation; its
unadorned figures... all communicated that I was studying
something real, a topic that mattered. I loved
writing programs to make its trees bloom and its hash tables
A valuable result of the textbook expressing all algorithms
using pseudocode is that we had to learn how to write code
for ourselves. We thought about the algorithms as
algorithms, and then we figured out how to make PL/I
programs implement them. (Yes,
Am I old yet?) We finished the course with both a solid
understanding of data structures and a fair amount of
experience turning ideas into code.
Reading through someone's presentation slides can be
worth the time even if they can't recreate the talk
Postscript: Who, to my surprise, has a CS2-related
paper in the most recent issue of inroads: The
SIGCSE Bulletin? Thomas Standish. It discusses
a fast sorting algorithm that works in O(n) for certain
kinds of data sets. I haven't studied the paper yet,
but I do notice that the algorithm is given in...
Java. Oh, well.
- Think long-term.
- Emphasize principles, not facts.
- Expect paradigm shifts.
- Explain how things work inside.
- Show students how to master complexity.
- Computer science is not science.
- Think in terms of systems.
- Keep theory under control.
- Ignore hype.
- Don't forget the past.