<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">I guess I should answer my own questions, too!<div><br></div><div>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 <a href="https://www.youtube.com/watch?v=2Op3QLzMgSY&list=PLE18841CABEA24090">SICP lectures here</a>, 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 </div><div><br></div><div>My involvement with education in Haskell has been entirely based on the CodeWorld project (<a href="http://code.world">http://code.world</a>, or <a href="http://code.world/haskell">http://code.world/haskell</a>).  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, <a href="http://stefanj.me/funblocks/">Stefan Jacholke</a>, Eric Roberts (can't find a good link), and <a href="https://medium.com/@krystal.maughan/breaking-the-space-time-barrier-with-haskell-time-traveling-and-debugging-in-codeworld-a-google-e87894dd43d7">Krystal Maughan</a>, and others have done great work as part of Summer of Haskell and Summer of Code projects; Joachim Breitner spearheaded development of <a href="https://dl.acm.org/citation.cfm?id=3110247">networked multi-player support</a> 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 <a href="https://github.com/ghcjs/ghcjs">GHCJS</a>.</div><div><br></div><div>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 <i>requires</i> 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.</div><div><br></div><div>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 <a href="http://www.bootstrapworld.org">Bootstrap</a> 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.</div><div><br></div><div>Here are some things I'd be very interested in, if anyone is so inspired.</div><div><br></div><div>(a) Feedback on how CodeWorld can be more useful to the general Haskell community.  At <a href="http://code.world/haskell">http://code.world/haskell</a> 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 <a href="http://code.world">http://code.world</a> 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 <a href="https://github.com/google/codeworld/projects/8">https://github.com/google/codeworld/projects/8</a> and would love more feedback here.</div><div><br></div><div>(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.</div><div><br></div><div>(c) I'm always keeping my eyes open for anyone wanting to be involved in the CodeWorld project.  That could mean:</div><div><ul><li>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.</li><li>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 .</li><li>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 <a href="https://github.com/google/codeworld/issues">https://github.com/google/codeworld/issues</a>, especially <a href="https://github.com/google/codeworld/issues?q=is%3Aopen+is%3Aissue+label%3Aproposal">under the "proposal" label</a>).</li><li>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.</li><li>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.</li></ul><div>(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.<br></div><div><br></div></div><div>Okay, I'll stop there.</div><div><br></div><div>Thanks,</div><div>Chris</div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, Dec 15, 2018 at 5:19 PM Chris Smith <<a href="mailto:cdsmith@gmail.com">cdsmith@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hello, everyone!  Welcome to <a href="mailto:education@haskell.org" target="_blank">education@haskell.org</a>.<div><br></div><div>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.<br></div><div><br></div><div>Some suggested questions to spur discussion:</div><div><br></div><div>- What education-related projects are you involved in, or have you been involved in previously?</div><div>- What other projects do you find exciting, intriguing, or worthy of emulation?</div><div>- On the other hand, what projects or conversations should be happening, but are not happening yet?</div><div>- Is there anything specific that you are definitely looking for from this space?</div><div>- What vision do you have for functional programming in education?  That is, what general principles guide your thinking?</div><div><br></div><div>I will reply with my own answers, and encourage you to do the same.</div><div><br></div><div>Thanks,</div><div>Chris</div><div><br></div><div>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.<br></div></div>
</blockquote></div>