Фулстек-разработчик в Яндекс Практикуме — мой опыт

Мне 20 лет, и я только перешёл на второй курс университета. Учусь на направлении «Информационные системы». На первом курсе довольно быстро понял, что просто ходить на пары и делать лабораторные мне не очень интересно. Вроде бы направление связано с IT, но хотелось уже самому что-то делать, а не только получать оценки.

Поэтому в какой-то момент решил выбрать себе отдельную дорожку в разработке. Долго смотрел, что вообще сейчас изучают, и в итоге остановился на fullstack. Мне понравилось, что здесь не запираешь себя в одной области: можно разобраться и во фронте, и в бэке, и в базах данных. Плюс мне кажется, что сейчас это особенно полезно из-за развития ИИ-инструментов. Не хочется быть человеком, который знает только один узкий кусок, но при этом вообще не понимает, что происходит вокруг него.

До начала курса у меня уже был небольшой опыт с Python. Поэтому я не могу сказать, что пришёл совсем с нуля: понимал, что такое переменные, циклы, функции, примерно представлял, как устроен код. Но именно веб-разработкой практически не занимался, а JavaScript, React, NestJS и PostgreSQL для меня были новыми.

На первых этапах было довольно легко.

HTML и CSS я уже где-то видел до Практикума, поэтому первые задания проходились спокойно. Сначала даже было ощущение, что курс мне слишком простой. Открываешь следующий спринт, читаешь материал, делаешь задание — и всё получается. Я тогда ещё не подозревал, что дальше станет веселее.

Особенно хорошо это стало заметно на JavaScript.

Вот здесь у меня уже началось нормальное обучение, когда периодически приходилось сидеть над одной задачей и думать: «Так, а что от меня вообще хотят?»

Сам JavaScript мне понравился, но именно модуль я считаю одним из самых слабых на всём курсе. У нас в группе многие на нём начали буксовать. Иногда материал казался каким-то обрывочным: вроде тему объяснили, но для задания всё равно не хватает какого-то промежуточного звена. Приходилось открывать браузер и самостоятельно искать, как это работает.

Мне, наверное, здесь помог Python. Когда уже знаешь хотя бы один язык, проще понять общую логику. Я мог провести аналогию, примерно догадаться, зачем нужна конкретная конструкция. Но это не означало, что всё было понятно сразу. Некоторые темы всё равно приходилось разбирать отдельно.

После JavaScript начались TypeScript и ООП — и вот тут моё отношение к курсу сильно улучшилось.

Особенно ООП. До этого я слышал про классы, объекты, наследование и всё остальное, но скорее как набор терминов из учебников. Во время этого модуля у меня впервые реально щёлкнуло в голове, зачем эта парадигма вообще нужна. После одного из воркшопов я ещё какое-то время ходил и прокручивал в голове, как можно было бы по-другому организовать код в старых задачах.

Вообще воркшопы мне запомнились больше обычных уроков. Там было ощущение, что ты не просто читаешь страницу и отвечаешь на вопросы, а реально сидишь и пытаешься понять, почему код построен именно так.

И здесь хочу отдельно сказать огромное спасибо нашему наставнику Сергею Криворучко.

В «Пачке», а потом уже в Яндекс Мессенджере у нас периодически разрастались огромные ветки обсуждений. Иногда под одним вопросом студентов было больше 50 сообщений, бывало и около 70. При этом Сергей отвечал довольно быстро. И вот это реально спасало в моменты, когда сам уже десятый раз смотришь на один и тот же кусок кода и ничего не понимаешь.

Мне вообще нравилось, что можно было написать не только «что здесь делать?», но и какой-нибудь совсем дурацкий вопрос, который самому неловко задавать. Когда тебе отвечают нормально, без ощущения, что ты должен был это и сам знать, учиться гораздо проще.

Потом начался React.

Вот на нём я уже почувствовал, что курс действительно становится сложным.

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

Именно на React у меня, наверное, уходило больше всего времени. Иногда садился заниматься вечером, рассчитывая потратить пару часов, а в итоге замечал, что уже ночь, а я всё ещё пытаюсь понять, почему приложение ведёт себя не так, как я ожидаю.

Но зато когда получилось собрать что-то более-менее работающее, было очень приятное ощущение. Уже не просто «я выполнил задание и отправил его», а реально видишь интерфейс, который сам сделал.

А потом начался первый проектный месяц.

Вот это был момент, когда обучение для меня окончательно перестало быть просто набором спринтов.

Нас разделили на группы примерно по 9–10 человек и дали задачу сделать фронтенд приложения. Мы почти сразу создали чат в Telegram, потому что так было удобнее общаться, выбрали тимлида и начали работать.

Самое смешное, что ещё недавно я спокойно сидел один со своими учебными заданиями, а тут внезапно пришлось писать другим людям: «Слушай, я забрал эту задачу», «У меня тут конфликт», «Кто уже работает с этим компонентом?», «Ребят, давайте созвонимся».

И вот это мне очень понравилось.

У нас была доска задач, где было видно, что сейчас в работе, что готово и кто чем занимается. Были созвоны с наставником. Мы обсуждали архитектуру, спорили о каких-то решениях, помогали друг другу, иногда просто сидели в чате и пытались понять, почему очередной баг не хочет исчезать.

За этот месяц я впервые почувствовал, что могу не просто выполнять задания по методичке, а быть частью команды, которая делает один общий продукт.

После первого проектного месяца были небольшие каникулы, а потом начался backend.

И вот тут всё пошло уже намного веселее.

Express и MongoDB прошли для меня достаточно быстро. Но дальше появился NestJS — и я сначала вообще не понял, что происходит.

Модуль, контроллер, сервис, провайдер, гарды...

В какой-то момент у меня перед глазами был просто список терминов, которые вроде бы относятся к одному фреймворку, но как именно они связаны — непонятно.

Я реально много времени потратил только на то, чтобы собрать в голове общую картину. Не написать код, не сделать задание, а именно понять: зачем существует каждый из этих элементов и почему всё устроено именно так.

В какой-то момент я даже открыл нейросеть просто для того, чтобы она объяснила мне NestJS человеческим языком. Не «реши задачу», а буквально: «Объясни, что здесь вообще происходит, потому что я запутался».

Потом начал постепенно разбираться. Сначала понял контроллеры, потом сервисы, потом как всё это связывается через модули. И в какой-то момент смог сам собрать небольшой backend из того, что понял.

Вот этот момент я очень хорошо запомнил.

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

С PostgreSQL была похожая история, только уже с базами данных.

На курсе мы использовали TypeORM. В целом штука удобная: вместо большого количества SQL можно работать через ORM, и кода действительно становится меньше. Но лично мне такой подход не очень нравится именно с точки зрения обучения. Когда между тобой и базой есть ещё один слой, иногда хочется просто посмотреть, что реально происходит на уровне SQL.

Поэтому после курса я отдельно начал разбираться с SQL глубже.

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

А вот модуль по безопасности мне вообще не зашёл.

Тема сама по себе интересная, но подача показалась очень сухой. Я гораздо лучше понимаю вещи, когда их можно сразу потрогать руками, а здесь практики непосредственно по ходу материала мне не хватало.

В итоге основное практическое задание появлялось уже в конце: нужно было найти уязвимости в приложении и исправить их. Идея хорошая, но лично мне не понравилось, как были сформулированы некоторые части задания. В какой-то момент я просто начал терять интерес и хотелось уже закончить этот спринт.

И это, наверное, единственный этап курса, где я поймал себя на мысли: «Ладно, просто закрою это и пойду дальше».

Зато примерно в этот же период я решил параллельно сделать собственный проект с нуля.

И вот это оказалось для меня очень полезным.

До этого у меня всегда была конкретная задача от курса: вот теория, вот тренажёр, вот проект, вот требования. А здесь никто мне ничего не написал. Сам придумал, сам решил, как будет выглядеть приложение, сам выбрал, что делать на frontend, как строить backend, как хранить данные.

Первое время я буквально сидел перед пустым проектом и не понимал, с какой стороны к нему подойти.

А потом начал постепенно раскладывать всё на части: что нужно сделать сначала, какая будет база, какие сущности нужны, какие endpoint'ы, что будет происходить на фронте. И постепенно оно начало собираться.

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

Параллельно сейчас идёт второй проектный месяц. Нас уже меньше — всего восемь человек, и на этот раз мы делаем backend того самого приложения, которое начинали в первый проектный месяц.

Тимлид у нас сейчас наставник. Он составляет задачи, проводит созвоны и помогает с возникающими вопросами.

Здесь у меня замечаний практически нет. Мне вообще нравится именно проектный формат, потому что в нём приходится не просто знать синтаксис, а думать, как всё должно работать вместе.

Если говорить о минусах курса в целом, то больше всего меня расстроило то, что со временем активность вокруг обучения стала снижаться.

В начале было ощущение, что ты постоянно находишься в каком-то общем движении: чат, вопросы, ответы, созвоны, обсуждения. После первого проектного месяца этого стало заметно меньше. В какой-то момент действительно возникало ощущение, что ты сидишь один и сам пытаешься во всём разобраться.

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

По наставникам и кураторам при этом у меня претензий почти нет. Наоборот, им спасибо. Особенно Сергею — было заметно, что ему не всё равно, понял ты тему или просто поставил плюсик под ответом.

Основные вопросы у меня именно к некоторым модулям. Иногда реально кажется, что проще было бы открыть интернет, найти несколько нормальных статей и разобраться самому.

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

За курс я заплатил 191 250 рублей, поэтому назвать такую покупку дешёвой точно нельзя.

Именно поэтому я не хочу ставить 5 только потому, что «в целом всё было хорошо». Были слабые модули, были моменты, когда теория казалась недоработанной, была просадка по сопровождению. Но одновременно с этим за время обучения я реально научился очень многому и, самое главное, начал делать вещи, которые раньше мне казались сложными.

Я пришёл на курс с небольшим опытом Python и довольно смутным пониманием веб-разработки. Сейчас я уже знаю, что такое React, могу работать с TypeScript, понимаю базовую архитектуру NestJS, умею работать с MongoDB и PostgreSQL, познакомился с ORM, командной разработкой и проектным процессом. И сейчас у меня есть собственный проект, который я вообще не представлял, как сделать до начала обучения.

Так что в итоге моя оценка — 4 из 5, скорее даже 4-.

Это не идеальный курс и не волшебная кнопка «стань разработчиком за N месяцев». Иногда было интересно, иногда сложно, иногда хотелось закрыть ноутбук и пойти спать. Но если оглянуться назад, я точно могу сказать, что за это время вырос.

И для меня это, наверное, самое главное.