[HN Gopher] Hedy is a gradual programming language that helps ki...
___________________________________________________________________
Hedy is a gradual programming language that helps kids to learn
Python
Author : edtechdev
Score : 91 points
Date : 2021-04-26 16:26 UTC (6 hours ago)
(HTM) web link (www.hedycode.com)
(TXT) w3m dump (www.hedycode.com)
| smartbit wrote:
| 4 month ago covered https://news.ycombinator.com/item?id=25249471
| antattack wrote:
| In my opinion Hedy badly needs syntax highlighting, along with
| visible indentation marks (space and tabs).
| vanderZwan wrote:
| I'm sure the developers don't mind that feature being added at
| some point either, but they aren't prioritizing it. It's a
| research language that is being designed as they are doing
| workshops with children to see what does and does not work.
| Figuring out what helps them learn best has priority over
| adding features just because we're familiar with them as
| experienced programmers.
| lacker wrote:
| Just based on my experience teaching elementary-school kids
| things, I think kids would be most helped by making an iPad-
| native environment for programming. Things like using a cursor in
| a multi-line text input are not natural for kids in early grades
| even when I think mentally they have the problem-solving ability
| to start programming. It ends up being a "tax" on teaching things
| and they spend more of their time struggling with the interface
| than they do struggling with the actual programming concepts.
|
| Plus it is just really boring to struggle with syntax and typing.
| It is much more interesting to think about how to get a program
| to work, and kids are only really going to learn things well if
| they find it interesting. At least my kids.
| quacked wrote:
| Out of curiosity, why do kids need to learn programming early
| at all? It seems like you could just wait until cursor and
| multi-line text entry wasn't difficult for them to comprehend,
| and start teaching them then.
|
| I could be totally wrong, but I've never seen an instance where
| kids exposed to dumbed-down "reduced complexity" material
| outperform those that weren't, except in sports and art. You
| can teach the mechanics of a tennis swing with small racquets
| and oversized balls, but can you really teach pointers with an
| iPad environment?
| lacker wrote:
| Well compare to mathematics for example, you could wait until
| kids are good at using a pencil and paper to start teaching
| them mathematics. But there's really no need, with modern
| iPad apps you can teach addition, subtraction, multiplication
| and some of the associated reasoning skills before kids have
| the motor skills to be able to write numerals well. Do they
| _need_ to learn math this early? I don 't know, why not try?
| If you can get kids to like learning things then why not.
| watwut wrote:
| Because when you are older, people treat programming as
| talent and not as skill to be learned.
|
| So if you don't come into it already knowing how to think,
| you will be written off as "not technical type" or some such.
| And you will write yourself off too.
|
| Pointers don't matter at all. Loops and ifs matter a lot.
| quacked wrote:
| I certainly agree with that, but I also believe that the
| "writing off" is a the direct result of a system that takes
| it upon itself to distill the utter chaos of human
| knowledge into a learnable "system" that can be fed to
| humans of different ability levels.
|
| "Teaching kids computing through iPad apps" sounds like
| more systematic reduction. The kids that don't get it won't
| care, and the kids that do get it would have got regular
| computing, too.
| schwartzworld wrote:
| > I've never seen an instance where kids exposed to dumbed-
| down "reduced complexity" material outperform those that
| weren't
|
| Isn't literally every subject taught exactly this way? Books
| for toddlers don't have chapters for a reason. Practicing
| basics as early as possible, means that you don't have to
| think about little things when you move on to more complex
| subjects. You spent a long time practicing addition before
| anybody even told you about the concept of multiplication.
| Jtsummers wrote:
| Yep. We don't start 1st graders with calculus, we start
| them with arithmetic. Variables are called variables by
| late elementary school, algebra is more properly taught
| _as_ algebra in 8th or 9th grade (US), with geometry, trig,
| and calculus following that.
|
| You can develop a similar plan for teaching programming
| that starts with basics and progressing (variables, linear
| control flow (aka, no conditionals or loops), conditionals,
| loops, functions/subroutines, complex types like records,
| recursion, modules and classes; in roughly that order). You
| aren't hiding anything, you aren't misstating anything, you
| just don't move on to advanced things until it's time to.
| Of course, this progression would probably be a _lot_
| faster than the arithmetic - > calculus progression.
| quacked wrote:
| "Until it's time to" is a completely arbitrary choice,
| though. I still am not convinced that it's tremendously
| important to introduce loops and conditionals before
| typing symbols into a computer is introduced. Would a
| class of students introduced to pre-programming seriously
| outperform a class of students not introduced to pre-
| programming in the long term? Certainly the short-term
| gains would be obvious, but I don't think there would be
| any difference in the long term, and the brilliant
| students from each group would be roughly equally matched
| after many years, with the primary differentiating
| factors being genetic ability and amount and type of
| studying, like it is in most other subjects.
|
| The ex-Soviets I know speak reverently of the superiority
| of Soviet mathematics education, which begun much later
| than American mathematics education, and was far more
| rigorous.
|
| There's certainly nothing wrong if a child wants to
| explore pre-programming on their own, but I think there
| is little to no value in deliberately exposing them to it
| in a bastardized form in order to "prepare them for what
| they'll see later".
|
| Also, the assumption that there actually should be an
| arithmetic -> calculus progression is itself a pernicious
| issue- reference page 24 of this PDF for an extremely
| accurate takedown of the American mathematics curriculum:
| https://www.maa.org/external_archive/devlin/LockhartsLame
| nt....
| quacked wrote:
| The reason that books for toddlers lack chapters is that
| authors believe that toddlers aren't ready to comprehend
| chapters, not that it is an immutable truth of the universe
| that humans can't handle a separated narrative structure in
| writing until they've orbited the sun five or six times.
| Soviet children started Pushkin right when they started
| school- when I asked my Russian teachers for good examples
| of Russian children's books, they said that the concept
| didn't really exist when they were children, because they
| started studying real literature pretty much as soon as
| they started school.
|
| The idea that there are "basics" that can be safely ignored
| once learned is patently false. Everything I've read from
| great performers in any field- piano, cooking, mathematics,
| physics, etc- contains constant encouragement to return to
| and refine one's understanding of the fundamental skills of
| the practice. I did indeed spend a long time practicing
| addition before anyone informed me that it was time to
| "move on" to multiplication, and it wasn't until I
| graduated college with a degree in aerospace engineering
| that I had read a few books about the history of
| mathematics and found out that the manipulation of Arabic
| numerals via "addition" or "multiplication" was simply
| shorthand for counting, which itself is a fundamental
| mathematical art. What was taught to me as "multiplication"
| is actually "one particular algorithmic notation for
| representing the counting of multiple sets", not "objective
| mathematical law".
|
| Had I disabused myself of the notion that there was any
| part of mathematics that I could "stop thinking about"
| because they were "little", I would have made a much better
| showing in school.
| vanderZwan wrote:
| > _Out of curiosity, why do kids need to learn programming
| early at all?_
|
| Simon Peyton Jones gave a great lecture on this topic at
| Strange Loop a few years ago. Basically, "computer science"
| can be reframed as the study of information, computation and
| communication. Thinking about these subjects rigorously and
| solving the problems surrounding them is a foundational skill
| that is much more broadly applicable than just in
| programming, and really does not need to involve computers at
| all (as he shows in his lecture.
|
| > _I could be totally wrong, but I 've never seen an instance
| where kids exposed to dumbed-down "reduced complexity"
| material outperform those that weren't, except in sports and
| art._
|
| I'm not sure I follow. I mean, that's how children learn to
| read and write, it is not? Or how they learn maths at school:
| one step at a time.
|
| [0] https://www.youtube.com/watch?v=y-xgWLYQc4g
| quacked wrote:
| I have no quarrel with the assertion that computing is one
| of if not the single most important field to learn in
| modern society; what I am suspicious of is that there's any
| long-term performance benefit of making children learn
| "pre-computing" through iPad apps at an age where they're
| not ready to learn real computing.
|
| Of course if a particular child shows great initiative and
| engagement with pre-computing, they'll do well with real
| computing, but then why not just start with computing? For
| the ones that don't care, why not let them continue reading
| books they enjoy and playing outside?
|
| That's how American children learn to read and write. It's
| not how Russian children used to learn to read and write;
| they started school much later, and immediately began
| fairly mature studies of classic Russian literature and
| poetry (Pushkin, for example).
| einpoklum wrote:
| > making an iPad-native environment for programming
|
| Why be US-centric?
|
| > Things like using a cursor in a multi-line text input are not
| natural for kids in early grades
|
| Sure it is. In past decades, many children start working their
| family computer at ages 6-10. Maybe they started with games
| like Space Invaders or Digger or Xonix, but soon enough they
| were editing text files.
|
| > it is just really boring to struggle with syntax and typing
|
| Yeah, so let's not teach children to express themselves in
| writing... that stuff is boring.
| smoldesu wrote:
| This is great. I think the biggest misunderstanding with
| computers is how abstraction works, and why we use it. Hedy seems
| to be a pretty good example of why people don't need to see the
| big picture all at once. One of the biggest thing that stopped me
| from really digging in and writing code was the fear that I
| didn't fully understand what was going on, so abstracting away
| the complicated backend seems like a great way to foster a sense
| of confidence in a young programmer. My only concern is how fast
| this can be learned: while it seems like a great track to follow
| for a few years, one of the things that actually made me get into
| programming was sitting down and reading some documentation,
| point blank. It takes a few days, but the deep dive is one of my
| favorite ways to learn a language.
| zestyping wrote:
| Despite the criticism in the older HN thread, I actually found
| this talk pretty compelling. In particular, the idea that you
| start with a language level that is missing capabilities so that
| you _directly experience_ the problem and then understand the
| motivation for the additional complexity of the next level.
|
| When I taught Python, beginning students would spend a _huge_
| amount of time just struggling with how to quote strings. Why do
| strings show up with \n in them sometimes and actual line breaks
| sometimes? Why are there sometimes backslashes that appear and
| disappear in front of other backslashes or quotation marks? Why
| does the output of typing "print x" give you something different
| from "x" (which actually shows you repr(x))? There are very good
| reasons for all of this, but it's a lot to try to explain and
| absorb at once.
|
| Quoting strings is second nature to me. But to understand why
| it's necessary, you have to imagine what happens when you don't
| quote strings and then you run into trouble like "how do I write
| a quotation mark?" It's just harder to _imagine_ encountering
| that problem and then _imagine_ how you would solve it and what
| might work or not work, than it is to actually _experience_ the
| problem and work with a concrete instance of it.
|
| The switch from print as a statement (no parentheses) to print as
| a function in Python 3 (parentheses required) feels like a
| problem with some similarities. To the beginner, Python 3 syntax
| has just added some superflous extra punctuation to print(). To
| experienced programmers, it makes sense to treat print as a
| function because then you can pass it to other functions, re-
| assign it, and so on -- so we underestimated its impact on
| beginners. To see "print(3)" and answer "why did you have to
| write (3) instead of 3?" you have to explain higher-order
| functions or monkey-patching or something that a beginner doesn't
| know about, and they have to imagine the hypothetical situation
| in which that would be necessary. That takes a lot more work and
| abstract reasoning than having the situation right in front of
| you and discussing what to do about it. It's not much of a leap
| from there to postponing the extra syntax until we have the
| concepts to talk about why we need it.
| vanderZwan wrote:
| Felienne Hermans, who seems to be leading this research effort,
| is also writing _" The Programmer's Brain"_. It has a sort-of
| "early access" version that I've been reading as chapters have
| been coming out. From what I've read so far she has been doing
| her homework in terms of what science really knows about
| learning, memory and so on. What I really appreciate is that
| she also looks outside of the field of programming for answers
| to questions surrounding how learning and thinking "works".
|
| If she has the same approach to Hedy (and I have no reason to
| doubt that) then I hope that the research being done with this
| project will bring in some new insights from outside of
| programming (and ideally also come up with some of their own,
| but I have a hunch that there's a ton of low-hanging fruit
| outside of the programming world that could be useful here).
|
| https://www.manning.com/books/the-programmers-brain
| einpoklum wrote:
| > why did you have to write (3) instead of 3?
|
| This question does not get asked if print is presented as a
| function from the get-go.
|
| I can see where you're coming from about letting
| students/children experience the problem themselves before
| being fed a solution, but in this case the problem only arises
| due to your having been taught something some way. It is not
| inherent.
| zestyping wrote:
| Beginners typically use "print" before they know what a
| function is.
| irrational wrote:
| >the idea that you start with a language level that is missing
| capabilities so that you directly experience the problem and
| then understand the motivation for the additional complexity of
| the next level.
|
| This is how I want documentation written for features added to
| a language.
|
| For example, why were arrow functions added to JavaScript? The
| documentation should explain the problem and motivation for why
| it was added to the language with demo code so someone can
| directly experience the problem.
|
| I want this for every single feature added after the 1.0
| release. Not just for JS, but for every language, library, and
| framework.
| [deleted]
| Jtsummers wrote:
| This is commonly referred to as a "rationale" document. It
| exists for some languages, but not all, and helps to
| establish both why something has been done and why something
| else has not.
|
| http://www.ada-auth.org/standards/12rat/html/Rat12-TOC.html
|
| That is the Ada 2012 Rationale, for example. It details
| changes to the language standard with examples and
| explanations, as well (in the Epilogue sections) as things
| that were dropped. It would definitely be nice to have this
| for more languages, especially as it can help you grok what's
| changed in a specific version/edition/whatever (not just a
| full Language X rationale, but Language X 2.0's rationale for
| changes over Language X 1.0).
| travisjungroth wrote:
| Python Enhancement Proposals (PEPs) are very good at this in
| my opinion.
| julian_t wrote:
| I try to do something this when I'm teaching classes. Do the
| "why should I listen to this? What's it going to get me?" bit
| right at the start.
|
| Give some examples so folks can decide if it's relevant to
| them, then show them how to do it (with follow-along coding
| or a hands-on lab if at all possible), and only at the end
| dive into how it works.
|
| That way, even if people zone out partway through, they may
| have learned something useful.
| schwartzworld wrote:
| Your first paragraph is exactly why Lua is so good for
| beginners. You want arrays? Implement them. You want classes?
| Implement them! On the other hand, the one built-in data
| structure is powerful and can do a lot without implementing
| these other things.
| qyi wrote:
| Python is just for playing with strings, which is a contrived
| problem brought about by UNIX-style OS. And other confusing
| non-fundamental, stuff that just leads to months of cognitive
| dissonance when one inevitably philosophizes over it: objects,
| classes, exceptions, the ability to modify global variables
| from other modules, metaclasses, etc.
|
| > There are very good reasons for all of this, but it's a lot
| to try to explain and absorb at once.
|
| The reason is because you're embedding strings into the
| program, which is just a string. There's no reason languages
| have to be like this. The ironic part is that developers are
| just like children and do not understand the significance of
| this either, which is why string injection vulns still exist
| today.
| ta9999 wrote:
| I'm still not convinced Python's syntax is great for beginners.
| xtracto wrote:
| Could you elaborate why? Personally I agree, and the reasons I
| have is the use of white-spaces as part of the syntax (being
| one of the only modern languages to do so) and the need to
| explicitly add the 'self' keyword in class methods.
|
| I would still lean on one of the modern Logo's to learn kids or
| non-technical people to program, such as MSWLogo or NetLogo (I
| used to teach programming to people from Social Sciences using
| Netlogo).
| z3ncyberpunk wrote:
| Cool. thanks for sharing.
| Wowfunhappy wrote:
| I ran through the demo for a bit. It's an interesting idea, but
| I'm very much not into changing the rules out from under the
| user. That creates an unnecessary layer of complexity, and
| prohibits exploration.
|
| This might seem a little far afield, but I've been playing a lot
| of Baba Is You lately. For a game that's all about rewriting
| rules, a lot of logic is completely arbitrary. Why does "Stop"
| take precedence over "Defeat", and why does "Rock is Rock" take
| precedence over "Rock is Water"? In the end, it doesn't matter,
| because the game is _consistent_ , so you learn the rules once
| and can rely on that behavior.
| smnplk wrote:
| I don't think the goal should ever be "to learn Python". It's
| never about syntax or programming language. It's not about
| learning "how to code" either. It's about learning what can be
| done and how things work. What needs to come before how.
___________________________________________________________________
(page generated 2021-04-26 23:01 UTC)