About how I wanted to teach others, and as a result I learned myself
Hello, Habr! I’ve been working on an online training program for Android developers at the e-Legion Academy for the past year . Under the cat, I’m telling how I came to the idea of becoming a teacher and what difficulties I encounter in the process.

A year and a half ago, my ex-classmate, former colleague and friend and I were all one person, hello Geor! - sipped beer on nitrogen and thought about how we plan to arrange our lives. There were a lot of ideas - from choosing a place of residence and a car to the names of children and animals. In the end, they came to such a sad and inevitable state as old age. Where will we grow old and what will we do?

I did not want to sit at home or on a bench, and I thought that I would probably begin to teach young people what I can do myself. We liked this idea, and we remembered our teachers and teachers, whom we would like to follow and who we would not. But along with the teachers came the student years, and friends, and the dialogue flowed into a different direction. Then I thought that teaching in the second third of my life did not threaten me. But I was wrong.
At some point, e-Legion, the company I work for, decided to launch an online school to train iOS and Android developers, the e-Legion Academy . Courses had to be designed from scratch, made informative, relevant and that was all. The staff is responsible for the preparation and presentation of the material, that is, we. As a matter of fact, the educational program is a kind of project, even if the specificity differs from the main activity of e-Legion.
Without thinking twice, I agreed to participate. Honestly, I didn’t think at all, I wanted to teach.
The planning phase was relatively simple. The first blocks of the program are the foundations of the Android platform, the middle is architecture, tests and libraries, the last 2 blocks are design, custom views and third-party services like Firebase. Nothing unusual, we go on increasing, gradually increasing complexity.
After planning, they began to prepare material for recording lectures. There was a thought in my head that for some reason I could not clearly articulate. This went on for some time, and suddenly, while preparing material about the context, I heard a voice in my head: “YOU CAN’T KNOCK!”
I can’t crap.
It impressed me so much that I left the context alone and decided to think about whether I was messing up. And I thought of the next. I prepare the material and bring it to a large number of people. For the most part, these people are not familiar with the platform, and the information received from me becomes authoritative for them. Like a freshly hatched duckling, she takes for her mother the first creature that came into view and did not eat him.
This imposes liability. I can’t afford to say something that I’m not sure of myself and that is not exactly true. And this means that before preparing the material you need to study the nuances yourself. Indeed, in a conversation they will refer to me, and if the thesis suddenly turns out to be erroneous, then it will be oh how uncomfortable.
In addition to the courses themselves, we conduct a chat with students, answer questions or push for the correct solution of tasks. I came up with a rule for myself: to convey only accurate information. Even if I know exactly what to answer, I always go to the corresponding online resource, make sure of the answer and only then answer. Or throw a link. This also applies to video lectures - in them I give only what is known for certain. With lectures, of course, simpler - the text has already been prepared, you just have to read it. But over an arbitrary speech, over the explanations of the material during live coding-sessions I had to sweat.
Time after time, I repeat the same mistake - I project my experience on the interlocutor. I forget that the interlocutor is not me, he did not read the books that I read, did not watch the films that I watched, and did not encounter the code that I came across. It’s easier with colleagues - I can tell you part of the details, part of the problem, and, based on their own experience, they’ll figure out the rest themselves. This is dangerous, because in the end, concepts, situations and terms are surrounded by nicknames - professionalism, such as the harmless "view" for View or "six-dimensional permissions" for Runtime Permissions, and we developers, for the most part, use them already in speech. Of course, we in the department understand each other, like any group of people engaged in a common business for a long time.
This is not so with students. I can’t use slang. I need to name things as they are officially called so that students do not have problems finding additional information. At first, I had difficulties with this moment. As a result, I formulated another rule: if this is a purely android thing, then I do not translate it, but simply use transliteration. If it comes to writing, I often use the original, English spelling, for example, Activity or LayoutInflater. If the concept is more general and widespread, then I use both translation and original spelling. For example, Button is a button; it is also a button in Africa. These simple and clear rules made my speech cleaner. There is less desire to call something “crap” when you know exactly how this is written, pronounced and translated.
I really want to ask the question to the candidate at the interview: “Explain to the person who is not involved in Android development what context is?” And the answer will be enough for me to decide if he fumbles or not. And no, there will be no right answer.
When I just started to prepare the training program, I realized that I know pretty well why this or that component, a class is needed, but I am completely unaware of how it is built from the inside. It is understandable, why should I poke around in the SDK code or libraries? “I am a consumer (albeit a developer), I don’t need it,” I thought. But I was wrong.
In Android there is a component - Service, it is used for operations that are not directly related to the interface. For example, playing music. The lack of communication with the interface gives rise to the myth that Service works in the background. But this is not so. Service starts in the main thread, can block it and, as a result, call ANR. And for background work in the SDK, there is an IntentService that processes incoming intents one after another, in turn. And after completing all the intents, he completes himself. Any Android developer should know this.
When I worked with IntentService, I represented a line. The line begins with the start of the service and ends with the end of the service. Simple, understandable, convenient. Only now this cozy picture collapses when I needed to imagine how a new intent gets into the launched service. How to present it? Where to attach the arrow? Should there be a stack or what? It became clear to me that this could not be further. The line is too blurry and inappropriate illustration of what IntentService is.
I climbed into the source and saw a simple picture - HandlerThread paired with Handler. Plain HandlerThread! And everything fell into place: intents are processed in turn, because in MessageQueue they are arranged in turn. Each new Intent is wrapped in Message, moreover, with the indication of the service start number - startId. After the processing of the intent, the stopSelf () method is called with the transfer of this startId, and if it is equal to the last service call, the service ends. In my head, everything turned out like a puzzle.

This applies not only to IntentService. Looking under the hood of classes from the SDK gives a bunch of pluses. No abstract lines and arrows, only an absolute understanding of the mechanism. More accuracy, less guesswork. Less worry, more confidence. More knowledge, less mess. But I can’t crap, remember?
When we started work on the program, we were asked: “For whom are these courses? Who will come to study with us? ”I didn’t have to think about the answer for a long time - these are guys who rummage a bit in Java, in OOP, students of specialized universities who are just starting their development path, or programmers who want to retrain from another direction. Therefore, in fact, the program also includes the basics of the framework.
It is much more interesting to think about who will ultimately succeed after completing the course. What knowledge the student will keep in his head. Or how he will get a job. I imagine how he takes out the phone and tells the interviewer: “Look, this is my application, I wrote it!” The interviewer picks up the phone, pokes buttons, is surprised at the animations, asks questions about the implementation of this or that feature. The student is responsible. They have a pleasant professional conversation. And HR is impressed, satisfied and ready to hire my student. It is a success. But in order to bring to life this interview and another hundred interviews of other students, we need to work on the material, make it better, fuller, more accurate.
The vision of the end result - the student at the interview - helps me concentrate on work and not leave gaps. Although, if you really want to, you can always give a couple of topics for independent study, thereby motivating students to seek information. Just in moderation.
After reading it, you may get the impression that Android development courses are entirely my merit. What nonsense! Alone, I would never have pulled such a volume of work. There are many of us, but special thanks to my colleague Marat for his titanic work. When you come to St. Petersburg, I’m nitrogen.
In general, being a teacher is good. When I teach, I study myself. The students are cool, they are motivated not only by the fact that they paid money for the course. It can be seen that they really want to learn a new profession - to become a mobile developer. The process, of course, is not fast, but they have 9 months to delve into the basics and file their application. And not one. So I'm glad that I can help them in this difficult matter.
The most difficult part in teaching was the selection of wordings to be accurate and understandable, to minimize questions and convey thought to students without any distortion. I’m still learning to choose the right words. And I'm learning not to mess. These skills can not be obtained in a couple of days, at least crack.
During the preparation of the materials, I looked at various programs, for example, a course from Google on Udacity, studied the performance of classy speakers. I re-read so much documentation and tutorials that I feel like a walking Wikipedia on Android development.
The main thing - to share experience and knowledge with students was very cool. If earlier the result of my work was connected only with application releases and fixed bugs, now I also see how other people develop thanks to our courses.
In short, connect!

About old age and beer
A year and a half ago, my ex-classmate, former colleague and friend and I were all one person, hello Geor! - sipped beer on nitrogen and thought about how we plan to arrange our lives. There were a lot of ideas - from choosing a place of residence and a car to the names of children and animals. In the end, they came to such a sad and inevitable state as old age. Where will we grow old and what will we do?

I did not want to sit at home or on a bench, and I thought that I would probably begin to teach young people what I can do myself. We liked this idea, and we remembered our teachers and teachers, whom we would like to follow and who we would not. But along with the teachers came the student years, and friends, and the dialogue flowed into a different direction. Then I thought that teaching in the second third of my life did not threaten me. But I was wrong.
About recruiting employees
At some point, e-Legion, the company I work for, decided to launch an online school to train iOS and Android developers, the e-Legion Academy . Courses had to be designed from scratch, made informative, relevant and that was all. The staff is responsible for the preparation and presentation of the material, that is, we. As a matter of fact, the educational program is a kind of project, even if the specificity differs from the main activity of e-Legion.
Without thinking twice, I agreed to participate. Honestly, I didn’t think at all, I wanted to teach.
About the voices in my head
The planning phase was relatively simple. The first blocks of the program are the foundations of the Android platform, the middle is architecture, tests and libraries, the last 2 blocks are design, custom views and third-party services like Firebase. Nothing unusual, we go on increasing, gradually increasing complexity.
After planning, they began to prepare material for recording lectures. There was a thought in my head that for some reason I could not clearly articulate. This went on for some time, and suddenly, while preparing material about the context, I heard a voice in my head: “YOU CAN’T KNOCK!”
About liability
I can’t crap.
It impressed me so much that I left the context alone and decided to think about whether I was messing up. And I thought of the next. I prepare the material and bring it to a large number of people. For the most part, these people are not familiar with the platform, and the information received from me becomes authoritative for them. Like a freshly hatched duckling, she takes for her mother the first creature that came into view and did not eat him.
This imposes liability. I can’t afford to say something that I’m not sure of myself and that is not exactly true. And this means that before preparing the material you need to study the nuances yourself. Indeed, in a conversation they will refer to me, and if the thesis suddenly turns out to be erroneous, then it will be oh how uncomfortable.
In addition to the courses themselves, we conduct a chat with students, answer questions or push for the correct solution of tasks. I came up with a rule for myself: to convey only accurate information. Even if I know exactly what to answer, I always go to the corresponding online resource, make sure of the answer and only then answer. Or throw a link. This also applies to video lectures - in them I give only what is known for certain. With lectures, of course, simpler - the text has already been prepared, you just have to read it. But over an arbitrary speech, over the explanations of the material during live coding-sessions I had to sweat.
About the right names
Time after time, I repeat the same mistake - I project my experience on the interlocutor. I forget that the interlocutor is not me, he did not read the books that I read, did not watch the films that I watched, and did not encounter the code that I came across. It’s easier with colleagues - I can tell you part of the details, part of the problem, and, based on their own experience, they’ll figure out the rest themselves. This is dangerous, because in the end, concepts, situations and terms are surrounded by nicknames - professionalism, such as the harmless "view" for View or "six-dimensional permissions" for Runtime Permissions, and we developers, for the most part, use them already in speech. Of course, we in the department understand each other, like any group of people engaged in a common business for a long time.
This is not so with students. I can’t use slang. I need to name things as they are officially called so that students do not have problems finding additional information. At first, I had difficulties with this moment. As a result, I formulated another rule: if this is a purely android thing, then I do not translate it, but simply use transliteration. If it comes to writing, I often use the original, English spelling, for example, Activity or LayoutInflater. If the concept is more general and widespread, then I use both translation and original spelling. For example, Button is a button; it is also a button in Africa. These simple and clear rules made my speech cleaner. There is less desire to call something “crap” when you know exactly how this is written, pronounced and translated.
About the pictures in the head
I really want to ask the question to the candidate at the interview: “Explain to the person who is not involved in Android development what context is?” And the answer will be enough for me to decide if he fumbles or not. And no, there will be no right answer.
When I just started to prepare the training program, I realized that I know pretty well why this or that component, a class is needed, but I am completely unaware of how it is built from the inside. It is understandable, why should I poke around in the SDK code or libraries? “I am a consumer (albeit a developer), I don’t need it,” I thought. But I was wrong.
In Android there is a component - Service, it is used for operations that are not directly related to the interface. For example, playing music. The lack of communication with the interface gives rise to the myth that Service works in the background. But this is not so. Service starts in the main thread, can block it and, as a result, call ANR. And for background work in the SDK, there is an IntentService that processes incoming intents one after another, in turn. And after completing all the intents, he completes himself. Any Android developer should know this.
When I worked with IntentService, I represented a line. The line begins with the start of the service and ends with the end of the service. Simple, understandable, convenient. Only now this cozy picture collapses when I needed to imagine how a new intent gets into the launched service. How to present it? Where to attach the arrow? Should there be a stack or what? It became clear to me that this could not be further. The line is too blurry and inappropriate illustration of what IntentService is.
I climbed into the source and saw a simple picture - HandlerThread paired with Handler. Plain HandlerThread! And everything fell into place: intents are processed in turn, because in MessageQueue they are arranged in turn. Each new Intent is wrapped in Message, moreover, with the indication of the service start number - startId. After the processing of the intent, the stopSelf () method is called with the transfer of this startId, and if it is equal to the last service call, the service ends. In my head, everything turned out like a puzzle.

This applies not only to IntentService. Looking under the hood of classes from the SDK gives a bunch of pluses. No abstract lines and arrows, only an absolute understanding of the mechanism. More accuracy, less guesswork. Less worry, more confidence. More knowledge, less mess. But I can’t crap, remember?
About students
When we started work on the program, we were asked: “For whom are these courses? Who will come to study with us? ”I didn’t have to think about the answer for a long time - these are guys who rummage a bit in Java, in OOP, students of specialized universities who are just starting their development path, or programmers who want to retrain from another direction. Therefore, in fact, the program also includes the basics of the framework.
It is much more interesting to think about who will ultimately succeed after completing the course. What knowledge the student will keep in his head. Or how he will get a job. I imagine how he takes out the phone and tells the interviewer: “Look, this is my application, I wrote it!” The interviewer picks up the phone, pokes buttons, is surprised at the animations, asks questions about the implementation of this or that feature. The student is responsible. They have a pleasant professional conversation. And HR is impressed, satisfied and ready to hire my student. It is a success. But in order to bring to life this interview and another hundred interviews of other students, we need to work on the material, make it better, fuller, more accurate.
The vision of the end result - the student at the interview - helps me concentrate on work and not leave gaps. Although, if you really want to, you can always give a couple of topics for independent study, thereby motivating students to seek information. Just in moderation.
About what will remain after me
After reading it, you may get the impression that Android development courses are entirely my merit. What nonsense! Alone, I would never have pulled such a volume of work. There are many of us, but special thanks to my colleague Marat for his titanic work. When you come to St. Petersburg, I’m nitrogen.
In general, being a teacher is good. When I teach, I study myself. The students are cool, they are motivated not only by the fact that they paid money for the course. It can be seen that they really want to learn a new profession - to become a mobile developer. The process, of course, is not fast, but they have 9 months to delve into the basics and file their application. And not one. So I'm glad that I can help them in this difficult matter.
The most difficult part in teaching was the selection of wordings to be accurate and understandable, to minimize questions and convey thought to students without any distortion. I’m still learning to choose the right words. And I'm learning not to mess. These skills can not be obtained in a couple of days, at least crack.
During the preparation of the materials, I looked at various programs, for example, a course from Google on Udacity, studied the performance of classy speakers. I re-read so much documentation and tutorials that I feel like a walking Wikipedia on Android development.
The main thing - to share experience and knowledge with students was very cool. If earlier the result of my work was connected only with application releases and fixed bugs, now I also see how other people develop thanks to our courses.
In short, connect!