[Haskell & FP in Education] Welcome and introductions

Chris Smith cdsmith at gmail.com
Mon Dec 17 09:51:06 UTC 2018


I guess I should answer my own questions, too!

I'm Chris Smith.  By day, I am a software engineer at Google.  I lead the
backend engineering team for Google Classroom, which is a part of GSuite
for Education that helps teachers and students communicate about
announcements and questions, submit assignments and grade and return them,
things like that.  That's all pretty boring.  I fell in love with
functional programming about the same time I really fell in love with
mathematics, in the mid 2000s.  I started with the SICP lectures here
<https://www.youtube.com/watch?v=2Op3QLzMgSY&list=PLE18841CABEA24090>, in
which Miranda was described in a way that really appealed to me.  I ran
across Haskell after discovering that Miranda wasn't really still around!
I've also been involved in education most of my life.  My first job after
flunking out of college in the late 90s was working for a company teaching
technology skills to IT professionals.  I started and ran my first
organization in the early 2000s to teach science and mathematics to
homeschooled children in the early 2000s, and coached kids in a science
competition there for 6 years.  In 2010, I had a neighbor who was a school
teacher, but quit her job to start her own school.  There, I volunteered to
teach a combination

My involvement with education in Haskell has been entirely based on the
CodeWorld project (http://code.world, or http://code.world/haskell).
CodeWorld is many things; chief among them being: (1) my own volunteer work
teaching middle school students in 6 different schools and several other
programs run by non-profit organizations, (2) a web-based environment for
writing and running simple Haskell code in a web browser with no setup or
installation, (3) a graphics library similar to Gloss that works in this
environment, (4) a simplified variant of the Haskell programming language
designed for teaching children, and (5) a collection of ideas, outlines,
and resources for how to teach middle school mathematics skills (roughly,
what's known in the U.S. as "pre-algebra" and basic algebra) from a
different perspective via functional programming.  The core of CodeWorld
has been, up to this point, mainly a one-person project, but I'm grateful
for some very fruitful collaborations.  Notably, Stefan Jacholke
<http://stefanj.me/funblocks/>, Eric Roberts (can't find a good link),
and Krystal
Maughan
<https://medium.com/@krystal.maughan/breaking-the-space-time-barrier-with-haskell-time-traveling-and-debugging-in-codeworld-a-google-e87894dd43d7>,
and others have done great work as part of Summer of Haskell and Summer of
Code projects; Joachim Breitner spearheaded development of networked
multi-player support <https://dl.acm.org/citation.cfm?id=3110247> in the
CodeWorld library, and Brooklyn Cook, Chelsea Harper, Elisabeth Edeen,
Christian Mirra, David Gladstein, Carl Young, and many others have
contributed to the quite daunting task of developing various educational
resources and plans (a task that I still haven't really succeeded at).
And, of course, it would be nowhere without the support of the broader
Haskell community, most notably Luite Stegeman for the development of GHCJS
<https://github.com/ghcjs/ghcjs>.

My reason for being in love with functional programming, both inside of
education and outside, is that it has the same feeling as the best of
mathematics.  I've never been the most practical person, so despite being a
software engineer for a living, I'm not so interested in teaching more
people to be software engineers or using functional programming "in
production".  Instead, I'm interested in this because I'm convinced we're
getting at something more fundamental.  I see the relationship between
functional programming and mathematics as being somewhat akin to the
relationship between literature and language skills, in this sense:  The
average child in the United States today reads nearly half a million words
between their 12th and 13th birthdays, so even as schools do teach language
skills, teachers can rely on their students having encountered and
practiced their skills thoroughly outside of class.  Mathematics teachers,
though, have students who only do mathematics in any real sense inside the
classroom.  Entice children to do math practices outside of school is not
likely to succeed, any more than trying to get them to do grammar
worksheets would!  What is needed, instead, is an activity they can be
convinced to want for its own sake, which *requires* mathematics as its
medium, just as they really only want to learn what happens to Harry and
Ron and Hermione, and the reading and interpreting of words and sentences
is just the necessary medium to get there.  I think functional programming
is that thing.  We can inspire students to want to produce art and
animations and games and explore computational simulations and puzzles, and
then give them expressions, functions, and variables as the steps to get
there.

There's a lot more to say here.  For example, why must it be functional
programming?  Answer: because if we care about mathematics, then we want
functions and variables and expressions to actually act the way they do in
mathematics!  We want substitution to be our model of computation.  We want
terms to have meaning as mathematical objects, not as descriptions of
actions by a CPU.  But it's all been said before, and will be said many
times again.  Emmanuel Schanzer has given some great justifications in this
direction with his Bootstrap <http://www.bootstrapworld.org> program, which
is growing popular now and is based on Racket, with the happy result that
even a lot of teachers without deep CS knowledge are familiar with this
distinction.

Here are some things I'd be very interested in, if anyone is so inspired.

(a) Feedback on how CodeWorld can be more useful to the general Haskell
community.  At http://code.world/haskell is a version of CodeWorld that
runs a standard GHCJS compiler for Haskell code.  The graphics API is also
available, but not required.  My goal is to make it dead simple to invite
new programmers to write Haskell, without needing to install anything or
set up their own tools, and to make this tool meet the educational needs of
the Haskell community.  (This is notably different from http://code.world
without the "/haskell" on the end; that environment is designed to meet my
own goals around math education, separate from the Haskell community.)
Most Haskell code using only base, bytestring, text, containers, etc. can
already be used there, and I recently added QuickCheck to the library set.
I'm interested in adding even more: for example, integration with Brent's
diagrams library? reflex? gloss? anything else?  I'd love to hear what
anyone thinks is missing that would be useful.  And if it's already useful,
I'd love to see more people adopt this in encouraging others to try
Haskell.  I've collected a few ideas at
https://github.com/google/codeworld/projects/8 and would love more feedback
here.

(b) Experiences shared by others who are doing similar things.  I think
we're likely all running into some of the same problems, and there's no
reason not to learn from each other.  There's a LOT to learn about
effective teaching, and I'm convinced that when it comes to programming,
there's a sense in which no one is very good at it yet.  At least, I have a
hard time finding anyone even talking about the biggest challenges I run
into in practice; things like how to help students to generalize
comfortably when writing expressions, or to convert their imperative
intuitions into more declarative expressions, or quickly recognize the
structure of expressions.

(c) I'm always keeping my eyes open for anyone wanting to be involved in
the CodeWorld project.  That could mean:

   - Teaching with CodeWorld.  I can definitely give you advice on
   connecting with schools, organizing your class, etc., and I'll be your
   personal support line.  I'm even happy to chat regularly by email, phone,
   or video conference and personally advise you on your class.  Just let me
   know how I can help.
   - Research collaborations.  I'm participating in some research already
   about measuring the effect of teaching on mathematics achievement, but I
   think there's a lot of room for this community as a whole to gather results
   we can share about educational outcomes.  If you're motivated to pursue
   something like that using CodeWorld, please let me know how I can help,
   whether it's software changes to the CodeWorld environment, or .
   - Developing specific features or changes that you think would be
   valuable or want to work on.  I'm willing to work with anyone to merge
   their ideas into the project, so long as you're okay with designing things
   to avoid complexity for new users.  Alternatively, if you are looking for a
   project with impact on education and functional programming and would like
   some ideas, feel free to get in touch and I can run through my list to see
   if anything excites you (though much of it is also on CodeWorld's issue
   tracker at https://github.com/google/codeworld/issues, especially under
   the "proposal" label
   <https://github.com/google/codeworld/issues?q=is%3Aopen+is%3Aissue+label%3Aproposal>
   ).
   - Helping with organization and release of educational materials.  I've
   got a lot of stuff that I and others have created over the years:
   worksheets, tutorials and guides, curriculum outlines, lesson plans,
   videos, and even a comic book!.  I think before it's useful, it's important
   to sort everything by quality.  For teachers, a collection of teaching
   resources is only as useful as the minimum level of quality they can expect
   from it.  I have a bunch of stuff as input to this process, capturing a lot
   that I've learned over the last eight years, but also an unfortunate
   combination right now of personal attachment that makes it hard to throw
   things out, and also just a level of exhaustion that makes me too willing
   to give up on improving quality sometimes.  Someone who wants to help here
   would be amazing.
   - Even joining the project as a core maintainer on equal terms with
   myself.  Obviously, this would involve first establishing that we have
   compatible visions for where things are headed, but consider this my
   announcement that I don't intend to be territorial, and indeed would be
   quite excited if someone else wanted to take on any kind of leadership role
   in the project.

(d) If you're in New York (on weekdays) or Atlanta (on weekends) and just
want to get together for dinner and chat, I'm usually up for that, too.

Okay, I'll stop there.

Thanks,
Chris

On Sat, Dec 15, 2018 at 5:19 PM Chris Smith <cdsmith at gmail.com> wrote:

> Hello, everyone!  Welcome to education at haskell.org.
>
> This mailing list grew out of discussions at ICFP 2018 about creating a
> space for collaboration and discussion of using Haskell and other
> functional programming languages in general education.  To jump-start that
> process, I'd like to invite everyone to introduce themselves and
> specifically share your goals, opportunities, vantage point, and
> interests.  The hope is that we'll be able to sort ourselves into
> compatible interests and ideas, to kick off more detailed discussion or
> collaborations.
>
> Some suggested questions to spur discussion:
>
> - What education-related projects are you involved in, or have you been
> involved in previously?
> - What other projects do you find exciting, intriguing, or worthy of
> emulation?
> - On the other hand, what projects or conversations should be happening,
> but are not happening yet?
> - Is there anything specific that you are definitely looking for from this
> space?
> - What vision do you have for functional programming in education?  That
> is, what general principles guide your thinking?
>
> I will reply with my own answers, and encourage you to do the same.
>
> Thanks,
> Chris
>
> P.S. I realize this email is long past due.  Between my job as a software
> engineer, volunteer teaching, and recent development on CodeWorld, I have
> again fallen into the trap of over-committing myself and falling behind on
> outside commitments.  I hope that late is still better than never.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/education/attachments/20181217/fdfb6000/attachment.html>


More information about the Education mailing list