 Hi, I'm Teff. I used to work for a company called Co-Club back in London. I do tend to pace quite heavily, so I'm sorry if I can't randomly in and out, they've tied the mic. Maybe I'll just start walking like this. But yeah, I used to walk around teaching people about Scratch, so I'd like to start there. Scratch has three big ideas to it. Low floors, wide walls and high ceilings. Now normally this would be the end of the talk, but since I've only got 10 minutes, I'm going to rush straight to the finale and conclusion. A low floor means it's easy to get started. Wide walls means there are plenty of things to do, and a high ceiling means, well, the sky is the limit. You can keep building and building and building and just go wherever you want to go. But to explain these three values and how they are in Scratch, I'm going to talk to you about the past, the present and the future of Scratch. So hands up, who's heard of Scratch? Wow, I don't usually play to audiences like this. Okay, what about who's heard of Logo? Logo is Scratch's predecessor. Now keep your hand up if Logo was your first programming language. Nice. Keep your hand up if you realize that Scratch is actually a functional programming language and a copy of Lisp, well, common Lisp. Nice. This is a Logo interpreter I wrote when I was slacking off at a terrible job in a flight search company, and it's probably the most productive thing I ever did there. I found out recently a German school has been using it to teach children. This is a cock snowflake, which you may have seen yesterday. For what it's worth, Logo is actually a horrible language to implement, and I wouldn't recommend it to anybody. Anyway, Logo kind of starts here, 20 things to do with a computer. Seymur Pappert and Cynthia Solomon wrote this paper with the radical idea of let's give computers to kids, which was in the 60s, and computers were intensely expensive. And if you read the paper, you'll find that pretty much one to 20 are build a robot and do fun things with it. In particular, the robots for a logo are called turtles, which are named after a famous species of cybernetic animal made by Greywater, an English neurophysiologist. Anyway, the thing is, if you can't make a turtle, you improvise, you simulate one, but the whole purpose of turtles is feedback loops, experimentation, play. The turtle keeps bumping into things, so you edit the code to maybe not hit the wall so much. But everybody's seen these sorts of things. It's traditional when the first thing you write in a logo thing is like two square. Repeat for forward 100, write 90. And I have actually continued on this great tradition and taught children fractals. So I'm hoping, like, in 20 years, some kid comes up to me and goes, I love what, recursion waltz. When I was 10, it was easy. It's like, yeah. But the thing is, in the paper, there's also other wonderful things they're doing. This is a picture of a bird pooping, labelled bird turd. This was drawn by a nine-year-old 45 years, 50 years ago. So the person who drew this is probably in their 60s or 70s by now, and I hope they're still as proud of it. This sort of tradition also happens. As I was teaching turtles to children, one of them leans over to the other and goes, you know, if you set the colour to brown, it looks like the turtle is pooping everywhere. And the other kid goes, how do I do that? Set colour brown. Oh, awesome. Can I do red? Yeah, it was a lovely moment. I was very proud of them. But the big idea around logo was kind of extrapolated in the book, Mindstorms by Seymur Papper. And if you're wondering, yes, the Lego kit is named after the book. In Mindstorms, he talks about this idea of a math world, a sandbox for a play experiment ideas where the child, the student gets to set their own rules, set their own ideas and see what happens. My favourite story from the book is a young child, but she didn't understand the difference between verbs and nouns, and she was really struggling. So they asked, can you write a sentence generator? You know, the dog sat on the cat, the dog is hungry. So she did, and it's like the dog, dog, dog, dog. It's like, okay, this isn't exactly working. So if she did what every other programmer does, she debugged it. And then eventually it worked, and the rest of the lab realised it. She threw her hands up and screamed, I know what vowels are! Yes! It's a lovely thing to see. But yeah, the math world is kind of like seeing programming as the ultimate sandbox game. It's really fun. But really the core idea is that instead of teaching children to code, we can teach them to learn through coding. It isn't like, I can just read out my slide here, coding to learn but not learning to code. A lot of the focus in teaching and educational stuff is will they get jobs or will they learn how to turn computers on and off again. But like, total graphics were about teaching children geometry. Really the important thing is that if you focus on just getting jobs, you're missing the big idea. And the big idea is giving children agency on computers, giving them control over a medium. Because programming is just a medium, like for art, for science, for design, and for business logic, unfortunately. But that brings us to the present, and that brings us to Scratch. Now Scratch is my favourite programming language for a number of reasons, and reason number one is it has a cat. There is a cat up there, and its name is Felix. And the thing is about the cat is it's a puppet, and so you can get it to move around. These puppets are actually on a stage, so you might actually call them actors, and they can also, you know, send messages. The cat's saying hello. But like, it is the successor to logo. So like, Scratch also can do weird things, although that's a bug in my program there, so that's great. But the thing is that makes Scratch really unique, is that instead of using ASCII art to explain what a program does, you use blocks of sentences, and you just click them together. This is amazing because there's no syntax. I have watched a small child cry because Python told them their code didn't work, and they thought they knew what they were doing, but the indentation was slightly off. It turns out many nine-year-olds don't know what the tab key is. And you can't just take those things for granted. In the end, I was a bit regretful about teaching them Python because as much as I love indentation, it turned out to be a huge stumbling block for the children getting started. But when you have no syntax, you have no syntax errors, and here come some of my other favorite reasons. There is no tabs versus spaces. There's no brace arguments. Like, I live in a free world away from horrible Stack Overflow posts and hacker news people. But that's not the real advantage of blocks. Now, Brett Victor in Magic Inc in the Software Interface has an example bar planner app. And one of the things that he does in it is show how you can configure it to do alarms and alerts. And instead of this horrible wall of checkboxes, horrible wall of radio buttons, it just has a sentence. Remind me in minutes when the next train to is coming. Now, you may not think that is much of an advantage, but the trick is it doesn't have to be in English. It doesn't have to be in a Latin alphabet. It doesn't have to be left to right either. And when I've demoed scratch to people, sometimes English isn't their first language and they're not necessarily really understanding everything that's going on the screen. So I go, what language do you prefer? They say Italian. I switch it down and suddenly there's a light bulb that goes over their head and they suddenly go, I'm like, literally this is Unix. I understand this. I've taught a journalist who's like, I could never understood programming. I could, I don't get computers. So we sat down and went, what do you think this code does? A middly, like it was in English. So like that just moves and bounces off the edge of the screen. Look, yeah. Oh, that was easy. But this is the sort of approachability that Scratch has. But there are downsides to blocks. There's no autocomplete. This is the source of a shunting yard parser. It was absolutely horrible to write, but I did it just to prove that you can do real algorithms in Scratch. I regret doing it. It turns out that to pass a string of numbers, you have to split them up digit by digit and then rejoin them back together again as strings because there's no tokenisation. There's only really the length of a word and which character in it. It's a bit horrible. Also dragging and dropping blocks all the time does get kind of frustrating. But the idea is there. I would love to see something like this for doing database queries. I know it's kind of boring, but like I work on databases and I still have to open up a tab every time I have to delete a record and I can't remember the syntax, the life of me. But something like this I could just go select from that table, give me these rows and then suddenly like I've actually got my job done without having to cry swear or like check stack overflow again, which is to be honest, you know, a nice thing to happen. So that brings us to the future of Scratch. Like, Scratch can do a lot more things. There's now Scratch extension so you can plug it into Arduino's, you can, well, you can connect it to Twitter, you can connect it to text to speech and Scratch is finally being open sourced. Yes, it is in Flash, but if you go to the Lifelong Learning Kindergarten's group on GitHub, it's there and we can start to contribute to it. But the future of Scratch isn't really about Scratch because Scratch isn't just a programming language, isn't just an idea. Scratch is a community, Scratch is a website. The wonderful thing about Scratch is can you imagine a world where view source still works? It still does. Every project on Scratch is open. Every project on Scratch you can just go, I could change this and it goes create a copy, click, change this around. Comparing to forking projects on GitHub it is a much more pleasurable and pain-free experience. But that's the really joyous thing about Scratch is kids are continuing to make and improvise things. I've seen an Ocarina of Time song trainer, many birthday cards to people's parents, but my favourite thing was a kid who, in one of the workshops I ran, built his own game. And he made it too hard, so he had to then implement cheats in order to demonstrate his own game. So that brings me still at the end. Low floors, wide walls, high ceilings. The low floors are really about the block-based programming, removing syntax as a stumbling block to getting people started. Wide walls, well, there's sound, there's music, there's visuals, there's animation and high ceilings. You can start to plug random hardware in. You can start to extend other people's code. You can go around and play with everything, which for the record also includes my slides, which are written in Scratch here if you're wondering why everything was really low resolution. A couple of people said to me, are you going to demo Scratch? I'm like, yeah, maybe at the end. But like, here's another thing. I don't think you can see that so well, so I'll make it big. Like, yeah, you can do fractals, sure. This is the shunting yard calculator, which, like, if you can see, one, two, three times four, five, six, plus seven, eight, nine times one, two, three, times five, six, seven, plus three, four, five, plus one, three, three. And when I hit enter, it slowly spits up the letters and... There we are. It's building the operator stack. And now it's built into reverse validation. There we are. And it does a little happy dance just as it gets the answer. But like, the thing is, Scratch is like intensely powerful. You can do weird things like cloning and so on. Like, I've made little weird visual demos like this, which are just fun to play with. But going back to the earlier keynote, where like, I couldn't write a game in half an hour. Like, here's a clone of Super Hexagon I wrote in Scratch, which turned out to be ridiculously easy. Unfortunately, only easy to write. It's still as hard to play as Super Hexagon actually is. Okay, I'm probably just going to die. Oh well. You can't hear it because there's sound. I actually had to... If anybody's played Super Hexagon, it goes begin, triangle, square, and then game over. So I recorded my own sounds for that. So anyway, if you're interested in Scratch and you want to start playing around, like, I'll just click the share button now. And now... Oh, I need to be on the network to do that. But yeah, my project themselves, my slides, are actually on the website for anybody to play with. So anyway, that's Scratch. And really what I want you to take home from this is your programming languages could be much better. So, so much better. The bar is fantastically low. Like, Scratch has built a friendly community of people who actually help each other and their children. And the only reason they're doing it so well is they haven't learned from us.