Welcome and introductions
Hello, everyone! Welcome to education@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.
Here's a loosely collected bundle of thoughts in response to a small part
of this.
I'm curious about FP at various levels of education. I know Haskell is or
has been used for various university courses. Is there any sort of existing
network of professors that share Haskell (or Racket, etc) teaching
resources and materials? Are there resources that make sense to share
between K-12 teachers and higher ed teachers? (e.g. how well does How To
Design Programs work for teaching kids?)
A related topic on my mind is BayHac and similar events. We discussed the
possibility of having some younger people attend, but ended up not
following through on that and attendance was mostly (entirely?) adults, as
usual. I'm wondering if there is value in trying to make some part of
BayHac more accessable and appealing to a wider audience (incl young people
and people new to programming), or whether this would dilute the focus of
the event too much and end up serving both young and old audiences poorly.
I bring up BayHac to this list because I see it not just as a "let's get
together and hack" event, but more like a "let's get together and share
knowledge" event, where the knowledge share ideally enables people to get
hacking on something. And pointing people to educational resources like
codeworld is exactly the sort of thing that should be going on at BayHac,
so that those with the desire to learn are empowered to continue doing so
for long after the event is over.
On Sat, Dec 15, 2018, 14:20 Chris Smith Hello, everyone! Welcome to education@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.
_______________________________________________
Education mailing list
Education@haskell.org
https://mail.haskell.org/cgi-bin/mailman/listinfo/education
Dan Burton
I'm curious about FP at various levels of education. I know Haskell is or has been used for various university courses. Is there any sort of existing network of professors that share Haskell (or Racket, etc) teaching resources and materials? Are there resources that make sense to share between K-12 teachers and higher ed teachers? (e.g. how well does How To Design Programs work for teaching kids?)
The plt-edu mailing list is quite active: http://lists.racket-lang.org/plt-edu/listinfo -- Regards, Mike
Chris Smith> - What education-related projects are you involved in, or have you been involved in previously? I have taught elective courses in functional programming using Haskell, Scala, or Elixir to advanced undergraduate or beginning graduate students in a US public university. My students typically have programming experience in an imperative language such as Java, with no exposure to functional programming previously. Recently I have taught a junior/senior-level required core course in Programming Languages primarily using Haskell. Chris Smith> - What other projects do you find exciting, intriguing, or worthy of emulation? Chris Smith> - On the other hand, what projects or conversations should be happening, but are not happening yet? Chris Smith> - Is there anything specific that you are definitely looking for from this space? Although there have come to be quite a few books on functional programming that use one language or another, there are not many real textbooks suitable for use in a college class. In particular, there is a scarcity of textbook options for courses other than just programming---such as algorithms and data structures, software engineering, programming language organization, artificial intelligence, data science, etc. Conrad
Hi all! I'm Brent Yorgey. I am actively involved in the Haskell academic and open-source communities and I teach CS at Hendrix College in Conway, Arkansas, USA.
- What education-related projects are you involved in, or have you been involved in previously?
I have taught several college-level classes using Haskell: my (semi-famous) "CIS 194" course at U Penn, a general FP course, and a programming languages course. I am also developing a new functional teaching language https://github.com/disco-lang/disco for use in a discrete math course (I'll be sure to write more about it on this list in time). I am also particularly motivated to think about FP in K-12 education because my son is 7 years old and shows great aptitude for and enjoyment of computers and mathematics; pretty soon it's going to be time to introduce him to some basic functional programming, possibly using CodeWorld and/or my discrete math functional teaching language. (It's not quite time yet though because his typing skills are not good enough; he has done a bit of programming with blocks-based languages e.g. on code.org, but I'm not aware of any *functional* block-based languages. If you know of any, please let me know!) I don't think I have any particular responses to the other questions off the top of my head, but I look forward to engaging in conversation and hearing what others are up to and thinking about. -Brent
Hi Brent,
On Sun, Dec 16, 2018 at 10:26 PM Brent Yorgey
I'm not aware of any *functional* block-based languages. If you know of any, please let me know!
I don't suggest you use this with your son, but if you're curious, a few years ago, Stefan Jacholke used Blockly to build a block-based front-end for CodeWorld, as part of Haskell.org's Summer of Haskell (in one of the years that haskell.org was not chosen for Google Summer of Code). It's still available at http://code.world/blocks. An interesting example is https://code.world/blocks#PIHIp7uCWam2t0iuN9w8zXA That said, though, it's not in great shape. There's quite a lot of code involved, including a significant amount of development on a custom fork https://github.com/stefan-j/blockly of yet another custom fork https://github.com/awmorp/blockly of Blockly. It's also a bit buggy https://github.com/google/codeworld/issues?q=is%3Aopen+is%3Aissue+label%3Afu.... This should be viewed as a proof of concept, from which we learned quite a bit about the task. Some of the lessons we learned: 1. Type inference in the client is a big deal. One should pay attention from the beginning to maintaining a correct incremental version of type inference, which should probably be based on something like Erdi's compositional variant of Hindley-Milner. Retrofitting the client-side implementation to CodeWorld Blocks led to a demoralizing game of whack-a-mole with consistency bugs, which was ultimately abandoned before we won. 2. Assuming a new version were again based on Blockly, it would be important to coordinate changes to Blockly with the upstream repository. While this is a challenging cross-team coordination problem made worse by the lack of engineering resources for the core Blockly project, forking Blockly is even more challenging in the long run. 3. The usability of Blockly's configuration panels is quite poor indeed; enough so that I found it nearly impossible to teach the portions of CodeWorld Blocks that needed them. This includes lists and user-defined functions. One would need to come up with a better approach to this, to have hope of success. Adding buttons and controls onto the block itself would be much more promising. 4. Blockly-based languages desperately need a more compelling compatibility story. Making a backward-incompatible change in a text-based language can require that programmers update their code, but doing the same in a Blockly-based language can cause the code to fail to load so much that the user may just as well start over and rewrite it entirely. 5. Blockly is also quite poor at usability. Being block-based is no panacea. It could likely be made much nicer with some intelligent search features. One could imagine clicking a connector to get a selection of blocks that would fit into that hole, or typing the first few letters of a function name to see a selection of blocks that begin with those letters. As is, though, building anything non-trivial in Blockly feels so tedious as to be off-putting. Anyway, this is just thoughts that came to mind from that question. Of course, there are deeper answers to how to design a visual functional language, too, based on dataflow diagrams and such. Since a key part of my goal in the CodeWorld project is to teach the conventional syntax of algebraic expressions and functions, I wasn't actually so interested in those more ambitious language designs. You might be, though. If so, I hope someone else can share some information there. Thanks, Chris
Hi everyone!
I am Nickolay Kudasov. I am CTO of GetShop.TV (a small company where we use
Haskell extensively) and a teacher at Innopolis University in Innopolis,
Russia where I teach a Haskell elective course to advanced undergraduates.
I also have a YouTube series of short video-lectures on Haskell in Russian
(these videos were part of a Haskell course at Moscow State University
while I was teaching there).
The way I teach was greatly influenced by Brent's CIS 194 course (and its
later incarnation by Joachim Breitner) as well as my experience with
commercial Haskell. I have also been using CodeWorld lately to introduce
students to Haskell, so big thanks to Chris Smith and everyone else working
on it! I am also very excited about Brent's new functional teaching
language :)
I do not know if I have anything yet to offer to people in this list, but I
hope to learn about teaching materials and techniques others use,
especially concerning university courses. I have slight interest in K-12
education as well, since I have two kids at least one of which is likely to
be inclined towards mathematics and computers in a couple years.
One sort of project I am thinking about periodically is a Haskell or
FP-related educational YouTube-channel (any other platform is fine, it's
format that is interesting to me). There are plenty of math and programming
related channels with great content already (I would like to especially
highlight 3Blue1Brown
https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw and Welch Labs
https://www.youtube.com/user/Taylorns34/ which have series of educational
videos with exercises). I have a few ideas for such an FP-channel, but
unfortunately I have no spare time right now to try this on my own.
However, if anyone is interested in collaborating on such a project I would
definitely try to free up my schedule :)
Kind regards,
Nick
пн, 17 дек. 2018 г. в 09:28, Chris Smith
Hi Brent,
On Sun, Dec 16, 2018 at 10:26 PM Brent Yorgey
wrote: I'm not aware of any *functional* block-based languages. If you know of any, please let me know!
I don't suggest you use this with your son, but if you're curious, a few years ago, Stefan Jacholke used Blockly to build a block-based front-end for CodeWorld, as part of Haskell.org's Summer of Haskell (in one of the years that haskell.org was not chosen for Google Summer of Code). It's still available at http://code.world/blocks. An interesting example is https://code.world/blocks#PIHIp7uCWam2t0iuN9w8zXA
That said, though, it's not in great shape. There's quite a lot of code involved, including a significant amount of development on a custom fork https://github.com/stefan-j/blockly of yet another custom fork https://github.com/awmorp/blockly of Blockly. It's also a bit buggy https://github.com/google/codeworld/issues?q=is%3Aopen+is%3Aissue+label%3Afu.... This should be viewed as a proof of concept, from which we learned quite a bit about the task.
Some of the lessons we learned:
1. Type inference in the client is a big deal. One should pay attention from the beginning to maintaining a correct incremental version of type inference, which should probably be based on something like Erdi's compositional variant of Hindley-Milner. Retrofitting the client-side implementation to CodeWorld Blocks led to a demoralizing game of whack-a-mole with consistency bugs, which was ultimately abandoned before we won. 2. Assuming a new version were again based on Blockly, it would be important to coordinate changes to Blockly with the upstream repository. While this is a challenging cross-team coordination problem made worse by the lack of engineering resources for the core Blockly project, forking Blockly is even more challenging in the long run. 3. The usability of Blockly's configuration panels is quite poor indeed; enough so that I found it nearly impossible to teach the portions of CodeWorld Blocks that needed them. This includes lists and user-defined functions. One would need to come up with a better approach to this, to have hope of success. Adding buttons and controls onto the block itself would be much more promising. 4. Blockly-based languages desperately need a more compelling compatibility story. Making a backward-incompatible change in a text-based language can require that programmers update their code, but doing the same in a Blockly-based language can cause the code to fail to load so much that the user may just as well start over and rewrite it entirely. 5. Blockly is also quite poor at usability. Being block-based is no panacea. It could likely be made much nicer with some intelligent search features. One could imagine clicking a connector to get a selection of blocks that would fit into that hole, or typing the first few letters of a function name to see a selection of blocks that begin with those letters. As is, though, building anything non-trivial in Blockly feels so tedious as to be off-putting.
Anyway, this is just thoughts that came to mind from that question. Of course, there are deeper answers to how to design a visual functional language, too, based on dataflow diagrams and such. Since a key part of my goal in the CodeWorld project is to teach the conventional syntax of algebraic expressions and functions, I wasn't actually so interested in those more ambitious language designs. You might be, though. If so, I hope someone else can share some information there.
Thanks, Chris _______________________________________________ Education mailing list Education@haskell.org https://mail.haskell.org/cgi-bin/mailman/listinfo/education
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-has...,
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%3Apr...
).
- 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
Hello, everyone! Welcome to education@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.
Dear Haskell Education List, I've been teaching a first quarter honors introductory programming class in Haskell to University of Chicago undergraduates for a decade. We're currently running 2 sections of around 40, where I'm teaching one section, and my colleague Ravi Chugh is teaching the other. A few years back, Jakub Tucholsky and I co-taught an upper-level undergraduate course, "Functional Systems in Haskell," based loosely on a Stanford course of the same name. In recent years, material Jakub and I developed for the Functional Systems course has been working its way into the introductory course. I teach the intro course in Haskell because the usual way of teaching introductory programming at the University level, in which students who learned to program in high school are bored and get A's, and students who didn't are overwhelmed and get C's, strikes me as both uninteresting and deeply inequitable. In the honors sequence, I get a class with unusual characteristics -- half or more took a high school programming class (usually Java), the remainder are mostly mathematics or physics undergraduates who have an unusually high tolerance for abstraction, and often significant advanced mathematics. Haskell seemed like a natural choice: the students who didn't have programming before had something important to bring to the table, which encouraged "mixed" study groups. We have very detailed lecture notes (sometimes paired, where Ravi wants to handle something differently from me): http://cmsc-16100.cs.uchicago.edu/2018-autumn/ The class has necessarily evolved with the language, and my sense is that Ravi and I will be doing a larger than usual set of revisions before the 2019 offering. I'd value feedback. Peace, Stu --------------- Stuart A. Kurtz Professor, Department of Computer Science and the College Master, Physical Sciences Collegiate Division The University of Chicago
Hi all, I'm Fernando Alegre. I am working on developing curriculum for high school computer science courses. The first course I developed, called Introduction to Computational Thinking, has been running as a pilot in several high schools in Baton Rouge, Louisiana, for two years. The course uses Chris's CodeWorld platform, so that schools do not need to install anything. The course covers relatively little content in terms of computer science, but it is heavier on the math than other introductory courses, including Bootstrap. In the summer, I have a five-week all-day professional development program, where I have the teachers do all the activities in the course, so that they go from zero-knowledge in programming to being somewhat comfortable with teaching the course and helping students debug their code. I am also testing material for other courses with a couple of teachers and also directly with a small group of advanced students. I liked the CodeWorld environment so much that I decided I would try it with the advanced students, and the feedback I got has been very interesting. Apart from their dislike of the syntax and similar nuances, their main complaint is that functional programs are too dense, and that increases their cognitive load too much, so that, even though they can write the code, they do not enjoy doing it. I am struggling to find ways to make it more enjoyable for them, as it is really fun for me. I someone is interested, I can provide more details about all that. Regards, Fernando
Hi Chris, and others. Since you asked for it ... I have written an opinion piece https://www.imn.htwk-leipzig.de/~waldmann/etc/prog-edu/ For professional education: yes, I use Haskell by all means. Of course, it's complemented by a few more colleagues using Haskell, and even more colleagues not using it, so it's a fine balance overall. I am happy to discuss detail, swap exercises and exam questions, etc. For pre-university education (that's what you mean by "general" education? At least, it's included?): Don't. To teach programming early (Haskell or not) is, at best, misguided, and often actually harmful: * It tends to detract resources from where they are really needed, namely, teaching fundamentals. * It tends to hide the fact that software platforms used in teaching programming tend to use, or to be, mechanisms of surveillance capitalism. Best regards, Johannes.
I think one of the problems in introducing CS education in K-12 is the lack of a clear widespread rationale for it.
This question is not unique for this list, but it still matters here. There are different goals we may be pursuing,
such as:
- To introduce "fun activities" so that students get less bored in school
- To replace "old-fashioned" core subjects that are less relevant than computing nowadays
- To teach students "real-world skills" so that they can get better jobs
- To help students learn other subjects because "code makes these subjects easier to understand"
- To do something now, because "we think it will become useful in their future", even if we don't know exactly how
- To help children "understand our technological world" better
I am partially paraphrasing Simon Peyton Jones' excellent talk:
https://www.youtube.com/watch?v=y-xgWLYQc4g
Then, another problem is that to make way for it, something else needs to go, and it is not clear what could be
taken away, especially in high school. Should we have one more core subject and less art and PE?
Finally, depending on what the goal is, we have the question of how to accomplish that goal. In particular, what
exactly should be taught to the children, what the expectations are and how we will assess whether they
learned enough.
My personal interest lies in the intersection of coding and math, and the potential of code to illustrate math concepts
and help develop a mathematical intuition. At the same time, I see mathematics as a very fertile ground for all kinds
of computational problems, with an endless supply of interesting questions at all levels of difficulty. In this context,
a pure functional language is the optimal choice, because it helps the students stay focused on the objectives without
getting distracted (or, rather, seduced, as SPJ mentions) by the infinite possibilities of tweaking the look and feel forever.
While my take is probably shared (at least partially) by most people in this list, it is a minority view in the current CS education community.
The challenge is how to make a case for our goal within the current environment, where the goal seems to be just "learning Python"
for the sake of learning Python (or JavaScript) with no further thoughts beyond that.
Fernando
________________________________
From: Education
Dear Fernando,
I think one of the problems in introducing CS education in K-12 is the lack of a clear widespread rationale for it.
You've enumerated a few rationales. My wife is a recently retired 4th grade teacher, who's taught both Logo and Scratch over three decades in the classroom. There's a legitimate case for covering material like this, based both on developing problem solving abilities and on the observation that some students learn better via manipulatives. Code is a mathematical manipulative. These are not small effects. In the best cases, programming can become a vehicle for collaborative mathematical work, a category that otherwise hardly exists. But it's clear to me that there are other drivers as well. My take on this is US-centric, other polities may have other drivers. School boards are elected, and so are responsive to parental pressure. In the US, this often takes the form of demand for courses and activities that make students more competitive for highly-compensated work. This pressure can be particularly acute in well-resourced school districts, whose students will be competing for admission to selective college and universities. For the students I see, this means that their exposure to computer programming at the pre-collegiate level rarely came at the cost other activities. They've had four years of math, including calculus, art and band, and the opportunity to compete in debate, and not gymnastics, and perhaps even fencing if they've wanted too. They haven't had to give up the main course to get dessert. They haven't even had to give up other desserts. School budgets get built out of multiple parts that are carefully kept unblended. There's a certain pot of money labelled for faculty salaries, another pot labeled for capital expenses, another pot for special education, another for technology. Educators and technology companies alike have argued for technology in the classroom, and programming courses are one way to use this technology productively. Unfortunately, the use of semi-proprietary languages via plush IDEs can result in early obsolescence, driving the need for more purchases and a bigger piece of the pie going to technology. Of course, the ability to use technology effectively depends very much on the teaching staff, and well-resourced schools are more likely to have the staff with the knowledge and initiative to use technology effectively in the classroom. Wealth tenures wealth. As a university faculty member in the US, I see high-school programming, perhaps especially when it is done well, as a sustainer of inequality. It's hard to get into CS programs, and high school exposure to programming is highly corollated with success in bottleneck college programming classes. This is something that I've thought hard about, but my answer (teaching Haskell) I know to be idiosyncratic. It concerns me that, while it appears to have greatly reduced disparities based on prior preparation (and so has some utility in dealing with US issues around race/ethnicity), it may have increased gender inequity. None of this is easy if you take it seriously. Peace, Stu
I wanted to address Stu's last comment. We've been using Scala at Trinity
for CS1 since 2010, and even before that, we didn't use the language used
for the AP exam. Using an "uncommon language" for CS1 (
https://dl.acm.org/citation.cfm?doid=2839509.2844666) has a number of
benefits. Leveling the playing field is a big one. Using a functional
approach also really helps because it is inevitable that the students who
have codded before did it in an imperative language.
At Trinity, we have taken the additional step of having a special
"advanced" section for students with significant background, following the
model at Harvey Mudd. The primary goal of this is to get those students
away from the ones who haven't done much before, so they don't scare them
off. I teach that "advanced" section and like to push students to use a
more functional style, while my colleagues, who are teaching primarily
students who have never coded before, use a more imperative style. I think
that there could be an interesting discussion of the merits of this, but it
definitely has the advantage that we can all teach the same language and
end in the same place for CS2 while giving the advanced section more of a
challenge in terms of exposing them to things they don't already know.
Mark
On Wed, Dec 19, 2018 at 3:50 PM Stuart A. Kurtz
Dear Fernando,
I think one of the problems in introducing CS education in K-12 is the lack of a clear widespread rationale for it.
You've enumerated a few rationales.
My wife is a recently retired 4th grade teacher, who's taught both Logo and Scratch over three decades in the classroom. There's a legitimate case for covering material like this, based both on developing problem solving abilities and on the observation that some students learn better via manipulatives. Code is a mathematical manipulative. These are not small effects. In the best cases, programming can become a vehicle for collaborative mathematical work, a category that otherwise hardly exists.
But it's clear to me that there are other drivers as well. My take on this is US-centric, other polities may have other drivers.
School boards are elected, and so are responsive to parental pressure. In the US, this often takes the form of demand for courses and activities that make students more competitive for highly-compensated work. This pressure can be particularly acute in well-resourced school districts, whose students will be competing for admission to selective college and universities. For the students I see, this means that their exposure to computer programming at the pre-collegiate level rarely came at the cost other activities. They've had four years of math, including calculus, art and band, and the opportunity to compete in debate, and not gymnastics, and perhaps even fencing if they've wanted too. They haven't had to give up the main course to get dessert. They haven't even had to give up other desserts.
School budgets get built out of multiple parts that are carefully kept unblended. There's a certain pot of money labelled for faculty salaries, another pot labeled for capital expenses, another pot for special education, another for technology. Educators and technology companies alike have argued for technology in the classroom, and programming courses are one way to use this technology productively. Unfortunately, the use of semi-proprietary languages via plush IDEs can result in early obsolescence, driving the need for more purchases and a bigger piece of the pie going to technology. Of course, the ability to use technology effectively depends very much on the teaching staff, and well-resourced schools are more likely to have the staff with the knowledge and initiative to use technology effectively in the classroom. Wealth tenures wealth.
As a university faculty member in the US, I see high-school programming, perhaps especially when it is done well, as a sustainer of inequality. It's hard to get into CS programs, and high school exposure to programming is highly corollated with success in bottleneck college programming classes. This is something that I've thought hard about, but my answer (teaching Haskell) I know to be idiosyncratic. It concerns me that, while it appears to have greatly reduced disparities based on prior preparation (and so has some utility in dealing with US issues around race/ethnicity), it may have increased gender inequity. None of this is easy if you take it seriously.
Peace,
Stu
_______________________________________________ Education mailing list Education@haskell.org https://mail.haskell.org/cgi-bin/mailman/listinfo/education
-- ---------------------------------- Dr. Mark C. Lewis Professor Department of Computer Science One Trinity Place Trinity University San Antonio, TX 78212-7200 mlewis@trinity.eduhttp://www.cs.trinity.edu/~mlewis/http://www.programmingusingscala.net/https... ----------------------------------
Thank you Chris for putting together this list, and all your efforts in the education space in general! My name is Michael Snoyman. I use Haskell and functional programming professionally, and do quite a bit of training at the professional level, but have almost no experience at the beginner level. I'm basically a self-taught programmer from grade school, where I was given a QuickBasic book and had ample access to DOS based machines. My interest here is that I'm basically the "get off my lawn" old guy, who's watched my younger siblings grow up in a different world, one where GUI interfaces dominate, and there's no incentive to _really_ learn how a computer works. I want to make sure my kids have the same opportunity to learn programming that I had. And in that process, I'll likely end up needing to teach some of their friends too to help with peer pressure. I'm not insistent that my kids learn Haskell or functional programming, but my working hypothesis is that these will be the easiest things for them to learn, and the easiest for me to teach.
What education-related projects are you involved in, or have you been involved in previously?
For the beginner level, I've been blogging about my experiences in my "kids coding" blog post series. Since the start of the school year we've been too busy unfortunately to continue much with it. https://www.snoyman.com/blog/2018/08/kids-coding-part-1 I have lots of other tutorials and other write-ups at a non-beginner level, mostly in Haskell, but with some Rust added in recently. I've sadistically considered switching to Rust as a beginner language :)
What other projects do you find exciting, intriguing, or worthy of emulation?
I think Scratch is wonderful, in that it can easily be added to a classroom curiculum by teachers who don't know much about computers. My eldest (10 years old) has gone through this at school. However, I don't think he's really getting a great deal out of it, and he says as much. I'd love to see something easily approachable but with more of a runway. I'm thinking back to how I had Basic available on all computers around me by default for the first 10 years of my life. I realize that Code World may be exactly this :)
Is there anything specific that you are definitely looking for from this space?
I'd love to see others share their experiences with teaching young children, and _especially_ how to keep them motivated. I find that with so many easy distractions available on modern computers and devices, it's hard for programming to compete for attention.
What vision do you have for functional programming in education? That is, what general principles guide your thinking?
My kids understand math. They're already learning it in school. Teaching
them functions took all of 5 minutes. I don't want to corrupt them with
not-functions as found in imperative languages, I believe it will confuse
them. That's my guiding principle here.
On Sun, Dec 16, 2018 at 12:20 AM Chris Smith
Hello, everyone! Welcome to education@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. _______________________________________________ Education mailing list Education@haskell.org https://mail.haskell.org/cgi-bin/mailman/listinfo/education
n never. Hello all, My name is Pedro Vasconcelos and I am an auxiliary lecturer at the University of Porto. We teach introductory FP to CS and CE undergraduate students using Haskell (around 150-170 new students every year). I have lectured that introductory course (but not currently) and also an optional "Advanced FP" course at the MsC level. To try to bring some FP goodness to teaching other programming languages, I've developed a Haskell library and a web system for generating feedback to C programming exercises using QuickCheck testing; this is used by 200-300 students the CS department of the Faculty of Science of the University of Porto. https://github.com/pbv/codex-quickcheck https://github.com/pbv/codex I'm also interested in learning about experiences in connecting FP with the CS curricula in general. While I enjoy teaching Haskell to 1st year students (and some really like it), I have found that most students don't get to use FP in later courses (apart from the odd student doing compilers/PL projects in Haskell). Regards, Pedro
Greetings everyone,
I'm Nick Bathum. These days I work as a software developer and do some
volunteering for the VEX robotics community in northern Michigan. I'm an
action oriented person, and I am here to connect with educators, and
especially those with an interest in mathematics or functional programming
enthusiasts. I also have to say that as a person currently far outside of
academia, I am looking forward to hearing perspectives from folks who are
closer to that world.
I'm currently endeavoring to become connected with the teachers in my area
who are teaching the new "STEM" or computer science classes that our K-12
schools in the region have recently adopted. My intent is to see what sorts
of issues they are struggling with and if there is an opportunity where I
can plug in and assist them.
So what is the motivation or reason for introducing CS as a new curriculum
in K-12 programs? I'd like to share some of my thoughts on that matter, not
to provide an answer, but to get some feedback.
The K-12 mathematics curriculum in the USA seems to be very structured and
established, especially since the adoption of the common core initiative. I
know not all states have adopted the core mathematics -or any of the core-
standards, but at least where I live this is true.
At the same time schools have begun offering extracurricular programs like
robotics or hiring new teachers and offering regular classes under the STEM
banner such as AP Computer Science. These new course offerings seem to be
less structured, sometimes logistically complicated -- like teaching 4
different sets of course content to one "class", and overall the teachers
of these courses seem to have less support in terms of community and
teaching tools.
My aim is to connect with a local teacher, learn from them and help them
any way I am able, and additionally pursue a larger goal of exploring how
to help reinforce the mathematics curriculum rather than take away from it.
In terms of FP in education, my sense is that both functional and
declarative languages would seem to be the most aligned with mathematics,
conceptually and linguistically. However it seems the exception that
computer programming courses begin with that content rather than the most
used or popular language du jour.
I also see some of Johannes points, and agree that simply exploring
mathematics without a computer would perhaps be most effective way for
students to learn mathematics. My thought is that if schools are going to
introduce new computer programming classes, can we find ways for these
classes to become companions to the existing classes and attach to the
existing bodies of knowledge?
Regards,
-Nick
On Sat, Dec 15, 2018 at 5:20 PM Chris Smith
Hello, everyone! Welcome to education@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. _______________________________________________ Education mailing list Education@haskell.org https://mail.haskell.org/cgi-bin/mailman/listinfo/education
-- Regards, -NB
Hi Nick. Great to have you! There are several people here who have taught extensively, both at the K-12 and university level. Responding to one point.
I also see some of Johannes points, and agree that simply exploring mathematics without a computer would perhaps be most effective way for students to learn mathematics.
I wouldn't rush to an absolute answer either way. After all, "learn
mathematics" is a very broad goal. There are certain to be parts that are
best learned without a computer (come to think of it, this is true of
computer science, as well!), but just as computing has changed the way we
communicate, work, research, entertain, etc., is it really surprising that
it would also change how we learn?
I care very much about mathematics education, and I'd point out that
educators are facing a giant problem. Expressing ideas in any kind of
formal system has historically led to great advances in understanding...
but on a time frame far longer than students' attention spans. In the
short term, the effort on formalism pays no rewards because it's more
likely that results come from errors in the formalization rather than the
original topic of curiosity. Or, if one tries to memorize instead of
understand, then formalism can be worse than no effort at all (e.g., see
classic results on teaching columnar arithmetic in to young students who
lack the concept of place value). In the past, this problem has been
"solved" through a mix of inequality and authority; mathematics has for
much of history been taught to those with enough idle time, a comfortable
enough life, and the right temperament and respect for authority to reach
the point where there are benefits to the learning, and others have simply
been left out. The consensus of the educational community in the last
several decades is that this is no longer acceptable. So what do we do?
One answer is to try to artificially lure all students along the same path
that was previously only suitable for a few. But another approach is to
find a new path, where the rewards of expressing ideas formally are more
readily accessible. And THAT is where computing comes in. In many ways -
data analysis for the social sciences, computational modeling in biology or
physics, and lots more - computing makes modeling things formally pay off.
By building such a model, you create something that works: gives new
insights into the data, lets you see the results of trial simulations in a
biology model, and so on. But mathematics is the best fit of all -- both
because it's always had the highest abstraction hump to begin with, and
because by applying various kinds of declarative programming, expressing
relationships in mathematics *is* defining a computationally relevant
model. In that sense, it is at the heart of the whole enterprise.
I do agree that it's important to be cautious about what we're doing. It's
all well and good to say that we're out to support mathematics,
computational thinking (whatever that means this week), abstraction, and
formal modeling; but too often, what these programs look like in practice
is just shoving simplifications of the software engineering skill set into
classes for general audiences. If you're spending most of your time
teaching the syntax of Python or Java instead of thinking mathematically,
then that's what your students are learning, too. Too many activities are
built around today's software engineering careers, and not the educational
opportunities that computing as a whole opens up.
I think listening to teachers is a great idea. At the same time, though,
I'll caution you that teachers don't all share the same points of view.
Just like in the rest of the population, there are teachers (yes, even math
teachers) who range from technically savvy to full-on technophobes. And
there are teachers who range from a flexible and broad view of mathematics
and its relevance in the world to those who think "math" means the list of
specific skills their students are directly tested on, and prefer to use
their time coaching students on fruitful guessing strategies (yes... sadly,
even math teachers). You might not get the reaction you're hoping for
every time, so just keep an open mind as you connect with classrooms... and
don't forget to listen to the students, too.
Based on what you've said, I'd recommend you check out
http://www.bootstrapworld.org. I'd also love to chat with you about my own
project and curriculum, CodeWorld (http://code.world), which I started
working on around the same time about a decade ago. There are some
differences in philosophy, but both are based on taking advantage of the
overlap between mathematics and functional programming.
On Sun, Jan 6, 2019 at 3:38 PM Nick Bathum
Greetings everyone,
I'm Nick Bathum. These days I work as a software developer and do some volunteering for the VEX robotics community in northern Michigan. I'm an action oriented person, and I am here to connect with educators, and especially those with an interest in mathematics or functional programming enthusiasts. I also have to say that as a person currently far outside of academia, I am looking forward to hearing perspectives from folks who are closer to that world.
I'm currently endeavoring to become connected with the teachers in my area who are teaching the new "STEM" or computer science classes that our K-12 schools in the region have recently adopted. My intent is to see what sorts of issues they are struggling with and if there is an opportunity where I can plug in and assist them.
So what is the motivation or reason for introducing CS as a new curriculum in K-12 programs? I'd like to share some of my thoughts on that matter, not to provide an answer, but to get some feedback.
The K-12 mathematics curriculum in the USA seems to be very structured and established, especially since the adoption of the common core initiative. I know not all states have adopted the core mathematics -or any of the core- standards, but at least where I live this is true.
At the same time schools have begun offering extracurricular programs like robotics or hiring new teachers and offering regular classes under the STEM banner such as AP Computer Science. These new course offerings seem to be less structured, sometimes logistically complicated -- like teaching 4 different sets of course content to one "class", and overall the teachers of these courses seem to have less support in terms of community and teaching tools.
My aim is to connect with a local teacher, learn from them and help them any way I am able, and additionally pursue a larger goal of exploring how to help reinforce the mathematics curriculum rather than take away from it.
In terms of FP in education, my sense is that both functional and declarative languages would seem to be the most aligned with mathematics, conceptually and linguistically. However it seems the exception that computer programming courses begin with that content rather than the most used or popular language du jour.
I also see some of Johannes points, and agree that simply exploring mathematics without a computer would perhaps be most effective way for students to learn mathematics. My thought is that if schools are going to introduce new computer programming classes, can we find ways for these classes to become companions to the existing classes and attach to the existing bodies of knowledge?
Regards, -Nick
On Sat, Dec 15, 2018 at 5:20 PM Chris Smith
wrote: Hello, everyone! Welcome to education@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. _______________________________________________ Education mailing list Education@haskell.org https://mail.haskell.org/cgi-bin/mailman/listinfo/education
--
Regards, -NB _______________________________________________ Education mailing list Education@haskell.org https://mail.haskell.org/cgi-bin/mailman/listinfo/education
By way of introduction: I'm CEO of a small software company in Southern Germany, which also offers training in functional programming and software architecture. I am the founder of the DeinProgramm educational initiative (alas, in German): http://www.deinprogramm.de/ This is closely aligned with PLT's Program by Design / How to Design Program, and comes with its own textbook. The pedagogy of these projects is based on the idea of *design recipes* - explicit instructions for building programs starting with a systematic data analysis. DrRacket also ships with DeinProgramm-specific teaching languages. My experience has been that Program by Design is a hugely successful intro to programming/algebra/FPfor a wide variety of learners. In particular, having programming languages tailored for beginners is crucial. DrRacket has a huge headway here, and most teachers are well-advised to make use of it instead of trying to devise their own pedagogy or go with their own favorite language. Consequently, I don't think Haskell, as-is, is an appropriate language for teaching beginners. However, as the design recipes are very much types-based, they also apply to Haskell, and Haskell is a great second language to go to from Program by Design. (When we do 3-day professional Haskell training, we do 2 days of Program by Design and one day of Haskell - we usually get to monads.) -- Regards, Mike
participants (14)
-
Anand, Christopher -
Brent Yorgey -
Chris Smith -
Conrad Cunningham -
Dan Burton -
Fernando Alegre -
Johannes Waldmann -
Mark Lewis -
Michael Snoyman -
Michael Sperber -
Nick Bathum -
Pedro Vasconcelos -
Stuart A. Kurtz -
Николай Кудасов