[00:00.000 --> 00:16.720] Okay, 10-20. Welcome everyone. Everyone can hear me right? Good. Welcome to my talk about [00:16.720 --> 00:23.080] Heady. But first of all, I promise to wave to my wife. She's watching at home. Can you [00:23.080 --> 00:31.160] all say hi, Susan? She never thought this would ever happen, being talked to from the [00:31.160 --> 00:41.960] biggest open-source conference in the world. She's at the couch with a broken ankle. Okay, [00:41.960 --> 00:51.000] my name is Mark Heisen. I'm a lecturer in IT at Applied University in the Netherlands. [00:51.000 --> 00:59.960] I'm doing, oh well, I had this wonderful new kitchen. And I'm doing this talk about Heady. [00:59.960 --> 01:09.800] And Heady is a gradual, multilingual programming language for teaching. Instead of all the other [01:09.800 --> 01:17.800] languages here, they're for learning, I think. This one's for teaching, specific. And it's [01:17.800 --> 01:27.800] multilingual. And why is it here? It was invented and usually mostly built by Felina [01:27.800 --> 01:35.640] Hermans, a professor in the Netherlands. She's a professor mainly in how do we learn programming. [01:37.480 --> 01:44.760] She wrote a book about it. You should definitely read it. What was it? The program is Brain. [01:44.760 --> 01:50.360] You become a really better programmer by just reading that. But how did she come to this? [01:51.000 --> 01:58.440] Somewhere in the past, for her it was 2013, for me in 2019, there was a group of children [01:58.440 --> 02:06.040] that wanted to learn programming. And, well, we program. So we said, I'll teach it. [02:08.040 --> 02:13.720] That's pretty easy. We started to think, how do you teach programming? How were we taught [02:13.720 --> 02:25.400] programming? Well, we weren't. We just sat in front of a computer with a cursor. And in my case, [02:25.400 --> 02:31.480] I started typing hexadecimal coding. I typed over from the nibble or the byte. Those are [02:32.120 --> 02:37.960] magazines. Some of you might know. Probably not. I see some nodding, but okay. [02:37.960 --> 02:46.040] And this would result in three things. It either worked. Those moments were pretty sparse. [02:47.640 --> 02:53.800] It wouldn't work. Or it said beep. Those were the three options I had. [02:54.600 --> 03:01.080] Felina was a little luckier. I was a few days or a few years later a little luckier. We did not have [03:01.080 --> 03:10.200] a teacher, but we had a book. In Felina's case, a book of basic program. And once you get to this, [03:10.920 --> 03:16.520] well, you can read it. You can read it. It's plain English. To us programmers, [03:16.520 --> 03:24.920] this is plain English. It even has line numbers. So if there is an error, it actually tells you [03:24.920 --> 03:34.280] it's on line number 120. And it even puts out some text telling you what's wrong. Wow. Compilers [03:34.280 --> 03:43.160] are perfect teachers. That's what we thought. This is how we learned. We never realized that 90% [03:43.160 --> 03:50.920] or 99% of the people didn't think this. And they quit programming. They never got anywhere [03:50.920 --> 04:01.720] further than beep. So most of the coding dojos or code clubs start using scratch. [04:02.680 --> 04:10.760] It's pretty easy. It takes a lot of the syntax away by using block programming. You can actually [04:10.760 --> 04:17.080] ask children to build this. And some of them will say, oh yeah. And some of them will say, [04:17.080 --> 04:25.240] when they're 14 or 15, scratch is for kids. If I Google code, it never looks like this. [04:25.240 --> 04:35.560] I want to do the real stuff. I want to do Zimzalabim. So Felina started coding with this [04:36.600 --> 04:43.480] sort of Python. And she said, the first thing I'd like to learn is input and output. [04:43.480 --> 04:52.200] She is a teacher. She knows how to teach baby steps. The first thing is input and output. [04:52.760 --> 04:59.640] Let's use some output. Print, hello, everyone. Enter, and voila. Hello, everyone. Children [04:59.640 --> 05:08.040] really like this. It's easy. Unless there's some red scribbling below, they don't care. They still [05:08.040 --> 05:16.520] press enter. And this lovely teacher tells them some mumble jumble and then in line five, [05:16.520 --> 05:23.400] name print is not defined. And the children will ask, well, I did define print. If they [05:23.400 --> 05:32.920] understand English, only if they understand it, mine don't. They're from eight years old and up. [05:32.920 --> 05:38.760] They don't know. They don't know what it is about. And they don't recognize that there's a capital [05:38.760 --> 05:49.320] P in there. This one's even worse. It's missing a parenthesis at the end. And your lovely compiler [05:49.320 --> 05:58.360] will tell you some empty lines and then unexpected EOF while parsing. This eight-year-old kid asked [05:58.360 --> 06:09.480] me, what is parsing? Try explain parsing while print is not even in their minds yet. It's not [06:09.480 --> 06:17.480] that easy. There's too much going on, too much interference in learning. This is not a way of [06:17.480 --> 06:23.880] learning. And there's even a better one since we're using Python. Did anybody see it shift a [06:23.880 --> 06:33.240] little? There's a space in there. Well, Python knows it's not supposed to be there. Unexpected [06:33.240 --> 06:44.760] indent. Once I was finished explaining parsing, this was my next problem. So compilers are lovely [06:44.760 --> 06:52.360] teachers. Okay, that was true for me. That was true for some of you. And the 99% of the others [06:52.360 --> 07:02.920] that didn't make it to this conference was not a lovely teacher. The next phase, if I get through [07:02.920 --> 07:11.240] to input and output, the next one is iteration, repetition. Four i in range, four print i. [07:12.680 --> 07:20.520] Well, I can explain that, I think. I have an old hour. Classes are an hour. Just one hour to [07:20.520 --> 07:28.200] explain repetition. Well, the kids only see colons, brackets and spaces. And they mumble, [07:28.200 --> 07:34.360] jumble them through each other. I can give them an example and they can press run. And they say, [07:34.360 --> 07:41.480] okay, okay, but it can never reproduce this, not in an hour at least, not my kids. Maybe [07:41.480 --> 07:48.680] some others can, but not in my class. Syntax creates too much cognitive load. They have to [07:48.680 --> 07:53.000] remember too much things to actually get to the stuff I want them to learn. [07:56.200 --> 08:04.280] This is not new to programming. This is true for any language. It's true for math. How did you do [08:04.280 --> 08:12.520] that? Well, we just start with small bits. If you start writing, you write an a and an i and [08:12.520 --> 08:19.160] an n and an e. And we would say to the kid that produced this, wow, that's a lovely a. Oh, and [08:19.160 --> 08:26.600] you already made a word in. They're not separated much. It's what's good. That's good. And that [08:26.600 --> 08:33.560] e, it's wonderful. It's even nicely on the line. Three complements, four complements, [08:33.560 --> 08:41.560] and a lot of learning. The next thing they know is they can create words, cat, in, tree. And once [08:41.560 --> 08:49.160] they grasp that, we're going to make it a little harder. We start sentence with a capital letter. [08:50.120 --> 08:55.800] And the capital S or T is completely different than the lower ones. So they have to learn [08:55.800 --> 09:02.760] a complete new set of letters. The C looks alike, but some of them are very different. [09:02.760 --> 09:09.160] And in some languages, almost all of them are different. After that, we teach them, [09:09.160 --> 09:14.680] okay, we start it with a capital, we end it with a period. And once we end it with a period, [09:14.680 --> 09:19.720] once they know a sentence ends with a period, they can actually spread sentences over lines. [09:21.480 --> 09:26.600] This is maybe sixth grade or something. I'm not sure where exactly we are now, but [09:27.560 --> 09:35.800] it's gradually changing. Rules are changing. It's not bad to change the rules every now and then. [09:35.800 --> 09:42.280] And it's good in this case. Same for math. If I have five apples and I take three, [09:42.920 --> 09:47.800] how much do you have left? What, two? That's, they know that. If you have three and I'm trying to [09:47.800 --> 09:57.880] take five, how much do you have left? Zero. Yeah. Only years later, you'll learn that there is a [09:57.880 --> 10:05.160] possibility you have minus two apples. Happy appetite. Dividing, same, eight divided by three, [10:05.160 --> 10:12.440] that's two. And then there is two remaining. I cannot divide the latter two by three anymore. [10:12.440 --> 10:18.520] And then there is two, two thirds, and then there's 2.6666. And that takes a long [10:18.520 --> 10:27.320] light. Can we actually teach code gradually? Well, yes, we can. Now, [10:27.320 --> 10:39.480] we can by using Heady. This is Heady. This is a program environment. And the first line of code [10:40.120 --> 10:48.120] you can actually run is print hello world. And it works. And you see there are no [10:49.320 --> 10:55.160] quotation marks, no brackets, no nothing. And there are only three commands. [10:55.160 --> 11:05.160] There's print for output. And then there's ask and echo. Ask for input and echo is another way [11:05.160 --> 11:13.640] of producing output. And it produces the word, the text behind it, and then followed by the input. [11:13.640 --> 11:26.520] So if I run this, what is your name? And my name is Mark. And it says hello, Mark. This is fun [11:26.520 --> 11:32.680] already. And if it's not fun enough, they can actually have it spoken to. It's your name. [11:35.160 --> 11:40.440] Hello, Mark. And imagine a classroom full of 25 kids producing [11:40.440 --> 11:50.840] things like this. And within a few seconds you're hearing Mark is stupid. And they're having a lot [11:50.840 --> 12:03.160] of fun the whole hour. With only three commands, they're having fun. As soon as they stop laughing, [12:03.160 --> 12:10.840] or usually the next hour, the next lesson, the next week later, we introduce variables. [12:11.400 --> 12:18.600] This is probably the toughest part of programming, two kids at least. At least that's what I found. [12:19.640 --> 12:28.920] You can label things. Name is haddy, age is 15, print name is age years old. I can run this code [12:28.920 --> 12:36.440] and it produces haddy is 15 years old. They can play around with this. They can create actually [12:38.440 --> 12:45.800] pretty nice programs. They're actually busy for another hour, sometimes two, [12:49.800 --> 12:56.920] until they hit a snatch. Sometimes some of the kids find out that if I ask what is your name, [12:56.920 --> 13:04.280] and they produce so your name is name, most programmers will probably realize now we have a [13:04.280 --> 13:12.200] problem. There's one name that I want to produce as text and there's one name that I want as variable. [13:12.200 --> 13:18.440] I can never, ever use the text anymore. This is a learning opportunity. We can actually say, [13:18.440 --> 13:25.240] okay, we have to make a distinction between these. If I mean text, I put quotation marks around it. [13:25.240 --> 13:28.840] Ah, okay, that's a smart thing. It's like they invented it themselves. [13:32.440 --> 13:41.240] Let them think so. So it's gradual and it's 18 levels and at the end, you're speaking fluent [13:41.240 --> 13:53.720] Python. That's the gradual part. It's also multilingual. Why? Well, we asked kids, do you like [13:53.720 --> 13:59.640] Heady? There was a small study. There's a paper about it. It's in the slide deck at the end. [14:00.440 --> 14:07.880] There was only 39 kids in 12 online lessons. This was Corona time. We asked them, what are the [14:07.880 --> 14:12.040] benefits, the challenges and the improvements? These were the kids of Fellini's classes. [14:12.040 --> 14:22.920] And they said, well, it's great. It's stepwise. It's level by level and I can follow on. [14:24.600 --> 14:32.120] The teachers that actually work with it are usually normal teachers and not programmers. [14:32.680 --> 14:39.240] So they teach for the first time programming. They don't even know programming. And they liked it. [14:39.240 --> 14:46.040] And they said, oh, well, all kids, my whole class is learning programming. Of course, there are some [14:46.040 --> 14:52.600] kids that are, you're going to be a programmer, but the rest is still dragging along. And some of [14:52.600 --> 14:57.560] the teachers said, even the kids, the girls now have the confidence to become a programmer. [14:57.560 --> 15:04.520] It's something they mentioned out of themselves. What do they want? They want some improvements. [15:04.520 --> 15:13.240] First of all, they want better error messages. And we had very good error messages. I'll show you [15:13.240 --> 15:22.680] one. You cannot read this, but it says, you typed comma, but that is not allowed. And we put a comma [15:22.680 --> 15:30.920] here as a comma between quotes. Remember, these are kids of 10 year olds. And they just learned [15:30.920 --> 15:37.160] that if there's a comma in the sentence, they pause. So they read, you typed, but that's not allowed. [15:39.000 --> 15:46.760] Why cannot I type? Okay, so we had to change that in, you typed a comma, but that's not allowed. [15:47.720 --> 15:56.520] And almost all of those well thought of error messages weren't well thought of after all. [15:56.520 --> 16:03.160] Well, now they are, and they wanted something really weird. They want a Dutch keywords. [16:05.160 --> 16:11.080] Well, we're in the Netherlands, so it's not weird they want Dutch, but why? Everybody's coding in [16:11.080 --> 16:27.480] English. Print is the same in Dutch, whatever, the echo is the same. But why? Let's look at the demo. [16:27.480 --> 16:41.640] Let's see a nice error message. Print, hello world with a capital P. [16:46.600 --> 16:54.920] It says, print is not a command in level one. Did you mean print? And the first one is a capital [16:54.920 --> 17:06.440] P, and the last one is a small P. And maybe it gets even better. If I put a space in front of it, [17:08.600 --> 17:14.280] it runs. But it gives me a warning. Oops, you started a line with a space on line one. [17:14.840 --> 17:17.800] Space is confused computers. Can you remove it? [17:17.800 --> 17:24.760] It's level one, eh? There's plenty of time to correct these ideas. [17:27.720 --> 17:36.680] Yeah, yeah, I don't, yeah, I should change that. And then there is translation. I'm in English now. [17:36.680 --> 17:48.760] I can move to 45 languages, like Dutch. Yes, I want to reload. And now this whole program, [17:48.760 --> 17:58.280] every text, almost everything is in Dutch, except for ask. And ask was, by the way, the main reason [17:58.280 --> 18:06.680] they wanted it in Dutch, because in Dutch we don't usually have the s and the k so near one [18:06.680 --> 18:14.840] each other. And so they write x, and it's a weird letter combination. There is a toggle [18:15.640 --> 18:21.320] where you can say, oh well, I want to change the commands in Dutch as well. So now everything's [18:21.320 --> 18:29.960] in Dutch. I can ask for the ones we do not speak Dutch. That's the same as what's your name. [18:31.000 --> 18:40.040] Well, it's still Mark. Hello, Mark. So it works even in Dutch. And once we had this, we realized [18:40.040 --> 18:52.760] that people were in India, using Hindi, Thai, Chinese, Arab, it's all, those kids are just like [18:52.760 --> 19:01.000] in the Netherlands. They're just learning a language. They don't know a P if they see one. [19:02.120 --> 19:07.480] For to us, to me, these are images. These are not letters. I cannot read this. These are, [19:07.480 --> 19:12.120] I can copy paste some of this, but I cannot read this. The same is true for them. [19:12.840 --> 19:22.600] They cannot read these letters. So they should be able to put them into Arabic as well. [19:22.600 --> 19:37.080] And this works, of course, I hope. I cannot check. Maybe I'm cursing now, but I guess it works. [19:43.800 --> 19:50.120] So that's why it's multilingual. It's for the kids. And yes, at the end in level 18, [19:50.120 --> 19:56.920] we do tell them, you better put it in English now. You know what it all means. But you better start [19:56.920 --> 20:02.600] using English now. But from now on, no more Dutch or Arabic or whatever. But they're old enough to do [20:02.600 --> 20:17.080] that. It's built for teaching. It's not actually, it's built for teachers as well as students. [20:17.080 --> 20:23.000] They like it that the levels are a step-by-step guide. There's only small thing they have to learn, [20:23.000 --> 20:30.280] and the rest is not even possible. The teachers that do not know programming, but are teaching [20:30.280 --> 20:37.640] programming using Heady, they think, oh, I can do this. This is not overwhelming. And [20:37.640 --> 20:46.120] well, when I was using Scratch for the first time in a Code of Dojo, I had to think of a program [20:46.120 --> 20:53.240] they could make. What can my students make? There's a lot of examples on the Internet. I need to do [20:53.240 --> 21:01.960] research. I need to find the right thing. And if I'm planning a 20-day course, oh, somewhere in [21:01.960 --> 21:08.840] level 18, I'm probably going to mess up something I did in level 17. It's going to take, it's going [21:08.840 --> 21:15.080] to cost me time to get things right. I can find this one or that one or that one. And if I'm not a [21:15.080 --> 21:21.320] real programmer, if I'm not very good at it myself, which one should I take? And if I choose one, I [21:21.320 --> 21:27.160] print it out, I hand it over to my students, and they open up Scratch, and they start looking at [21:27.160 --> 21:34.280] Scratch, and they start looking at the lesson again, the paper, and they look at Scratch again. [21:34.280 --> 21:43.560] And what was that? They have to context switch over and over again. I see the students getting a [21:43.560 --> 21:50.920] little distracted. I don't remember. I don't remember. What was it? And they're a very impatient [21:50.920 --> 22:00.680] species, children. So we invented adventures. I'll show you in the last demo because the time's [22:00.680 --> 22:06.920] ticking away. And then there is class management. That's the last thing I want to talk about. [22:06.920 --> 22:14.600] Class management has in, there's a whole different type of kids in the class. There's this type that [22:14.600 --> 22:24.120] actually read the paper, reproduced it in Scratch, and tells the teacher, look, I did it. [22:24.120 --> 22:29.640] It's just once a pattern in the bag. Yeah, it's right. In five minutes, they produce a [22:30.680 --> 22:37.160] mowing, running around cat. It's lovely. They did it. But the other one, and there are quite a few, [22:37.160 --> 22:46.120] it dragged just one thing on the screen, which they do now. Well, you could read the paper again. [22:47.320 --> 22:55.320] Don't get it. And then there's this type. It's probably the level of Olivier. They would produce [22:55.320 --> 23:01.480] something they want recognition for. And they did this in five minutes as well because they've [23:01.480 --> 23:09.720] been doing this for years at home. And now they want my help to get some synchronized legs at the [23:09.720 --> 23:17.240] bottom of this Robin Hood. And once I run, I don't even know how to do that. But no, at least I can [23:17.240 --> 23:24.200] call Olivier now and help me out in this block programming. But all these kids are in the same [23:24.200 --> 23:35.080] class. I want them to move along about the same page. What was it? Base, that's it. [23:35.080 --> 23:55.240] So we created something we call customization. First of all, let's put this back into English. [23:55.240 --> 24:05.560] And let's see me in action. This is my account. And as you have seen before, maybe there are some [24:05.560 --> 24:12.600] tabs on the top of this. And this is what we call adventures. There are maybe 10, 15 different [24:12.600 --> 24:19.800] adventures. And they come along every level, 18 levels along. They can do rock, paper, scissors. [24:19.800 --> 24:26.120] First of all, it's just printing. And at the end, it's deciding who won and playing against the [24:26.120 --> 24:32.440] computer and three players against, etc. So it's getting more progressively difficult. [24:33.400 --> 24:40.040] But it's still the same program. So as a teacher, I only have to know 10 programs. [24:40.920 --> 24:47.880] And it's all in view. I can just click on I want to do the story and I code it here. [24:47.880 --> 24:55.240] So for the kids, there is no context switching of paper or thing. Then there's this teacher [24:55.880 --> 25:04.200] that can do, oh, teacher. Is this the teacher version? Where is the teacher version? [25:04.200 --> 25:16.360] But I should be logged in in any of them. No, I'm not logged in in any of them now. [25:18.440 --> 25:20.360] Why am I no longer logged in? [25:20.360 --> 25:31.240] I don't know my password because that's very secure. [25:31.240 --> 25:44.760] So I need last pass. I can't solve everything. [25:50.360 --> 25:50.840] Oh, well. [25:50.840 --> 25:59.240] How many minutes are left? [25:59.240 --> 26:15.640] Okay, that will work. What am I doing now? [26:30.200 --> 26:41.640] Yes. [26:49.880 --> 26:56.520] So this is where I was. I thought I was at my page. If you're a teacher, [26:56.520 --> 27:01.240] you can just request to become a teacher. Even if you're only teaching your own two kids, [27:01.240 --> 27:06.040] you can actually become a teacher. And then there's this for teacher's page [27:06.040 --> 27:12.120] and there's a complete teacher manual. And there's a demo class in which I am a student. [27:12.120 --> 27:17.960] I can look at some statistics. How many errors did I produce? What level am I? What kind of [27:17.960 --> 27:23.960] errors did I produce? How many successful programs? How many errors programs? And I can [27:23.960 --> 27:31.720] customize the class. I can switch on and off all the levels. And what I do in real life, [27:31.720 --> 27:38.840] I switch them all off except for the first one. So all the class has to stay in lesson one, [27:38.840 --> 27:46.760] in level one. I can automatically produce a schedule, put opening dates, so they [27:46.760 --> 27:54.840] automatically open every week, for instance. I can hide and show quizzes and puzzles. There's [27:54.840 --> 27:59.960] a parse and puzzle at the end of all the adventures. And there's a quiz at the end, 10 questions. [27:59.960 --> 28:09.000] And I can ask or I can set this class to a minimum quiz score of 80 before they can advance to the [28:09.000 --> 28:23.080] next level. So if I save this and go to the other one. Oh, wow. Now it accidentally locked in. [28:26.440 --> 28:29.480] I think it's because I have two of the same browsers now. [28:29.480 --> 28:44.680] Mark and class. This one's not a secret. If I go to this now, you can see there's a lot less. [28:48.040 --> 28:55.080] Only two. So this class only has two adventures. It has a puzzle and a quiz. [28:55.080 --> 29:09.320] And they cannot go to level two unless they made the quiz until with 80 percent of points. [29:10.760 --> 29:17.560] Okay, that's customization. That's about it. Hetty, it's called, it's named after Hetty [29:17.560 --> 29:26.440] Lemar. Who knows Hetty Lemar? That's a lot of them. World famous actress and a world infamous [29:26.440 --> 29:34.280] inventor. We're still using a lot of her inventions. And of course, we're open source. We love your [29:34.280 --> 29:41.640] help. If you think, ah, this is a good idea. And I'd like to work on an innovative gradual parser. [29:41.640 --> 29:51.400] It's actually actually quite a feat. There's a paper about it. And it tells you a little bit [29:51.400 --> 30:01.480] about an EVNF extension that we can merge partial grammars. We actually want help in [30:01.480 --> 30:07.800] multilingual language. Like I said, we have 45 languages. And these are 45 languages. As you [30:07.800 --> 30:14.120] can see, English is pretty well and Dutch is pretty well. Some other languages are blue. [30:15.000 --> 30:24.760] We love help making all these ones as green. And of course, we want you to help teachers. [30:25.320 --> 30:31.080] So go to your schools in the neighborhood and tell teachers about them and maybe help them [30:31.080 --> 30:40.680] get along, get started. Once they get started, it's like oil, it spreads. I'm only teaching 40 kids [30:40.680 --> 30:50.200] now. If I was teaching 40 teachers, that would go a lot faster. There are some building videos for [30:50.200 --> 31:01.640] teachers. And this is where you can join. Thank you very much.