 Okay, let's continue. I'm pleased to introduce the engineer, Liana Bagratze, who talks about learn Python the fun way. Hello, everyone. Thank you all for coming to my talk this evening. Today, I'm going to talk about one interesting type of tools that can be used in education. And I guess some of you definitely came here today to find out how to learn Python the fun way. Okay, let me get started then. First of all, a little bit about myself. My name is Liana Bagratze. I am a software developer from a beautiful Russian city called St. Petersburg. I work for JetBrains. And as part of my work, I am involved in development of PyCharm ADU, which is educational edition of PyCharm IDE, specially designed for Python learners and educators. Because of my work in PyCharm ADU project, I am in constant search for interesting tools and ideas for learning and teaching programming languages. And I'd like to say that Python community does awesome job trying to make Python available for anyone and providing resources for those who want to learn it. Please raise your hands, those who somehow involved in Python in education. So that's you who do this awesome job. But no offense, but going through these resources could be a rather boring process for some people, especially for kids. But what if we could forget that we're actually trying to learn something new and just have fun instead? What if we could continue improving our skills while doing something fun? And we could do this. Playing games has been proven to be one of the most effective ways for us to learn. First of all, it decreases the fear of failure. I'm sure that all of you have met people who thought that they were too stupid for programming, but I have never actually met anyone who thought that they were too stupid for Counter-Strike or Pokemon Go. And also, if you fail a test, it might have serious consequences and it might be rather disappointing. But if you fail a level in a game, there is nothing scary about it. You can just start again. In a games, we often get an instant reward. Once you have completed a level, you get an achievement. And it's nice to have a lot of achievements, isn't it? When we play a game, we usually try to win. And competition is the moving force of progress. And at last, games often provide good visualization, which makes it easier for us to master hard concepts. At this point, playing games seems to be very good way for us to learn something new. And of course, I'm not the first person who had an idea to apply to programming. And today, I'm going to show you three projects that are my personal favorites, just to give you an idea of how it works. And I'm also going to tell you how you can help these projects other than donating. The first project is called Code Combat. In this game, you help a hero to achieve some goals on each level. It is insanely cool for children and people with no little programming experience. They say on their website that if you want to learn programming, you need to write a lot of code. And that's definitely true. But their job is to make sure that you're doing this with a smile on your face. I like these words, but let's take a look how they do that. So this is one of the levels in Code Combat. Our hero is stuck in a room with fireballs and we need to survive. How can we accomplish it? Well, we have some equipment. It provides commands that our hero can do. For example, simple boots allow us to move to different directions. And later in the game, we will get some sort of advanced boots that will allow us to move to the specific coordinates. We also have a sword, but that's not very good sword actually because you need to hit an enemy twice to kill it. When you first see some level, they already provide you with a code sample and your job is to modify it. Sometimes you need to add some lines and sometimes you need to modify conditions or something else. You can also run it and see what goes wrong. Let me show how it works. At first we see that our hero dies because he moves only to the right. Then we fix our code and run it again. This time everything is okay. And yay, we get some XP and gems that can be spent to buy better equipment. I also like that they can in some way analyze your code. For example, in this case, I misspelled the name of one of my enemies and they told me that I made a typo. So as I don't get frustrated because I can't find such a stupid mistake in my code. If you are interested in this project, you're very lucky because there are plenty of ways for you to help it. This is by far the best contribution guide I've ever seen. It's a screenshot from Code Combat's GitHub Wiki and they represent their contributors as game characters. For example, they call coders arc majors. The project is 100% open source, but it's written in CoffeeScript, so it's not that easy for Python developers to contribute with code. But you can actually complete all the levels with CoffeeScript too. So you can learn CoffeeScript with the Code Combat's help and then pay back to it by contributing your code. But you can also help in other ways. First of all, you can help with translation. Code Combat has translation to many languages and this fact is pretty impressive because we don't have so many programming games that are translated into languages other than English. This fact, okay. So there is still a lot of work for you to do. A lot of levels hasn't been translated yet. But the best part is that you can actually create new levels yourself. It's not as easy as I'd like it to be. They still have special editor for creating levels and you can express your creativity and add some bonuses to your karma. The next project is called Coding Game and it is known for contests that they organize. In these contests, you can compete with other developers in some sort of turn-based games where you need to write a successful strategy. If you manage to do this, the chance is high that you will get a good price or even will be invited to a job interview. If anybody is interested, the next contest will be held in September so you have enough time to prepare and sign up. But let's now take a look into their onboarding puzzle that explains to new players how the whole project works. Each puzzle has a goal. Sometimes they also give you nice synopsis with spaceships or something like that and we also can see what our code actually does in this visualization window. The editor is prefueled with the code that retrieves all the needed information from the standard input so you can concentrate on the code that really matters. Once you've done with the code, you can run provided test cases and see if your code works good or not. For these test cases, they show you all the input and the expected output and you can also see what exactly goes on on visualization. I'd like now to show you how it works but at first I want to explain what you need to do in this puzzle. You need to retrieve coordinates of your enemies from the standard input and on each turn you decide what enemy you are going to shoot but they actually already tell you that you need to select the closest enemy to survive. Okay, I've already rolled the correct solution and let's run the provided test case. Yeah, it looks like we survived. Let's now spoil our code and let's select the furthest enemy instead. Run it again and we are dead because the very first spaceship got to us and we died. This project wouldn't be so cool if there were no community around it. It's really nice that you can view other people's solutions and learn from them but they also have so-called community puzzles that you can find in the community puzzles category and you can write your own puzzles. Maybe you can come up with the idea how to introduce the algorithm for finding the array maximum for people with some interesting story. Okay, the last project is called check IO. It doesn't have that impressive visualization but it still has the huge content base and the friendly community. The tasks here are divided into islands and each task actually is called a mission. Each mission has three different states. Once you've done with solution, you can publish your code and see what other people think about it and maybe you will be even lucky enough to get your code reviewed. Let's now dive into the mission called median. Your job here is to write a function called check IO that returns the median of a list of numbers. Once we realized what we need to do, we can try to solve this task, why not? And again, we see yet another version of text editor. This time the editor is rather limited. It has no code completion and instant error highlighting which would be helpful. They also have little task description to window but they can provide you nice hints. Check IO provides hints in the form of an actual conversation between two people where you ask questions and more experienced developer answers you. In some tasks, they also have nice visualization feature for you to test your code on the actual data. For example, in this case, you can change the data directly on this picture and they will show you with the orange line what median is and you can see if your code works. Let's now see how this visualization works. At first, we will try to check the solution that always returns the first element of a list. Then we magically type the correct solution and try it on different input data. Okay, let's change the data. Yes, it seems like it works. As I've already said, Check IO's text editor is rather limited but the good news is that there is a plugin for PyCharm that allows you to complete Check IO missions. In addition to the ability to write solutions in PyCharm and post them directly to Check IO without copy pasting it back to the browser, you can view other people's solutions directly in PyCharm, change them and play with them. At first, all the missions available at Check IO were created by the team but now anyone can create their own missions. In order to do that, you need to clone a GitHub repository, write your mission there and suggest it back to the Check IO team. After review, your mission might become accepted and might become available for anyone. There is also initiative to translate Check IO to languages other than English. You can also propose your translation in form of full request. In conclusion, I'd like to say that even though there are a lot of great resources for learning Python, there is one interesting direction in educational tools that can actually change the way we learn. You've just seen three great projects that attempt to do that and I encourage you to try them and maybe to contribute to them. But I also want to note that it has been plenty of time since I proposed this talk and no great games have gained my attention since then. It means that there is a lot of space for creativity and for you to invent something cool in this area. For example, I definitely would enjoy playing a game that teaches me Django or Flask or NumPy. That's all. Thank you again for coming and don't hesitate to find me at PyCharm booth. Okay. Someone wants to have a question. Question. Can you talk a bit more about Python? Is you IDE because I was not aware about it and I don't know exactly what it does. I think you better come to me at PyCharm booth and I can make a demo for you. Okay, great. Thank you. Thank you very much. That's very interesting. Can I ask where you're going next with this, anything that you haven't told us about that you've got in your plans for the future? You mean according to PyCharm, are you in gamification or just? Anything that's in line with your aims that you talked about about making this more fun and more accessible, more easy to learn especially for? I think that I should do what I can do and I should implement these ideas into PyCharm IDE. And I intend to do that. Okay, thank you, Liana, for two answers and for your interest comments. Thank you all again. And thank you all for coming. Thank you. Thank you.