How to introduce children to IT and how to work with ML in .NET: an interview with Dmitry Soshnikov (Microsoft)
Many affiliates know Dmitry shwars Soshnikov (Microsoft) from his reports related to machine learning. And now the worlds of ML and .NET are drawing closer together thanks to ML.NET technology, so a new report would be very useful - and it will be on DotNext (even two, from Dmitry and from Jeff Proseiz ).
But Dmitry’s activity is not limited to reports - for example, he also popularizes development technologies among beginners, including his own daughter. And this is no less interesting topic: for sure among the audience of Habr there are parents who think how to correctly introduce children to IT.
Therefore, in anticipation of DotNext, we interviewed where we started with a biography of Dmitry, then we talked in detail about children's IT education - and in the end we touched on machine learning and new reports on it.
Biography
- You are known as the technological evangelist of Microsoft, but I want to know the biography in more detail: what happened before Microsoft, how did you get into the company, what exactly are you doing there now?
- I was probably developing about 30 years ago. I developed an example for my dissertation in Java, but when Microsoft came up with the .NET platform, I liked it. And I led the development on .NET of a certain analogue of SharePoint for an American company, and at the same time taught at the institute - I like to share my experience.
At some point, the Moscow Aviation Institute began to collaborate with Microsoft on various student programs. Students began to participate in international competitions, once they took second place in the world. And then Microsoft told me: “Here you are working with students here, but do you want to work with students with us?” And I thought it was a good offer, because I could combine in one place what I like to do: both the popularization of technology and the technology itself.
But he did not quit teaching. Of course, it became less to engage in development, but the position of the evangelist at Microsoft is still primarily technical, it implies a constant acquaintance with technologies and a certain amount of programming.
I was happy to do this for about ten years - at first I worked mainly with the student audience, then with developers and startups, I traveled all over Russia with hackathons several times, and made them at large universities. In general, it was interesting.
And in the last two years, I have been engaged in Microsoft machine learning and artificial intelligence, developing pilot projects for large international companies. Microsoft’s task is transforming a bit: we used to strive for people to increase their productivity through technology, and now, in addition to people, we help companies think about how to implement modern technologies.
The company does not always understand how to take and implement artificial intelligence: what data to collect, how to do it. These are the things we helped do in pilot projects mode.
It was a very interesting work, because, on the one hand, we did some semi-research things, read scientific articles, looked, can we do better than what is written there, and many colleagues with different backgrounds, from the UK, Norway, some practically from the academic environment.
Now I’m just getting back to evangelism, now it’s called cloud developer advocate.
- Before asking about the training of others, I want to know: how did you initially get into IT and who taught you?
- Surprisingly, practically nobody taught me initially. It turned out that when I was still very young, I tried to design radios, I really wanted to assemble my own. But this was before the 6th grade, I didn’t know physics and it didn’t work out for some reason, I took some outdated instructions.
And once dad said: “Look, the future is in digital electronics, not analog”, and gave “The Art of Circuit Engineering” by Horowitz and Hill. This is a textbook for students. I tried to figure it out, in the end I liked reading on this topic, they began to buy books on programming, but there were no computers then.
And at some point I managed to take a computer from friends for a while, and I started on it ... Then it was a Basic training program, I remember, I myself tried to figure this out at school. There were no teachers then, it was before the 90s, 1985. I learned to program myself: BASIC, PASCAL, Assembler, C. Then I had to build a computer for myself - of course, dad helped with the components and with the initial assembly and setup.
The first time it was launched, of course, was not easy. But I am proud that I was somewhere in the 7-8th grade, when the microcircuit was inserted incorrectly into the computer, smoke came from there, and I had to repair this computer, and there were charred wires on the board in 5-6 places. It was not easy to find this, we started step by step, we ran them on the beat, we watched how the processor reads instructions from memory. It was very useful, then a person could still understand how the computer is arranged, now it is hardly possible. It was a good time, just nostalgia.
Introducing children to IT
- It is known that you popularize technology even among schoolchildren - but how does this look in practice?For example, among other things, you are “the leading chair of computer technology at the UNIO-R children's camp”, what is it?
- In practice, everything is simple. I have a daughter who is now 15 years old, and I really want to introduce her to the world of computers, because I sincerely believe that in the future so many professions will be at the junction with him. And no matter what a person wants to do, it will be much easier for him if he owns computer technology.
Dmitry with daughter Vika
My daughter goes to art school, she likes to draw, and I'm trying to find something good somewhere at the junction - like computer generative art. I grow with her and get involved in various interesting activities. From the last thing we did at Microsoft, there was an open event dedicated to Women's Day in IT, where everyone was invited. And they recorded online lessons on machine learning and AI for children from 7-8 years old, so that they understand what kind of world we are starting to live in.
Moreover, these lessons were quite practical. There is an Azure Machine Learning Studio tool that allows you to learn machine learning models without programming skills. And as examples in this course, we took photos from a popular Instagram account, and using cognitive services pulled out signs: for example, what color prevails, how many people, how happy they are, what their average age, keywords, on the street or in indoors the photo was taken.
And they tried to find the dependence of the number of likes on these signs. Having trained a simple regression model, you can immediately see what factor affects the number of likes.
It seems to me that even if children cannot repeat such an experiment themselves, it helps them understand how the modern world works. That in order to do something optimally, you first need to collect data, then measure, and then build a model and learn how to predict.
Well, the results themselves are also interesting. I don’t remember them completely, but, for example, photos on the street turned out to have more likes than indoors. It is interesting to draw such conclusions. Well, the tool itself is very simple.
In parallel with this, there is UNIO-R - this is a children's camp organized by my friend Yuri Gorvits practically for children of acquaintances. Information is passed from mouth to mouth, and a well-established company of children travels there, every year someone new arrives. The idea of the camp is for adults who are interested in sharing something good with children. Children spend the first part of the day at sea, and the second half working on projects led by adults.
There are different projects: they make films, publish magazines, collect robots. We did various interesting art objects with electronics, with Arduino. Based on the “turtle graphics”, I did a small C # course for children when they painted. Did something interesting based on programming in Minecraft.
And by the way, a very good video, however, in another camp, in Dilijan in Armenia, we did a project when I taught children the basics of programming in Minecraft, and we programmed the construction of a giant city. It is clear that it is not difficult to program the house, and we built a city of skyscrapers, long and beautiful.
I am very interested in how to captivate children with such things and what is responsible for it. It attracts and carries many children very much, I am looking for some tricky interesting things.
- In your opinion, how exactly and at what age is it worth starting an introduction to IT?
- It seems to me that it is good to be guided by the principle from the book “After three it’s too late”, but not by the principle that is put into its name, but by another. There is an important idea: you do not need to force children and insist on something, they need to be in the right place. If you are building a computer, let them be there, and you can talk about this topic. If you are doing something interesting, be sure to tell the children about it and try to engage them. But do not force to do something by force. It’s not always like this for me, but it’s important.
As for age, there are some studies that show that children under 10 years old do not properly understand artificial text languages. That is, until 10-12 years, they do not need to learn C # or the same Python. For this age, there are graphical languages like Scratch, which goes well with seven years.
Microsoft has a great product Microsoft Code - it is also a block language in which you can simultaneously program from blocks, and you can switch to a JavaScript-like language. At some point, when a person becomes crowded in block programming, he will be able to easily switch and understand how the same blocks look in a text language.
Minecraft Education can be programmed on Microsoft Code, but so far it has not spread much in Russia. And on it Code, you can program a small device-board Microbit.
At one time in England there was a project to distribute such boards to schoolchildren for teaching programming. There are 25 LEDs (5x5) on the board, a temperature and acceleration sensors - all in one bottle. It is very simple to program, it connects like a USB flash drive, a file with the program is downloaded to it.
And you can do awesome things out of “micro bits”. They have a bluetooth radio, so that they can communicate with each other. There are absolutely amazing projects. From what I remember, this is a project in which the infection process is simulated. For example, we are writing a program that, with some probability, becomes infected from a nearby such board. It is interesting how this infection spreads in a group of children: everyone has a pay, and we look at who gets sick and who does not. It turns out half a biology lesson, half computer science.
Modern education is largely trying to adopt such interdisciplinary things. For foreign teachers, this is more developed, I read about it on Twitter. For example, Minecraft for education. But you can still try to teach your child something and look towards multidisciplinary projects.
- About the mentioned Scratch one can sometimes hear “well, it is so different from the“ real ”languages that it will not really prepare children for any realities.”And what does your practice say: do children successfully switch from block languages to text?
- Here I have less practice, but it seems to me that the transition should not be very painful. The basic concepts are the same: loop, variables, and so on. In my opinion, having acquired the concepts, putting them in a different language should not be catastrophically difficult.
On the other hand, this must be approached without fanaticism. It is not necessary to think that if at first you did not teach the child Scratch, and at the age of 10 or 12 he did not start learning Python, then he will be late somewhere. Maybe you should not rush and do without Scratch.
Also, do not teach a child at 7 years old industrial languages. He’s used to playing toys, and here you need to write all sorts of “void main”.
- About "all sorts of void main" Kai Horstmann told us that for the convenience of teaching beginners he tried to rid the "hello world" in Java from this, but his proposal was not accepted.Do you have the feeling that languages like C # are unfriendly to beginners and haven’t been made friendlier in vain?
- I think they can be made friendlier in training. For example, from the experience of my video course “Exciting C # Programming”: you cannot completely get rid of “void main”, but you can say “ignore it all, look only at the place where you write something”.
And then it turns out that the syntax of the language itself is not so catastrophically heavy. Of course, in such languages the for statement is complicated: instead of saying “repeat 10 times”, it is more difficult to write. But overall, C # learning experience is no harder than Python. In Python, try to explain to your child why to write for i in range (10).
On the other hand, there is a positive experience of simplifying languages. which is done by the creators of the Arduino programming environment and the Processing programming environment. Arduino is based on C ++, Processing - seems to be based on JavaScript or Java, but supports Python. Processing is made for designers, Arduino is made for electronic engineers who do not want to understand programming. Therefore, everything was done there so that it was necessary to write less all around, mainly only the code itself.
These environments are successfully developing and very popular. Therefore, yes, you can somehow simplify the existing languages so that they are used in learning. In Python, you need to incorporate a minimum of simplifications, because it is already quite simple. Plus, there are various tools for it, including Jupiter Notebooks, and, by the way, absolutely wonderful Azure Notebooks , available from the cloud for free, with support for presentation mode, libraries, etc. All this is very convenient to use for training.
- Returning to the words "then a person could still understand how the computer is arranged."It used to be easier to understand sites too: a schoolboy could open his favorite site, look into its HTML code and start doing something himself.And in 2019, the entry threshold is much higher, the student will curse everything even at the stage of setting up the environment.Is this a problem that impedes the involvement of new generations?
- It seems to me that the main problem is that our expectations for what we call the site have increased. If you take the classic site in academic design in 1991, now people will look at it and be horrified.
The subject area itself is becoming more complicated. To make sites like Facebook, you need to get used to it. At the same time, libraries, frameworks, languages take on a part of the struggle with complexity. There are programming environments that are relatively simple and somehow take on this complexity.
And no need to think that web programming is much more complicated than any other. Arduino has its own difficulties, you need to be able to connect electronics there. Not so connect - everything will burn.
The main difficulty in web programming is that there is a frontend and backend, and you need to understand and understand how it works. But it is quite possible to start with a simple one. In the end, making yourself a home page is quite a pleasant and useful activity. To begin with this, and if a person is interested, he will develop and deepen in this direction.
Unfortunately, the common problem is that now it is difficult for a person to be a universal. Previously, any programmer could have both a backend and a front end, and if necessary even assembler, now people who are involved in electronics and are able to assembler are unlikely to program in the style of reactive functional programming. Just because it’s difficult to embrace.
- You mentioned that you see many foreign “interdisciplinary” examples, and in Russia this is less.And how do situations in general relate to the IT education of schoolchildren in Russia and abroad?
“Well, I'm just subscribed to communities like Minecraft in Education, and that's why I see many foreign interdisciplinary examples - for example, when a history teacher says,“ I give the task to build a historic battlefield in Minecraft. ” It seems to me that we don’t have enough that there was so much freedom at school. Usually the teacher teaches his subject and does not really look away.
In terms of IT education, we have many opportunities. There are very strong children's camps for those who want to do IT, there is GoTo, a winter school at the physics and technology college. Wishing to find a place. For very children there is also - “League of Robots”, “Kodabra”, a whole bunch of such private companies, which close this niche well.
And the school is not so bad either: for example, the international initiative “The Hour of Code” (when it is called in schools to spend one hour and show how programming works) three years ago was supported by the Ministry of Education and the Ministry of Communications. And there were very impressive figures for the number of students who passed the "Hour of Code" and tried to do something with their own hands. This is in the millions of schoolchildren in Russia.
A person who has never heard of programming, I think, was somehow embraced and heard something. Therefore, it seems to me that everything is not bad. But, of course, statistics still show that there is a shortage of people in IT: they need a lot, and many think that it is not easy and why complicate life.
AI
- Moving from the topic of children to the topic of AI / machine learning, we ask about both.So once dad told you “The future is in digital electronics” and he turned out to be right.And if now we are introducing children to IT, we also need to think about what the future is for - after all, by the time they come to the industry, it will already come.
But the future for us is not obvious.AI is developing, but where will it be in 10 years?Some people think that in general the code will begin to write for us.In such an incomprehensible situation, what should we talk about?
- It seems to me that we definitely need to talk about artificial intelligence. The problem with AI is not that the computer will immediately start writing code for us, but that many tasks are now solved not by writing code, but by collecting data and training ML. And there is nowhere to go: there are tasks for which a person writes code well, and it is reasonable for them to write code. But there are tasks for which a person cannot write code, and then you have to use ML.
And due to the fact that ML allows you to solve increasingly complex problems, it takes more and more space in the arsenal of computer specialists. But classic Scientists who are involved in algorithms are being replaced by data Scientists who also have algorithms, but a slightly different outlook on life. This is normal, they, in general, are computer specialists.
Therefore, I do not think that here AI will deprive someone of work. For the foreseeable future, artificial intelligence remains a tool for us, a very good tool: it allows us not to do boring things.
There were a large number of programmers who placed buttons on forms and thus earned a living. Maybe it was good for them, but a person should not do this, he should set himself more interesting tasks. Artificial intelligence will take on some complex tasks. There was some kind of project that, based on a sketch on paper, builds the design of molds on its own - that is probably how it should be. But at the same time, the person will have more interesting tasks, and this is good.
We need to talk about AI. But in general, no matter what area we take, changes are taking place very quickly. And they happen because of digitalization, because as soon as we digitized something, the computer can do something with it very quickly.
Therefore, it is very important to learn how to learn. Previously, the cycle of change was hundreds of years, and it was possible, having learned in childhood, never to study again, but simply to work. And now, most likely, the world will change, and it will be necessary to master something along the way. We, programmers, live in such a world all the time, we have been having new technologies all the time from birth, sometimes they come out at a very high speed. Especially in the JS world - in .NET it’s somehow easier with this, which is probably why more calm people work with it.
It is necessary to have some kind of meta-subject skills so that there is some common sense. And then look with curiosity what is happening and where life will endure.
- You are a member of the Russian Association of Artificial Intelligence - what is it all about?
- In general, the Russian Association of Artificial Intelligence is an organization of scientists who are engaged in research in the field of AI. It has a long history, and my AI occupation also has a long history. I defended a dissertation on a topic related to distributed artificial intelligence about 15-20 years ago.
Then it was not such an AI as it is now fashionable, but based on an explicit representation of knowledge when we took a model out of a person’s head. And what, in fact, I suggested - to make these models distributed so that there is a distributed logical conclusion and representation of knowledge. It was in a sense the emergence of the idea of the Semantic Web even before the Semantic Web, but in a slightly different form.
Since then I have been an association, once every two years conferences are held on the topic of AI - this is some kind of “scientific hangout”. There is one more - the association of neuroinformatics, which is more concerned with neural network issues. Many people are in both at once.
The association may not be as closely connected with the industry as we would like, because the industry is looking towards Western companies, ready-made solutions, neural networks, and so on. But this does not negate any fundamental decisions.
- ML.NET was first talked about last year, but then it was clearly suitable only for very early adopters.And now that more than a year has passed, how much technology has matured?Which circle is it right now?
“Here, it seems to me, there is no definite answer, because you cannot wait until something is completely ready.” Machine learning is implemented quickly and efficiently, and without it you can oversleep and be late with the business, so you need to drag. The question is what is the best way to drag in production: ML.NET or Python, which is bolted using some kind of web service. This is a philosophical question, it can be so and so, but it is not so great either. Therefore, of course, from the mainstream point of view, Python machine learning exists much more, both the community and the tools. And ML.NET is a toolkit for another party, and it's good to talk about it on DotNext.
The company, naturally, had some processes inside, and in many ways the tools at the core of ML.NET are internal tools that are gradually being brought out. Therefore, this technology is actually tested “in practice” in the most rigorous way, and not just written from scratch for the sake of fashion.
This technology has already proven itself in life, but it is changing very quickly. ML.NET was version 0.6 a year ago, and it did not have a lot of algorithms, but now a lot has been added and is developing rapidly. If you want to strive not to be late, but to keep up to date, then ML.NET should be watched, of course.
Whether this is a good way to start learning machine learning is a tricky question. .NET is more verbose than Python, simply by virtue of the language.
- And finally - about reports related to ML.NET.There will be two of them on DotNext at once, yours and Jeff Proseiz - how do they relate?
- The first important difference: my report is in Russian, and it is in English. So those who misunderstood English can then come to me and listen! But the main difference, probably, is that Jeff will talk about ML in .NET in general from the very beginning: what it is, how to use it. And I will try to concentrate on the most advanced things - neural networks and deep learning.
Everyone is wondering if it is possible to train neural networks on .NET. I talked about this in my past reports, and the answer was - yes, it is possible, but it is painful. The answer is still like this. ML.NET currently does not provide an opportunity to take, and from scratch start experimenting with arbitrary architecture of neural networks, alas, but it has a slightly different focus.
However, ML.NET allows you to apply models that have been trained before. And in practical machine learning - if we talk, for example, about working with images or texts - a lot of tasks are connected with the fact that we take a ready-made model and a little sharpen it for our needs.
Conditionally, if you need to learn to recognize different types of home tools in a photograph, we will not train the model from scratch, but, most likely, we will take a model that is trained on images in general, and we’ll finish it a bit. This is called transfer learning, and such tasks on ML.NET are relatively well solved. Therefore, I will show a number of examples of how you can easily take and train such a model for object recognition - this is called Custom Vision, there is a special tool from Microsoft that allows you to effectively make such decisions.
Well, let's talk about what neural networks are generally for recognizing images, texts, how and with what they are eaten, and what can be done in ML.NET.
DotNext with the mentioned reports about ML.NET (and many reports on other topics) will be held November 6-7 in Moscow . The site already has a complete program . For example, besides the report, Dmitry at the conference will also conduct the training “F # Coding Dojo on Machine Learning” - where you can get to know both F # and ML.NET right away.