Всем привет! Меня зовут Илья, я фронтенд-разработчик в Авито. В этой статье я хочу поднять важную тему для каждого современного разработчика — обучение. В разработке я 6 лет, из которых 5 в Авито. За это время я попробовал много разных способов своего обучения, которыми поделюсь в этой «ретроспективной» статье. Вообще я считаю себя плохим фронтенд-разработчиком, потому что уделяю недостаточно внимания своему развитию и обучению, а зря. Для себя я выделил несколько пунктов, зачем этим заниматься: Быть в курсе актуальных технологий. Важно знать, что происходит вокруг той среды, в которой ты работаешь. Когда выйдет новый продукт, который можно будет использовать в твоей работе — ты не окажешься «за бортом». Развивать критическое мышление. То, что новый продукт выходит и все о нем говорят, не означает, что он подходит тебе или твоей компании. Нужно уметь понимать и критически оценивать любые технологии. Карьерный рост. Изучение технологий, подходов, развитие софт скиллов, — всё это будет влиять на скорость твоего роста внутри компании. Быть востребованным на рынке. Если текущее место работы не нравится по любым причинам, то на рынке много компаний и много вакансий, где нужен разный стек. Но чем меньше ты знаешь, тем меньше у тебя выбора. Социальный момент. Найти единомышленников или устанавливать связи проще, когда разговариваешь с людьми «на одном языке». Кроме тебя никто не будет этим заниматься. Как бы жестоко это не звучало, но все пункты выше будут бесполезны, если ты не хочешь развиваться. Моя проблема в том, что я недостаточно погружён в технологический стек вокруг фронтенд-разработки. Да, я слышал какие-то новые названия типа Svelte, Vite, bun, даже немного читал о них. Но при этом я не могу сказать, что хорошо в них разбираюсь и готов о них говорить или даже работать с ними. Можно описать это состояние картинкой (актуальна на момент выхода статьи): Чтобы перестать быть в такой ситуации, я перепробовал много подходов к тому, как эффективно выстроить своё обучение. Далее — о том, что именно я делал, какие у этого были плюсы и минусы и какой подход я выбрал лично для себя. Это первое, с чем все сталкиваются во время обучения. Я не буду рассуждать о необходимости высшего образования — статья всё-таки не про это. Но отмечу пару моментов, которые выделил для себя.  Дисциплина. Одно из качеств, которое мне привил университет и которое помогает по жизни. Во время учёбы есть шанс отчисления, и чтобы этого не случилось, надо выполнять все поставленные задачи, даже если они не очень нравятся. Придётся находить в себе силы, чтобы в конечном итоге дойти до логического результата — в данном случае это диплом. А теперь мне несложно работать и учиться, если что-то давит на меня — например, сроки проекта.   Я понял, чем хочу заниматься. Я учусь в аспирантуре, а перед этим закончил бакалавриат и магистратуру. При этом все три направления у меня разные: в начале я стал инженером-технологом по проектированию электронной аппаратуры, затем получил степень магистра в проектирование сетевых систем, сейчас получаю степень в системах машинного обучения. Я каждый раз менял направление на то, которое было ближе к тому, чем хотел заниматься и в чем развиваться. Когда я захотел развиваться в направлении фронтенда, я сменил вектор развития с аппаратуры на прикладное сетевое взаимодействие, чтобы лучше понимать, как работает Интернет. Сейчас я понял, что машинное обучение в будущем поможет упростить мою работу. Я хочу связать ML и фронтенд.  Если ты уже понимаешь, чем именно хочешь заниматься по жизни, и при этом планируешь продолжать получать высшее образование, — не стесняйся менять направление на то, которое тебе поможет в будущем. Это может быть сложно, но зато потратишь время с большей пользой, чем если останешься там, где тебе не интересно. Главный минус университета, который вижу лично я — «академичность» знаний. Приходится посещать много предметов: часть из них — полезные и интересные, а другая часть выглядит странно и неуместно. Но время тратить надо и на то, и на то. Аналогично с материалом: он не всегда актуальный, вне зависимости от полезности предмета. Конечно, это даёт много знаний, но они не всегда нужные или сильно устаревшие. Поэтому одного университета мало для развития. Из-за проблем с неактуальностью знаний многим не нравится учиться в университете. Вместо этого они предпочитают различные курсы. Отчасти и я не стал исключением. В своё время я прошёл двухгодичные курсы веб-разработки. Там рассказывали про все аспекты, начиная от самой разработки и заканчивая тестированием и проектным менеджментом. Плюс таких курсов — актуальные знания и их ориентация на рынок. Здесь будут учить только тому, что сейчас действительно востребовано. Такие курсы часто делают большие компании, такие как Авито, Яндекс, ВК, HeadHunter и другие. Их цель — подготовить ребят к тому, что может пригодиться в работе непосредственно у них. Поэтому ещё один плюс — это возможность более простого трудоустройства.  Из минусов выделю обилие таких курсов. В последнее время часто появляется реклама, в которой обещают за полгода обучить всем премудростям веб-разработки и даже трудоустроить. Cвоим друзьям я советовал проходить курсы именно от крупных компаний. Как выбрать какие-то другие — не подскажу, потому что в этом у меня почти нет опыта. Но посоветую обращать внимание на организатора и спикеров, чтобы попасть к компетентным людям. Важно: курсы не заменяют университет, у них совершенно разные цели. Университет — это высшее образование, он преследует свою направленность по ходу обучения. Курсы — это дополнение, которое поможет в будущем. В идеале советую пройти и то, и другое. По моему опыту — лишним точно не будет.  На мой взгляд, это самый доступный и известный способ получения знаний. Многие читают статьи на Хабре, слушают подкасты, ходят на конференции или смотрят выступления в записи. Но и здесь есть «подводные камни». Как и в случае с внешними курсами, тут главное — не потеряться в обилии информации. Ресурсов и материалов много, поэтому «фильтровать» надо тщательно. Каждый сам находит мотивацию этим заниматься. За то, что ты не прочитаешь сегодня статью, тебя никто не накажет, поэтому иногда бывает сложно найти мотивацию и время. В эту ловушку попал и я. Задач на работе много, университет тоже отбирает часть времени, поэтому ещё и что-то читать бывает тяжело и лень. Но я понимаю важность самообразования, поэтому нашёл способы, чтобы решить эту проблему. Типичная ситуация на работе: тебе ставят задачу, а ты без понятия, как её сделать. Тут можно пойти двумя путями. Первый — быстро глянуть что-то похожее, решить задачу и пойти делать фичи дальше, а про эту задачу просто забыть. Второй — начать глубоко копаться в Интернете, что-то читать и изучать по теме. В итоге задача тоже решена, но при этом изучено столько материала, что сложно его просто так забыть. Это не самый очевидный, но хороший способ самообразования. В Авито у инженеров есть свой Индивидуальный план развития — ИПР. Каждый инженер должен составлять его со своим менеджером и следовать по нему. Это нужно, чтобы развиваться внутри компании — промо до следующего уровня; и просто развивать себя — получать больше опыта. Эти пункты не всегда удаётся совместить, поэтому они разделены.  Например, есть линейка уровней инженеров в Авито. Допустим, инженер хочет перейти с Е3 уровня до Е4. Для этого ему надо закрыть навыки, связанные с ответственностью за результат. Он может взять себе сервис и следить за ним, разобраться в нём, фиксить его проблемы. Поможет ли это перейти инженеру на новый уровень — да. Поможет ли в изучении чего-то нового — не факт. Этот навык больше процессный, чем экспертный, и может не возникнуть поводов изучить что-то новое в техническом плане. Поэтому эти два пункта я разделил. В Авито есть правило, согласно которому ИПР составляется по принципу «70-20-10». В расшифровке это выглядит так: 70% — развитие через рабочие задачи; 20% — опыт других коллег; 10% — курсы, ресурсы, книги. Основной упор сделан на то, что человек обучается через решение рабочих задач. Такие знания — самые близкие к рабочим процессам, а значит, самые полезные. Но обучение через другие источники тоже важно, хотя и в чуть меньшей форме. Плюс в том, что это формализованная история: есть определённые вещи, которым надо научиться, они зафиксированы, к ним можно обратиться в любой момент. Из минусов — самостоятельность. Ни один ИПР не сработает, если он навязан сверху, поэтому в его формировании обязательно должен участвовать сам инженер. Менеджер только помогает его провалидировать так, чтобы от него была польза. Например, выкинуть ненужные пункты или обратить внимание на отсутствие чего-то важного. И если на уровне E2–E3 ещё может быть неосознанность и менеджер будет явно участвовать в составлении плана, то чем дальше, тем большая осознанность в формировании ИПР должна появляться у самого инженера. У меня так же есть ИПР, в котором зафиксированы основные вещи, над которыми я работаю. Мне нравится такой подход. Компания настолько сильно заинтересована в развитии своих инженеров, что попробовала проработать процесс развития и помочь с ним. Но ИПР — это больше про рабочие задачи, а мне хочется развиваться и технически. Поэтому я продолжил искать способ удовлетворить своё желание изучать что-то новое. Ещё один неочевидный способ обучения. Инженеры во всех компаниях с определённого уровня учатся проводить собеседования в качестве интервьюера. Интервью проводят по шаблону с вопросами, которые надо задать. Интервьюеру важно хорошо разбираться в вопросах, чтобы понять, правильно ответил кандидат или нет. Если после первого интервью понятно, что есть западающие темы, то это повод, чтобы их закрыть. В Авито четыре технических собеседования, каждое из которых по-своему помогает в обучении:  Скрининг — входное получасовое собеседование. Помогает отлично узнать основы, так как за очень короткое время нужно понять, что именно не знает кандидат и готовы ли мы его пустить дальше. Программирование, или по-простому — алгоритмы. Помогает понимать их сложность, базовые структуры, решение задач оптимальным способом. Платформа — погружение во фронтенд, бэкенд, мобильную разработку, — в зависимости от вакансии. Помогает знать особенности работы не только кода, но и инфраструктуры рядом: сеть, браузер. Проектирование — архитектура. Помогает расширять кругозор, чтобы понимать, как сделать и спроектировать систему. Проектирование — мой фаворит в вопросе обучения. Потому что нужно понимать, какие особенности должны быть у системы — функциональные и нефункциональные требования; и знать, как именно их реализовать — фреймворк, метод общения. Недавно вышла статья о том, как у нас в Авито проходит такое собеседование. Лично я участвую в трёх секциях. На самом деле во всех четырёх, но E5 и выше не зовут на скрининги, потому что они занимают много времени. После первых собеседований я понял, что о некоторых вещах я не готов общаться с кандидатами, и их нужно почитать и изучить. Особенно сильно на меня произвела впечатление секция проектирования. Там стало понятно, что я в принципе не смог бы её хорошо пройти. Из плюсов отмечу то, что есть конкретный список вопросов для проведения секций. Эксперты помогут и подскажут, как правильно себя вести, что отвечать кандидатам, что должны ответить они, — своего рода контроль, когда ставишь себя на место кандидата.  Из минусов — социальное взаимодействие. Есть легенда, что IT-специалисты — несоциальные и необщительные люди. Не все, но такие действительно есть, и им может быть сложно вести секции собеседований. Особенно с учётом того, что когда-то им придётся делать это одним. Кроме этого, в момент собеседования ты представляешь компанию, поэтому нужно вести себя соответствующе. Есть ещё один кандидат на самообразование с теми же плюсами и минусами. Это чтение лекций какой-то группе людей. Во время магистратуры мне пришлось семестр читать студентам лекции по Java (да, именно по Java, которая используется на бэкенде). У меня был небольшой опыт программирования на ней. Поэтому за день до лекции я садился за составление материала, параллельно изучал то, что буду рассказывать и готовился к потенциальным вопросам от студентов. Я боялся, что «сяду в лужу», если не смогу на них ответить, поэтому старался досконально изучить всё по теме, чтобы показать, как с этим работать. Это было даже более нервно, чем вести собеседование, но зато очень сильно прокачало мои знания по Java. Некоторые вещи я до сих пор помню, хотя не писал на ней с момента прихода в Авито. На мой взгляд, это самое интересное. Все способы выше хороши по-своему, но сейчас они для меня работают неэффективно. Университет и рабочие задачи есть, но этого мало. Статьи я читаю, но редко. Собеседованиям я обучаюсь, но они нерегулярные, потому что всё ограничено количеством вакансий и пулом тех, кто их может вести. Лекции давно не читал. Иногда пишу статьи, но они больше ретроспективные, поэтому обучаться на них не получается. Поэтому я начал думать, как мне добиться своей цели. Главное, что я понял: в компании есть люди, которые лучше меня разбираются в технологиях и готовы о них с кем-то разговаривать. Я решил, что будет хорошо собрать сообщество фронтенд-разработчиков внутри компании, чтобы общаться на темы, связанные с фронтендом. А мысль о том, что «в обсуждении рождается истина» только сильнее подкрепила мою веру. В результате я организовал внутри Авито «Фронтенд-дайджест встречи», чтобы обсуждать разные темы, от «какой фреймворк лучше», до «как правильно написать компонентный тест». Изначально я решил обкатать идею на небольшой группе фронтов внутри нашего юнита. Мы проводили небольшие доклады-пятиминутки о различных подходах, библиотеки, фреймворки. Разработчики делились инструментами, о которых они знали, но могли не знать другие. Но к этим встречам надо было готовиться, а это отнимало время, которое можно тратить на фичи. Так мы жили полгода. Потом я попробовал увеличить аудиторию и расширить встречу на всех фротендеров компании. Внутри юнита мы все знали друг друга и были готовы активно общаться друг с другом, но на всех этот трюк не сработал. Кому-то не хотелось готовиться, кто-то стеснялся общаться, поэтому такой формат не зашёл.  Я решил попробовать формат холивара, когда основная суть встречи — это поспорить на определённую тему и сделать выводы. Активных участников стало больше, но без фиксации результатов всё быстро забывалось. Поэтому сейчас у нас есть отдельная доска в Miro — в ней мы фиксируем все основные мысли, к которым пришли в ходе обсуждения. К плюсам этого подхода я бы отнёс то, что за время обсуждения появляется много интересных и полезных мыслей. Некоторые из которых оказываются новыми для всех участников и в итоге каждый уйдёт с чем-то полезным для себя. Участников много, все активно накидывают инструменты, которые подходят для выполнения разных задач, — мы их фиксируем и возвращаемся к ним позже. Так я узнал о большом количестве новых библиотек.  Минус в том, что к такой встрече надо готовиться, и в первую очередь мне — как ведущему. Тем более из-за того, что я взял на себя роль фасилитатора и ведущего, мне не всегда удаётся поучаствовать в обсуждении. Одно из правил хорошего фасилитатора — быть несколько вне дискуссии и просто следить за тем, как она идёт. Это нужно, чтобы давать слово другим, а не только говорить самому. И всё равно я считаю, что встречи полезны для меня и выполняют задачу, которую я перед ними ставил. А обратная связь от ребят, которые говорят, что им нравится, вдохновляет меня и дальше их вести.  Если появляются обязательные вещи, процессы, мероприятия, — попробуйте извлечь из них максимум. Можно просто их сделать и забыть, но раз уж тратите на них время — тратьте его с пользой. Если вы думаете, что «всё знаете» и новому вас уже не научить, то попробуйте другие активности: провести собеседование, подготовиться к лекции или докладу. Так вы откроете для себя области, о которых даже не задумывались, но которые западают и их необходимо подтянуть. Понимаете, что чего-то не знаете; осознаёте, как именно этому научиться, но не хватает мотивации, отсутствует мотивация «к»? Попробуйте сами себе придумать ограничения — мотивацию «от»: те же лекции или дайджест-встречи. Вариант может показаться спорным, так как мотивация «от» в какой-то момент может перестать работать. Но здесь важное — начать, выработать привычку заниматься, чтобы потом начала работать мотивация «к». Если ни один из способов не приносит вам эффективности, пробуйте экспериментировать. Вы обязательно найдёте то, что больше всего вам подходит. Самое главное — не останавливаться и не опускать руки. Вот такая получилась статья. В ней почти нет технических деталей, но я надеюсь, что на своем примере мне удалось показать, что самообразовываться можно разными способами. Главное — желание.  Какие способы вы нашли эффективными для себя? Делитесь ими в комментариях — возможно, именно ваш вариант обучения поможет кому-то в будущем. Предыдущая статья: Микрофронтенды в SSR: опыт Авито  Фронтенд-разработчик