<p dir="ltr">Personally, I would try to start with something with immediate feedback. Introduce functions on numbers with the REPL, something they are presumably familiar with. Then go on to show how we can use and manipulate things other than numbers in exactly the same way.</p>
<p dir="ltr">A fun place to go quickly is the diagrams package. Just like we can have functions and operations with numbers, we can have them with shapes. Hook it up to something like IHaskell so that students can render shapes in the REPL just like they did with numbers.  It'll take some setup: IHaskell is a pain to install and you might want to create your own wrapper around diagrams to have simpler types.</p>
<p dir="ltr">But I think it would be worth it: you'll get an intuitive example of functions producing more complex outputs with immediate feedback in the form of pictures, made up by putting shapes together. The students will be able to produce designs that look cool by experimenting with the library while getting the hang of Haskell.</p>
<div class="gmail_quote">On Aug 28, 2015 7:46 PM, "Christopher Allen" <<a href="mailto:cma@bitemyapp.com">cma@bitemyapp.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">My coauthor Julie has written about running her 10 year old son through our Haskell book, though the book was written for adults. He's only gotten stuck arithmetical concepts he hasn't learned yet, nothing specific to Haskell or functional programming.<div><br></div><div><a href="https://superginbaby.wordpress.com/2015/04/08/teaching-haskell-to-a-10-year-old-day-1/" target="_blank">https://superginbaby.wordpress.com/2015/04/08/teaching-haskell-to-a-10-year-old-day-1/</a><br></div><div><br></div><div>He'll resume learning Haskell soon. He wants to get back to the Haskell and hasn't asked at all about the Minecraft modding tutorials he was doing because he feels like with Haskell he is being taught how things actually work, whereas the Minecraft modding was copy-pasta with little/no explanation. Haskell is also Julie's first programming language. I've cc'd her so she can say more about this if she wants.</div><div><br></div><div>Haskell is great for teaching kids logic, math, data structures - you just can't skip details the way you can with experienced programmers. This isn't that much different from teaching adults who aren't experienced programmers.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Aug 28, 2015 at 1:12 PM, Rustom Mody <span dir="ltr"><<a href="mailto:rustompmody@gmail.com" target="_blank">rustompmody@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span>On Fri, Aug 28, 2015 at 11:07 PM, Silvio Frischknecht <span dir="ltr"><<a href="mailto:silvio.frischi@gmail.com" target="_blank">silvio.frischi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">> I kindly disagree.<br>
<br>
This being a haskell mailing list, I expected that :)<br>
<span><br>
> If the focus is to teach computer architecture, you are<br>
> not teaching programming. If the focus is on programming, then it should<br>
> focus on the conceptual aspects of programming, not on computers.<br>
> A course at school should of course teach both, but in my opinion not<br>
> concurrently. There’s no point in teaching something implicitly by using<br>
> the teaching of something else.<br>
<br>
</span>It's more about algorithms than computer architecture. An imperative<br>
program very clearly describes algorithms; Haskell does not. Unless you<br>
have a very good understanding of things like lazyness, non-strictness<br>
and tail recursion, you wont know what happens when and how.<br></blockquote></span><div><br>«It is easier to optimize correct code than to correct optimized code.»<br>--Bill Harlan<br><br></div><div>More heretically I draw your attention to Bob Harper's SECP<br><br>«everyone knows that <span>algorithm</span>s as welearned  them  at  school  are  irrelevant  to  practice.   »<br><a href="http://www.cs.cmu.edu/~rwh/papers/secp/secp.pdf" target="_blank">http://www.cs.cmu.edu/~rwh/papers/secp/secp.pdf</a><br><br></div><div>In my view «CS is the science of algorithms» is one of those memes that has held back our field because it underplays data.<br></div><div>And traditional programming pedagogy (aka imperative programming) is wrong because it emphasizes code at the cost of data<br></div><span><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<span><br>
> We are not talking about undergraduates here, but kids or teenagers.<br>
> Think about which is the reason why you are teaching something to them.<br>
> It is not to teach some specific skill or to make them be advantaged in<br>
> future undergraduate courses. It is to teach them to reason.<br>
> Functional programming is just more reasoning than technicalities.<br>
<br>
</span>All the more reason not to teach Haskell. To CS undergraduates you might<br>
teach your favorite programming paradigm. They can take it, and they<br>
will also learn others anyway. To teenagers who might never learn<br>
another language, it is not a good idea.<br>
<span><br>
>> There are also a lot of very basic data structures that can simply not<br>
>> be used in purely functional code like hash tables, pipes or random<br>
>> access arrays.<br>
><br>
> Why do you think that manipulating arrays is a better skill to teach<br>
> to kids than manipulating linked lists?<br>
<br>
</span>What about double linked lists then. Most updatable data structures are<br>
just clumsy in Haskell.<br></blockquote><div><br></div></span><div>I see a lot of naivete in this thread (not just your claims).<br></div><div>Every programming language will do some things niftily and (many) others clumsily.<br></div><div>And when as teachers we consider the importance of <a href="https://en.wikipedia.org/wiki/Principles_of_learning#Primacy" target="_blank">Law of Primacy</a> we need to carefully consider the order in which we introduce material.<br></div><div>A case could be made [as Donn Cave does below] for assembly.<br>From my pov getting Hindley-Milner intuitions right should take primacy over updatable data structures.<br></div><div>Likewise the best language of your choice will be based on what you consider primary.<br></div><div>How do we come to an objective evaluation of that??? Dunno...<br></div><span><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<span><br>
> There was a nice article on reddit of a parent that was in progress of teaching<br>
> Haskell to his/her 10-years old, and it was a great experience. I cannot find it anymore.<br>
> Remember, kids (motivated kids, at least) are way smarter than what school<br>
> usually seems to think.<br>
<br>
</span>Some kids are smarter, some less so. In secondary school you should have<br>
a curriculum that most students can follow.<br></blockquote><div><br><br></div></span><div>Just to be clear I'd be pleasantly surprised if someone can show haskell is a good thing for school children.<br></div><div>I dont know what is... Depends on the school and the child I guess??<br><br></div><div>On FP finally (50 years after Lisp!) making it to the abc level of CS-curricula:   <a href="http://blog.languager.org/2015/06/functional-programming-moving-target.html" target="_blank">http://blog.languager.org/2015/06/functional-programming-moving-target.html</a><br><br></div></div>
</div></div>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr">Chris Allen<br><div><span style="font-size:12.8000001907349px">Currently working on </span><a href="http://haskellbook.com" target="_blank">http://haskellbook.com</a></div></div></div></div></div></div>
</div>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div>