Hi, Habr! For a year now, I have been working on the online program for training Android developers at
the e-Legion Academy . Under the cut I tell how I came to the idea of ​​becoming a teacher and what difficulties I encounter in the process.

About old age and beer
A year and a half ago, we were with my former classmate, former colleague and friend - it's all one person, hello, Geor! - we 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 condition 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 be, and whom we wouldn’t. But together with the teachers came and student years, and friends, and the dialogue flowed in another direction. Then I thought that teaching in the second third of my life does not threaten me. But I was wrong.
Employee Recruitment
At some point, e-Legion - the company where I work, 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's it. For the preparation and presentation of the material responsible staff, that is, we. As a matter of fact, the educational program is a kind of project, even if the specifics differ from the main activities of the e-Legion.
Without thinking, I agreed to participate. Honestly, I did not hesitate 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 fundamentals of the Android platform, the middle is architecture, tests and libraries, the last 2 blocks are design, custom view 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 I somehow could not clearly formulate. This went on for some time, and suddenly, while preparing the material about the context, I heard a voice in my head:
“YOU CAN'T FALSE!”About responsibility
I can not mess.
It impressed me so much that I left the context alone and decided to think about whether I am crap. And thought of the following. I prepare the material and bring it to a large number of people. These people for the most part are not familiar with the platform, and the information received from me becomes authoritative for them. How a newly-hatched duckling takes for a mother the first being caught in sight and not having eaten it.
It imposes responsibility. I can not afford to say something that I am not sure about myself and that is not exactly true. This means that before preparing the material you need to study the nuances yourself. Indeed, in the conversation they will refer to me, and if the thesis suddenly turns out to be erroneous, then oh, how uncomfortable it will be.
In addition to the courses themselves, we chat with students, answer questions, or push for the correct solution of tasks. I made a rule for myself: to convey only accurate information. Even if I know exactly what to answer, I always go to the appropriate online resource, make sure of the answer and only then I answer. Or throw the link. This also applies to video lectures - in them I give only what is known for certain. With lectures, of course, easier - the text has already been prepared, you just need to read. But over arbitrary speech, over the explanations of the material during the live coding-sessions had to sweat.
About the correct 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 those books that I read, did not watch those films that I watched, and did not interfere with the code that I encountered. It is easier with colleagues - I can tell some of the details, part of the problem, and they, based on their own experience, will figure out the rest. This is dangerous, because in the end, concepts, situations and terms are overgrown with nicknames - professionalism, such as a harmless “view” for View or “six permissions” for Runtime Permissions, and we, the developers, for the most part in speech, already use them. Of course, we in the department understand each other, like any group of people involved in a common cause for a long time.
It's not like that with students. I can not use slang. I need to call things as they are officially called, so that students do not have problems finding additional information. At first, I had difficulty with this moment. As a result, I formulated one more rule: if this is a purely android thing, then I do not translate it, but simply use transliteration. When it comes to writing, I often use the original English spelling, for example, Activity or LayoutInflater. If the concept is more general and common, then I use both the translation and the 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 “figovina” when you absolutely know exactly how something is written, pronounced and translated. And even seems to be in my head.
About pictures in my head
I really want to ask the candidate a question at the interview: “Explain to a person who is not engaged in Android development what the context is?” And the answer will be enough for me to decide whether he is fumbling or not. And no, there will be no right answer.
When I started to prepare a training program, I realized that I know pretty well what a particular component or class is for, but I don’t know how it works from the inside. It is understandable, why should I poke around in the SDK code or libraries? “I’m 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 not related to the interface directly. For example, playing music. The lack of communication with the interface gives rise to the myth that the Service works in the background. But it is not. Service is started in the main thread, it can block it and, as a result, call ANR. And for background work in the SDK, there is an IntentService, which processes incoming intents one after another, in turn. And after completing all intents completes itself. Any Android developer should know this.
When I worked with IntentService, I represented the line. The line starts 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 had 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 is impossible. The line is too blurred and not a suitable illustration of what IntentService is.
I got into the sources and saw a simple picture - HandlerThread for a couple 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 a Message, and also with the indication of the start-up number of the service - startId. After the intent is processed, 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 went like a puzzle.
This applies not only to the IntentService. Peering under the hood of classes from the SDK gives a lot of advantages. No abstract lines and arrows, only an absolute understanding of the device mechanism. More accuracy, less guesswork. Less anxiety, more confidence. More knowledge, less lazhi. But you can't bother me, remember?
About students
When we started working on the program, we were asked: “For whom are these courses? Who will come to study with us? ”I didn’t have to think long over the answer - these are guys who are making a little bit of Java, OOP, students of specialized universities who are just starting their way of a developer, or programmers who want to retrain from another direction. Therefore, the program itself includes the framework framework.
It is much more interesting to think about who will eventually 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 gets the phone and tells the interviewer: “Look, this is my application, I wrote it!” The interviewer takes the phone, pokes buttons, wonders at the animations, asks questions about the implementation of a particular feature. The student is in charge. They have a pleasant professional conversation. And HR is impressed, pleased and ready to hire my student. This is a success. But in order to realize this interview and a hundred more 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 to concentrate at work and not leave gaps. Although, if you really really want to, you can always give a couple of topics for independent study, thereby motivating students to look for information. All in moderation.
About what remains after me
After reading, you may get the impression that the courses on Android development are entirely my merit. What nonsense! One I would never have pulled so much work. There are many of us, but special thanks to my colleague in the workshop of Marat for titanic work. How do you come to St. Petersburg - with me nitrogen.
In general, being a teacher is useful. When I teach, I learn myself. Students are cool, they are not only motivated by the fact that they paid money for the course. It is evident 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 go deep into the basics and file their application. And not one. So I am glad that I can help them in this difficult matter.
The most difficult in teaching was the selection of formulations to be accurate and understandable, to minimize questions and convey the message to students without any distortion. Until now, I am learning to correctly select words. And still learning not to mess. These skills for a couple of days do not get, even burst.
During the preparation of materials, I looked at various programs, for example, a course from Google on Udacity, studied the speeches of classroom speakers. I 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 turned out to be very cool. If earlier the result of my work was associated only with application releases and fixed bugs, now I also see how other people develop thanks to our courses.
In short,
connect !