
The Importance of Whimsy in Learning to Program - drumsrgr8forn8
http://www.natescottwest.com/blog/2013/09/21/the-importance-of-whimsy-in-learning-to-program/
======
pamelafox
This is something we've been thinking a lot about while working on the Khan
Academy programming curriculum. We want the lessons and challenges to be fun,
and to actually product something that the user can identify with (very often,
an animal or food :-), but we also don't want to sacrifice teaching the
concept in a clear way. For example, today we debated how to do our intro to
loops tutorial, and we found that the clearest example wasn't nearly as fun as
other possible ones - but it _was_ the most clear, and for something like
loops, we want to be really really clear when the student is first wrapping
their head around it. We've written up some of our teaching thoughts here, but
I'm sure we'll keep evolving them as we learn from our learners: [http://cs-
blog.khanacademy.org/2013/08/our-design-guidelines...](http://cs-
blog.khanacademy.org/2013/08/our-design-guidelines-for-teaching.html)

Thanks for sharing your experience!

~~~
drumsrgr8forn8
Thanks for commenting. I would definitely say clarity comes before whimsy.
That was part of my frustration back in college was the complete lack of
clarity. Recursion was taught in about five minutes like this: "A recursive
function is a function that calls itself until it reaches a terminating
condition..." and then it was never explained again. No one got the recursion
questions right on the end of unit quiz except the kids who had been
programming since they were young. It wasn't until about 5 years later that I
finally wrapped my head around recursion myself.

I really appreciate your comment. Education is really important to me and Kahn
Academy has been a huge inspiration to me.

~~~
jclos
I understand and agree with your point, but not so much with your example.
Recursion strikes me as a concept that is simple to explain (and the
definition you gave is actually quite good) and hard to master, as in it
really sets in when you practice it enough. I think the fault in how you were
taught is not in the lack of clarity but that you should have been given a
shitload of exercises on the topic.

~~~
drumsrgr8forn8
Yeah fair enough. I wasn't really critiquing the explanation so much as that
was the end of it. They also made us hand write assignments and quizzes
thinking it would somehow keep us from cheating. It's been several years now
so I wouldn't be able to accurately remember but I _feel_ like most of what we
did with recursion from that point on was on paper and we were pretty much
left to our own devices to figure out recursion...

------
Grue3
Personally I can't stand "whimsical" tutorials to programming. Most of the
time the author's attempts at humor just make me cringe. why's Ruby book is
probably the worst offender. Couldn't make it past the first chapter.

~~~
gbog
This. And whimsical error pages, documentation, etc, are just showing the lack
of writing skills behind. Google is full of those, and most of the time the
allusion cannot be understood by those who are not sharing the same culture.
That's utterly annoying. Did SICP writers feel the need to embellish their
prose with eye winks?

~~~
speednoise
_Did SICP writers feel the need to embellish their prose with eye winks?_

Yes?
[http://en.wikipedia.org/wiki/Structure_and_Interpretation_of...](http://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs#Characters)

~~~
gbog
Well, maybe my understanding of "whimsical" is wrong but it do not feel the
same way to me. "Alyssa P. Hacker" is a poor pun that do not try to look
clever.

------
rdtsc
Two such whimsical books are Learn You A Haskell For Great Good and Learn You
Some Erlang For Great Good.

[http://learnyouahaskell.com/](http://learnyouahaskell.com/)

[http://learnyousomeerlang.com/](http://learnyousomeerlang.com/)

For example, one of my favorite chapters in there is about distributed
programming. It is told with an example of 2 camps of survivors of zombie
apocalypse trying communicate with each other.

[http://learnyousomeerlang.com/distribunomicon#alone-in-
the-d...](http://learnyousomeerlang.com/distribunomicon#alone-in-the-dark)

You can tell Fred's (author) passion and enthusiasm from his style of writing.

~~~
drumsrgr8forn8
I've worked through some of it! That's exactly the kind of stuff I'm talking
about.

My Erlang learning has been a little spotty so far but I'm going to Erlang
Camp in Nashville next month to fill in some holes. I've been playing a lot
with Elixir and that's been helping too.

------
eddieroger
I'm on board with this, but my background in learning to code was a little
different. My Java instructor (first formal programming class, but not first
language) took the approach that teaching to code should imitate real things.
So, our first few programs were around modeling real things in the world. We
wrote a program to figure out why 7 was the most common number in gambling by
rolling two virtual dice several thousand times and plotting the results. We
explored the Birthday Paradox by randomly generating numbers between 1 and 365
until we hit a duplicate, and repeated that several times to prove the range.
It was a great approach, and one that stuck with me.

~~~
drumsrgr8forn8
That's awesome. If I had had a similar experience I probably would have been
all in much earlier in my life.

------
yngccc
use C++ to teach programming should be considered a crime. You simply don't
give people who just got their driver license a truck to drive, not only will
it suck out all the fun but also likely get the person killed in the process.

~~~
10098
Oh, pish posh. Lots of people started with C++ and they're just fine. Sure, we
had our share of segfaults and memory leaks, but it's better to learn what it
is and how to prevent it early on rather than hide from it forever.

~~~
Apocryphon
True, but starting from C makes more sense. C++ would be fine as a second
language.

~~~
10098
Actually, I agree with that.

------
kixxauth
Yeah, I think the short lesson here is that you really have to build something
to learn to code, otherwise it's just not engaging. Not until you've built
that first thing. Then it's like crack.

~~~
guerrilla
I've always been told this with mathematics. You won't really "get" it until
you've done enough exercises, especially the more abstract you get (I'm
looking at you, Category Theory proofs.) I don't know why it took me this long
to apply the same principle to learning new programming languages. I always
thought, well if I just start on this monolithic hobby project, I'll learn the
language after having read xyz. Well, turns out, it's a lot more entertaining
and faster for me to just blow through a bunch of medium-sized throw-away
examples for a while first. That monolithic hobby project comes along much
easier with less of a "I give up rate" afterwards, for me anyway..

~~~
drumsrgr8forn8
Absolutely. I kinda wish I had written more in this post about context... I
had a similar frustration with math even though we did many, many more
exercises... Some kind of practical real world context really helps.

If you just naturally love math and think that way you can often see the
context yourself anyway (or at least I did) but your average word problem at
school isn't much of a real world context. When the hell will I sit around
with my friends and say "Hey Jennifer, lets get that volume of beer in that
cup. That sounds like a good time".

------
djrobstep
"...just think what naming an XML parser “Nikogiri” instead of “XML Parser”
could do? Imagine if the C++ exercise above had just been FizzBang. That would
have been tons more engaging." Tons more cringe-worthy, more like. We're not
writing children's books here. The times I've enjoyed programming have been
when I've worked with languages/libraries/tools that are
intuitive/reliable/powerful and allow me to get shit done with minimum
distraction by the irrelevant.

For instance, would python's "requests" library be more engaging if it was
called ChittyChittyBangBang or YourMommaSoFat something else equally
infantile? For me it would be _less_ engaging. Names like this can also make
people take a piece of software less seriously than they should, and harder to
find because they are less descriptive.

~~~
drumsrgr8forn8
I think that's a fair point. Guerrilla pretty much said what I would say...
most of my production code just uses plain Jane clear names like "user" or a
variable named "name_array".

The bigger message is to communicate that programming is fun to people who
want to learn. I think you're average working programmer out there probably
is... but my "educational" experience was not that way. It wasn't really about
using whimsical names either, it was because it was taught so passionless and
half-assed. I really am just saying this works for me and I see a lot of kids
coming into Ruby and to Rails really getting a kick out of the small stuff...
It's passion and it's details that are important... whimsy is optional.

------
mediumdave
There is a movement to "contextualize" introductory programming courses (and
other CS courses) by teaching core concepts in the context of a problem domain
that is meaningful for the students. Media computation is one such effort:
[http://coweb.cc.gatech.edu/mediaComp-
teach](http://coweb.cc.gatech.edu/mediaComp-teach)

~~~
mjn
That ties in a bit with Seymour Papert's idea of teaching programming as a
medium of expression. One part is having a meaningful domain, though an
equally important second part is encouraging exploration and tinkering, rather
than plowing through rote exercises.

Here's a passage from an old journal article I've long liked:
[http://www.kmjn.org/snippets/papert85_logovisions.html](http://www.kmjn.org/snippets/papert85_logovisions.html)

------
nnnnnande
Thanks for this. I've had a similar experience with learning how to program,
having taken courses and doing examples which have had no clear purposes.

I'm 22 now and finally feel like I'm headed in the right direction with the
help of BlueJ and a book called "Objects First with Java". It may not be
'whimsy', but I appreciate the fact that it helps me visualize the concepts of
OOP.

I recognize the feeling of insatiability, as I keep wanting to learn more and
more now, all thanks to brilliant resources.

~~~
drumsrgr8forn8
Yeah... I may go through at some point and refactor this post some. I
personally get a kick out of funny names and goofy stuffy but several people
have made the point that it can be distracting to some people. The key things
are just passion, clarity, and context. I experienced none of those things
back in school... truly, not just from my programming classed but from 90% of
all my classes. I can probably name all the good teachers I've had from grade
school through university on one hand.

------
GuiA
Great article - but please spellcheck. There are typos every other sentences,
it makes the article quite painful to read- which is a shame because the
content is interesting!

~~~
drumsrgr8forn8
Thanks for the feed back... I really am a terrible spelling. I at least ran
through a spell check and corrected those errors real quick. There's two
errors where there's no space between a word where markdown is parsing it that
way. Might just un-italicize those words later. If you notice any grammar
mistakes that are annoying please feel free to email me and I'll fix them.

~~~
drumsrgr8forn8
Lol. After reading my own comment I think I'm terrible at my native language,
too. I need to stop writing things before I've had my morning coffee.

------
austinz
I find it absolutely frightening how much incompetent instruction there exists
for teaching people skills like programming - with regards to the author's
experiences, in particular. I'm glad that he finally found something that
worked for him, but I'm left wondering how many other people will have had
that caliber of instruction as their first (or only) exposure to the field.

~~~
drumsrgr8forn8
Far far too many

------
wyclif
The writing aspect of this is all over the place and really messy, but I liked
his story and felt a strong degree of empathy with it—especially the part
about false starts and bad computer science education.

~~~
drumsrgr8forn8
Thanks for the feedback. I'm definitely not the best writer out there but
would like to be... I REALLY should have ran this through a spell checker and
felt stupid when I finally did. If you have any more detailed critiques and
feel strongly enough about them to share please feel free to email me.

------
drumsrgr8forn8
I would just like to thank dalanmiller for making a pull request to my fork of
octopress correcting several grammar and spelling mistakes. That was a really
cool thing to do and I appreciate it.

------
drumsrgr8forn8
Yes! Absolutely!

