Hacker News new | past | comments | ask | show | jobs | submit login

Well, this is not the n-th visual block language but an IDE with realtime reruns of modified code.

Tangentially, but not so much: I was talking with a 17 yo last weekend. She teached Python herself a couple of years ago and they are teaching it now in her class. She can't understand how her classmates can have difficulties understanding

  x = 5
  y = 6
  z = x + y
I asked the value of z to a 30 yo that was listening to the conversation and he first answered 5 + 6, then looked at us, thought again and said 11.

The student then told me that some of the other students eventually understood that z takes the value of 11 but their question was "how a machine can do that" and nobody answered to them. I wonder if a little of assembler on a toy CPU could be a better starting point. For example this Machine Code for Kids card game [1] They are selling the cards from the home page of the site (I'm not affiliated with them, I just bought a few decks.)

Or a two bits binary adder with logic gates.

[1] https://punkx.org/4917/guide.html




I sometimes use a Turing Tumble to demonstrate this: https://upperstory.com/turingtumble/

I've also had occasional success first convincing them they know how to add "mindlessly", by just manipulating symbols, and then explaining that we can have machines do it mindlessly, too. I don't use those words, ofc.

For example, you might ask them "Imagine you had a younger sibling who couldn't add. Maybe they didn't even know what numbers were. Could you teach them how to add by just telling them what symbols to write down as they looked through the symbols in the addition problem? Maybe there's an index card labeled '6+3' and on it is written '9'. You tell them to look for the correct index card and write down the corresponding symbol."

You can also explain binary to any interested student who is 13+ and then the idea that a machine can do it becomes a lot easier.

This video of Richard Feynman explaining how computers works is very good: https://www.youtube.com/watch?v=EKWGGDXe5MA

He uses a metaphor I've gotten a lot of mileage out of. Imagine you have a clerk who can add and multiply like a regular person. Now imagine there's someone else who knows only how to add and count, but have no idea what multiplication is.

If they can add and count fast enough, it'll look to an outsider like they not only know what multiplication is, but they can do any multiplication problem almost instantly.

Computers are like that: dumb but fast.

If they do something fast enough they give the illusion of "understanding", kind of like movies give the illusion of motion by swapping out still images fast enough.


>> She can't understand how her classmates can have difficulties understanding

Because most people are completely illiterate with respect to mathematics. I wouldn't hold high hopes on their ... whatever the opposite of "functional illiteracy" is.

One idea in case you talk to that "17 yo" again. Ask her to ask her classmates to compute "{{2} over {3}} over {4} + {5} over {{6} over {7}} = ?", here's a visual view of this operation with fractions: https://imgur.com/IqhEsmX

I bet the discombobulated by "z = x + y" also get flabbergasted by fractions. If so, it's not they have trouble learning programming. They have trouble learning anything, q.e.d.


> Because most people are completely illiterate with respect to mathematics.

Maybe, but...

>>The student then told me that some of the other students eventually understood that z takes the value of 11 but their question was "how a machine can do that"

... it's possible their block wasn't math, but they were hung up on the fact that they didn't think a *computer" could do math like that.

> They have trouble learning anything, q.e.d.

I doubt that. There are probably a dozen other more plausible reasons.


I would be very very surprised (and very very disappointed) if anyone is confused and/or surprised that a computer can do basic addition.

If those sorts of people exist then they’d be totally blown away at the capabilities of a pocket calculator.


That still leaves questions that ideally the class should explain:

- How does the computer understand that it needs to add

- How can the computer go from these 3 lines of text to "sure, let's add"

- Why does text even mean anything to the computer

- For that matter, sure it can add, but HOW? It's not like it has a pencil and paper.

Because indeed the infrastructure between these 3 lines of text and the addition is not trivial. These are legitimate questions.


I said:

"... they didn't think a *computer" could do math like that."

Emphasis on "like that" meaning laid out like that. Context can affect people's reasoning. Maybe they've never seen code.


I’m not really sure I get the distinction but I guess this is just one of those occasions that I’m just going to struggle to relate to.

Thanks for sharing the anecdote though. :)


> it's not they have trouble learning programming. They have trouble learning anything

sheesh


"how a machine can do that" > "nobody answered" is a really key takeaway here.

Do teachers understand coding enough to answer basic questions like that? I'm curious about whether they do.


Not really. But based on conversations I've had with folks who have worked on staffing such classes in schools, it is a known trade-off: A teacher who cannot answer all tech questions is better than a tech person who cannot teach. If someone exists who can do both, that is wonderful, but if you have to choose... choose a teacher.


From experience, no.

When you have to correct their code you know their ability.


Maybe some if you get lucky and find someone who's really into the subject, but it certainly wouldn't be a requirement because the people hiring for that position don't think that way. And I imagine the Venn diagram of people who know that and people who are willing to put up with how high school teachers get treated by The System (assuming we're talking about the US and not Finland) instead of getting a job in tech is pretty small.


I suspect there's some confusion here that it makes sense to iron out instead of jumping to conclusions. Maybe a pedagogical problem. I'm not so sure talking about logic gates or assembly is a good idea as that is an implementation detail. Programming is something you can do on pen and paper; there's a distinction between programming and automation.

What would happen if you take away the computer and speak strictly in the language of arithmetic? It seems they would have no trouble given the the eventual answer of 11. Perhaps they need to hear that that the computer can automate these operations, how it happens under the hood is a separate question that can be addressed separately. It is a valid question, of course, and perhaps its a sign of fascination. That would be good, but needs to be tempered by patience.


Been an old fart, I started coding on the C64 in 6502.

It wasn’t that hard to learn enough and, given I was cracking writing crack-intros, it has helped me hugely in the modern world. As an example, threading is child’s play because I did VBL interrupts.

However, the institutions today naturally teach something more relevant to getting a job as they did in my day (68k, Turbo Pascal and some C).


My first thought in this context was this is a 9th grade math problem, not programming. If the problem relating it has to do with how a computer can do it - do they not allow calculator use anymore?

I can not imagine that schooling has gone so far backwards with so many advances, or at the least I really hope that it has not. I was not even in advanced math courses and was/am average at best when it comes to math and would have thought the confusion would happen when getting to something like:

    x = "hello" 
    y = "world!" 
    z = x + " " + y
where it stops looking like something your entry level high school math class has you doing 30 odd problems a day on.


I suspect that Assembly doesn't click either if you don't know logic gates. My granddad was an impulse electronics guy, so before receiving a PC I already knew how transistors, triggers, counters, registers, adders work. He built a simple "CPU"-like thing from some journal out of ICs and explained how it works step by step. Later it helped to clear the gaps between `z = x + y`, `adc b` and something =▯- and -|< like.


Scratch has extra blocks for such things as:

set variable to [value]

change variable by [value]

which imo greatly reduce such ambiguities.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: