 So I'd like to introduce you to our keynote speaker this morning. Katie, come on up. Katie is a former software developer for Google of many years, looked like a veteran run there, and left there recently to join a Sydney-based startup named Grock Learning, working with high schools, building a platform for programming and education. Something like that. I think I tangled up a few half sentences there. But I will hand directly over to her so that I won't keep mincing my words. Round of applause for Katie Bell, please. OK, is mic on? Good. Yes, I'm Katie. I work for a company called Grock Learning. And to kind of give you an explanation of what we do at Grock Learning, I'm going to take you through thinking like a non-programmer, approaching programming in Python for the very first time. And the way our platform works is we have, essentially, an online system. It teaches you everything you need to know about Python in order to do a series of challenge questions. Those challenge questions start off extraordinarily easy with hello world and similar kinds of variations before we move on to the first kind of scary, complicated question where you're supposed to write a program that asks the user, what is your name? And the user then types in something and it should say hello to the user with whatever name the user typed in. Who thinks they could write this program? OK, good stuff. OK, so we're going to go through the sort of series of thought processes that one of our students, Hamish, started with. So this is the first attempt. So the system works as you write in your attempt at this program and then you can run it yourself. You can see that it works the way you expect it to work. And then you can hit a mark button that runs it through a series of tests to give you feedback and help point you in the right direction for eventually getting the question correct. So hey, Misha, in this case, copied exactly one of the examples from the notes that you've been reading through, which is good. The student actually read the notes. It's a good start. But that doesn't really answer the question. Your program doesn't really work. It says hello and bonjour, and it's meant to say what is your name. So next attempt, getting much closer. It's even like reading in the input into a variable, printing it out. That's pretty good, but it's still not exactly right. And we emphasize this right from the beginning in our course that you must be very precise. And we'll get to that in a sec. OK, this time we've got the space after the question mark. That's a good step. All right, now it's even sort of not quite getting what's going on here. But it's printing out some extra stuff. Poor Hamish is getting a little bit confused. And we're learning from this. Hamish is learning, firstly, that computers are stupid. Computers not can understand what it means when he says I'm Hamish. And that computers require precision. He's learning to put spaces in the right place. He's learning that the output needs to be exact. OK, so we go through. We have another couple more attempts. Oh, yep, he's getting close. He's just got the space wrong there. OK, oh, and now it fails the second test case. So it works perfectly well as long as you type in that your name is Grock. And it doesn't work at all if you type in anything else. And so, oh, right. So the program's meant to print Frodo now. OK. Oh, but now it's meant to print Grock. This goes on for some time. We misspelled Frodo back to Grock again. And then, eventually, we get there. This is kind of demonstrating how someone who has never understood how a computer works, how programming works, approaching it for the first time is sort of learning, firstly, the computers are stupid, but they also have to respond to different kinds of input when I type in something different. The program has a series of rules, which it then responds to. And that's kind of the fundamental piece of how programming works. Here's another question. So getting rid of the user interface around it, this is the answer that we expect. It's moving on. This is sort of after week one, you've gotten through multiple things. You've learned if statements. You've learned while loops. You've learned for loops. We're starting to put them all together. This is sort of five weeks later in our course. So this is a much more complicated example. We're reading in one line of input at a time, appending it to a list, reversing the list, and then printing it out in reverse order. This is my favorite attempt for one of these questions. It starts out fine. It's got a while loop. It's adding it in. For some reason, it's also counting how many things it's adding to the while loop. Why is that? Because this is how we're printing it out. So as part of learning to program, students are also going to learn that they should be avoiding unnecessary repetition because eventually this doesn't work. This is what computers are good at. They're good at repeating things over and over again so that you don't have to. I tried to find an example of a student getting mixed up about different data types because this is one of the things that really, really kills students when they're starting out with Python. And this was the one I came up with. She's kind of got that there's something wrong with trying to add and subtract strings but hasn't quite worked out that they're already strings and that stringifying them is not actually going to help. But yeah. So it was a question one of the students asked on the forum. So instead of learning that the data has a structure to it in computing, like a string is fundamentally a different thing to an integer and so on. And as we learn lists, there are more complicated structures and stuff. So why are we teaching coding? Who has heard this before? Coding is the new literacy. Yeah, yeah, some of you. It's also complete crap. Kind of, I get really annoyed when people share this kind of coding is the new literacy. Everyone is going to need to be able to code or you won't be able to get a job. That sounds like a really terrible plan to me. I don't want to have every person in the world coding that's going to end up with a lot of crappy and redundant code. And but what do we, when we're talking about how everyone should learn to code, why is it that we actually want everyone to learn to code? We definitely don't want everyone to be programmers. We need a lot of people to do other things as well. And again, we don't want everyone writing crappy code. We should be able to write the code once and then it should be used multiple times. We shouldn't have everyone writing code. So I propose that we change this. Instead of talking about coding is the new literacy, we should make coding is the new biology. And before you like it, what the hell? Let me explain that a little bit. So when you study biology at school, firstly, you start studying it in primary school. You start with really simple things. You grow little broad beans or heads of grass and stuff. And you see that plants need water and plants need sunlight. And as you get older, you start to understand that a lot more. You learn about photosynthesis. You learn, ah, this is why, if we don't give any plants any sunlight, it's going to die. If we don't give it water, it's also not going to survive very long. It makes sense of the world around you and then you can reason about it. You have part of being an intelligent human being in society is understanding how photosynthesis works, how we get food every day, how we don't talk. In the same way, understanding how a computer works is fundamental to being able to use them well, to being able to reason about them in society, to be able to make intelligent decisions as a voter when technical issues come up and things. So going back to what our students were learning as they were starting to program, they're learning that there are limitations to what computers can do. They can only follow a series of rules based on the inputs that they're given. If you could imagine how much easier tech support would be if every single user understood this. If you could, they understand that the purpose of computers is to avoid work for humans. If you understand what a computer is capable of doing, you're able to sit back and rate, wait a minute, why am I doing a job that could be replaced by a computer? You don't need to be a professional coder to have enough understanding to be able to see that. So I believe every student should learn to code at school during school. And this helps not only attract more programmers to the field because more people will become interested in programming, this also helps fields which are very likely to need coders like finance and science and engineering, where if you study physics these days, you study physics at school, you study physics at university and you start doing research and discover that you need to be able to code in order to do that research. And then you have a crash course in coding and a lot of physicists with very terrible code. Learning that earlier would then help those fields that do actually require coding. It also helps every other field because people will be able to see how computers fit in, how computer programming fits in, what kind of tools they can use, what is available to them. It also helps inclusivity. You end up in the current system where students will only learn to code if for some reason they are expecting that they will find it interesting and they choose to then learn about it. If you start off with every single child learning about it, that gives every single child the opportunity to find out if it's something that they're interested in. So this helps women, this helps minorities, this is generally a good thing. So let's give this a little bit more structure. We're gonna dive in to how this actually looks at a school level when you're teaching coding. And as two examples, we're gonna look at the UK curriculum and the new Australian curriculum that's coming out in the next couple of years. My understanding is that in New Zealand at the moment, the only curriculum for coding is an optional sort of later end of high school kind of thing there's nothing for earlier on. So this is a fairly high level summary of the UK coding curriculum. And this came out in the last couple of years and they've started teaching it already. A lot of teachers are freaking out because they don't know how to teach programming because they don't know how to program themself but they're working on it. So notice that this starts really, really young. At the top, key stage one, five and six year olds starting to think about algorithms and computational thinking. So this doesn't mean that we're getting five year olds to start coding in Python because they can sort of barely read yet but we are starting to get five and six year olds to think about things in a computational thinking kind of way. How do I explain in a structured way how to make toast in the morning? What are the decisions I make? You can start to think about branching decisions when you think if it is raining then I should take an umbrella otherwise I should bring a hat. We can start discussing those things and developing those algorithms in series of steps and instructions. And it also starts to talk about using technology and kind of what it means when you're creating data. So creating, storing, retrieving digital data could be very simple like taking a photo and saving it to a hard drive somewhere and then sending it to someone else. When you get to the sort of year seven to 11 year olds age group that's when they start actually writing programs and in the UK this is usually done with something like Scratch, like a visual programming language where they're starting to write programs where they actually have to think okay I want the program to do this they come up with a series of instructions and steps you introduce variables, you introduce branching they are starting to learn that. There's also things in there about how networks and the internet work how computers fit into the daily lives there's also stuff throughout the curriculum on using the internet safely and using the impacts of technology on society and sort of fuzzy things like that as well. The key part getting into the older kids which is sort of 11 to 14 they have to learn two different programming languages and at least one of them has to be a text based programming language. And in the UK this is almost always Python it is incredibly common to be teaching Python in school in the UK at the moment. There's also particular things in the curriculum about learning Boolean logic and in all operators how hardware and software how computers work that they have a series of instructions that they are executing one by one and that data is represented in binary. Moving on to the Australian curriculum this is the structure there's a much like again these are very condensed versions of the curriculum there's a lot of text in there. The Australian curriculum is divided into separate sort of core streams these are only two of them there's a couple more but starting in F2 which in the New Zealand system would be grades one to three again starting describing algorithms starting to identify the digital systems that you're using every day starting with the really basic things that you can do in a classroom with a teacher and just paper and whiteboards and stuff not even touching a computer at this point. The Australian curriculum has a little bit more detail in it than the UK curriculum and it goes into more detail specifically about how data is stored and represented in numbers and in binary and how getting onto the later ones how text and images and sound data is represented in binary. But the progression for programming is very similar to the UK system where you start out again with the very young kids describing algorithms then for the sort of primary school age kids you're using a visual programming language starting off with input and doing if statements and then getting to more complicated things like loops but again in year seven and eight which in the New Zealand system would be year eight and nine you learn a general purpose programming language and again the curriculum is very language neutral but you can see how Python could fit in there. So talking about Python here's some of our students. Why would we teach Python in schools as opposed to any other language? And I really enjoy teaching Python. Python is definitely a good language for teaching and it's essentially good for the same reasons that you guys all like Python is because it is very clean and simple especially when you get started. If you imagine this program in Java when you have classes and stuff there's a hell of a lot of stuff that you have to explain away or ignore as you're getting started in your first programs. The other thing I particularly like about Python is demonstrated by this example. So can anyone see the problem with this? I mean the first problem is that it's in Python 2. Never ever teach Python 2 and this is probably my favorite reason why. Who can see the bug with this? Yes, okay, you've all hit this before. Yes, four is bigger than a thousand. Yep, for anyone that hasn't noticed the num variable here is a string and in Python 2 you can compare a string to a number and it just kind of works except it only works if the number happens to be greater than the number that you wanted it to be greater than. In Python 3, oh, so much better. I cannot describe to you how many times I have seen students bashing their heads against the wall for like why does my if statement work only if the number is less than the other number. This is much better and this is what I like about Python particularly Python 3, never ever teach Python 2 is because it had a lot of thought put into it to make it clean and consistent and nice. If you've tried teaching JavaScript and there's lots of random little gotchas in there, Python is much nicer, this makes it a particularly good teaching language again for the same reason that you guys code in Python. And so as mentioned before, this is really where it fits in nicely in the UK curriculum and again this is where it fits in nicely with the Australian curriculum as well. New Zealand is usually a little bit ahead of Australia and everything but you guys need a coding curriculum. Okay, this is the problem with Python. We're teaching Python. What is this? IDLE, who's used the IDLE IDE at some point in time? Okay, who actually uses it for anything useful? No, nobody because did anyone here work on IDLE? At all? Okay, good, I can safely do this. IDLE is really annoying. It not only looks like crap, it looks even worse on a Mac. It's kind of painful to use. In the interpreter you can't even use the up arrow to get back to your previous commands. But if you go into schools and you see them teaching Python, this is almost always what they're using and it's kind of terrible. At GROC Learning, we decided to put everything online so we built our own. We think ours is better and nicer but it does have the disadvantage that it is online. You can't necessarily do Pygame apps with it, for example, because all of the Python is running on our servers and you can't really get a UI. So for doing stuff locally, IDLE is the kind of choice and that's not particularly great but there are a lot of really, really cool things that people are using Python for and teaching with Python. So I wanna go through a couple of those because they're really cool examples of what you can do. So the Raspberry Pi Foundation has a lot of activities that use Python with the Raspberry Pi. This one is one of the examples where you hook up a little tiny camera and a button and coding only in Python. You can write the code that if you hit the button then it will take a photo and it will store it and you can use this to make little stop motion videos and the kids seem to love this. Essentially you can do electronics programming with Python which is pretty awesome. So that's a really good way to get kids doing something hands-on, something that's interactive. Either there is a Python API for Minecraft which lets you place blocks and stuff. This is also really cool and engaging for kids. This is usually designed to run on the Raspberry Pi but it can also run on the regular Minecraft version as well. One of the things that we launched recently at Grock Learning is using turtle graphics or logo depending on what generation you come from or what you call it. And this is one for very, very beginner programming stuff where you can actually sort of see the results as I'm moving the total and it's turning left and right and you can draw pretty pictures and stuff with it which is cool as well. And there's always Pygame which always seems to end up looking something like this. But it is very exciting for kids to have stuff to draw on the screen and stuff. The downside of Pygame is that there is a lot that you have to cover to even get started and doing anything is kind of a little bit painful. Like, yes, okay, I need to work out the coordinates and draw this image on the screen in this exact coordinate. It could be a bit nicer, but it is very, very cool and engaging. So this is an explanation that I give to people a lot when they're talking about, oh, but we should do this to get kids excited. Turns out different kids get excited about different things. And so when teaching programming, these are the three different kind of major areas that I see kids get excited about when they're learning to code. Some kids get excited purely about the algorithmic problem solving steps where they don't really care what the code is actually doing as long as they're enjoying the thought process of I have to do this thing and now how do I formulate that in code to make it do the thing that I want? Some kids get excited learning how computers actually work, learning what is going on and sort of building things at a very low level. Those kids tend to gravitate more to the electronics and robotics kind of stuff. And then there's kind of the building cool stuff kids who they don't kind of care what the process is to get there but they want something that they can really show off at the end. And this is kind of the difficult part for Python. So apart from all of the cool stuff that I just showed you that you can teach with Python, the problem with all of those is that they are very much toys. They are not real world Python applications and this works really, really well for the younger primary school age kids but when they're getting older, we need something to then bring that back together and show, hey, you just learned a real world skill that can build the kinds of software that you use yourself every day. So they want to learn like, hey, this is a skill that I could use to build something that will actually genuinely be useful in my life that people might actually want to use. I could be a product or something. So my question to you is where is your Python running? So if you guys are all Python developers, put your hand up if your code is running in somewhere that is useful to a person other than you. Cool, so your code is running somewhere. It's in production, it's launched to the user. Okay, so put your hand up again if your code is not running on your own servers somewhere. Okay, is it actually running on a desktop device or a mobile device? Oh, a couple of you, that's actually more than I expected. That is interesting. Essentially my experience, most of what Python developers do is run on Linux servers somewhere in the cloud somewhere as some kind of web server like this. And it's very hard to find ways to use Python to develop the kinds of apps and tools that the kids actually know as the ones that they're using. So the kids know I have this app that I install on my phone or there's this software that I can run on my computer as a game or something like that. These are the sort of tangible software pieces that they're familiar with. And if they could build those, they could really see the value of what they're doing. The way we've gotten around this in the past is by getting kids to use Python to build a web server, to build a website which is interactive and they can type things into forms and then it stores. But the downside of this is that is actually a really huge project to get anything working. If you want a kid to be able to write a Python web server, they need to understand HTML. They need to understand CSS if it wants to look not like crap. They need to understand how HTTP works and you need some kind of database for storing stuff in. So usually that would be some kind of SQL database. And so you're suddenly teaching four different kinds of writing like your HTML, CSS, Python and SQL in order just to get something working that looks like a website that was made 10 years ago because there's no JavaScript. So if you want JavaScript, you have to learn yet another language. So we do this and I have seen this work in schools where you have a particularly motivated teacher that actually understands all of these different things themselves and can guide the students through that. But this is mostly the time completely infeasible for schools. So this is kind of my challenge to you guys. If we have kids and we have teachers coming to us and saying I want to build an app, can I do that with Python? It's like, well, maybe you could. But we want kids that are like, I want to build a game and then I just want to be able to send that to my friends and then they can run it and play it. And I was like, well, I guess you could package it up and I'll let you guess which one of these comes from a teacher. When we're teaching Python, the teachers are like, yes, they're getting into it and they're really excited, but we need something that is visually engaging that then they can build interactive things and stuff. And this is generally a bit hard in Python. So this is my challenge to you. Firstly, replace idle and make a better IDE because that would be awesome. Some kind of simple and powerful graphical interface toolkit where I can just kind of draw a button and then write very, very simple code so I can click that button and something happens. That would be awesome too. Make Python work on mobile. There are some projects already underway for this, which look really cool. So I'm excited about that. But at the moment, I would not recommend writing apps with Python. And one thing that I thought would be particularly cool coming from New Zealand is that I understand that Python is the scripting language for pretty much all 3D animation stuff, but I've never seen anyone make this work in a classroom where you have a bunch of kids. That would be a very cool, very interactive, real-world application of Python, but I have not seen anyone do this. So if anyone's working in the 3D animation industry, talk to me afterwards. That would be very cool. And the teachers will thank you. We have, like in our agroch learning, we have contact with a lot of different teachers and then we get the feedback. Yes, we are loving learning Python. The kids are getting really into it. What can we do next? So any kind of stuff from that would be good. Apart from that, we really need advocates for teaching coding in schools. And not only that, even if we do get coding taught in schools in order to get a generation of kids that actually understand computers coming through, the teachers are going to need a lot of help. So anything that you guys can do to help train teachers to learn to program and to teach programming is going to be really valuable. I tend to try and shy away from coding clubs where the kids are choosing to go and be there because you're usually only getting the kids that are already interested in learning to code and can maybe do it in their spare time or their parents are computer scientists or something. But running a workshop in the school where you're taking a whole class is much more valuable because then there's a whole ton of kids that never would have understood programming at all before that, who are then getting exposure to it. Or become a teacher, sorry, coders who then become teachers also very cool because then you'll actually have coding skills in the classroom as well. So that's cool. That was my talk. I think I might have talked a little bit too fast, but yeah, there's lots of time for questions. Cool, let's open up for questions. I'll run around and bring the mic to you so if someone raised their hands, Brenda. Hi, I love what you're doing and I really want to do this stuff too, but how do you fund all this? I have a day job, I don't have the time. How do you do this? That is a good question. So the sort of group that this started with was the National Computer Science School. So this is the national in Australia run by Sydney University from one of the academics, a couple of the academics there. And they've been running a summer camp teaching Python, well, not originally teaching Python because it started 20 years ago, but for the last 16 years teaching Python at this summer camp. Unfortunately, the summer camp has the same problem as every other coding club. You're only reaching the couple of students that elected to come there. And so James Curran, one of the academics at Sydney University started an online Python programming competition, which also teaches Python in order to reach a lot more kids. And that was starting to reach the order of 10,000 kids every year. Wanted to expand this more, but wasn't getting enough backing from the university. And so this is why Grock Learning started as a separate company. So Grock Learning is a tiny for-profit company where we charge $20 per student to learn Python online and that is where the money comes from, the sort of small amounts of it, yeah. Thank you for your presentation. My question is, I went to my children's school and told the principal that I would like to run the Linux workshop at some stage. And the principal told me that she has to go to some Department of Education, get the permission, and this all red tape blocked my proposal at that time and she never came back to me. So my question to you is that for the local, you may have run already some workshops in the school. How do you approach it? Can you put some more light onto it, please? How do you approach it? So I'm not entirely sure what the problems were in that case, but there are certain processes that you need to go through to have a background check and stuff done to be. Oh, okay. Apart from that, all you really would need is the permission of the school. I'm not sure what else the school would need for that. Okay. So, sorry. So I work in the school as an admin, but the school that I'm working in is that I used to study and so, and basically I can say that my teacher kind of pushed me into programming. This is why I'm sitting currently in this, than you guys. But I found there's a lot of, like, our teacher does a lot of effort into teaching as programming. And after I've been in uni, I found that a lot of kids don't even learn half what we learn in our program. And it's very hard to encourage teachers to learn new stuff, such as I'm trying to encourage our teacher to learn Git because I'm sick of looking six versions of the same PHP code. It's just horrible. So, how do you encourage teachers to learn programming? How do you encourage them to stop learning how to do a freaking PowerPoint presentation and look at something interesting? Because kids are suffering from the fact that teachers don't want to do anything about that fact. Yeah, so that is unfortunate, right? There's not a lot that you can do to make someone learn something new and do something in a different way to what they were doing it before. And that goes for every kind of industry, not just teachers, like getting out of the pattern of what you were in before. This is a big problem because, with coding in particular, because you get some kids that have been coding since they were eight years old and they've already, they get to university and they're like, why are we learning Java? I already know Java. And you get other kids that have no idea what programming is because they've never seen it before. And you have this huge disparity. Yes, this is exactly the kind of problem that having a set curriculum across all schools is designed to solve. You essentially define, this is the minimum standard that we expect students to achieve at school. This is the purpose of curriculum. This is, I don't see any way to actually get coding taught in schools without it being part of the mandated curriculum. You can encourage and you can sort of prod as much as you want and say, why don't you don't have to teach it? I can come to your school and teach a Dora. Something like that. But ultimately, you're never going to get this in every school, everywhere, unless it is enforced. Yeah. Hey, yeah. My question to you is, you said that we need a better IDE, but what is the use case of an IDE? What, when I learned Python, I found it much more useful to just use a good text editor and Python, maybe IPython as a shell to toy around with. But I never needed something more than a decent text editor. So that is an interesting point. I've seen this occasionally where a student becomes a lot more engaged when they use the command line than when they're using some kind of prepackaged IDE. But ultimately, it's less scary when you're first starting out if you have all the information that you need in one place. Kids are typically bad at typing. They're bad at switching between different windows and managing all that kind of muscle memory, tabbing between different windows and stuff, isn't something that you have in primary school. And so even idle, where you have two different windows, where you have a different window for your text editor and a different window for your interpreter, gets really confusing for kids. And I have seen this happen. Having some kind of platform where you have, here's my code and here's the code running and I can see both at the same time is useful. And it will show you highlight a particular line when you've got a syntax error or something like that. So I think there is a lot of value in having an IDE and making those initial steps to get into programming much easier. There is only one thing that you have to download and install. You don't also have to learn how to use a command line in order to be able to program in Python. Hi, just following up on your point about how in Python 2 with the input for the number and the fact that if you don't convert it to a number, then you get a program that runs, but just does completely the wrong thing. Yeah. Sorry. Versus Python 3, which runs, but then crashes with a useful error message. Yeah. My question is, why not use a language that just doesn't give you a program at all and just gives you a useful type error instead? And note that I am very much not implying that you use Java for that. What do you mean that gives you a useful type error as in how is that different to what Python does? Well, yeah, I mean Haskell or a language like that. And I mean, it's more, well, yeah, I resent the fact that you implied that we all like Python here. I consider it the best of a bad bunch, and I'm firmly in the can. This is true. I hate all programming languages, but I hate Python slightly less than a lot of the other ones. Yeah. Yeah, so I don't think dynamically typed languages are the right languages for people to be using, and therefore I don't think that they're the right languages for people to be taught. I will admit this as well. Python would be a hell of a lot easier to teach if we declared the types when we declared the variables, if it was statically typed that way. Because explaining that this variable is an int and this variable is a string and that you can't add them together is much easier when each variable has int or string written next to it. But the kids aren't going to do that. So, yes, I agree that having the sort of type definitions would make it easier to teach. I have not found a language that is better to teach than Python though. I was just thinking about your idea of an IDE better than I do, but a lot of ideas for Python, I think would probably be way overpowered for the type of audience you're discussing. Almost always the one that comes up is PyCharm, the community edition, because it's free. PyCharm is like Eclipse for Python. It is very cool if you're, I guess it has lots of cool features and stuff, but it is incredibly, like just way too many buttons, way too many controls. It is very confusing for kids. Let's back. What I would like in advance. Okay. It has to have syntax highlighting. It has to tell you which line the errors are on. You have to be able to run it in the same window so that you can see here is my code and here is my code running. At a minimum, that would be it. It has to be not painful to use. Let's go with that. But very clean, very simple. I highly recommend if you've ever seen, gosh, what's the last name? Carrie Ann from the Raspberry Pi Foundation gave a really great keynote at EuroPython last year and also at PyCon Australia this year. Oh no, both of them were for this year. And a large part of what she talked about was, here are all of the different things that people use as Python IDEs and why they all suck. This is what I want in an IDE. So talk to her. She has a lot of opinions on this and they are good opinions. Yes. Katie? Yes. Thanks very much for your talk. The Twitter sphere education people are already frothing at the mouth for the video of this talk because they... Oh crap. So they're already looking at groclearning.com and all that sort of thing, so that's good. I was just wondering with regard to the teaching of teachers, in this very room a few years ago, I was first introduced to something called software carpentry, I don't know if anybody here has come across that, but it's a Canadian run effort but it's an international program designed to teach primarily scientists how to make better use of computing so that they can amplify their research capabilities and also do things properly rather than, as you pointed out, writing a whole lot of code badly. And the software carpentry trains people to become boot camp teachers. So they get people into a three day boot camp where they learn the command line, either on Linux or on a Mac, because Windows doesn't do that. And they learn then immediately Git and then they learn IPython, IPython notebooks, which actually I think to a certain extent will address some of the IDE questions that you also asked potentially. So this has also been suggested, but... Yeah, okay, anyway, I realize it's a bit more... Sledgehammer for a brass tack, but anyway. Yeah, so it would be interesting to see whether you guys could perhaps join forces with software carpentry to instruct teachers because the curriculum materials are all in GitHub, they're all creative commons licensed and otherwise open source. Cool, that's a really good idea. I think I have met someone from software carpentry before, but yeah, we hadn't discussed collaborating on that, so yeah. I have another question about typing and functional programming and that kind of stuff. I totally agree that Python is probably the best language to teach, but if we have plans to teach kids more than one language, do you know if there's been some thought about what other language? And in my opinion, it should be a highly asynchronous functional programming language like the opposite of Python. I can see how that 10, 15 years from now, once teachers are comfortable teaching one paradigm of programming, that maybe it would be cool to also teach a functional language in schools as well and maybe next time we update the curriculum in 20 years, it would be, oh, right, learning one language isn't enough, we should also learn a functional language. I don't think that is feasible at this time, but it is a very interesting idea and if there was a teacher that was very keen to be teaching that, that would be completely supported by the curriculum, it's language independent. I would like to go back to my favorite diagram, this one, where the functional paradigm as a sort of problem-solving and way of thinking will be fascinating for the kids that love the problem-solving and algorithms side. It does not necessarily help you so much with building cool stuff that then you can show off to your friends. And so I would be a little bit hesitant about teaching only that, but if it was in conjunction with another language as well, that would be cool. Yeah. So in terms of the number of languages required to deal with web apps, maybe PyPyJS. Oh, I have not seen this before. Oh, it sounds kind of scary, to be honest. It is. Okay. Just putting it out there, but I remember vividly in high school, when we were doing physics, they told us that atoms were made up of this big ball of something, which was called nucleus, and it had currents. No, no, there were electrons, which looked like currents or possibly raisins inside. And then the next year, they said, forget everything we told you last year was a lie. They're actually like the solar system, and then they're whizzing around. And then I believe if I kept going to university, they would have said, forget everything you got told. That was all a lie. It's like how you learn conservation of mass, and then later on it's like, well, it's not really conservation of mass, it's conservation of energy. So the question is, well, it's not a question. I'm gonna say, stay it out. I'm sure that that applies to teaching kids programming, that you may want to teach them functional, but that's kind of maybe the third year lie. You should start with the really simple lie and say, hey, Python's gonna give you everything you need. No, it's not. You're gonna need the function. Actually, we lied. You're gonna need a single future. Yeah, yeah. As long as kids are learning the sort of fundamental, I have this problem and I break it down into a series of steps that then the computer can understand. That is a huge step, and that will give them a big advantage later on as they go to university and then study actual programming. Yeah. Schools are often interested in examining what the students have done. And I found when I went to school that the examination wasn't really that great, but I really enjoy things like Google Code Jam where you actually get problems that are interesting and you have to solve them in a certain time. So things like that might be good to look into if you're running against the wall of how do we examine this? Yeah, that is an interesting question. A lot of exams still at school will be done on paper. So if a school is learning a particular programming language, they are likely to be doing exams in that programming language. As for the sort of cross-school exams, if there are any in the future, the way this is done at the moment in a language-independent way is by doing pseudocode algorithms in the exam. But yes, I agree, it would absolutely be much better to have sort of online timed exams where you write code and you can actually run the code before submitting it. Okay, so there's no code involved in the exam. Hi there. Just, I like that diagram you have there too because it is actually doing things. One of the things I think the people in this room because we're both programmers, or programmers of any description, is we've already actually pulled ourselves into one particular spot in the complete set of types of ways of thinking about problems and things. And so do you go talking to teachers, to staff, to try and find, you know, different angles and ways of doing it? How are you getting good feedback? Are you actually communicating well with the teaching sort of industry? Generally, yes. So through running our online courses, we have essentially a set of forums where the kids can ask questions. And so we get very, very immediate feedback on what the kids are understanding and what they're not understanding based on the questions that we're getting in the forums. And we answer them, we help them through, and we can find better ways of explaining things to different kids as we go through. We also get a lot of feedback from teachers on what they like and what they don't like. We've had teachers who've been using our system for five or six years now. And we get, and if there's anything that they don't like, then we find out very quickly. And we get a lot of feedback from them, how to improve it. Yeah, there's a lot of communication there. Let's hope this is on. Oh, it works. Very basic question. How many students are using your system roughly at the moment? And not so basic. What kind of demographics are there? Probably best explained. Oh, I don't have internet on at the moment. Okay, so our big thing of the year is this competition that we run, which is just in its final week now. And that gets about 10,000 students. And the age groups range quite significantly. So what I wanted to show you was that we have four different levels of difficulty. And if I turn the internet on, this is it. Then, so we have what we call newbies, beginners, intermediate, and advanced. And newbies, that's okay. That's fine, I'll just use my roaming. Well, it's not roaming, it's a local sim. There we go. Okay, so we have newbies, beginners, intermediate, and advanced, so four different levels of difficulty. Newbies is usually primary school kids, but we have kids up to like, so sort of grades four, five, and six. And the way, actually that's not a good example of a question. Let's go back. Okay. It's also not a good example. Let's do one of the later ones. Sure, okay. So this is actually a set of blocks that click together that then generate Python. So this is what we start the beginners on when they're in the sort of primary school age and this score bar isn't working very well. Okay, so you have, for example, the first line is assigning to a variable with some input and that generates the Python directly there. So as you're changing the blocks and you're sort of doing stuff around, that kind of thing, it is editing the Python right in front of you. We find this is a good way to transition kids into actually doing Python. So we don't start Python directly necessarily with the sort of year five and six kids, but that is where we start. The other ones are just plain writing Python. Beginners starts out with just the heller world input and goes up to lists. And intermediate starts at the beginning as well goes a bit faster. Advanced is quite advanced and does some interesting computer science there. We do have a huge range of abilities. Essentially we have different levels and so we range all the way from grade five to grade 12 or grade six to grade 13 in the New Zealand grade system. Eight. Oh, yeah. We do get schools across the board, but we do tend to, it does tend to balance more to the higher end schools, the like wealthy schools and the more selective schools. Yeah, yeah. Kind of a follow up question about demographics. Does Grock Loneen have any ambitions to cross the ditch? Or run the national computer science competition? So the NCSS challenge is open to New Zealand students. It's all online, so there's nothing really stopping anyone in the world from participating in it. And we do get a whole bunch of kids from New Zealand and we have quite a few schools from New Zealand as well participating. And do you have quite a few people just doing the courses, not through the challenge from other countries? Yes, less so. So the competition with its very structured timeframe works well as a motivator. Like here is the deadline, you have to start the course now, you have to finish the course now, you get a lot more people that way than just having a course that's open all the time where people say, hey, this is cool, I'll start later and then never do. So we do have courses that are available all the time as well, introduction programming and HTML and CSS course and stuff. But most of what we get is the competition. We have time for one more question. Just from the list of tests that I saw you were doing on the input and from the kind of mistakes you said people made, it seemed like a lot of that kind of thing is just what would be picked up on by people using auto completion. Obviously, people in this room would argue that's a crutch. I wonder what's your opinion on that? Do you think that's an important feature to have and have you had a chance to do any testing on students for whether it helps? No, I haven't done any testing on that and that would be interesting to find out. That is one of the big differences between the blocks and coding in Python yourself, because the blocks are all here and you can look them up and find the block that you need and then just put it in rather than having to remember how to type everything. But the blocks obviously get annoying to use and having. We haven't done any experiments with autocomplete to see if that would help because we don't have an autocomplete system built into our site. That would be an interesting experiment to run. And I don't know what the outcome would be. I suspect that you would get a lot of kids. If you can rely on autocomplete in the early problems, then if they're not fully understanding the concepts later, that could be a real problem. But again, it could also just avoid kids getting stuck and throwing their hands up in frustration and giving up. Cool, please join me one more time in thanking Katie Bell for her. She's good.