 We're back everyone. We have a talk from Anand Chittiputuna about Mone School, a platform that makes teaching programming for beginners more accessible. Like having been in this situation many times, like having to teach beginners programming and about programming languages, it gets difficult sometimes. And I'm personally very excited for this talk. I hope you all are also excited for this talk. And if you are all not based anymore of your time, I'm handing over the stage to Anand. Good luck Anand for your talk and happy learning everyone. Thanks Nikhil. Hello everyone. Very good afternoon. Hope you have enjoyed the talk so far by coming here. So I want to ask you a question. How do you start learning programming? Well, you all felt that programming is weird and it's too hard to learn. Was there any time where you really wanted to give up? It's too difficult. I'm sure I was there when I was learning. It was really difficult to learn programming. So hello, my name is Anand. I've been creating software for about two years, two decades now. I've been with the Python community from the very beginning, Python community in India. I grew up with the Python community. So currently, what I'm doing is building a non-profit learning platform called Monskull. So I really want to kind of talk about the platform under some of the ideas there. So over the course of my career, I've trained hundreds of engineers, mentored many. I've tried a lot of times to kind of teach programming to beginners a lot of times. And there's always something that feeling that it was difficult. It can be better. So last couple of years, I've been pondering about what's a good way to use programming to observe beginners, more like people who just joined engineering or even people in the school, etc. So figuring out what is the right way to do it. So how do you introduce programming, especially to young students? This is something that I was kind of worried about. So if you look at young students, I mean like people in their school or people that just joined the college, they're going to reach their primaries in five years, 10 years or 15 years. Now what is that we should teach them that they'll stay back with them when they start their careers? So that is something that I was kind of thinking a lot more. So one is like how do you introduce and then what do you kind of teach? So what should be the focus of that when you teach them? So it seems that they're going to take quite long time. So if you look at it, software kind of changes really fast. If you look at a decade back, there's no mobile app development. But now every day, now these days everyone is into building mobile apps. So the technology kind of changes really fast. So what should be the focus when you teach, especially young students? So that was something that I was worried about. So should it be the programming language? Is Python the best programming language to teach in the beginning? Or should be some other language? Should we focus on the syntax? Or should we focus on algorithms? Or data structures? Or should we just focus on building mobile apps? Because that is the going trend. I mean, the different things. I mean, if you look at them, there are many commercial offerings which actually visit your parents to enroll their kids into the programs. Promising that they'll get a job at NASA and Google and all that. You know all of that, right? So what is it that we should focus on? So what I've realized is like I've looked at some students who had Python in their school. They've lent it for a year. They're not acceptable programming at all. So what I realized is it's not really programming language. It's really not what language you use or what. It's really about what are you kind of passing on to them, right? So when I look at, ask this question, what's the fundamental elements of programming? So something I found from this wonderful book called The Suction Interpretation of Computer Programs, also known as the wizard book, is that three elements of programming. One is primitive expressions, means of combination, means of abstraction. Let's explain what this means. Primitive expressions is basically what are the primitive expressions that language is supporting? How do you mean some combining? How do you combine those things to form complex expressions? And abstraction is basically naming it. How do you name it? So that you don't have to call the entire expression but just give it a name. So these are the simple ideas that are fundamental programming. I'll actually show you what it really means. So this is what we want to do, but now how can you make this really fun? How do you make this really engaging and make people connect to it? Okay, so let me step back here. So the idea is like when you look at programming, the foundation of the program is basically how do you take the simple ideas and build complex ideas from them. That is the basic idea of programming. It's not really the frameworks will come and go, language will come and go. Really, the core idea of programming is really takes primitive expressions, you combine them and then give names to them, abstract them so that you can refer to that whole complex object just by giving a name. So that's always the fundamental idea of programming. And now if you want to kind of pass this to students, like how do you make, what's a good way to kind of do that, right? So that was a challenge that I was dealing with. Once you want to kind of make it fun, I want to make people to kind of connect to it. So at this time I was kind of figuring out like how people really learn, right? So we typically learn by connecting with what we already know. So let's say people, students kind of learning language, they'll start with singing some poems in the language, et cetera. So they can get connected to it easily. But what happens is when you kind of look at how the program is taught these days, usually the connection is kind of missing, right? So people, the program is a completely different set of things that we don't really understand anything in our real life. So it won't convert foreign literatures or try to convey something on the screen that has no relation to that you always see in your life. So it becomes very difficult to kind of learn that. So you want to kind of figure out that and see if you can create that pattern and then do something else. So I've tried a bunch of experiments. I've tried to kind of see if you can actually use electronics as a medium. Essentially people would actually use sensors, et cetera to learn programming so that they can actually see something really happening in the life, right? You kind of clap your hand and the light will glow off. So this is one way to kind of do it. The other thing I was trying was doing a creative coding where people write programs to create interesting patterns. That turned out to be a very easy thing and people really like that. So what happened was like to make that possible. So we have created a library called Joy. It's a creative coding library written in Python. I'll show you like how that feels like, okay? It's really tiny creative coding library and can really do wonderful things with that. So we have created this library and created a course called the Joya Programming on MonSchool to introduce programming in really fun way. So let's see how a program in Joy looks like. So this is the first program that you can write at Joy. You create a circle and then show the circle. You see a circle there. Now if you see like a person who's completely new to programming doesn't really have to understand any of the syntax, right? You see a circle and then brackets, that's all the syntax that they need to know and then that will show a circle. So let's kind of jump a bit more and kind of see what all shapes that it supports. So it has support for four shapes, circle, ellipse, rectangle, and line. And you can style them as well. You can say what's the fill color, what's the stroke, and what's the stroke width. So there are three styles that you can specify. And there are transformations. You can translate it. You can specify x and y and set translate. You can scale it. You want to make it bigger or enlarge or shrink it. Or you can rotate a shape. So these are the three transformations that are provided. And there are three combinations that you can do in the language, in the library. You can combine two shapes into a single shape. You can take a shape on that road and then apply a transmission, use a pipe operator for doing that. Or, and there is another higher order transmission called repeat, which basically combines all the, which applies the transmission intent and combines all those shapes and then gives a single shape. These are the only things that are there in the library. Looks like pretty primitive, right? Isn't it? So if you look at joy, it has four shapes, circle, ellipse, rectangle, and line. The styles fill, stroke, and stroke width. Three transmissions, translate, scale, and rotate. And three combinations, plus two adding shapes. And then pipe to join them and repeat to repeat the transmission multiple times. That's all languages, right? I kind of explained it to you in like five minutes. So now let's see what all you can actually make with this. So what all can you make with joy? Can you guess like what all could be possible with these primitive things? Let's try it out. So what I'm going to do is I'm going to take you to the live editor in joy and I'm going to show you what all you can do. So just to kind of make the background. So let me show you what it is. So let's see the shape is circle and then show us. So you see a circle. So there's a, my default puts a grid. So I want to kind of remove the grid. So I just put a background there. Sorry. Yeah. So we'll see a circle. Now you can try circle with different radius. You can say r equal to 50. It will become a smaller circle. You can specify x equal to 100 to move it to the right. So the center is at the, the origin is at the center of the canvas. So you can do, let's try some interesting things here. Okay. Now I'll take a line. So that's a line. So I'm going to rotate that. Let's say 30 degrees. I'll rotate. So you get line tilted in a particular direction. What in fact do we do it repetitively? So repeat four times. I'll do this. That would give me the same line repeated like four times each with 30 degrees. So you start with the first one, then rotate, rotate, rotate. So when it's a rotate for the original one and then three more rotations, you get this. Okay. You can actually try an interesting stuff here now. I can actually say, say n equal to, or I can just put it here. Okay. So 18 times if I do and rotate with 10 degrees, it will complete half revolution. So that will become a complete thing. So I made a start just by writing a single line of code. Right. So as we see, like when students are kind of learning programming from the beginning, right? So all they really have is now take a line and then apply this transformation. So now you take this primitive, the handful of primitives that you have and combine them in different ways to kind of very, very interesting shapes. Now let's repeat the same thing with the rectangle. There are many, you don't really need 18. You can do nine because it's a symmetrical in four dimensions in four sides. Well, not really. The square is nine, but okay. So if you take a rectangle, you kind of get these into three shapes. Now you could try the same thing with an ellipse. So you can create really interesting shapes pretty quickly. Let me go back to a rectangle. And this time I'll make it a square. So what I'll do is I'll actually let me just make it, I just do five degree rotation. Maybe do it like four times. Let's see how it looks like. Something, yeah. I forgot to mention H there, okay? So I took a square and started rotating it four times. So this looks really interesting, but I want to do something more. I want to rotate but also kind of scale it down while I'm rotating it. So what I want to do is I want to scale it. Maybe say make it 0.9 times the original size. So it will take the shape and then make it smaller. So while it's rotating, it's going to make it smaller. That looks interesting. Let me do it hundred times. So it will start going in. So the size is exactly not fine. So let me tweak the scale factor, maybe nine one. Not quite into perfect. So now we can have created this very interesting hypnotizing shape just by writing a single line of code. All we have done is we've taken four primitives here, a rectangle, and then a transformation rotate and scale together and then repeating that hundred times. So that's, isn't that interesting? Let's try something different now. Okay. So what I'll do is I'll keep this here. So I'll take a circle now, but this time I'll take circle at slightly further. Okay. So I'll take this. Repeat maybe 18 times. Rotate by 10 equals maybe. No, I need to do 20 because to make the complete evaluation. So let's now see, I've taken a circle. Let's see what's kind of happening here. If I take this one, I just get one circle there. What I'm doing is I'm making it two of them. So it will put the second one and I did 18 of them. I'm rotating by 20 degrees. So it kind of makes the entire 20 into 18 is 360. Okay. So I got an interesting circle here. Okay. Now what I can do is I can actually scale this further. Okay. Can actually, let's say if I scale this by 0.5 for example, it will become smaller. Right. So I'll get a smaller one. Okay. So what I can do is what if I do it repeatedly? Repeatedly. I scale. Okay. Let's say I do four times. I scale it by, let's say 0.8. Let's see what happens. That's not quite. Okay. So I may be 0.7. That sounds interesting. Okay. Well, let's see why stop at four. Maybe do it like 20 times. So you got three interesting shape. Okay. So this thing is kind of quite aligned. So I don't really like it. I want to kind of try to move it far. So it's rotated by 20 degrees. I'll rotate this each time when it's going by 10 degrees. So that that goes in the middle of that. Okay. As you can see now, a nice pattern is kind of emerging. Okay. So you could try different things. For example, I don't really want to take 20 degrees, but maybe take 10 and then increase this a little more. Yeah. Let's make this, keep this out here. All right. So I'm just going to get a bit here. Okay. 20. Okay. It's going to be angle by two. What are the angles? I'm going to kind of do that by four. Okay. And we've taken 18. Angle is 360 by N. Let's see what we get. That's what we started with. I was 20 back then, but now I want to make this 36. So I get a, so I guess we may have to tweak the, the factor of scaling factor here. Maybe we have to do with the point week or something now. I just want to try to see if you can actually add more, more of these. Okay. Yeah. Yeah. The nine is getting. Yeah. You get what is getting next. So kind of creating, trying to create a very interesting, a flag like shape. That's why I think a single line of code here. Now that is one thing. Okay. Now you could apply the same things for some other things. For example, what we can do is take a, so I'll take a circle again now. So again, I'll take it at, it's equal to 120 and R equal to 20. Sure. Yes. I have one of this. Okay. Now what I'll do is I'll repeat other times, rotate by say 10 degrees. And I'll also scale this now. What do you get? Well, so nine is kind of too small. Maybe make it 98. See what happens? You're kind of getting a spiral. Okay. Maybe 99. Right. So you probably, you have to make it quite long. Okay. This is, it's kind of forming a very nice spiral pattern. And these kind of bigger. So just try with the, there you go. Right. So you kind of have this nice spiral. Okay. So you could maybe fill this with white so that you don't really see those lines. So you could see like a kind of patterns that you could create just by combining these primitive operations. Again, all of this is Python. By the way, I don't know if I've noticed something. We have not used a single keyword in Python so far. Right. So we just take these primitive operations and combine them using plus and pipe. Okay. And then calling these functions. That's all right. There's no keyword. I haven't used a single keyword in Python so far when I was doing it. In fact, in the Java programming course that we've designed to use programming using this library until half of the course, we don't even use a single keyword. So in fact, recently kind of asked this question, what can you make without using keyword in Python? So I can actually make quite a lot of stuff if you actually have a library like Joy. Now, you've got a sense of like what all things could be made. I didn't really show with colors because I'm not so good with colors, I would say. Okay. But what I've done is recently partnered with an organization called Tinkerhub and organized the contest. In Kerala, for the own festival, there is a tradition of actually making a flower decorations called Phukalam. Okay. So people, what they do is they'll make flowers in a circular fashion and they kind of make very interesting intricate designs. So what we did was a contest to create Phukalam with code. So a lot of people came on board and created Phukalam. Okay. So I was kind of blown away by the kind of stuff that I kind of made. Okay. So these are some of the things that people made. The first one is not a Phukalam, but I just put it because that's really interesting. This is a sketch made by a school student using eight lines of Python. Okay. Without using single keyword. And if you look at some of these, like these are kind of stuff, not trivial, right? These are people who lend this library and programming and create all this stuff. So as you can see, like there are so many details. But if you see like how this thing is made, it's just made of these primitive items. The one that we have set is four shapes, three styles, three transformations and three ways to combine them. That's all. There's nothing else that went into this. Now other interesting thing is like some of these things are actually made without using single keyword and Python. Some of these people are actually learning programming for the first time when they joined the contest. So they don't know anything about Python or programming before. So they would actually kind of go through the tutorial, go to the course and then start applying those ideas and creating this. See how beautiful people are kind of creating. Now the other interesting thing is like, I really like what kind of came out because like here, we typically when you do programming, right, we kind of always use idioms from the West in the sense like we talk about a lot of stuff idioms that we use in computing. I kind of lent in the computer faster. For example, wallpaper and desktop and back in 20 years back. I didn't know what was the wallpaper. So all of the concepts that people talk about in computer are kind of quite far into me back then. But now what I realized is like people are actually not talking about the culture in code. When you actually look at some of the sketches that people have made, if you actually see, it's quite interesting to kind of see like the people actually creating a function to create a code and base. You make a pool column with the code and base and then you actually decorate it with three kinds of flowers, et cetera. And I was quite excited about the kind of stuff that came in. So that's all I have to kind of show about what this thing is. If you're excited, head out to monitor at school and then join and then explore what is there. And we need your help. It's all false. So monitor at school is a nonprofit online platform for learning programming. So we are false. All the code is available on GitHub. Your contributions are welcome. Please spread the word about MonSchool. If you like it, try sign up, help others join. You can join as a mentor and then help other people learn programming. Or you can even create a course on MonSchool. If you're excited about it and you want to kind of come and join. If you want to help other learn programming, if you're interested in creating a course, please get in touch with me. I would be happy to kind of work with you and see more courses on MonSchool. That's all. Thank you so much. If you have time, I'm open for questions. Thanks, Anand. That was really cool. If I'm being really honest. I'm personally looking forward to using MonSchool to teach programming to some of my cousins and juniors. I'm also interested in your proposition for my school. I learned programming in my school in 10th standard. But we didn't have too many resources for programming. Not as good as MonSchool at least. So we can talk later. But I would like to add a comment there. So one of the goals of MonSchool is basically to reduce the barrier for mentors to people to help others learn programming. So what you want to do is want people to kind of come and join as mentors and then help like your cousins and people in your apartment complex and maybe children in your school or your college. So that is a spirit that you want to bring into the millions community. As for the questions, we right now only have one question from what I can see. Can we do maps with MonSchool course? Sorry, maps. I didn't get what you mean by maps. I'm not exactly sure. That's the exact question. It was asked by a guru. So I think you're asking about if you can actually show a map. No. So the goal of MonSchool, the MonSchool, the Java programming course is not really to kind of able to do things which are of practical importance really. So the goal is really to kind of have fun and learn these ideas without any constraints. So when you actually put an outcome as a result, then you get quite constrained. So what you want to do is kind of throw these primitives at them, show it to them and then see what all can you make. So go and then create whatever you want. So the downside is you can't really create so many useful things like apps or something. But it still gives the idea of how do you, they learn this idea of how do you combine simple ideas and kind of build complex ones. I think that was the focus of that particular course. We're adding more courses to MonSchool. For example, there may be other courses which will add some practical ideas or maybe building applications or building maps, etc. can be part of a different course, but that's not part of this particular course. I hope I answered your question. There's another question. Does your library also support animation for creating these ships? Yeah, not right now. Okay. So one of the things that we wanted to do was to make sure that the interface is really easy. So one of the goals of JOINS to kind of keep the interface as simple as possible. So in fact, when I started, through this journey, I started with a library called P5JS, which actually is a very popular library for creative coding. It supports animation and all of that. But the problem is when you kind of start adding animation, you need to somehow be able to specify how do you render each frame. So these libraries usually start with starting a setup function and a draw function. Now that means that you have to explain to them what is a function in the day one. You start with writing two functions. Now that did work for me. I didn't want to do that. I want to kind of have a hello world first program. It's one or two lines that a school student can read and understand without anyone's help. So I didn't really want to add a complexity. That's why that is not added. So now still there's room to kind of create animations. But I haven't figured out everything yet. So I'm not saying that that will not be there in the joy ever. But the idea is like, I don't want to add it by adding a complexity library. We can figure out a way to kind of add that without adding a complexity. I'm all for it. But if you have any ideas, like please ping me. I'm happy to discuss with you. There was one more question I can ask other than that we don't have the time for any more questions after this. If you still have any more questions for Anand, you can go to Zolip and ask him the questions on the Zolip stream. I'll share the link in the chat after this question is over. You can ask your questions there. So the last question is I'm going to share these with my kids, love the core structure. How do you see this compared to scratch and would you be adding pi games to make this more fun? So thanks. That's interesting question. So when you look at scratch, scratch makes it introduction to kind of programming very easy. But the limitation that what I found in scratch is being at the visual medium, ability to kind of create abstractions is hard that medium. So I mean you tend end up duplicating a lot of stuff than actually creating abstractions. For example, writing a function is something that doesn't come very naturally in that mode. In fact, I've experimented with the block language before I tried this. For example, when I was teaching some kids using BBC Microbit, using the block language like scratch, not scratch but pretty much it's scratch like block language. The problem is like within like a week they started asking me like this is enough when are you going to teach JavaScript or Python because it takes really long time. The time it takes from thought to executing that takes really long time when you have to drag and drop and do stuff. So in that sense, my experience has been like scratch may be good enough in the beginning but it doesn't take you very far. And coming about the pi game. So one thing that you want to do is kind of make it easy for people to kind of also access. So one of the concepts that we put ourselves is people should be able to access it from the mobile phone from the web browser. So the point is like a lot of students that are on MonSco right now surprise that to know that half of them are actually don't have a computer and actually lending it from mobile phone. In fact, if you look at the entry that we have here I've shown here. The last one is the first prize winner of the Code Proclaim Contest. This person has participated in the contest from mobile phone. He didn't had a computer good enough to kind of access that. So the thing is like even when you really want to do pi game and build games, et cetera but constant is you want to kind of do it inside the browser. So what we've done, so partnered with a person in the community called Arun who is I think many of you kind of familiar with him he's a Django expert. So he's working on a course, building games with Python but not using pi game because we want to do it in the browser. So soon in a week or two we'll have a course to build games with Python right in the browser and you can share with your friends. Thanks. Thanks Arun for this amazing talk.