 Thank you all. My talk is named Spiral Python, and I wanted to use the opportunity to show some of my Python code and run it at EuroPython. So I'll be one of the persons who's shown real Python code live at EuroPython. This is a spiral. This is also a turtle that draws the spiral. And you can go on and on and on forever. And the spiral is a metaphor for learning. If you're a kid, I don't move too much. I'm a teacher, so I'm used to it. If you're a kid and your mother reads you a book about an elephant, you've got this tiny triangle with the concept of an elephant. And then later, if your grandfather takes you to the zoo and you see a real elephant, then you extend the tiny triangle to a bigger triangle because you know more about elephants. You know how big they are. You know that they make noise. You know that they want to escape because there are fences around the elephant. And that's how people learn. People learn something. And later they append to what they've learned. And sometimes they have to change things if what they've learned isn't adequate anymore. That's the spiral. Let's go back to the guy who came up with the term spiral curriculum. He's Jerome Bruner. He's a cognitive psychologist. And he saw as one of the first that this is the way how people learn. He spent a lot of time with kids looking at how they approach the problems. But the idea of the spiral curriculum is don't explain everything at once, just explain a little bit, just enough to do something and then wait until the child wants to know more. That's a very wise approach to teaching. Unfortunately, most Python textbooks don't do that. Even W3 schools, which is a very good site, doesn't do it. They explain everything. So if I use W3 schools with my students in the first year and I'm going to teach them about looping, repetition, then they come right away with questions about what is the break about when you use a while, when you use a for. All kinds of questions that are not necessary yet because it would be really nice if they can repeat some of their code in the first place. And later we can talk about all these details. Teachers teach programming very much the way they learned to program themselves. Well, I'm curious how you learned to program because you all became pretty good programmers, I guess. Who learned to program from reading a book? Can you have hands? Books are not so useful. Who learned programming from an online tutorial? Well, that's better. Watching movies, yeah. Who did it on his own? Who did it in a group? Fewer people. Who learned it from a friend? Okay. Who learned it from a teacher in school? Okay. Who learned programming doing research on what you needed to know to make a game or an app that was really cool that you wanted to build? That's the ideal learning situation. That you want to know things because you want to make something. That's another question. When you started learning Python, who had no experience at all for who was Python the first language? Okay. Some younger people, I guess. Who started with Scratch and switched to Python later? Okay. It's one of them. I'm interested whether that helps, whether the Scratch helped you to write better Python or not. Nobody knows. It's hard to do research. Who started making websites? Doing things in HTML, CSS? Okay. Also a couple of people. Who started with Python? Having lots of experience in other languages. So that's really a career choice. So you could have been programming in any language but you chose for Python. That's a... It's very diverse. And the funny thing is when I get my new class of first-year students, it's almost as diverse. Some people have never used the computer for other things than gaming and others have built fantastic applications already and they're all in the same group, which makes it hard to teach. Another thing that makes it hard to teach is that who could tell me what are the most difficult things for a beginner software developer? What is difficult for a beginning software developer? This is a very... This is... You're also a teacher, I guess. Okay. Well, very good. These error messages are really a pain in the ass in the beginning because they use all kinds of higher-level concepts and you've got no clue what it's about and you feel like someone is shouting at you. So it's... And the reason for that is that a lot of teachers don't see that and that's because the biggest part of your brains are unconscious. There's only a small part that's conscious that you know about. And if you're really good at something, if you can swim, if you can ride a bicycle, if you can do those things, you can do it without thinking. It's unconscious. So you also don't realize the problems that people haven't mastered that yet. So that makes very good programmers very bad teachers until they realize that they've got this problem. Okay. My name is Jan Kron. I'm a teacher and I have a problem. In the Netherlands we need a lot of software developers. Every year we get about 300, 400 new students and within a year more than half of them are gone. So that's a big problem because there's a big demand in the market and people stop their studies. What we try to do, what we've tried to do last year is to do drastic things to improve the situation. So what we do is we stimulate cooperation of students. So we make groups of students and have all kinds of assignments to do things together. We focus on making software products. So we're not talking about academic concepts. We're not an academic university. We just want to produce things. In the process of making software, we want them to explore how their own laptop works, how a server works, how a computer network works, how the old environment of their software works and what can happen that they should take into account. And we'd like to lay a conceptual foundation for the software development study. So we have a lot of ambition. We've embraced this idea of spiral learning. So we want to build up the learning activities. So we want to start making software from scratch and later extend existing code bases. I think that's a good idea. You want to start writing scripts on your own and later work in the team. Otherwise the smartest guy or girl does all the work. So you should write your own software in the beginning. You want to first use very simple tools. Very simple tools. We've also got students that are already using IDEs and are really good at it. But it's like teaching, giving someone a driving lesson in a Tesla with autopilot. It's so much things go automatically that you can't learn to drive a car. So we want to start simple. We also first want to make software products for yourself that you know what you want to make and later make software for other people and do requirements capturing and all that stuff. We want to first check software against tools produced by teachers to give them rapid feedback and later write to their own unit tests. And we want to first assume that the execution environment is friendly. You don't need to try catches or whatever. And later add that because the environment is not friendly. So that's the idea of building up the stuff. I want to take a little sidestep. How do people learn? Well, the good news is everybody can learn. Everybody that has learned to walk and to talk is a natural learner because human beings are learning machines. Babies learn from the signals that they observe in their environment. When a baby is very young, there are some things in his view above him. It could be teddy bear, could be his mother, could be his own leg. He has no clue. What is what? Until he grabs his own leg and puts his toe in his mouth and then he gets three signals simultaneously. He feels his leg. He feels his arms, his hands having the leg and he tastes his own toe. And then he comes up with an idea, this is my leg. That is how people learn. And so they build a model in their brains of themselves and of the rest of the world. And this goes on indefinitely until you die. You change this model of who you are yourself and in what kind of world you're living. So the very first cognitive model, brain structure of the baby is, there's me and I have a leg and I have an arm and there's mama who feeds me. And then in view there's a teddy bear and a baby bed but he's got no relation with that yet. So this is the very first cognitive model in the brains of the baby. Later when there are students of my first year, they've got a much more complicated cognitive scheme in their brains. It's almost impossible to draw it but here's a little part of it. And the funny thing is if they learn something new, they have to adapt their cognitive model. So suppose you know already what is a chair and you've got a lot of archetypes of how a chair can look like and then you encounter a wheelchair and you wonder, is this also a chair? It's called a wheelchair or is this a vehicle? Is the couch, is it a chair or not? And what you have to do then is either you assimilate the new information and assimilation means that it fits in your neural, in your cognitive model. So you don't need to change it. Another thing can be that you have to accommodate your cognitive model because the new information doesn't fit in so you have to rearrange it in order to make it fit. And that's learning. And that happens on several levels. I don't have to explain you what abstraction is and that you've got levels of abstraction but it also happens to non-IT people, of course. They also know that there are chairs, there are wheelchairs and there's furniture which is a higher level concept. So all this goes on in the brain if you're learning. Well, the job of teachers is to make sure that learning happens. But how? Well, we didn't want to write textbooks because there are a lot of books already. We didn't want to develop online learning resources because there are a lot of very good online resources already. We also wanted students to do their own research. We didn't want to tell them everything because later you also have to find out new development so it's good if they can do research. We want students to spend a lot of time practicing, designing apps, making software and if possible we want to avoid that we learn students' concepts or habits that they have to unlearn later. We want to build a really good structure that until far in your career you can, all the new things that you learn you can fit in the structure that's in your head already. That would be nice. So how do we do that? Well, we were inspired by Meccano. Nobody knows Meccano, of course, because this is something, some people know Meccano. It's something from the 50s. It was really popular. The name comes from make and know. So you can make things, you can make mechanical stuff with Meccano, but you should also think about it because otherwise it collapses. And what they've got? They've got things they call outfits. They numbered zero, one, two, just like Python. And each outfit contains simple tools and some mechanical parts. Each outfit has a little booklet with some examples which you can build much more than just the examples. It also stimulates the creativity. And lots of boys have spent hours making Meccano stuff. Kids liked it and they always wanted to learn more and get the next Meccano outfit for Christmas. Can we do something like this for software development? We've tried it. I'll go really quick now. We thought outfit number zero, the starting point, we should start with an online rebel. No installation, no environments, no problems, not losing a lot of time because someone has a Windows computer or a Mac just use a browser and do some stuff with talking with the computer. Well, we encountered some obstacles. One funny thing is that someone, some student understood that string is between quotes and then he put all strings between quotes. Also the names of objects, which is a bit too much and your code doesn't work. Also here, your code doesn't work if you print H between quotes, although your calculations may have been right. So we encountered a lot of things also on the very simple level that needs to be learned and that we didn't realize. Later in outfit one, we let students install the software on their own laptop but we want them to use the command line interface in order to know how their own computer works. In outfit number five, we give them a Raspberry Pi with a sense hat so they can also run their software on another machine, on a server. So we start really simple with concepts that are very close to what students know already, all students know already. So we can introduce if, and if, else because you know about conditional things, if the shops are open, buy more beer. We don't want to have all these types of repetitions. We want to start with while, only while because after while you've got the same condition as after if, so it's similar. And later we'll find out that there are other ways to do things that are shorter, that are better that we start with while. No for, no break, no continue. We also want to teach them already that functions can return values like input and functions can have side effects like print. And we can ask them, does print also return a value? And you probably know, or you never tried. But those are good questions to start. Well, we've made and tried out a lot of stuff. We teach them for half a year, we've done that twice. One started in September and one starting in February. And we're still improving things because of course the first version is never perfect. Nothing is perfect, but at least we tried. And now I come to my last slide, so I'm gonna make the deadline because what would be really nice? On the left you see learning materials made by Maria Montessori. And they are used worldwide in schools to help you with time. You make your own calendar of this month to help you with calculations, to help you with spelling. So a set of creative people have come up with a lot of tangible things that you can use to learn all these complicated concepts. Would it be nice if we can do the same thing like McKano, but not for mechanical engineers, but for software engineers. And it's much more difficult because everything is in your head, everything is abstract, nothing is tangible. But some people make really nice things. I really like a Python tutor, for instance. We use that a lot if we talk about the call frames of functions because Philip Kuo has visualized how that works in memory. Well, that's a brilliant tool to use. And there may be more of those tools, thinkable. So my dream is that we make a group and open source all the stuff that we've got because we're never gonna get rich with educating people anyhow. So we might as well share it and also bring it to Africa, to a previous speaker and share it with the world just like Maria Montessori did, but try to do that with software development stuff and using Python. Because Python is a language that is really good for beginners and it stays good. That's not like scratch that after a few years you have to move to another language because there's no space to learn anymore. In Python, I think you can learn until you retire. But if you like the idea, if you've got ideas, what kind of tools should we build? What would be a really nice assignment? What would be a really good mini lecture to explain a new concept? What should be learned first before you learn something else? Send me an email or I think I'm this in Twitter. It's a bit out of, I don't know how cool it is to be on Twitter, but I'm still there. And in my slides, I've got some really nice books about if you wanna be a more effective student and I've got really nice books about if you wanna become a more efficient, inspiring teacher. There's a lot of knowledge. And this is the slogan of our university. It's don't compete with other students, compete with your self yesterday. Overtreff yourself, improve yourself. That's it. I can ask a question then. So you mentioned briefly that some students put the variables in quotes and they had some, like they didn't have a notion of what's a string, what's a variable. So I had this experience as well when I tried to teach abstract concepts like variables or objects to beginner programmers. How did you go about that? Because that's even before the first, the first interaction with the repel, the online repel. So like how do you go about explaining this kind of abstract, abstract, abstract or like a variable or an object to your students? Me personally, but I'm not, I may be wrong, but I like to talk about naming things. So we've got values and you can give them a name and in Python it's also a label. You can give the same value multiple names and don't call it a variable. Because later people talk about immutable variables and mutable variables, but if something is immutable it's not a variable, isn't it? It's a constant. And so you get a lot of lingo, a lot of jumbo jumbo that's really confusing for students. So it's really good to be very precise and use only terminology that is useful on the long term. Sorry? All a variable. Object. Okay, thank you for a very inspiring talk. I'm a teacher myself, so I'm struggling with these issues. I wanted to ask you when you divide your students into groups, do you have some strategy for that? Like combining experience with novices or boys, girls or whatever, let them choose themselves? Yes, we have, we teach with two teachers and one is a technical teacher like me and the other one is more skills teacher, social skills teacher. So the social skills teacher does a lot of exercises on types of people and so they learn some models about what kind of people exist. And they color code that on their name tag and if they form a group, there should be a whole rainbow of colors. So you can't just with all your friends be in the same group because you all have the same color stickers. So it's gonna be a diverse group to start with. And our students really like that because technical students are a bit on their own. They don't walk to another person so easily and start a conversation. Perhaps in Python community, it's a bit different thanks to Euro, Python and things like this. But in school, they're more on their own. So they really like it to be put in a group and some of these groups become friends for the whole studies. Thank you very much. So I don't know if this applies to the Netherlands because normally speak very well English but one of the things that I've observed is that many people starting with programming, they just struggle because they don't know what if else means. So it just, do you have any strategy for this or you just need students that can already understand English quite properly? Okay, so that's a good point. So that can be language dependent. The Python code is very close to your language or perhaps very different. And in that case, you need other materials. Thank you. For my experience, the variance between people in abstraction and the ability to actually understand the abstraction is major. The way to get the abstraction for most of the people is to practice. Some people need one minute of practice, some people need one year of practice to get the same abstraction. And how do you handle it? Do you agree with me? And if you do, how do you handle it? The trick is, I think, is you only learn things if you know it almost already. So there should be a mental structure that's very close to what you wanna learn. And with abstractions, you can say, well, I'm young, but we are all people and we are all programmers. And some are females, some are male, some have another gender identity, some are from Europe, some are from Africa. So you can make drawings of that. I use a lot of white paper with pencils and I let students draw how something is organized. And of course, you can't draw the contents of your brains, but you can give a projection. Like architects can make a floor plan of a very complicated building. You can give an abstraction and that gives information and that gives you a lot of clues where to talk about. That if you start explaining things to a class without knowing what they know, it's like designing a tree house for an unknown tree. It's impossible, maybe a Christmas tree. You've got no idea where the branches are. You've got no idea where to start. You know what is solid knowledge and what is... So you should always start with finding out what someone knows already about a subject and then you're gonna be a really effective teacher. And this is very difficult because one on one, that's doable, but one on 30, that's next to where possible. So that's why we also work in smaller groups let students work together that they're one on one again and spend more time talking with the groups than presenting something to the whole class. Thank you. Thank you very much.