Главная » Хабрахабр » О том, как я хотел учить других, а в результате научился сам

О том, как я хотел учить других, а в результате научился сам

Привет, Хабр! Вот уже год как я работаю над онлайн-программой обучения Android-разработчиков в Академии e-Legion. Под катом рассказываю, как пришёл к идее стать преподом и с какими сложностями сталкиваюсь в процессе.

О старости и пиве

Полтора года назад мы с моим бывшим одногруппником, бывшим коллегой и другом — это всё один человек, привет, Геор! — потягивали пиво на азоте и думали о том, как планируем устраивать свои жизни. Была куча идей — от выбора места жительства и машины до имён детей и животных. В конце концов, пришли к такому печальному и неизбежному состоянию, как старость. Где будем стареть и чем будем заниматься?

image

Эта мысль нам понравилась, и мы вспомнили о наших учителях и преподавателях, на кого бы мы хотели равняться, а на кого — нет. Сидеть дома или на лавочке мне не хотелось, и я подумал что, наверное, стану учить молодёжь тому, что умею сам. Тогда я думал, что преподавание во вторую треть моей жизни мне не грозит. Но вместе с преподавателями пришли и студенческие годы, и друзья, и диалог перетёк в другое русло. Но я ошибался.

О вербовке сотрудников

В какой-то момент e-Legion — компания, в которой я работаю, решила запустить онлайн-школу для подготовки iOS- и Android-разработчиков — Академию e-Legion. Курсы нужно было спроектировать с нуля, сделать информативными, актуальными и вот это вот всё. За подготовку и изложение материала отвечают сотрудники, то есть мы. Собственно говоря, образовательная программа — это своего рода проект, пусть специфика и отличается от основной деятельности e-Legion.

Честно говоря, я вообще не раздумывал, я хотел преподавать. Недолго думая, я согласился поучаствовать.

О голосах в голове

Этап планирования был относительно простым. Первые блоки программы — основы Android-платформы, середина — архитектура, тесты и библиотеки, последние 2 блока — дизайн, кастомные вью и сторонние сервисы типа Firebase. Ничего необычного, идём по нарастающей, постепенно повышая сложность.

В моей голове была мысль, которую я почему-то не мог чётко сформулировать. После планирования стали готовить материал для записи лекций. Так продолжалось некоторое время, и внезапно во время подготовки материала про контекст, я услышал в своей голове голос: «ТЕБЕ НЕЛЬЗЯ ЛАЖАТЬ!»

Об ответственности

Мне нельзя лажать.

И додумался до следующего. Это так меня впечатлило, что я оставил контекст в покое и решил подумать о том, не лажаю ли я. Эти люди по большей части не знакомы с платформой, и информация, полученная от меня, становится для них авторитетной. Я готовлю материал и доношу его до большого количества людей. Как свежевылупившийся утёнок принимает за мать первое попавшееся в поле зрения и не съевшее его существо.

Я не могу себе позволить говорить что-то, в чём не уверен сам и что не является совершенно точно правдой. Это накладывает ответственность. Ведь в разговоре будут ссылаться на меня, и если тезис внезапно окажется ошибочным, то будет ой как неудобно. А это значит, что перед подготовкой материала нужно самому изучить нюансы.

Я вывел для себя правило: доносить только точную информацию. Помимо самих курсов мы ведём чат со студентами, отвечаем на вопросы или подталкиваем к правильному решению заданий. Или кидаю ссылку. Даже если я точно знаю, что ответить, я всегда захожу на соответствующий онлайн-ресурс, убеждаюсь в ответе и только тогда отвечаю. С лекциями, конечно, попроще — текст уже подготовлен, надо только прочитать. Это касается и видео-лекций — в них даю только то, что доподлинно известно. А вот над произвольной речью, над объяснениями материала во время live coding-сессий пришлось попотеть.

О правильных названиях

Раз за разом я повторяю одну и ту же ошибку — проецирую свой опыт на собеседника. Я забываю о том, что собеседник — не я, он не читал те книги, что читал я, не смотрел тех фильмов, что смотрел я, и не сталкиваться с тем кодом, с которым сталкивался я. С коллегами проще — я могу рассказать часть деталей, часть проблемы, и они, основываясь уже на своём опыте, остальную часть додумают сами. Это опасно, так как в конце концов понятия, ситуации и термины обрастают кличками — профессионализмами, вроде безобидного «вьюха» для View или «шестёрочных разрешений» для Runtime Permissions, и мы, разработчики, по большей части в речи используем уже их. Безусловно, мы в отделе друг друга понимаем, как и любая группа людей, занимающиеся общим делом продолжительное время.

Мне нельзя использовать сленг. Со студентами всё не так. В первое время у меня были сложности с этим моментом. Мне нужно называть вещи так, как они официально называются, чтобы у студентов не было проблем с поиском дополнительной информации. Если дело касается письма, то чаще использую оригинальное, английское написание, например, Activity или LayoutInflater. В итоге я сформулировал ещё одно правило: если это сугубо андроидная вещь, то я её не перевожу, а просто пользуюсь транслитерацией. Например, Button — кнопка, она и в Африке кнопка. Если же понятие более общее и распространённое, то использую и перевод, и оригинальное написание. Возникает меньше желания обозвать что-либо «фиговиной», когда ты совершенно точно знаешь, как это что-то пишется, произносится и переводится. Эти простые и понятные правила сделали мою речь чище. И даже представляется в голове.

О картинках в голове

Мне очень хочется задать вопрос кандидату на собеседовании: «Объясните человеку, который не занимается Android-разработкой, что такое context?» И ответа мне будет достаточно, чтобы решить, шарит он или не очень. И нет, тут правильного ответа не будет.

Оно и понятно, зачем мне ковыряться в коде SDK или библиотек? Когда я только начал готовить программу обучения, то понял, что довольно неплохо знаю, для чего нужен тот или иной компонент, класс, но совершенно не в курсе, как он устроен изнутри. Но я был не прав. «Я — потребитель (хоть и разработчик), мне это не нужно» — думал я.

Например, проигрывание музыки. В Android есть компонент — Service, он используется для операций, не связанных с интерфейсом напрямую. Но это не так. Отсутствие связи с интерфейсом порождает миф, будто Service работает в фоне. А для фоновой работы в SDK есть IntentService, который обрабатывает входящие интенты друг за другом, по очереди. Service запускается в главном потоке, может блокировать его и, как следствие, вызвать ANR. Любой Android-разработчик должен это знать. А после выполнения всех интентов завершает себя.

Линия начинается со стартом сервиса и завершается с окончанием сервиса. Когда я работал с IntentService, то представлял линию. Только вот эта уютная картина рушится, когда мне нужно было представить, как в запущенный сервис попадает новый интент. Просто, понятно, удобно. Куда приделать стрелочку? Как это представить? Мне стало ясно, что так дальше нельзя. Там должен быть стек или что? Линия — слишком размытая и не подходящая иллюстрация того, что из себя представляет IntentService.

Обычный HandlerThread! Я полез в исходники и увидел простую картину — HandlerThread на пару с Handler. Каждый новый Intent оборачивается в Message, причём ещё и с указанием номера запуска сервиса — startId. И всё встало на свои места: интенты обрабатываются по очереди, потому что в MessageQueue они располагаются по очереди. В моей голове всё сложилось как пазл. После обработки интента происходит вызов метода stopSelf() с передачей этого startId, и если он равен последнему вызову сервиса, то сервис завершается.

image

Заглядывание под капот классов из SDK даёт кучу плюсов. Это касается не только IntentService. Больше точности, меньше догадок. Никаких абстрактных линий и стрелочек, только абсолютное понимание устройства механизма. Больше знаний, меньше лажи. Меньше беспокойства, больше уверенности. А мне ведь нельзя лажать, помните?

О студентах

Когда мы начинали работу над программой, нас спросили: «Для кого эти курсы? Кто придёт к нам учиться?» Над ответом долго думать не пришлось — это ребята, которые шарят немного в Java, в ООП, студенты профильных ВУЗов, которые только начинают свой путь разработчика, или программисты, которые хотят переквалифицироваться с другого направления. Поэтому, собственно, программа и включает в себя основы фреймворка.

Какие знания студент будет хранить в своей голове. Гораздо интереснее думать о том, кто в конце концов получится после прохождения курса. Я представляю себе, как он достает телефон и говорит интервьюеру: «Вот, смотрите, это мое приложение, я его написал!» Интервьюер берёт телефон, тыкает кнопки, удивляется анимациям, задаёт вопросы о реализации той или иной фичи. Или как он будет устраиваться на работу. У них приятная профессиональная беседа. Студент отвечает. Это успех. А HR впечатлён, доволен и готов принять моего студента на работу. Но чтобы воплотить в жизнь это собеседование и ещё сотню собеседований других студентов, нам нужно работать над материалом, делать его лучше, полнее, точнее.

Хотя, если уж очень хочется, то всегда можно дать пару тем на самостоятельное изучение, тем самым мотивируя учащихся искать информацию. Видение конечного результата — студента на собеседовании — помогает мне концентрироваться на работе и не оставлять пробелов. Всего в меру.

О том, что останется после меня

После прочитанного может появиться впечатление, что курсы по Android-разработке — целиком моя заслуга. Какая чепуха! Один я бы ни за что не потянул такой объём работы. Нас много, но отдельное спасибо моему коллеге по цеху Марату за титанический труд. Как приедешь в СПб — с меня азот.

Когда я преподаю, я учусь сам. А вообще, быть преподом — полезно. Видно, что они действительно хотят освоить новую профессию — стать мобильным разработчиком. Студенты классные, они мотивированы не только тем, что заплатили денег за курс. И не одно. Процесс, конечно, не быстрый, но у них есть 9 месяцев, чтобы вникнуть в основы и запилить своё приложение. Так что я рад, что могу помочь им в этом нелёгком деле.

До сих пор учусь грамотно подбирать слова. Самым сложным в преподавании оказался подбор формулировок, чтобы быть точным и понятным, минимизировать вопросы и донести мысль студентам без каких-либо искажений. Эти навыки за пару дней не получить, хоть тресни. А ещё учусь не лажать.

Перечитал столько документации и туториалов, что чувствую себя ходячей Википедией по Android-разработке. За время подготовки материалов я посмотрел разные программы, например, курс от Google на Udacity, изучил выступления классных спикеров.

Если раньше результат моей работы был связан только с релизами приложений и пофикшенными багами, то теперь я ещё и вижу, как благодаря нашим курсам развиваются другие люди. Главное — делиться опытом и знаниями со студентами оказалось очень круто.

Короче, подключайтесь!


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Как использовать USB-камеру с ROS на Raspberry Pi или BeagleBone Blue — для потокового стрима видео на большой компьютер

Эта инструкция о том как подключить USB-камеру к Raspberry Pi или BeagleBone Blue и использовать ее с ROS (Robot Operating System) — чтобы читать данные с камеры через ROS image_view и даже транслировать видео поток в веб-браузер! В конце видео ...

Разбираем популярный миф: «Вещество на 99% состоит из пустоты»

При обсуждении строения атома и вещества часто можно прочитать, что вещество на 99.99…% состоит из пустоты, с разными версиями количества девяток. Как мы сейчас увидим, это утверждение имеет весьма шаткие основания, а попытки оценить долю пустоты в веществе могут с ...