Which programming language should you choose to teach coding?

JAMES: Hello world, and welcome to the podcast for educators passionate about computing and digital making! I'm James Robinson from the Raspberry Pi Foundation, the makers of the Hello World magazine and podcast, and today we're going to be settling once and for all, what is the best programming language.

[record scratch]

I'm joking. We're not going to do that at all. There is no best programming language. It really depends on who and what you're coding. Because Hello World is for CS educators, today we're focusing on which programming language might be best suited for you to teach coding. We asked you on social media what your favourite programming language or tool was to use with students to teach them to code. 61% of you said Python, 22% of you mentioned Scratch, 6% talked about a variety of generative AI tools, and 11% went for another option, including Logo, Sonic Pi, Pascal, and others.

Today we want to explore the pros and cons of these, and I've invited three colleagues from the Raspberry Pi Foundation to discuss just that. Diane Dowling, our Director of Curriculum Resources, who's going to represent Python today. Welcome, Diane.

DIANE: Thank you.

JAMES: Marc Scott, a Senior Learning Manager, who's going to focus on Scratch today. Welcome, Marc.

MARC: Thank you.

JAMES: And Laura Gray, who's a Senior Learning Manager in our North America team, who's going to talk about Java today. Welcome, Laura.

LAURA: Thank you.

JAMES: Before we start, if you are listening to or watching this and you have very little knowledge of programming and you've been tasked with teaching students to code, I strongly recommend that you go and listen to our recent 'Teacher tips' episode, where four educators shared their practical, actionable tips for how to teach programming in the classroom, especially if you've got no background in it. Also, do go and listen to the last week's episode on vibe coding in education. In it, Jane Waite, Senior Research Scientist here at the Foundation, led a research deep dive discussing the term and the potential of using AI tools to support students learning to program.

OK folks, before we get into the meaty details of these programming languages, for someone who hasn't written code before, can you give a very simple introduction to the programming language that you're here representing? Marc, could you start us off with Scratch?

MARC: So Scratch is a visual language. It's block-based. So if you think of Lego bricks and how you stack Lego bricks together, that's how you work with Scratch. So each of the

individual instructions, like, written on a block, and then you connect all those blocks up and that gives you your complete program in Scratch.

JAMES: Nice. I enjoyed the analogy as well, thank you. Diane, Python.

DIANE: Yeah, so I'm here to represent Python, and Python is very, very widely used in schools in the UK. It's a text-based language. So usually it's follows– following on from Scratch. It's very accessible, it's fairly easy to learn, and we believe it's a nice next step for young learners to transition into text-based programming.

JAMES: Great. And then Laura, how does Java compare, which you're representing?

LAURA: Java is widely used in US high schools. It's also text-based but a little bit different in Python that it's a compiler-based language. It's actually a little younger than Python, which I'm surprised at, I think just by a few years, but it's derived from the C and C++ family to kind of simplify and abstract a little bit from that language, and I think Python kind of continues that abstraction from Java as well, to make it a little bit easier to read too.

DIANE: Yeah. Great. And I think, like, one of the things we'll talk about is, I think, it doesn't– it really doesn't matter which language we maybe pick, but maybe there is– some of these languages are better suited to different types of learner. Di, who would you sort of position Python being for?

DIANE: You wouldn't necessarily start coding with Python with very young learners, and that's because there are some kind of overheads in that, you know, you do start to make immediately syntax errors, you can quite often get quite off-putting errors when you start to run your code, and that can really put off younger learners. You do have to be quite precise, you know, you have to get the words spelled correctly. You have to get the right punctuation symbols. So it really is more suitable for slightly older learners. I mean, personally, I think, you know, maybe 9, 10, you know, young, that age could start learning Python. There's no reason why not. I've seen much younger people use Python. But I would say ideally for that age group and certainly going right the way up through high school in the UK, definitely is suitable for those learners.

JAMES: And I think Python, unlike Scratch, which we'll come on to in a second, is a language which is used by professionals as well, so it's something that you will use potentially in industry as well.

DIANE: Which is a massive selling point, actually. And particularly, you know, when you get parents on parents' evenings who say, like, "Why are you teaching that language?" People did use to ask that about Python, but nobody does any more because I think it is widely used. So sometimes for young learners, you can kind of sell it as a skill that maybe will be useful economically to them in the future as well.

JAMES: Who would you argue Scratch is most suitable for?

MARC: Scratch is suitable for everyone and anyone. I think it's definitely, out of all the languages, it's the first language you should try. It's very, very easy to get into and it's exceptionally good at giving, like, results straight away. So if I wanted to– if I wanted to make a Space Invaders game, me personally, knowing other languages, I'd still go straight to Scratch for that. If I wanted to replicate Pac-Man, I'd go straight to Scratch. If I want to tell a story, I'll go straight to Scratch. It just does so much, so easily, with very little overhead. I don't have to think too much about it. I can very, very easily just sort of get into coding, start throwing blocks onto the screen, and I get instant results. I've introduced it to kids as young as 4 or 5, especially with ScratchJr, which goes on an iPad. I've used it with A level students. So they quickly throw together this program, and the easiest way of doing that is with Scratch. It's just such an easy program to get into.

JAMES: Excellent. No, cool. And let's come on to Laura. So where does Java fit into this mix then? I think you kind of implied maybe that it might be for some slightly older students–

LAURA: Yeah.

JAMES: But yeah, where would you– where would you position it?

LAURA: We're definitely going to need to be able to type and spell, so we can't use it with our younger students that can drag blocks on Chromebooks, but we can start to elevate it with some older students. It gives a very nice structure of object orientation, and it gives us a way to communicate and understand what code is doing that's a little more abstracted in Java. So I personally feel like when I need to introduce older students to object structures, so we can start understanding how big data is used in the world, it's a little bit easier with more words on the page than less words being visible for them to understand what's going on in pieces too. So it's more structured, it's a little more frustrating with resolving errors at time. But I think that builds a good understanding of the tenets of object orientation.

JAMES: So there's a couple of words we've mentioned. Let's just start with 'syntax'. I think we've all, maybe apart from Marc, and we'll come to why that in a moment, have mentioned the word 'syntax'. What do we mean by 'syntax errors' or 'syntax of programming'? Di, do you want to start?

DIANE: Yeah, sure. So the syntax are the rules of the language, basically. They're the way, you know, the same as any language has rules. But programming languages often have very, very strict rules. And this can be, you know, it's both a good thing because to some extent you learn that, and once you've learned it, it becomes relatively straightforward to apply, but it can be a bit of a barrier to new learners. And as we've talked about, you know, things need to be spelled correctly. And there are also some sort of strict rules about where you use brackets and semicolons in Python. Python is also really strict about indentation, that certain lines have to be indented. Actually, I would argue that's a good thing. I mean, some languages don't enforce it, but actually, it makes your code easier to read. A little bit like making a new paragraph, you might indent the first word of a paragraph or leave a blank line. It's that– it just improves the readability, and I think the readability of code for Python is actually one of its great strengths.

LAURA: Yeah, I've had students turn in one line of code for an entire program, just to be fun.

DIANE: Me too!

LAURA: And you can do that in Java, because we decide the end of a line is with a semicolon. So, like, you can write some very poorly written code to communicate to somebody else, or if somebody picks that up and reads it, it's just terrible. So I do agree, indentation is really great, and you should still do it in Java anyway.

DIANE: Yeah, and it does pick up a good point really, because I think one of the things as teachers, when you're teaching, you want to teach people good programming standards. And that's not necessarily what you use as an individual. If you're writing some sort of quick code for your own use, you can really break the rules. But as educators, we want them to learn good practice.

JAMES: Marc, you've not mentioned syntax at all.

MARC: I don't need to mention syntax! I mean, if– to put the Lego analogy back into it, when you're coding in Scratch, it's like building with Lego. So in Lego, you've got, like, maybe 2- by– 2-by-3 blocks, yeah?

DIANE: Yeah.

MARC: And you stack all those together. So, in Scratch, it's like you've got all your blocks, you're given, you're preset, you're given. You're never asked to, like– you could never take a 7-by-5 block because the block doesn't exist, and you can't take a 7-by-5 block in a teal colour because that doesn't exist. You've got red, blue, green. And that's the way Scratch works. The syntax you use is that– that are the blocks you are given.

JAMES: It's sort of implicit into, like, just those elements, right?

MARC: It's built into the interface. So, if anything, I mean, that's what makes it such a superior language in my opinion. Like, you can't make up syntax like you can in Python or you can in Java, where you can mash keys and the computer will try and interpret those instructions. That doesn't happen in Scratch because I can't mash keys, I can't just type anything I want. I drag and drop explicit instructions each time into my program.

JAMES: So every instruction is a distr– a distinct instruction that is self-contained, and there's no kind of syntax to wrap around–

MARC: So we've done this for years. Like, the original programming languages were just, you wrote into a teletype machine, and you could write whatever you like. And then, as programming evolved, we developed things called IDEs, so interactive development environments, and they were designed to help the programmer to write syntactically correct code, so they would make fewer mistakes. If you start typing and your IDE doesn't recognise the word, it might say, "Oh, I don't recognise that word." Or more likely, it recognises a piece of language, it'll colour code it and say, "Oh, that's–", you know, "Well done, you wrote the correct word." So if anything, Scratch is just a development of that a little bit further where the IDE and the language have been integrated into one thing. So I can't make mistakes.

So if I'm writing Python in an IDE, it might say to me, "Oh, yeah, you've correctly spelt the word 'print'." And I can see that I've correctly spelt it because it's highlighted in green and it puts the brackets in for me, so it's helping me, it's guiding me to write better syntax. In Scratch, it's the ultimate sort of endpoint of that, yeah? So I can't write 'print' incorrectly. When I use– in Scratch, we use a say block. It's a block, it's says "say", and then it has space for what I want the computer to say, and I write it. So it's, yeah, it's just taking that– it's taking that integration of the IDE and the programming language together in one that makes it such a strong, powerful language and so easy to use and so difficult to make mistakes in.

JAMES: Cool. And then Laura, you mentioned 'compiler'. Can you just explain briefly for our listeners what a compiler is?

LAURA: Yes. So, in Java, when you write your level of code that's more humanistic, if you will, it goes through the compiler to convert it to that machine-based language that is much harder to write, so we don't have to write in that archaic form any more. And then it also checks for syntactical errors, and what they call compiler-based errors. There's other errors that might not get flagged, but things like "method doesn't have a return statement", or that we don't have a semicolon in the place that it should be and it doesn't know where to read the end of the line, or we're missing a bracket, things like that that cause pain points in the process. But it teaches us how to actually work through the debugging process too, because when it runs through the compiler, it gives us– if it doesn't execute, it gives us a bunch of error messages that happen. And then we can go through, it identifies the line where we find it, and kind of go line by line and figure out what's going on in our code, and then we can run it and see all the other kinds of errors that we've caused, and it teaches us a ton.

JAMES: It sounds like there's a lot of resilience that we're learning and building through that process.

LAURA: Yes, so much resilience in Java that you need Java to get through it, you know?

MARC: But compilers were– compilers again are a thing, like, they turn– they turn what could be a very lengthy program that takes up a lot of memory, and they condense it down into something the machine can run very, very quickly. In the 90s, when Python was first developed, you could noticeably see that a large Python program would take a long time to run because it's not compiled, it's interpreted as it goes along, whereas a Java program would be very fast. That's less of a problem with modern computers now.

LAURA: Yeah, and that's why you're going to see in, like, robotics competitions and things like that, you're going to see more students going back to compiler-based languages because they don't want that lag, or that inefficiency in something that they need to run in a few minutes and to be efficient. So when we're working with some systems that rely on that efficiency, you're actually going to see people go back to using Java and C, and making decisions to use the compiler to save moments that could happen that break what they need to work.

MARC: I mean, one thing to go and look up on YouTube is to look at line-following robot competitions. They're incredible. The speed that those things have to– have to react to a maze that they've never seen before. And you couldn't– you couldn't do that in Scratch. You

couldn't necessarily do it in Python, right? I mean, because it's– they've got to interpret what the sensors are reading and then react absolutely instantaneously. And those robots will flip through a line maze really, really quickly, because they're running on a compiled language.

JAMES: So for speed, efficiency, and like, and those kind of things, compiled languages are going to be really important.

DIANE: There is another thing in favour of a compiled language, which I think, again, comes from the teaching aspect, is that, you know, at the higher levels where, you know, students have to learn about compilers, it's quite hard to teach that to students who've never used a compiler, you know, because it becomes a very sort of theoretical notion. And they learn kind of the words of what it means. But I think actually, if you use a language that is compiled and you have to compile your programs, you know exactly what it means. So, I think, you know, that comes back to maybe this link between the kind of theoretical understanding and the actual programming. And sometimes you need both, like, you need to bring both into your lessons.

LAURA: I think it does, like, parse the types of, like, debugging and error resolution that we do. Compiler errors tend to be a little bit easier. Like, there are beginning stages of learning the syntax and how things should be structured. And then after that, when you get through that phase, now you're dealing with runtime errors and just logic errors. And it's nice because it actually breaks that process up for students where we're dealing with those, like, semicolons and some of those and getting that out of the way, and now you're finding where the actual things I designed don't work as I intended them to, and getting into that nuance, so it does build a little bit of a system for students to get through that process too.

MARC: It can make you a much more careful programmer as well, because I know when I'm writing a Python program, I'll just hit 'Run' to test whether it works. I won't even bother reading my code, I'll just press 'Run' and see whether it works or not.

JAMES: So just to sort of summarise, I think it sounds like we're sort of saying, like, there's– so Java is our compiled language. If we want the learners to understand, like, that kind of process, and we want them to maybe have this sort of separated journey of that sort of where different errors might occur, or we want them to be building really efficient code, that's where we might be using a compiled language. Python is interpreted, but maybe for those that have a bit of an understanding of some programming concepts already, and I think the Scratch is, I think, really powerful for learners that– where you just want them to be able to create something pretty quickly and there isn't, you know, you don't really– you're not concerned too much about the ceiling that they might have with that experience or learning about some of the– the nuance of the programming language, it's more–

MARC: And you don't have to worry about mistakes, which allows you room to play, yeah? It's like, again, back to Lego, if you– if you give a kid a pile of Lego, they can create something, they can just make something, they're not going to make any mistakes. You don't look at it and go, "You didn't place that block correctly." It's their own creation. And you can do that in Scratch. You can just play and create.

JAMES: If this were an argument, Marc knows how to win it because he's appealing to my Lego interests. He's just, like, yeah. Let's hear from some users though. Here's what some of our listeners said about the languages that they prefer. So Sethi De Clercq said that they "absolutely understand why Python seems to be the most popular choice here." However, they would argue that "the joy and success of making projects in Scratch at a very young age are akin to celebrating a toddler taking their first steps, or clapping when one kicks a ball to you. They may not be playing football yet, but the joy will certainly show them what's possible as they grow older and more confident." Navil said that "Python is perfect for beginners, because the only thing scarier than programming is programming with semicolons." James Abela, regular contributor to the podcast and Hello World said, "If you're asking for their favourite then it's Scratch, because of the joy on children's faces when they see their designs come to life!" But he understands why most people say Python, "such an awesome language to teach computational concepts with." Do we agree? How do we feel about those comments?

MARC: Well, they all favoured Scratch, so...

JAMES: So you're happy.

MARC: I'm quite happy.

LAURA: I'm very unhappy, semicolon!

JAMES: Yeah, yeah, a little bit of shade there for the semicolons, Laura.

DIANE: I do think, you know, a lot of this is age group–specific. I know that you've said that you have used it with A level classes, but I mean, I always like– in my classes, I like to tie the theory to the practice. So I like to talk about some theoretical concepts, and then let's code it. And I think just sometimes that's quite tricky in Scratch. I think it's...

MARC: It's more time-consuming in Scratch maybe. You can do some incredible things in Scratch. It's just– it's not necessarily the best tool for that job all the time.

DIANE: Yeah, and I think you have to think about the sort of learner acceptance as well, because I think there are some learners that don't think it's cool to be coding in Scratch when they're sort of 17, 18, you know.

MARC: Yeah, 100%.

DIANE: They think it's something for kids. And I think there is definitely that perception that Scratch is for the younger kids and that once you get to kind of middle school, then they're going to transition to text-based languages.

LAURA: I personally have always struggled with Scratch, and for me, it's that, like, hunting for the right block. It just and– and when I want to try to fit things together and they don't and I'm like, "Why don't they fit together? They should!" Because– but that also might be coming from working in other languages and trying to translate it back.

JAMES: How quickly have you seen students progress their understanding or application of skills in the respective languages that you're representing?

DIANE: Well, I'd quite like to talk about object-oriented programming. We talked about it briefly before, and I do think this is an argument for using Java. Python is object-oriented, but, like, it's not very strict. And I think sometimes, again, when you're trying to enforce theoretical concepts, it's quite hard to do it in an environment which isn't naturally encouraging you to work in that particular way, so I think actually the progress is a bit slower there, and possibly it's going to be faster in Java.

LAURA: And I think that, like, global-level variables can get very confusing, and misused in Python by kids. I've seen a lot of mistakes by not realising they're establishing a global variable and understanding, like, why it's not doing the thing, because we haven't learned that concept. In Java, you can't do global-level variables, which is nice. You can just do class level. So it's a little bit easier because we're a little more strict to have– prevent them from doing some really higher-order mistakes that we're not ready to explain yet.

DIANE: Yeah, Python's strengths are definitely also its weaknesses. You know, the strengths of being able to kind of do quite a lot of what you want to do quite quickly doesn't really enforce, necessarily, good programming, you know, sort of behaviour, I think.

JAMES: And if I ask Marc about progress, he's going to say, "Yeah, they just whizz through it", right?

MARC: Yes.

JAMES: Yeah, cool.

MARC: I don't have to worry about– well, there's sprite level and global level, I suppose, in Scratch in terms of variables, but you don't tend to really worry about that kind of thing.

JAMES: Yeah. There's definitely parallels, aren't there, I think, with other structures in other programming languages, but it's less– you don't– yeah.

MARC: I mean, I'd often argue that that's a flaw of the language that allows those kind of mistakes in the first place.

JAMES: And interestingly, on strictness, I think, actually, this is where Python might be the outlier in that Python's quite flexible, and–

MARC: Very.

JAMES: Whereas Scratch has the inherent strictness of, like, these are the blocks, this is all you can do, combine them any way you like. And in Java, we have this really strict syntax and typing and so on that means you can't– it won't let you do– you can make those mistakes, but it doesn't– it won't let you proceed if you do.

LAURA: Yeah, and I think at least in Java, what's a little bit more frustrating is not being able to learn everything that you're seeing on the page upfront. So it's really hard when you write your first method and you see all these words like 'public' and 'static', and all the kids in the classroom are like, "What does static mean?" And you're like, "You'll learn in time." It's really frustrating for kids that they're like, "But I want to know everything that's on the page." And luckily, with some updates to Java, they're making that easier for learning. So they're– they're actually making shortcuts for print statement, and where they have some abstraction of the main method, so we don't have to worry upfront in the first couple days of that course about, like, "What are all these words mean and why aren't you explaining?" Like, and String, like, what everyone says as "args", which they think is, like, a pirate statement, but it's arguments. But kids want to know, like, why is that there? Why is that always there? Like, what's existing? They have so many questions upfront that sometimes with all of that strictness and all of those words we have to use to define things that communicate, we also have– struggle with the start of teaching it, because they want to know so much more than you can possibly teach in a moment.

JAMES: And if our listeners–

LAURA: So that's a weakness.

JAMES: Yeah, and if our listeners have heard, like, the phrase 'boilerplate', it's like, it's– there's a lot of sort of boilerplate code that you have to write before you can, like, put your first instruction that's going to do something on the page. Let's think about where our languages are at their best or they flourish. So, what kind of thing might a student bring to you and you would say, "This is the best language for this"? So what kind of projects or what can students build fastest with your particular programming language? Marc's getting ready to talk.

MARC: Well, anything media-based, anything that– anything where you're going to want to use graphics, sound, animation, I would say just go straight to Scratch. Even if it's just the prototype stage, go straight to Scratch. It's just so easy to get images up on a screen, to get a sprite up on a screen, to move that sprite around. Anything that requires keyboard controls, exceptionally easy in Scratch, or mouse controls, exceptionally easily in Scratch. It's very much, like, aimed at creating games, creating stories, that kind of thing. So any animation, I think, video or audio is very–

JAMES: Media and interactivity.

MARC: Yeah. Very, very easy.

JAMES: What would you say, Di, for Python? What's its, like, niche?

DIANE: Well, I suppose probably the thing I'd probably naturally go to it for would be for anything around data science. You know, I think it's really–

LAURA: Same.

DIANE: Yeah! You know, it's got some really cool libraries that you can use, things that other people have written that you can use in your programs. So we have things like Matplotlib, you know, which is really good at handling loads of data and drawing graphs and, you know, analysing that data. We've got lots of–

MARC: NumPy, SciPy...

DIANE: Yeah, exactly. All of those libraries, like, they– loads of functionality already exists. So I think, you know, you can draw on that code to build some really sophisticated applications.

MARC: If I ever want to do anything that's interacting with the web or anything like that, then I'm straight to Python. It's exceptionally good at– and it has all the libraries there to do that as well. So if I want to talk to a website or read from a website...

DIANE: Yeah, the APIs are really good, you know.

MARC: It's really easy to do.

DIANE: And I think again, in terms of making your code more interesting, like, I think that can be really engaging for learners as well, to be able to grab extra data, data from elsewhere, and use it in your programs is really cool.

JAMES: Maybe we'll come back to this idea of extensibility later on, because there are things you can do in Scratch to extend the functionality, but maybe not quite in the same way. But let's just come to Laura on what's Java's niche?

LAURA: I mean, like, I think we talked about efficiency and working with, like, robotics and things like that. I think it's a good language if you're doing text-based that you can go anywhere with. First off, it can run on anything. So, like, if students want to create apps after that, that's a great thing and we can go do that with Java. If they want to go work in Unity and design games, C#'s a really tangible thing to learn after that, after you learn Java, and it's really easy to jump into Python and do data science. A lot of times, we learn Java first, and then we took a more extensive data science course and we converted to Python and that was easy for kids to do. So it's a good, like, gateway text programming language to go anywhere with.

JAMES: And I think, just on that point of extensibility, and I genuinely don't know the answer in Java because it's been a long time since I've written any, but in terms of taking that core functionality of the language and being able to, like, add things on, you've described a bit about how Python works, what's the experience like in the other languages?

MARC: So in Scratch, there's extensions. There's a limited number of extensions. But if you wanted to do, say, some physical computing and light some LEDs, take buttons, switches, there's an extension for that. There's extensions to interact with, for instance, the micro:bit, to use your camera on your computer, those kind of things. There's not a huge number of extensions in the same way that there's massive, you know, almost infinite number of libraries for Java and for Python that you can– you can add into your programs, so you're

very much limited with Scratch as to what MIT have put onto the platform, somebody else has written.

LAURA: There's not a lot in Java that we can directly do in the classroom. You know, the micro:bits don't have the availability. They have JavaScript, which is similar, but not the same. And even, like, the Finch robots, you can do Java on those, but you have to get an interface. So it's not as easy to do API or pull in libraries. So I would say that's probably a weakness. And I would actually jump into Python to do that with kids in text-based, or even Scratch. Like, I love going in to do some machine learning models and like, Teachable Machines and jumping in Scratch and saying, "We're learning about what the model does, not how to program it."

JAMES: What about then thinking about, like, we as a foundation want to get– get everyone engaged in programming. How do our languages– what's the relationship between them and, like, the accessibility? Like, do we need any particular hardware? Are they particularly geared up for learners that might have neurodiversity or are there other issues that might kind of prevent them? How are they kind of catering towards those learners?

LAURA: I mean, I'm going to say Scratch is really great. Especially working with students that were multilanguage learners. If they're learning English at the same time that they're learning a text-based programming language with syntax, that's really hard. That's so much cognitive load that it is nice to even take a block-based Python, and have them start there so they're not making those syntax errors and they can really concentrate on being able to read that code and format it. And even, there's some tools that translate too. So I don't think Java is the right answer for multilanguage learners or neurodiversity sometimes. I think sometimes when we abstract, it's better.

DIANE: Yeah, and I mean, I think I would totally echo that. I sometimes wonder with dyslexic students really, how easy it is to code, you know, when you're actually– when you struggle with spelling, but then you've got something that's really precise in terms of syntax, which obviously with Scratch, you haven't got to worry about.

MARC: No, you don't have any of those issues.

DIANE: So, you know, I think there are issues, definitely. And I think there are tools that make it easier, like environments that make it easier for some students. I think we shouldn't underestimate some of the barriers, and I think particularly, it's important that we think about all of our students when we think about these choices.

LAURA: I think even working with blind students, like, IDE becomes important because, does it have the ability to help them with programming? And just even physical manipulatives are a lot easier if I can do blocks, and start doing that with them and helping them identify shapes and things like that to start programming. So accessibility can be tough.

JAMES: Marc, do you need to make an argument after that?

MARC: I don't. They've just made it for me.

DIANE: We– we give in on this one.

LAURA: We support you on this one.

JAMES: And I think Laura mentioned IDE there and that's probably worth, like– the environment in which you're coding and writing your program. So in Java and in Python, the language and the environment are separate, and so the IDE, the environment, makes a big impact on how you're engaging with the language. That's all integrated in Scratch. And you've also got, like, the– so, all the features like the high-contrast blocks and the zoomability and all of those things really, I think, help make it much more accessible.

MARC: Yeah. Your IDE and your programming language are one and the same thing. I mean, you can take– you could take Java and put it into blocks as well, and you can take Python, and people have done it, take Python, put it into blocks. MakeCode is a good example. So Microsoft MakeCode, you've got primarily a block-based interface, but there's no reason why you can't have a look at what that code would look like if it's in Python or if it's in JavaScript. You can make edits there and transfer back the blocks. So that's like taking it to the next level, if you like, where you get to do– where you get to do both.

JAMES: Sort of just thinking about the learners, I think, we've talked about debugging, we've talked about sort of troubleshooting, and we've also talked about resilience. Which of our languages are going to be the least and most frustrating in terms of debugging?

LAURA: I am most frustrating! It is me!

MARC: I– I mean, I've hit bugs before in Scratch, like, and it's impossible to figure out, so that becomes exceptionally frustrating, and it would be for a child, because I've done everything right, because it's supposedly impossible to make mistakes. But you're still getting some sort of error. And like, if you're making, like, logical errors, if you're making errors that aren't to do with the syntax of the program, it's just your way of thinking, they're very difficult to debug in Scratch, whereas they might be slightly easier to– to find your error, to read through your program in Python or in Java.

DIANE: Yeah, I think the ability to stick in a lot of print statements in Python, you know, because it's not compiled, so because it's interpretive and it's going to run line by line, it is sometimes a really quick way of debugging and finding out exactly what's going on in your program without having to rely on a sophisticated IDE.

MARC: I can be– I can– I can have a room full of kids all working in Scratch and somebody says, "Marc, this isn't working as I think it should." And you go over and you sit down, and you go, "Well, I'll solve this problem for them really easily." And then you see that they've got 100 sprites, and each of those sprites has 50 scripts, and those scripts aren't in a nice order, they're all over the place. And that becomes an absolute nightmare to debug, because you have no idea which sprite is being run at which time and which block of code is being called. They've got broadcasts all over the place. It becomes like spaghetti. JAMES: And I think, because you were saying earlier on about, like– you can sort of transition out of Scratch at any point, but there's no reason why you couldn't just keep going.

I think one of the reasons maybe you don't want to keep going is, as you get really complicated programs, you hit that problem. And going back to your earlier point of, like– and to sort of stretch that analogy a little bit further of the Lego, like, your individual building blocks in Scratch, you can't really make mistakes there, but, like, your architecture, your how different things interact, if that's flawed, then everything's doing what it should be doing, but it just breaks.

DIANE: Yeah. Yeah. It's something we were sort of talking about really, is, like, you know, what's the objective in teaching kids to code? You know, is it for them to, you know, start to develop a love of the joy of coding and to really want to do something, you know, more with it in the future? Or are you teaching them to help and support pass an exam? Or, you know, what– what's your actual rationale? Because I think you're going to pick a different solution for different situations.

LAURA: Yeah. And at the end of the day, I think what that is really doing is teaching them if we're not thoughtful and intentional about design upfront, we're going to cause a lot of crazy things down the line. So it does teach them to be thoughtful about, I need to think about how I design this before I just start programming.

JAMES: So let's think about some other languages. Marc, you mentioned MakeCode, and some of our listeners have suggested some other languages that they like to teach with. What do we think are the pros and cons of some of these? So Nyree Scott and Daniel mentioned Logo. Nyree said that "although I really love using Scratch with children, I would still advocate for Logo and the fact that it can not only tell you it doesn't know how to do something, but it also tells you which bit of code it doesn't know how to do." Daniel says that Logo was "developed by a linguist with teaching programming concepts to students in mind, so it's maybe the best choice." Christine Swan mentioned Sonic Pi. That's a real favourite of mine. And Daniel also mentioned Pascal. Any thoughts from the panel on those languages?

LAURA: I mean, I think just in teaching overall, there's the thought of consistency. Kids don't stay in the same school for– it depends on where you live, 12, 10 years. And they move around. So if you're using something that no one else is using– So I would love to teach Rust. I think it's such a cool language. But I know if a student leaves my classroom and goes to another computer science teacher, they're going to be learning something that's more standard and consistent in their coursework, like Scratch, which is really widely used, or Python or Java in the cases where that's required. So I think you do have to think about, if we're not consistent and we're kind of wild, wild westing the languages we choose, what impact can that have on our students that are transient?

MARC: I think, I mean, Logo's a fantastic language. It's the first language that I ever used, along with BBC Basic. I think a lot of the work that was done in creating Logo, that went on to inform Scratch, and you know, everything you can do in Logo, you can more or less do in Scratch. Similar pen tools and things like that. Pascal I think was a teaching language. It was developed as a language for people to learn. DIANE: Yeah, it is quite– considered to be quite old now. You know, I think time has moved on, and a bit like Laura said, it isn't very widely used any more, which I think again is a bit of a barrier because particularly for students who are not so confident, you know, as you said,

they move from one school to another, and like, nobody knows about Pascal and then it's really problematic for them.

LAURA: Yeah.

DIANE: So I think it's definitely one of the reasons why Python is so popular in the UK is that almost everybody uses it at schools.

JAMES: Great. And just on that point of consistency, I wonder, is there value in dipping into other languages? What do learners maybe gain from that from time to time and then coming back, so they're getting that consistency? Is there value there, do we think, as a group?

DIANE: I think there's definitely value in looking at the same program in different languages. I think, you know, sometimes people sort of feel like another language would be too difficult or too problematic, and a lot of it is about the craft of building a program. And I think once we've got kind of over that, then actually the idea that, well, I can use another language now, I can be multilingual, is quite attractive. And I think sometimes it is good to show people that other languages are not that scary, you know, and they could be accessible, and that they have different purposes, and, you know, we might choose to use a different one for a different type of application.

JAMES: I think one of the things that this really underscores is that– I think we must have mentioned, like, 20 different programming languages so far in this conversation. Fundamentally, they're all doing the same thing with the same concepts, but just representing things in different ways and for different purposes, and I think however our learners are learning those conceptual kind of components that they can combine, they– once they get that sort of skill, they can then move between languages fairly fluidly. I'd like to end with a quick lightning round of questions for the group. So, which is the best language to do the following? An animation.

MARC: Scratch.

JAMES: Scratch. Yeah? Scratch? OK, cool. Data analysis?

DIANE: Python.

JAMES: Python, yeah, OK. A mobile app?

DIANE: Probably Java.

LAURA: Probably Java.

MARC: I would say Java.

LAURA: Yeah.

JAMES: Yeah, OK, cool. What about, like, a robotic system?

MARC: I think you could do it on all of them, to be quite honest. Yeah. Scratch has got– Scratch has got some inbuilt robotics stuff with the extensions. Python would probably be my go-to.

DIANE: Definitely.

MARC: I think, if you were doing in...

LAURA: Competition, me.

MARC: Yeah, competition stuff, it would be Java. LAURA: Or C++, but...

JAMES: It's very magnanimous of you, Marc. What's one myth about your language that won't die?

MARC: It's just for babies.

JAMES: Just for babies. Yeah, OK. Yeah, Scratch. Laura?

LAURA: That it's the worst. It's not!

JAMES: Di?

DIANE: I can't think of a myth about Python.

MARC: It's slow.

LAURA: Oh, sometimes people–

DIANE: Yeah, but it is quite slow.

LAURA: I know, a–

MARC: Again, like I said before–

LAURA: That it's named after a snake. It's not!

JAMES: Yeah, OK. Well, maybe we'll go with the slow one. What feature would you like to borrow from another language? Laura?

LAURA: The libraries that exist and the tie and the extensions from both these languages.

JAMES: Yeah. Marc?

MARC: Being able to interface with websites.

JAMES: Oh, yeah, yeah, yeah. And Di?

DIANE: And I want not to be able to declare global variables.

JAMES: So you want the strictness of Java.

DIANE: I do.

JAMES: Right. Excellent. Why should I not use your language? Di?

DIANE: Well, I think when you're trying to do something where performance is really an issue, I think, like, sometimes, you know, if you really, really need something to perform fast, then you probably wouldn't use Python.

JAMES: Laura?

LAURA: When you need to code something really fast. I would pop into Python probably now and do that.

JAMES: Marc?

MARC: You shouldn't use Scratch if you're a really boring individual with, like...

JAMES: With no imagination.

MARC: No imagination, yeah.

JAMES: Right, OK.

MARC: Completely uncreative.

JAMES: If I ask you to show me "Hello World", who could do it the quickest?

DIANE: Me!

LAURA: With Java 25, I can get there. Read about it.

JAMES: I think Di's hand went up slightly faster.

MARC: Actually, thinking about it, I would have to drag in a when green flag clicked, say, and I'd have to write "Hello World" into that, and you can just do print("Hello World").

DIANE: And I have to write one line of code, print("Hello World").

JAMES: I think it might be a photo finish on you two.

DIANE: Laura's still having to think about how many lines of code.

LAURA: I forgot the semicolon! JAMES: Thank you to Marc, Laura, and Di for your contributions today. Any final thoughts from you?

DIANE: I think my real– my final thought, my bit of advice really, is pick a programming language that you really enjoy and that you can kind of impart your enthusiasm for, because I think a lot of it is just bringing along the kids on the journey. And I think so long as we can make our lessons fun and exciting, whichever language we're using I think can be successful.

MARC: Yeah, I think just think of what you want to do and then try it out in a few different languages and the one that you have the most fun doing is the right language for that project.

LAURA: Just keep with it. It will never completely make sense at first, but it will get there. And with that, I'll say System.out!

JAMES: I hope you enjoyed that conversation. As always, we'd love to hear your thoughts, so do drop us an email to podcast@helloworld.cc.

That brings us to the end of our current mini podcast series. We hope that you've enjoyed watching it as much as we've enjoyed creating it. For more practical tips for teaching programming, do go read the most recent issue of the Hello World magazine. Just head to helloworld.cc to subscribe and read the digital version there for free. We've got a whole back catalogue of podcast episodes here on YouTube too. Have an explore of those and click 'Subscribe' so you don't miss future episodes.

Thanks so much for watching. Goodbye.