<?xml version="1.0" encoding="iso-8859-1"?>
<feed version="0.3"
xmlns="http://purl.org/atom/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
>
<title mode="escaped">Knowing and Doing</title>
<link rel="alternate" type="text/html" href="http://www.cs.uni.edu/~wallingf/blog/index.html"/>
<modified>2013-05-21T15:52:03-05:00</modified>
<author>
<name>Eugene Wallingford</name>
<url>http://www.cs.uni.edu/~wallingf/blog/index.html</url>
</author>

<entry>
<title mode="escaped">Exercises in Exercises in Style</title>
<author>
<name>Eugene Wallingford</name>
</author>
<link rel="alternate" type="text/html" href="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-21T15_05_10.htm"/>
<id>http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-21T15_05_10.htm</id>
<issued>2013-05-21T15:05:10-05:00</issued>
<modified>2013-05-21T15:05:10-05:00</modified>
<created>2013-05-21T15:05:10-05:00</created>
<dc:subject>Teaching and Learning, Patterns, Software Development</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
<p>I just registered for
<A HREF="https://thestrangeloop.com/">
   Strange Loop 2013</A>,
which doesn't happen until this fall.  This has become a popular
conference, deservedly so, and it didn't seem like a good idea
to wait to register and risk being shut out.
</p><p>
One of the talks I'm looking forward to is by
<A HREF="https://twitter.com/cristalopes">
   Crista Lopes</A>.
I mentioned Crista in
<A HREF="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2012-09.html#e2012-09-28T15_59_40.htm">
   a blog entry from last year's Strange Loop</A>,
for a talk she gave at OOPSLA 2003 that made an analogy between
programming language and natural language.  This year, she will
give a talk called
<A HREF="https://thestrangeloop.com/sessions/exercises-in-style">
   Exercises in Style</A>
that draws inspiration from a literary exercise:
</p><p>
<BLOCKQUOTE><EM>
Back in the 1940s, a French writer called Raymond Queneau wrote
an interesting book with the title Exercises in Style featuring
99 renditions of the exact same short story, each written in a
different style.  This talk will shamelessly do the same for a
simple program.  From monolithic to object-oriented to
continuations to relational to publish/subscribe to monadic to
aspect-oriented to map-reduce, and much more, you will get a
tour through the richness of human computational thought by
means of implementing one simple program in many different ways.
</EM></BLOCKQUOTE>
</p><p>
If you've been reading this blog for long, you can image how
much I like this idea.  I even checked
<A HREF="http://en.wikipedia.org/wiki/Exercises_in_Style">
   Queneau's book</A>
out of the library and announced on Twitter my plan to read it
before the conference.  From the response I received, I gather
a lot of conferences attendees plan to do the same.  You gotta
love the audience Strange Loop cultivates.
</p><p>
I actually have a little experience with this idea of writing
the same program in multiple styles, only on a much smaller
scale.  For most of the last twenty years, our students have
learned traditional procedural programming in their first-year
sequence and object-oriented programming in the third course.
I taught the third course twice a year for many years.  One
of things I often did early in the course was to look at the
same program in two forms, one written in a procedural style
and one written in OOP.  I hoped that the contrast between the
programs would help them see the contrast between how we think
about programs in the two styles.
</p><p>
I've been teaching functional programming regularly for the
last decade, after our students have seen procedural and OO
styles in previous courses, but I've rarely done the "exercises
in style" demo in this course.  For one thing, it is a course
on languages and interpreters, not a course on functional
programming <EM>per se</EM>, so the focus is on getting to
interpreters as soon as possible.  We do talk about differences
in the styles in terms of their concepts and the underlying
differences (and similarities!) in their implementation.  But
I think about doing so every time I prep the next offering of
the course.
</p><p>
Not doing "exercises in style" can be attractive, too.  Small
examples can mislead beginning students about what is important,
or distract them with concepts they'd won't understand for a
while.  The wrong examples can damage their motivation to learn.
In the procedural/object-oriented comparison, I have had
reasonable success in our OOP course with a program for simple
bank accounts and a small set of users.  But I don't know how
well this exercise would work for a larger and more diverse set
of styles, at least not at a scale I could use in our courses.
</p><p>
I thought of this when
<A HREF="https://twitter.com/kaleidic">
    @kaleidic</A>
tweeted, "I hope @cristalopes includes an array language among
her variations."  I do, too, but my next thought was, "Well,
now Crista needs to use an example problem for which an array
language is reasonably well-suited."  If the problem is not well
suited to array languages, the solution might look awkward, or
verbose, or convoluted.  A newcomer to array languages is left
to wonder, "Is this a problem with array languages, or with the
example?"  Human nature as it is, too many of us are prone to
protect our own knowledge and assume that something is wrong
with the new style.
</p><p>
An alternative approach is to get learners to suspend their
disbelief for a while, learn some nuts and bolts, and then
help them to solve bigger problems using the new style.  My
students usually struggle with this at first, but many of them
eventually reach a point where they "get" the style.  Solving
a larger problem gives them a chance to learn the advantages
and disadvantages of their new style, and retroactively learn
more about the advantages and disadvantages of the styles they
already know well.  These trade-offs are the foundation of a
really solid understanding of style.
</p><p>
I'm really intrigued by Queneau's idea.  It seems that he uses
a small example not to teach about each style in depth but
rather to give us a taste.  What does each style <EM>feel</EM>
like in isolation?  It is up to the aspiring writer to use this
taste as a starting point, to figure out where each style might
take you when used for a story of the writer's choosing.
</p><p>
That's a promising approach for programming styles, too, which
is one of the reasons I am so looking forward to Crista's talk.
As a teacher, I am
<A HREF="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2007-09.html#e2007-09-13T20_23_19.htm">
   a shameless thief of good ideas</A>,
so I am looking forward to seeing the example she uses, the way
she solves it in the different styles, and the way she presents
them to the crowd.
</p><p>
Another reason I'm looking forward to the talk is that I love
programs, and this should be just plain fun.</p>
]]>
</content>

</entry>
<entry>
<title mode="escaped">Transitions</title>
<author>
<name>Eugene Wallingford</name>
</author>
<link rel="alternate" type="text/html" href="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-18T12_52_15.htm"/>
<id>http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-18T12_52_15.htm</id>
<issued>2013-05-18T12:52:15-05:00</issued>
<modified>2013-05-18T12:52:15-05:00</modified>
<created>2013-05-18T12:52:15-05:00</created>
<dc:subject>Running</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
<p>I bought a new bike this week, a refurbished 1989 Schwinn Le Tour:
</p><p>
<CENTER>
<A HREF="http://www.cs.uni.edu/~wallingf/blog-images/cycling/schwinn-letour-2013.jpg">
   <IMG SRC="http://www.cs.uni.edu/~wallingf/blog-images/cycling/schwinn-letour-2013-thumb.jpg"
        ALT="my newly refurbished 1989 Schwinn Le Tour"
        WIDTH="500"
        ALIGN="center" />
</A>
</CENTER>
</p><p>
I've been riding Le Tours for thirty years, even before they hit
their stride as a great bike.  Last September, I had an unexpected
encounter with a fallen tree on the bike trail and bent the frame
on my latest model, circa 1985.  I was glad to find another in
such fine condition.  It has a lighter, sleeker body than my older
model, and the guy who refurbished it installed nicer accessories
than I'm used to.
</p><p>
After many months outdoors on foot and indoors on an exercise bike,
I was psyched to get out on the road.  For my first ride, I chose
<A HREF="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2009-03.html#e2009-03-22T14_30_13.htm">
   an old friend</A>,
a scenic 12-mile route north of town that I used to run regularly,
but which I hadn't been on for two and a half years.  The ride
brought a mix of sensations: newness, nostalgia, and a familiar
burn in my legs.  A good ride to christen my new old bike and my
new old legs.
</p><p>
2011 was
<A HREF="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2011-07.html#e2011-07-28T21_20_58.htm">
   the year of surgery</A>.
2012 was the year of rehabilitation and recovery.  I spent a lot
of time getting my right knee and quadriceps back into a shape
that supports a normal life.  My mind, too.
</p><p>
2013 is the year in which I become a cyclist -- that is, if I am
ever to become a cyclist in a way that resembles the way I used
to be a runner.  It's time.
</p><p>
I have a lot to learn, and re-learn.  Some things are relatively
big, such as how to train for long rides and how to pace myself
in the midst of training.  Others are as simple as how to dress
in different weather conditions.  This kind of learning is part
of the fun for me.
</p><p>
The marathoner lying dormant within me is already setting goals,
deep in the recesses of my mind... maybe a trip down
<A HREF="http://www.trailsfromrails.com/cedar_valley_trail.htm">
   the Cedar Valley Nature Trail</A>
to Cedar Rapids.  I have a lot of work to do before I'm ready
for such an ambitious ride.  That's part of the fun for me, too.</p>
]]>
</content>

</entry>
<entry>
<title mode="escaped">Pirates and Tenure</title>
<author>
<name>Eugene Wallingford</name>
</author>
<link rel="alternate" type="text/html" href="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-17T15_26_58.htm"/>
<id>http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-17T15_26_58.htm</id>
<issued>2013-05-17T15:26:58-05:00</issued>
<modified>2013-05-17T15:26:58-05:00</modified>
<created>2013-05-17T15:26:58-05:00</created>
<dc:subject>General, Managing and Leading</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
<p>I recently read
<A HREF="http://blogs.plos.org/neurotribes/2011/11/22/the-sketchbook-of-susan-kare-the-artist-who-gave-computing-a-human-face/">
   The Sketchbook of Susan Kare</A>,
"the Artist Who Gave Computing a Human Face", which referred to
the Apple legend of
<A HREF="http://www.folklore.org/StoryView.py?project=Macintosh&story=Pirate_Flag.txt">
   the Pirate Flag</A>:
</p><p>
<BLOCKQUOTE><EM>
[Kare's] skull-and-crossbones design would come in handy when Jobs
issued one of his infamous motivational koans to the Mac team:
"It's better to be a pirate than join the Navy."
</EM></BLOCKQUOTE>
</p><p>
For some reason, that line brought to mind a favorite saying of one
of my friends, Sid Kitchel:
</p><p>
<BLOCKQUOTE><EM>
Real men don't accept tenure.
</EM></BLOCKQUOTE>
</p><p>
If by some chance they do accept tenure, they should at least never
move into administration, even temporarily.  It's a bad perch from
which to be a pirate.</p>
]]>
</content>

</entry>
<entry>
<title mode="escaped">An Unusual Scheme-ism This Semester</title>
<author>
<name>Eugene Wallingford</name>
</author>
<link rel="alternate" type="text/html" href="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-14T14_35_33.htm"/>
<id>http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-14T14_35_33.htm</id>
<issued>2013-05-14T14:35:33-05:00</issued>
<modified>2013-05-14T14:35:33-05:00</modified>
<created>2013-05-14T14:35:33-05:00</created>
<dc:subject>Teaching and Learning</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
<p>While grading final projects and final exams in my Programming
Languages courses this week, I noticed my students using an
unusual Scheme construction.  Instead of writing:
</p><p>
<BLOCKQUOTE><TT>
(cons new-item
      result-of-recursive-call)
</TT></BLOCKQUOTE>
</p><p>
... a few troubled souls fell into the habit of writing:
</p><p>
<BLOCKQUOTE><TT>
(append (list new-item)
        result-of-recursive-call)
</TT></BLOCKQUOTE>
</p><p>
We have been using Scheme in this course for many years, and
this may be the first semester that I've ever seen this.  It
is certainly the first time I saw it enough to notice it and
wonder, "What's up with that?"
</p><p>
Of course, in previous semesters, a few students have always
used a similar construction when putting new items at the
<EM>back</EM> of the list:
</p><p>
<BLOCKQUOTE><TT>
(append result-of-recursive-call
       (list new-item))
</TT></BLOCKQUOTE>
</p><p>
This semester, though, a handful used <TT>(append ... (list
...</TT> all over the place.  When I asked one of them about
it after seeing it on an earlier homework assignment, he
didn't have much to say, so we talked about the more direct
solution a bit and moved on.
</p><p>
But after seeing it multiple times on the final exam, I have
to wonder what is going on.  Maybe they simply adopted this
form as a mental shorthand, a one-size-fits-all tool that
gave them one fewer thing to think about when writing code.
Maybe, though, it masks a systematic error in thinking that
I might address.
</p><p>
Out of curiosity, I ran a quick experiment to see what sort
of time advantage <TT>(cons ...</TT> has over <TT>(append ...
(list ...</TT>.  Surely, initializing the cdr field of a new
list's cons cell to null, then asking <TT>append</TT> to walk
there and set it to point to the other list wastes time.  But
how much?
</p><p>
In Racket, the penalty is actually quite small, in the
ballpark of 40ms for every million executions.  That's not
surprising, given that <TT>append</TT> must examine only one
cell before reaching the end of its first argument.  This
stands in contrast to the more general case of wrapping an
O(n) <TT>append</TT> operation inside another O(n) operation,
which my students encounter when learning how to implement
more efficient algorithms using an accumulator variable.
</p><p>
More important than any speed penalty, though, is the
misunderstanding that enables or encourages a student to
think about reassembling a structure of this sort with anything
other than a straightforward call to <TT>cons</TT>.  Seeing
an anti-pattern of this sort in my students' code makes me
want to uncover the pathology at play and root it out.</p>
]]>
</content>

</entry>
<entry>
<title mode="escaped">Using Language to Understand a Data Set</title>
<author>
<name>Eugene Wallingford</name>
</author>
<link rel="alternate" type="text/html" href="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-10T16_03_39.htm"/>
<id>http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-10T16_03_39.htm</id>
<issued>2013-05-10T16:03:39-05:00</issued>
<modified>2013-05-10T16:03:39-05:00</modified>
<created>2013-05-10T16:03:39-05:00</created>
<dc:subject>Computing, Teaching and Learning</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
<p>Today was our twice-annual undergraduate research presentation
day.  Every B.S. student must do an undergraduate research
project and present the results publicly.  For the last few
years, we have pooled the presentations on the morning of the
Friday in finals week, after all the exams are given and
everyone has a chunk of time free to present.  It also means
that more students and professors can attend, which makes for
more a more engaging audience and a nice end to everyone's
semester.
</p><p>
I worked with one undergraduate research student this spring.
As I mentioned while considering
<A HREF="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-04.html#e2013-04-05T15_21_37.htm">
   the role of parsing in a compilers course</A>,
this student was looking for patterns in several years of
professional basketball play-by-play data.  His ultimate goal
was to explore ways of measuring the impact of individual
defensive performance in the NBA -- fairly typical MoneyBall
stuff applied to an skill that is not well measured or
understood.
</p><p>
This project fell into my hands serendipitously.  The student
had approached a couple of other professors, who upon hearing
the word "basketball" immediately pointed him to me.  Of
course, the project is really a data analytics project that
just happens to involve a dataset from basketball, but...
Fortunately, I am interested in both the approach and the
domain!
</p><p>
As research sometimes does, this problem led the student to a
new problem first.  In order to analyze data in the way he
wanted, he needed data of a particular sort.  There is plenty
of play-by-play data available publicly on the web, but it's
mostly prepared for presentation in HTML.  So he first had to
collect the data by scraping the web, and then organize it
into a data format amenable to analysis.
</p><p>
This student had taken my compiler course the last time around,
and his ability to parse several files of similar but
just-different-enough data proved to be invaluable.  As
presented on sites like nba.com, the data is no where near
ready to be studied.
</p><p>
As the semester wore on, he and I came to realize that his
project this semester wouldn't be the data analysis he
originally intended to do.  It was a substantial project
simply to make sense of the data he had found.
</p><p>
As he presented his work today, I realized something further.
He was <B>using language to understand a data set</B>.
</p><p>
He started by defining a grammar to model the data he found,
so that he could parse it into a database.  This involved
recognizing categories of expression that were on the surface
of the data, such as made and missed field goals, timeouts,
and turnovers.  When he ran this first version of his parser,
he found unhandled entries and extended his grammar.
</p><p>
Then he looked at the semantics of the data and noticed
discrepancies deeper in the data.  The number of possessions
his program observed in a game differed from the expected
values, sometimes wildly and with no apparent pattern.
</p><p>
As we looked deeper, we realized that the surface syntax of the
data often obscured some events that would extend or terminate
a possession. A simple example is a missed FT, which sometimes
ends a possession and sometimes not.  It depends in part on
the next event in the timeline.
</p><p>
To handle these case, the student created new syntactic
categories that enabled his parser to resolve such issues by
recognized composite events in the data.  As he did this, his
grammar grew, and his parser became better at building a more
accurate semantic model of the game.
</p><p>
This turned out to be a semester-long project in its own right.
He's still not done and intends to continue with this research
after graduation.  We were both a bit surprised at how much
effort it took to corral the data, but in retrospect we should
not have been too surprised.  Data are collected and presented
with many different purposes in mind.  Having an accurate deep
model of the underlying the phenomenon in question isn't always
one of them.
</p><p>
I hope the student was pleased with his work and progress this
semester.  I was.  In addition to its practical value toward
solving a problem of mutual interest, it reminded me yet again
of the value of language in understanding the world around us,
and the remarkable value that the computational ideas we study
in computer science have to offer.  For some reason, it also
reminded me, pleasantly, of
<A HREF="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2012-09.html#e2012-09-29T16_04_35.htm">
   the Racket Way</A>.
As I noted in that blog entry, this is really the essence of
computer science.
</p><p>
Of course, if some NBA team were to give my student the data
he needs in suitable form, he could dive into the open question
of how better to measure individual defensive performance in
basketball.  He has some good ideas, and the CS and math skills
needed to try them out.
</p><p>
Some NBA team should snatch this guy up.</p>
]]>
</content>

</entry>
<entry>
<title mode="escaped">Not So Random Sentences</title>
<author>
<name>Eugene Wallingford</name>
</author>
<link rel="alternate" type="text/html" href="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-08T12_11_51.htm"/>
<id>http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-08T12_11_51.htm</id>
<issued>2013-05-08T12:11:51-05:00</issued>
<modified>2013-05-08T12:11:51-05:00</modified>
<created>2013-05-08T12:11:51-05:00</created>
<dc:subject>Computing, Patterns, Personal</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
<p>I start with a seemingly random set of sentences to blog about
and, in the process of writing about them, find that perhaps
they aren't so random after all.
</p><p>
<EM>An Era of Sharing Our Stuff</EM>
</p><p>
<BLOCKQUOTE><B>
 Property isn't theft; property is an inefficient distribution
 of resources.
</B></BLOCKQUOTE>
</p><p>
This assertion comes from
<A HREF="http://techcrunch.com/2013/04/27/economies-of-scale-as-a-service/">
   an interesting article</A>
on "economies of scale as a service", in reaction to
<A HREF="http://twitter.com/#!/paulg/status/323875236225363968">
   a Paul Graham tweet</A>:
</p><p>
<BLOCKQUOTE><B>
 Will ownership turn out to be largely a hack people resorted to
 before they had the infrastructure to manage sharing properly?
</B></BLOCKQUOTE>
</p><p>
Open-source software, the Creative Commons, crowdsourcing.  The
times they are a-changin'.
</p><p>
<EM>An Era of Observing Ourselves</EM>
</p><p>
<BLOCKQUOTE><B>
 If the last century was marked by the ability to observe the
 interactions of physical matter -- think of technologies like
 x-ray and radar -- this century is going to be defined by the
 ability to observe people through the data they share.
</B></BLOCKQUOTE>
</p><p>
... from
<A HREF="http://www.technologyreview.com/news/514346/the-data-made-me-do-it/">
   The Data Made Me Do It</A>.
</p><p>
I'm not too keen on being "observed" via data by every company
in the world, even as understand the value it can brings the
company and even me.  But I like very much the idea that I can
observe myself more easily and more productively.  For years,
I collected and studied data about my running and used what I
learned to train and race better.  Programmers are able to do
this better now than ever before.  You can learn a lot just by
watching.
</p><p>
<EM>An Era of Thinking Like Scientist</EM>
</p><p>
... which leads to this line attributed to John C. Reynolds, an
influential computer scientist who passed away recently:
</p><p>
<BLOCKQUOTE><B>
 Well, we know less than we did before, but more of what we know
 is actually true.
</B></BLOCKQUOTE>
</p><p>
It's surprising how easy it is to know stuff when we don't have
any evidence at all.  Observing the world methodically, building
models, and comparing them to what we observe in the future
helps to know less of the wrong stuff and more of the right
stuff.
</p><p>
Not everyone need be a scientist, but we'd all be better off if
more of us thought like a scientist more often.</p>
]]>
</content>

</entry>
<entry>
<title mode="escaped">A Participator in the Panorama of Nature</title>
<author>
<name>Eugene Wallingford</name>
</author>
<link rel="alternate" type="text/html" href="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-03T15_37_27.htm"/>
<id>http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-05.html#e2013-05-03T15_37_27.htm</id>
<issued>2013-05-03T15:37:27-05:00</issued>
<modified>2013-05-03T15:37:27-05:00</modified>
<created>2013-05-03T15:37:27-05:00</created>
<dc:subject>Running, Personal</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
<p>John Burroughs, in "The Exhilarations of the Road" (1895):
</p><p>
<BLOCKQUOTE><EM>
   [The walker] is not isolated, but one with things, with the
   farms and industries on either hand.  The vital, universal
   currents play through him.  He knows the ground is alive; he
   feels the pulses of the wind, and reads the mute language of
   things.  His sympathies are all aroused; his senses are
   continually reporting messages to his mind.  Wind, frost,
   ruin, heat, cold, are something to him.  He is not merely a
   spectator of the panorama of nature, but a participator in
   it.  He experiences the country he passes through--tastes
   it, feels it, absorbs it; the traveller in his fine carriage
   sees it merely. 
</EM></BLOCKQUOTE>
</p><p>
Knee surgery ended my avocation as a runner.  I used to walk
a lot, too, but these days I walk even more than I used to.
For more than a year, I have walked to and from work almost
every day, even through the Iowa winter.  As both runner and
walker, I recognize the exhilaration Burroughs describes.  I
find that I appreciate the elements rather than curse them.
Wind and frost, rain and snow, heat and cold all matter.  Why
complain about a driving rain?  The world is alive around me.
</p><p>
(I found Burroughs's passage in
<A HREF="http://www.artofmanliness.com/2013/04/22/solvitur-ambulando-it-is-solved-by-walking/">
   Solvitur Ambulando</A>,
a discourse on the virtues of walking in the spirit of Thoreau.
I love the title as well as the essay.)</p>
]]>
</content>

</entry>
<entry>
<title mode="escaped">Exceleration</title>
<author>
<name>Eugene Wallingford</name>
</author>
<link rel="alternate" type="text/html" href="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-04.html#e2013-04-30T16_53_27.htm"/>
<id>http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-04.html#e2013-04-30T16_53_27.htm</id>
<issued>2013-04-30T16:53:27-05:00</issued>
<modified>2013-04-30T16:53:27-05:00</modified>
<created>2013-04-30T16:53:27-05:00</created>
<dc:subject>Teaching and Learning, Software Development</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
<p>A student stopped in for a chat late last week to discuss the
code he was writing for a Programming Languages assignment.
This was the sort of visit a professor enjoys most.  The
student had clearly put in plenty of time on his interpreter
and had studied the code we had built in class.  His code
already worked.  He wanted to talk about ways to make his
code better.
</p><p>
Some students never reach this point before graduation.  In
<EM>Coders at Work</EM>,
<A HREF="http://www.codersatwork.com/bernie-cosell.html">
   Bernie Cosell</A>
tells a story about leading teams of new hires at BBN:
</p><p>
<BLOCKQUOTE><EM>
I would get people -- bright, really good people, right out of
college, tops of their classes -- on one of my projects.  And
they would know all about programming and I would give them
some piece of the project to work on.  And we would start
crossing swords at our project-review meetings.  They would
say, "Why are you complaining about the fact that I have my
global variables here, that I'm not doing this, that you don't
like the way the subroutines are laid out?  The program works."
</p><p>
They'd be stunned when I tell them, "I don't care that the
program works.  The fact that you're working here at all means
that I expect you to be able to write programs that work.
Writing programs that work is a skilled craft and you're good
at it.  Now, you have to learn how to program.
</EM></BLOCKQUOTE>
</p><p>
I always feel that we have done our students well if we can get
them to the point of caring about their craft before they leave
us.  Some students come to us already having this mindset,
which makes for a very different undergraduate experience.
Professors enjoy working these students, too.
</p><p>
But what stood out to me most from this particular conversation
was something the student said, something to this effect:
</p><p>
<BLOCKQUOTE><EM>
When we built the lexical addresser in class a few weeks ago,
I didn't understand the idea and I couldn't write it.  So I
studied it over and over until I could write it myself and
understand exactly why it worked.  We haven't looked at
lexical addressing since then, but the work I did has paid off
every time we've written code to process programs in our little
languages, including this assignment.  And I write code more
quickly on the exams now, too.
</EM></BLOCKQUOTE>
</p><p>
When he finished speaking, I could hardly contain myself.  I
wish I could bottle this attitude and give to every student who
ever thinks that easy material is an opportunity to take it easy
in a course for a while.  Or who thinks that the best response
to difficult material is to wait for something easier to come
along next chapter.
</p><p>
Both situations are opportunities to <B>invest</B> energy in
the course.  The returns on investment are deeper understanding
of the material, sharper programming skills, and the ability to
<A HREF="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2010-12.html#e2010-12-18T11_34_54.htm">
   get stuff done</A>.
</p><p>
This student is reaping now the benefits of an investment he made
five weeks ago.  It's a gift that will keep on giving long after
this course is over.
</p><p>
I encourage students to approach their courses and jobs in this
way, but the message doesn't always stick.  As Clay Stone from
<A HREF="http://www.imdb.com/title/tt0101587/">
   City Slickers</A>
might say, I'm happy as a puppy with two peters whenever it does.
</p><p>
While walking this morning, I coined a word for this effect:
<B>exceleration</B>.  It's a portmanteau combining "excellence"
and "acceleration", which fits this phenomenon well.  As with
compound interest and reinvested dividends, this sort of
investment builds on its self over time.  It accelerates learners
on their path to mastering their craft.
</p><p>
Whatever you call it, that conversation made my week.</p>
]]>
</content>

</entry>
<entry>
<title mode="escaped">Toward a Course on Reading Code</title>
<author>
<name>Eugene Wallingford</name>
</author>
<link rel="alternate" type="text/html" href="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-04.html#e2013-04-25T16_03_00.htm"/>
<id>http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-04.html#e2013-04-25T16_03_00.htm</id>
<issued>2013-04-25T16:03:00-05:00</issued>
<modified>2013-04-25T16:03:00-05:00</modified>
<created>2013-04-25T16:03:00-05:00</created>
<dc:subject>Teaching and Learning, Software Development</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
<p>Yesterday, I tweeted absent-mindedly:
</p><p>
<BLOCKQUOTE><EM>
It would be cool to teach a course called "Reading Code".
</EM></BLOCKQUOTE>
</p><p>
Reading code has been on mind for a few months now, as I've
watched my students read relatively small pieces of code in
my Programming Languages course and as I've read a couple
of small libraries while reading the exercise bike.  Then I
ran across
<A HREF="http://blog.regehr.org/archives/940">
   John Regehr's short brainstorm</A>
on the topic, and something clicked.  So I tweeted.
</p><p>
Reading code, or learning to do it, must be on the minds of
a lot people, because my tweet elicited quite a few
questions and suggestions.  It is an under-appreciated
skill.  Computer science programs rarely teach students how
to do it, and then usually only implicitly, by hearing a
prof or other students talk about code they've read.
</p><p>
Several readers wanted to know what the course outline would
be.  I don't know.  That's one of the things about Twitter
or even a blog: it is easy to think out loud absent-mindedly
without having much content in mind yet.  It's also easier
to express an interest in teaching a course than to design a
good one.
</p><p>
Right now, I have only a few ideas about how I'd start.
Several readers suggested
<A HREF="http://www.spinellis.gr/codereading/">
   Code Reading</A>
by Spinellis, which is the only textbook I know on then topic.
It may be getting a little old these days, but many of the
core techniques are still sound.
</p><p>
I was especially pleased that someone recommended Richard
Gabriel's idea for
<A HREF="http://www.dreamsongs.com/MFASoftware.html">
   an MFA in Software</A>,
in which reading plays a big role.  I've used some of Dick's
ideas in my courses before.  Ironically, the last time I
mentioned the MFA in Software idea in my blog was in the
context of
<A HREF="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2011-08.html#e2011-08-26T14_29_59.htm">
   a "writing code" course</A>,
at the beginning of a previous iteration of Programming
Languages!
</p><p>
That's particularly funny to me because someone replied to
my tweet about teaching a course called "Reading Code" with: 
</p><p>
<BLOCKQUOTE><EM>
... followed by a course "Writing Readable Code".
</EM></BLOCKQUOTE>
</p><p>
Anyone who has tried to grade thirty evolving language
interpreters each week appreciates this under-appreciated
skill.
</p><p>
<A HREF="https://twitter.com/cdemwell">
   Chris Demwell</A>
responded to my initial tweet with direct encouragement:
Write the course, or at least an outline, and post it.  I
begged indulgence for lack of time as the school year ends
and said that maybe I can take a stab this summer.  Chris's
next tweet attempted to pull me into the 2010s:
</p><p>
<BLOCKQUOTE><EM>
1. Write an outline. 2. Post on github. 3. Accept pull requests.
Congrats, you're an editor!
</EM></BLOCKQUOTE>
</p><p>
The world has indeed changed.  This I will do.  Watch for more
soon.  In the meantime, feel free to
<A HREF="mailto:wallingf@cs.uni.edu">
   e-mail me your suggestions</A>.
(That's an Old School pull request.)</p>
]]>
</content>

</entry>
<entry>
<title mode="escaped">&quot;Something Bigger Than Me&quot;</title>
<author>
<name>Eugene Wallingford</name>
</author>
<link rel="alternate" type="text/html" href="http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-04.html#e2013-04-23T16_16_08.htm"/>
<id>http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2013-04.html#e2013-04-23T16_16_08.htm</id>
<issued>2013-04-23T16:16:08-05:00</issued>
<modified>2013-04-23T16:16:08-05:00</modified>
<created>2013-04-23T16:16:08-05:00</created>
<dc:subject>General</dc:subject>
<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
<![CDATA[
<p>In
<A HREF="http://patric.king.usesthis.com/">
   this interview with The Setup</A>,
Patric King talks about his current work:
</p><p>
<BLOCKQUOTE><EM>
Right now, my focus is bringing well-designed marketing to
industries I believe in, to help them develop more financing.
...  It is not glamorous, but it is the right thing to do.
Designing pretty things is nice, but it's time for me to do
something bigger than me.
</EM></BLOCKQUOTE>
</p><p>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"
       STYLE="float: right; margin-left: 3em; margin-right: 1em;">
<TBODY><TR><TD>
<IMG SRC="http://www.cs.uni.edu/~wallingf/blog-images/misc/curly-one-thing.png"
     ALT="Curly says, 'one thing... just one thing'"
     WIDTH="250"
     ALIGN="right" />
</TD></TR></TBODY>
</TABLE>
</p><p>
That's a pretty good position to be in: bringing value to a
company or industry you believe in.  Sometimes, we find such
positions by virtue of the career path we choose.  Those of
us who teach as a part of our jobs are lucky in this regard.
</p><p>
Other times, we have to make a conscious decision to seek
positions of this sort, or create the company we want to be
in.  That's what King has done.  His skill set gives him
more latitude than many people have.  Those of us who can
create software have more freedom than most other people,
too.  What an opportunity.
</p><p>
King's ellipsis is filled with the work that matters to him.
As much as possible, when the time is right, we all should
find the work that replaces our own ellipses with something
that really matters to us, and to the world.</p>
]]>
</content>

</entry>

</feed>
