<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">12.07.2018 23:48, Chris Smith wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAPq5PvLSBQ0K7J-9Qqc_q6_3FFnGc=-6GVfsJMNEYG3et_q22g@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <div dir="ltr">This is a good question, and I think it depends on
        your goals.
        <div><br>
        </div>
        <div>If your goal is to inspire interest and attract children to
          programming, then you are best served by making it obvious
          what can and can't be done, and making it very difficult to
          make a mistake.  Some visual languages are very good at this,
          and Scratch, for example, is a good example.  Going even
          further, Scratch and similar languages are often used in
          situations where the students can do literally anything, and
          *something* interesting happens, inspiring that spark of
          excitement and feeling of "I did that!"  This is a magical
          moment, and it can change lives.</div>
        <div><br>
        </div>
        <div>On the other hand, building new skills is the point of
          educating.  Avoiding the need for new skills means avoiding
          the opportunity to learn.  Children often still struggle with
          precise perception.  I've seen plenty of students as old as 12
          to 13 who literally cannot see whether there's a comma in an
          expression, or whether a word is spelled "ie" or "ei", without
          extreme measures like covering the surrounding text.  Their
          brain just skips over these concerns.  Of course, they
          struggle in mathematics, and also basic language and
          communication.  Once again, one can avoid the problem and try
          to help them to be successful </div>
      </div>
    </blockquote>
    <br>
    Yes! Even more, mature brain has such selectivity too :)<br>
    We can miss something totally, because most people are thinking in
    traditional, standard ways (something like good known roads) and
    will not take new knowledge but will dispute with new knowledge and
    to try to ignore it or "destroy it mentally", but this is a slightly
    different disease ;)<br>
    <br>
    <blockquote type="cite"
cite="mid:CAPq5PvLSBQ0K7J-9Qqc_q6_3FFnGc=-6GVfsJMNEYG3et_q22g@mail.gmail.com">
      <div dir="ltr">
        <div>without needing that skill, which a visual language is
          great at.  But of course, they ultimately do need the skill in
          order to communicate in the first place!  So there's also
          value in placing them in an environment where they need to
          learn it.  When making this decision, though, it's important
          to focus on skills that are truly necessary, and not (for
          example) remembering what order to write "public static void
          main" in their Java programs.</div>
        <div><br>
        </div>
        <div>
          <div class="gmail_quote">
            <div dir="ltr">On Thu, Jul 12, 2018 at 2:16 PM Paul <<a
                href="mailto:aquagnu@gmail.com" target="_blank"
                moz-do-not-send="true">aquagnu@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 lang="RU">
                <div
class="m_6443889947064198720m_719094224839084040gmail-m_1117928639085754737WordSection1">
                  <p class="MsoNormal"><span lang="EN-GB">Wooow! Yes!!</span></p>
                  <p class="MsoNormal"><span lang="EN-GB">But today
                      there is serious competition (Smalltalk, Python; I
                      planned Scratch – but it’s for children of 7-9
                      years). I thing you are good teacher </span><span
                      style="font-family:"Segoe UI
                      Emoji",sans-serif" lang="EN-GB">😊</span><span
                      lang="EN-GB"></span></p>
                  <p class="MsoNormal"><span lang="EN-GB">Btw, what do
                      you think: what is better – textual programming or
                      visual programming for children? For me, Labview/G
                      was insight in 90s </span><span
                      style="font-family:"Segoe UI
                      Emoji",sans-serif" lang="EN-GB">😊</span><span
                      lang="EN-GB"> Today there is Luna language – it’s
                      visual too. IMHO visual programming better
                      illustrates ideas/concepts, or?</span></p>
                  <p class="MsoNormal"> </p>
                  <div
style="border-right:none;border-bottom:none;border-left:none;border-top:1pt
                    solid rgb(225,225,225);padding:3pt 0cm 0cm">
                    <p class="MsoNormal" style="border:none;padding:0cm"><b>From:
                      </b><a href="mailto:cdsmith@gmail.com"
                        target="_blank" moz-do-not-send="true">Chris
                        Smith</a><br>
                      <b>Sent: </b>12 июля 2018 г. 21:00<br>
                      <b>To: </b><a href="mailto:aquagnu@gmail.com"
                        target="_blank" moz-do-not-send="true">aquagnu@gmail.com</a><br>
                      <b>Subject: </b>Re: [Haskell-cafe] Investing in
                      languages (Was: What is yourfavouriteHaskell "aha"
                      moment?)</p>
                  </div>
                  <p class="MsoNormal"> </p>
                  <div>
                    <p class="MsoNormal">Perhaps you mean something fun
                      and visual like this? <a
                        href="https://code.world/#PhFFj32Bx0FcpQvvoVJW0xw"
                        target="_blank" moz-do-not-send="true">https://code.world/#PhFFj32Bx0FcpQvvoVJW0xw</a></p>
                    <div>
                      <p class="MsoNormal">Or this? <a
                          href="https://code.world/#PO1BKCj-kA9ztKKnE7rOueA"
                          target="_blank" moz-do-not-send="true">https://code.world/#PO1BKCj-kA9ztKKnE7rOueA</a></p>
                    </div>
                    <div>
                      <p class="MsoNormal"> </p>
                    </div>
                    <div>
                      <p class="MsoNormal">These are written in the
                        simplified variant of Haskell that I teach,
                        which uses a custom Prelude that skips type
                        classes and other advanced features, uses
                        rebindable syntax to simplify types (for
                        example, you'll see Number instead of Int,
                        Double, etc.), and automatically provides
                        graphics functions that work in the browser.</p>
                    </div>
                  </div>
                  <p class="MsoNormal"> </p>
                  <div>
                    <div>
                      <p class="MsoNormal">On Thu, Jul 12, 2018 at 1:54
                        PM Paul <<a href="mailto:aquagnu@gmail.com"
                          target="_blank" moz-do-not-send="true">aquagnu@gmail.com</a>>
                        wrote:</p>
                    </div>
                    <blockquote
style="border-top:none;border-right:none;border-bottom:none;border-left:1pt
                      solid rgb(204,204,204);padding:0cm 0cm 0cm
                      6pt;margin-left:4.8pt;margin-right:0cm">
                      <div>
                        <div>
                          <p class="MsoNormal"><span lang="EN-GB">Hmm,
                              Chris, thanks for answer. Interesting. I
                              was surprised when I first learned that
                              someone somewhere is teaching the children
                              to Haskell, but if you say so – then it’s
                              possible and may be it’s good! </span><span
                              style="font-family:"Segoe UI
                              Emoji",sans-serif" lang="EN-GB">😊</span><span
                              lang="EN-GB">  </span></p>
                          <p class="MsoNormal"><span lang="EN-GB">Sometimes
                              children don’t like right things, but like
                              fun. So, I though that more preferable to
                              show them some bright demo: UI, graphics,
                              some simple games, databases, to rise the
                              interest, you know – this feeling of first
                              code. First “wooow! It works!!!” </span><span
                              style="font-family:"Segoe UI
                              Emoji",sans-serif" lang="EN-GB">😊</span><span
                              lang="EN-GB"> Haskell, for me, looks
                              pedantic, not for fun. May be I’m not
                              right, I have not such experience. </span></p>
                          <p class="MsoNormal"> </p>
                          <p class="MsoNormal"> </p>
                          <div
style="border-right:none;border-bottom:none;border-left:none;border-top:1pt
                            solid rgb(225,225,225);padding:3pt 0cm 0cm">
                            <p class="MsoNormal"><b>From: </b><a
                                href="mailto:cdsmith@gmail.com"
                                target="_blank" moz-do-not-send="true">Chris
                                Smith</a><br>
                              <b>Sent: </b>12 июля 2018 г. 19:59<br>
                              <b>To: </b><a
                                href="mailto:aquagnu@gmail.com"
                                target="_blank" moz-do-not-send="true">aquagnu@gmail.com</a><br>
                              <b>Subject: </b>Re: [Haskell-cafe]
                              Investing in languages (Was: What is
                              yourfavourite Haskell "aha" moment?)</p>
                          </div>
                          <p class="MsoNormal"> </p>
                          <div>
                            <p class="MsoNormal">I'll answer this, since
                              I have been teaching Haskell to children
                              for six years or so. :)</p>
                            <div>
                              <p class="MsoNormal"> </p>
                            </div>
                            <div>
                              <p class="MsoNormal">I think it's
                                important to distinguish between Haskell
                                AS USED in most of the community, and
                                Haskell as it COULD be used.  I agree
                                that you don't want to teach the first
                                of those to children.  But Haskell is
                                still a great teaching choice, mainly
                                because GHC is so configurable that you
                                can create the environment you want, and
                                just build it with a Haskell compiler. 
                                With GHC plugins, this is becoming even
                                more true, but it already arises from a
                                combination of (a) very lightweight and
                                intuitive core syntax in the first
                                place, (b) great support for custom
                                preludes, and (c) the RebindableSyntax
                                extension, and the fact that so much
                                syntax is defined in terms of
                                desugaring.</p>
                            </div>
                            <div>
                              <p class="MsoNormal"> </p>
                            </div>
                            <div>
                              <p class="MsoNormal">If you're seriously
                                talking about teaching children, then
                                your concerns about web frameworks and
                                such are a bit silly.  (Unless by
                                "children" you meant mid to late teens
                                and after, in which case this becomes
                                relevant.)  "Advanced" type features are
                                also not particularly relevant (though
                                there's some fuzziness about what counts
                                as "advanced"; for instance, I've
                                recently decided it's better to teach
                                GADT syntax as the only option for
                                defining algebraic data types, even
                                though I never expect most students to
                                take advantage of the extra power of
                                GADTs.)</p>
                            </div>
                            <div>
                              <p class="MsoNormal"> </p>
                            </div>
                            <div>
                              <p class="MsoNormal">The main concern I
                                have with F#, though, is that the
                                semantics are far too complex.  It has
                                all the power of a functional language,
                                but none of the semantic simplicity. If
                                students already struggle with
                                compositional programming (and they do),
                                they struggle even more when the
                                simplest way to understand what's going
                                on -- namely, substitution -- is taken
                                away from them.  If you're going to
                                teach a computational model based on
                                sequencing actions on a global state
                                (the state being the screen, network,
                                etc.), then you might as well include
                                mutable variables in that global state,
                                and you might as well teach Python,
                                which will at least be more intuitive,
                                if not simpler.</p>
                            </div>
                          </div>
                          <p class="MsoNormal"> </p>
                          <div>
                            <div>
                              <p class="MsoNormal">On Thu, Jul 12, 2018
                                at 7:46 AM PY <<a
                                  href="mailto:aquagnu@gmail.com"
                                  target="_blank" moz-do-not-send="true">aquagnu@gmail.com</a>>
                                wrote:</p>
                            </div>
                            <blockquote
style="border-top:none;border-right:none;border-bottom:none;border-left:1pt
                              solid rgb(204,204,204);padding:0cm 0cm 0cm
                              6pt;margin:5pt 0cm 5pt 4.8pt">
                              <div>
                                <p>I am afraid that it can lead to flame
                                  again, but F# has super-capacity: you
                                  can check measuring units, type
                                  providers, computation expressions,
                                  active patterns, static/dynamic types
                                  constraints, constraints on existing
                                  method, etc... It's clean, borrows
                                  some ideas from Haskell, some are
                                  original and Haskell borrows them (but
                                  with worse implementation). IMHO for
                                  children teaching to FP F# is the
                                  best. Even more, currently C# also has
                                  a lot of FP features (<a
href="https://github.com/dotnet/csharplang/blob/master/proposals/patterns.md#arithmetic-simplification"
                                    target="_blank"
                                    moz-do-not-send="true">https://github.com/dotnet/csharplang/blob/master/proposals/patterns.md#arithmetic-simplification</a> 
                                  -- is not it super easy and beauty?).
                                  Rust is more low level: you should
                                  think about memory "management", OOP
                                  has some problems... And serious
                                  argument for children teaching: salary
                                  trends (joke sure) :-) But you can
                                  compare salary in F# and Haskell, for
                                  example - people often choice language
                                  after check current salaries in the
                                  market. Also F# is more focused on
                                  realistic tasks and business value. It
                                  lacks performance, UWP yet (but in
                                  progress)... To feel how F# is sexy
                                  compare Web application written in
                                  Websharper and in any Haskell
                                  framework. Haskell is beauty but I'm
                                  afraid its fate unfortunately will be
                                  the same as one of Common Lisp,
                                  NetBSD, etc - it's ground for ideas
                                  and experiments and has disputable
                                  design. Also it's more-more difficult
                                  to teach children to Haskell than to
                                  F#...</p>
                                <p class="MsoNormal"
                                  style="margin-bottom:12pt">IMHO is
                                  general to teach FP is more easy than
                                  to teach OOP if FP is not Haskell
                                  (some language which targets more
                                  eager/efficient/dynamic/real goals
                                  instead of abstract types playing).</p>
                                <div>
                                  <p class="MsoNormal">12.07.2018 13:28,
                                    Vanessa McHale wrote:</p>
                                </div>
                                <blockquote
                                  style="margin-top:5pt;margin-bottom:5pt">
                                  <pre>I wouldn't say Rust has a large capacity for FP. I am not familiar with</pre>
                                  <pre>F#. The thing that makes FP infeasible in Rust is not the lack of purity</pre>
                                  <pre>but rather the fact that affine types make it difficult to treat</pre>
                                  <pre>functions as first-class values.</pre>
                                  <pre> </pre>
                                  <pre> </pre>
                                  <pre>On 07/12/2018 01:40 AM, Brett Gilio wrote:</pre>
                                  <blockquote
                                    style="margin-top:5pt;margin-bottom:5pt">
                                    <pre>Tony,</pre>
                                    <pre> </pre>
                                    <pre>I am curious on your attitude towards multi-paradigm and ML-like</pre>
                                    <pre>languages. I agree that functional programming is easily the better of</pre>
                                    <pre>the bundle in many forms of application logic and elegance (which is</pre>
                                    <pre>why I have come to love Scheme and Haskell), but do you see any room</pre>
                                    <pre>for those languages like F# or Rust which have large capacities for FP</pre>
                                    <pre>but are either functional-first (but not pure) or a hybrid?</pre>
                                    <pre> </pre>
                                    <pre>Brett Gilio</pre>
                                    <pre> </pre>
                                    <pre>On 07/12/2018 01:35 AM, Tony Morris wrote:</pre>
                                    <blockquote
                                      style="margin-top:5pt;margin-bottom:5pt">
                                      <pre>  I used to teach undergrad OOP nonsense. I have been teaching FP for 15</pre>
                                      <pre>years. [^1]</pre>
                                      <pre> </pre>
                                      <pre>The latter is *way* easier. Existing programmers are more difficult than</pre>
                                      <pre>children, but still way easier to teach FP than all the other stuff.</pre>
                                      <pre> </pre>
                                      <pre>[^1]: Canberra anyone? <a href="https://qfpl.io/posts/2018-canberra-intro-to-fp/" target="_blank" moz-do-not-send="true">https://qfpl.io/posts/2018-canberra-intro-to-fp/</a></pre>
                                      <pre> </pre>
                                      <pre> </pre>
                                      <pre>On 07/12/2018 04:23 PM, Joachim Durchholz wrote:</pre>
                                      <blockquote
                                        style="margin-top:5pt;margin-bottom:5pt">
                                        <pre>Am 11.07.2018 um 16:36 schrieb Damian Nadales:</pre>
                                        <blockquote
                                          style="margin-top:5pt;margin-bottom:5pt">
                                          <pre> </pre>
                                          <pre>I speak only from my own narrow perspective. I'd say programming is</pre>
                                          <pre>hard, but functional programming is harder.</pre>
                                        </blockquote>
                                        <pre> </pre>
                                        <pre>Actually it's pretty much the opposite, I hear from teachers.</pre>
                                        <pre> </pre>
                                        <blockquote
                                          style="margin-top:5pt;margin-bottom:5pt">
                                          <pre>Maybe that's why Java replaced Haskell in some universities</pre>
                                          <pre>curricula</pre>
                                        </blockquote>
                                        <pre>The considerations are marketable skills.</pre>
                                        <pre>A considerable fraction of students is looking at the curriculum and</pre>
                                        <pre>at job offers, and if they find that the lists don't match, they will</pre>
                                        <pre>go to another university.</pre>
                                        <pre>Also, industry keeps lobbying for teaching skills that they can use.</pre>
                                        <pre>Industry can give money to universities so this gives them influence</pre>
                                        <pre>on the curriculum (and only if they get time to talk the topic over</pre>
                                        <pre>with the dean). This aspect can vary considerably between countries,</pre>
                                        <pre>depending on how much money the universities tend to acquire from</pre>
                                        <pre>industry.</pre>
                                        <pre> </pre>
                                        <blockquote
                                          style="margin-top:5pt;margin-bottom:5pt">
                                          <pre><a href="https://chrisdone.com/posts/dijkstra-haskell-java" target="_blank" moz-do-not-send="true">https://chrisdone.com/posts/dijkstra-haskell-java</a>. For some reason</pre>
                                          <pre>most programmers I know are not scared of learning OO, but they fear</pre>
                                          <pre>functional programming.</pre>
                                        </blockquote>
                                        <pre> </pre>
                                        <pre>Programmers were *very* scared of OO in the nineties. It took roughly</pre>
                                        <pre>a decade or two (depending on where you put the starting point) to get</pre>
                                        <pre>comfortable with OO.</pre>
                                        <pre> </pre>
                                        <blockquote
                                          style="margin-top:5pt;margin-bottom:5pt">
                                          <pre> </pre>
                                        </blockquote>
                                        <pre>   I think the reason might be that OO concepts</pre>
                                        <blockquote
                                          style="margin-top:5pt;margin-bottom:5pt">
                                          <pre>like inheritance and passing messages between objects are a bit more</pre>
                                          <pre>concrete and easier to grasp (when you present toy examples at least).</pre>
                                        </blockquote>
                                        <pre> </pre>
                                        <pre>OO is about how to deal with having to pack everything into its own</pre>
                                        <pre>class (and how to arrange stuff into classes).</pre>
                                        <pre>Functional is about how to deal with the inability to update. Here,</pre>
                                        <pre>the functional camp actually has the easier job, because you can just</pre>
                                        <pre>tell people to just write code that creates new data objects and get</pre>
                                        <pre>over with it. Performance concerns can be handwaved away by saying</pre>
                                        <pre>that the compiler is hyper-aggressive, and "you can look at the</pre>
                                        <pre>intermediate code if you suspect the compiler is the issue".</pre>
                                        <pre>(Functional is a bit similar to SQL here, but the SQL optimizers are</pre>
                                        <pre>much less competent than GHC at detecting optimization opportunities.)</pre>
                                        <pre> </pre>
                                        <blockquote
                                          style="margin-top:5pt;margin-bottom:5pt">
                                          <pre>Then you have design patterns, which have intuitive names and give</pre>
                                          <pre>some very general guidelines that one can try after reading them (and</pre>
                                          <pre>add his/her own personal twist). I doubt people can read the Monad</pre>
                                          <pre>laws and make any sense out of them at the first try.</pre>
                                        </blockquote>
                                        <pre> </pre>
                                        <pre>That's true, but much of the misconceptions around monads from the</pre>
                                        <pre>first days have been cleared up.</pre>
                                        <pre>But yes the monad laws are too hard to read. OTOH you won't be able to</pre>
                                        <pre>read the Tree code in the JDK without the explanations either.</pre>
                                        <pre>_______________________________________________</pre>
                                        <pre>Haskell-Cafe mailing list</pre>
                                        <pre>To (un)subscribe, modify options or view archives go to:</pre>
                                        <pre><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank" moz-do-not-send="true">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a></pre>
                                        <pre>Only members subscribed via the mailman list are allowed to post.</pre>
                                      </blockquote>
                                      <pre> </pre>
                                      <pre> </pre>
                                      <pre> </pre>
                                      <pre> </pre>
                                      <pre>_______________________________________________</pre>
                                      <pre>Haskell-Cafe mailing list</pre>
                                      <pre>To (un)subscribe, modify options or view archives go to:</pre>
                                      <pre><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank" moz-do-not-send="true">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a></pre>
                                      <pre>Only members subscribed via the mailman list are allowed to post.</pre>
                                      <pre> </pre>
                                    </blockquote>
                                    <pre>_______________________________________________</pre>
                                    <pre>Haskell-Cafe mailing list</pre>
                                    <pre>To (un)subscribe, modify options or view archives go to:</pre>
                                    <pre><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank" moz-do-not-send="true">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a></pre>
                                    <pre>Only members subscribed via the mailman list are allowed to post.</pre>
                                  </blockquote>
                                  <pre> </pre>
                                  <p class="MsoNormal"
                                    style="margin-bottom:12pt"> </p>
                                  <pre>_______________________________________________</pre>
                                  <pre>Haskell-Cafe mailing list</pre>
                                  <pre>To (un)subscribe, modify options or view archives go to:</pre>
                                  <pre><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank" moz-do-not-send="true">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a></pre>
                                  <pre>Only members subscribed via the mailman list are allowed to post.</pre>
                                </blockquote>
                                <p class="MsoNormal"> </p>
                              </div>
                            </blockquote>
                          </div>
                          <p class="MsoNormal" style="margin-left:4.8pt">_______________________________________________<br>
                            Haskell-Cafe mailing list<br>
                            To (un)subscribe, modify options or view
                            archives go to:<br>
                            <a
                              href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe"
                              target="_blank" moz-do-not-send="true">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
                            Only members subscribed via the mailman list
                            are allowed to post.</p>
                        </div>
                      </div>
                    </blockquote>
                  </div>
                  <p class="MsoNormal" style="margin-left:4.8pt"> </p>
                  <p class="MsoNormal"> </p>
                </div>
              </div>
            </blockquote>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>