«Год пахал бесплатно, а потом прошёл в „Сбер“ и „Альфа-Банк“»: путь Java-разработчика
В колледже и вузе Аркадию не хватало практики. Тогда он перевёлся на заочку, прошёл курс и всего за полтора года вырос до мидл-разработчика.
Иллюстрация: freepik / Freepik / Ludvig14 / Wikimedia Commons / Stephen Pedersen / Marcelo Leal / Christopher Gower / Unsplash / Дима Руденок для Skillbox Media
Аркадий Райляну
Россия, Санкт-Петербург
Пройденные курсы
Достижения
Два раза проходил курс по Java-разработке, а после — устроился в «Сбер» мидл-разработчиком.
Аркадий рассказал:
- в чём Java выигрывает перед другими языками;
- что такое многопоточность в Java и зачем она нужна;
- как в рамках курса создал поисковый движок;
- как год забесплатно работал в перспективном стартапе, а потом попал в «Сбер»;
- почему грань между позициями джуна, мидла и сеньора на самом деле очень размыта.
— Какие самые частые стереотипы о программировании и программистах ты слышишь?
— Во-первых, что все разработчики — гики в очочках, с усиками и засаленными волосами. Во-вторых, что каждый из нас лопатой гребёт деньги. Пожалуй, это самые популярные и вечные мифы: их я слышал ещё в 2014 году.
Всё, конечно, не так. Программисты сегодня — это модные и современные ребята. Да, иногда они «на своей волне», но только в вопросах работы. Что по поводу космических зарплат — до них ещё нужно дорасти. Но необходимый путь и правда короче и быстрее, чем у юристов или врачей.
«До Java я попробовал несколько языков, но всё было не то»
— Аркадий, как и когда в твоей жизни появилось программирование?
— Первая встреча с кодом произошла ещё в школе, в девятом классе. Мне нравились точные науки и компьютерные игры — вот и подумал однажды: «Может, стать программистом?» Позанимался с репетитором по информатике, поизучал и «потрогал» Pascal и понял — моё. Выходит, я тот самый везунчик, нашедший призвание с первой попытки 🙂
— Да, повезло! А долго подбирал конкретный язык? Я знаю, что сейчас ты программируешь на Java.
— Ох да, долго. Я сменил два колледжа и два универа, прежде чем нашёл свой язык в Skillbox, обучился ему и убедился, что он точно мне подходит. Пробовал:
✓С++ — слишком сложный синтаксис, жёсткий контроль памяти;
✓Fortran — устарел и почти не востребован, ему нас обучали в университете;
✓С# — интересный вариант: как и Java, объектно ориентирован, но сфера применения уже;
✓Python — также имеет более узкую сферу применения, скорость выполнения задач ощутимо уступает Java.
— А о JavaScript не задумывался?
— Этот вариант отмёл ещё в самом начале пути. Решил, что не хочу заниматься фронтендом — скучно, неинтересно. В HTML структуру страницы создал, кнопочку перекрасил, заанимировал, пот со лба смахнул, вот и рабочий день окончен — таким было моё утрированное представление о работе фронтендеров в 2017 году.
То ли дело обязанности бэкенд-разработчика! Тут тебе и громадную архитектуру приложения нужно обдумать и развернуть, и отказоустойчивость проработать, и много других трудоёмких задач решить.
— Чем именно язык Java покорил тебя?
— Он строго типизирован (распознаёт переменные и присваивает им тип), многословен (что упрощает понимание кода при прочтении или поиске ошибок), объектно ориентирован (в основе кода — объекты, взаимодействующие между собой). Используется в больших компаниях: Netflix, Amazon, «Сбере», «Альфа-Банке».
Java — кросс-платформенный язык. Можно написать код один раз и запустить его на нескольких операционных системах: Windows, Linux, macOS. Кроме того, можно не беспокоиться о нехватке памяти: она освобождается автоматически благодаря работе сборщика мусора (garbage collector).
У Java невероятно большое и сильное комьюнити. В библиотеках начинающий специалист легко найдёт готовые решения для типовых задач, гайды, инструменты и ответы на любые вопросы.
«Для дипломного проекта я разработал поисковый движок, подобный яндексовскому»: об обучении и кейсах
— Я знаю, что к обучению на Java-разработчика ты подступался несколько раз. Почему так?
— Да, в первый раз я приобрёл курс в 2018 году, ещё учась в колледже. Прошёл почти до конца, но потом подзабил года на два: родители настояли на поступлении в университет вместо окончания курса и поиска работы, и я послушался.
Правда, в высшем образовании быстро разочаровался: на моей специальности «Программная инженерия» ничему дельному не учили, практических навыков не давали. Тогда я решил взять, наконец, жизнь в свои руки: перевёлся на заочку в другой вуз (для галочки и успокоения родителей) и с нуля приступил к обновлённому курсу по Java.
— Как организовывал своё учебное время?
— Первую половину курса учился когда придётся, в перерывах от других дел. Темы и задания давались легко, так как во многом они дублировали старую версию. Можно сказать, я просто повторял материал. Быстренько смотрел лекцию, делал домашку и бежал дальше.
Вторая, обновлённая, часть шла куда сложнее и занимала у меня почти весь день. Я просыпался с утра, садился за обучение и не вставал, пока полностью не пройду тему и не сделаю к ней всю домашку.
— Вот это упорство! А с какой домашкой возникли самые большие трудности?
— Ох, было одно трудоёмкое задание на обход дерева сайта… Звучало оно примерно так: «В многопоточном режиме обойдите многостраничный сайт и соберите всю возможную информацию». Я долго вникал, как же запустить параллельное чтение множества страниц, но в итоге справился и сдал домашку успешно.
Правда, если однажды снова столкнусь с подобной задачей в работе, вряд ли смогу повторить решение по памяти. Придётся вновь окунаться в документацию и разбираться. А вообще, можно с самого начала задействовать удобный инструмент Spring Boot, где обработка запросов в многопоточном режиме происходит автоматически, и не переживать 🙂
— А что это вообще такое — многопоточность в Java-разработке? И зачем она нужна?
— Многопоточность — это способность сайта или приложения выполнять несколько задач (потоков) параллельно.
Объясню на простом примере. Представьте, что вам нужно раскопать три ямы. Один вы будете поочерёдно копать яму за ямой (однопоточный режим). А если позовёте друзей и дадите им по лопате (многопоточный режим), справитесь с задачей в три раза быстрее.
Многопоточный режим позволяет задействовать все имеющиеся ресурсы и увеличить скорость реагирования приложения или сайта.
— В качестве дипломного проекта ты разработал поисковый движок. Пожалуйста, поделись деталями.
— Реализация проекта заняла около месяца. Я создавал поисковый движок, подобный яндексовскому, только в гораздо меньших масштабах. Принцип прост: вы вбиваете свой запрос — например, «купить дрова» — и программа бежит по сотне сайтов, подбирая подходящие под запрос страницы. При этом система должна понять вас, даже если вы опечатаетесь в слове.
В моменте я безумно гордился реализацией. Сейчас, имея опыт работы, смотрю критичнее и вижу огрехи: где-то ресурс использовал неоптимально, где-то баги залил, где-то с бизнес-логикой переусердствовал.
— И всё же: ты проделал огромную работу! А что мотивировало тебя учиться на протяжении всего пути?
— Ощущение профессионального роста, ориентации в сложной теме — я стал буквально зависим от этих ощущений. Особенно сильно я заметил это за собой, когда устроился на работу: как приятно подсказать коллеге что-то, чего он не знал! 🙂
«Моё резюме никто не открывал», или «Как я оказался в „Сбере“»
— Какая сегодня обстановка на рынке труда для джунов? Поделись своим опытом.
— Всё очень грустно. Искать работу на HeadHunter я начал параллельно с написанием диплома: откликался на десятки вакансий (даже копеечных, вроде «разработка модов для Minecraft, 5000 рублей»), но мне не отвечали… а ведь я был готов работать даже бесплатно! Чувствовал себя паршиво, было ощущение бесполезности.
Пробовал разные инструменты, например оформил профиль на GitHub и загрузил туда свои кейсы. Слышал, что многие рекрутеры используют платформу для поиска кандидатов. Не знаю, на мою страничку, кроме друзей, так никто и не зашёл.
— История начинается грустно… что же изменило её ход?
— Удача, удача и только она! Моё резюме на HeadHunter увидел тимлид одного стартапа и заинтересовался. Видимо, решил вырастить «малыша». Предложил работать ради опыта, а я был только рад. Почти год я прокачивал навыки под его «крылом» и укреплялся в профессии.
— Чем занимался стартап?
— На деньги инвесторов мы разрабатывали маркетплейс мебели и домашних товаров. Команду собрали полноценнную: там были и бэкендеры, и фронтендеры, и дизайнеры, и аналитики, и менеджеры, и продуктологи. Кто поопытнее — получал зарплату, а начинающие ребята вроде меня трудились за опыт.
Правда, в свет наш маркетплейс так и не вышел. Инвестиции прекратились ещё до выпуска MVP. Мой тимлид ушёл в «Альфа-Банк», а я продолжил самостоятельный поиск. Но история повторилась — даже с годом опыта моим резюме на HH никто не интересовался.
— Неужели и здесь свою роль сыграла удача?
— Отчасти: тот самый тимлид поделился со мной контактами эйчаров крупных компаний («Сбер», «Альфа-Банк», «Иннотех» и других) и предложил написать им напрямую. К моему удивлению, почти все пригласили на собеседования.
— Ого, и что ты чувствовал? Было страшно?
— Конечно, у меня дрожали руки! Переживал, что не знаю того, что должен, что скажу какую-то глупость. Это сейчас я понимаю, что собеседования — отличная возможность нащупать пробелы в знаниях и закрыть их.
Каждое собеседование на самом деле отличалось от предыдущего. Где-то мне задавали глупые и банальные вопросы, а где-то, наоборот, — два часа проверяли всевозможные хард-скиллы, смотря в режиме реального времени, как я пишу код.
— И как всё в итоге сложилось: куда прошёл?
— Получил оффер от двух компаний: «Сбера» и «Альфа-Банка». Тут-то и начались муки выбора… в итоге остановился на «Сбере». Решающим фактом стало то, что в их команде было много старших коллег, к кому бы я мог обратиться за помощью или советом, а у «Альфы» я бы оказался единственным разработчиком на продукт.
Сейчас уже пару месяцев работаю в команде, которая создаёт продукт автокредитования. Мы автоматизируем выдачу кредитов на машины: недавно, например, реализовали кредит под залог. Вы получаете кредит по сниженной ставке при условии, что приобретённое авто используете в качестве залога.
«Грань между джуном, мидлом и сеньором размыта»: о карьерных планах
— На какой уровень ты оцениваешь свои знания по Java сегодня?
— В «Сбере» я значусь как мидл, но не могу сказать, что ощущаю себя на этот уровень. Вопрос градации в разработке вообще очень спорный: в интернете вы не найдёте однозначного деления, что должен знать джун, что мидл, а что сеньор. Граница размытая, требования формирует рынок.
Зайдите на HeadHunter: нередко одни и те же обязанности одна компания приписывает джуну, а другая мидлу.
Я чувствую, что пока до мидла мне всё же не хватает навыков. Хочу сейчас подтянуть их на личном проекте: набросать пару микросервисов, заставить их обмениваться информацией, наладить балансировку, маршрутизацию, поработать над отказоустойчивостью.
— Почему не можешь заняться этим в рамках основной работы в «Сбере»?
— Задачи не позволяют, да и внутренняя структура «Сбера» устроена довольно сложно. Некоторые требования связывают разработчику руки и замедляют процессы — например, нужно использовать только N-ые фреймворки N-ых версий. Права на многие действия вообще закрыты: приходится часами ждать ответа корпоративной службы поддержки.
— Какой дальнейший карьерный трек видишь для себя?
— Пока хочу развиваться в «Сбере», а дальше… вряд ли вновь подамся в компании-гиганты. Скорее попробовал бы себя в небольшой свободной команде, решающей не менее важные задачи. А из ближайшего: как будет время, обязательно начну изучать новый язык. Присматриваюсь к Kotlin.
— О, я много слышала про этот язык. Говорят, уже очень скоро Kotlin подвинет Java на рынке…
— Да, спрос на него постоянно растёт. При этом для Java-разработчика Kotlin легко осваиваемый язык. Более того, он совместим с Java и может компилировать Java-код. Так что стоит присмотреться к языку уже сейчас, чтобы потом не остаться не у дел.
— Чем именно Kotlin так хорош?
— В нём много «синтаксического сахара» — лёгких конструкций, делающих язык удобным в использовании, а код на нём более понятным при прочтении. Разнообразные классы данных, проверки переменных на null. То, что в Java займёт три строки, на Kotlin можно написать тремя символами.
Полезные ссылки
— Аркадий, как в загруженных буднях гигантской компании удаётся поддерживать work-life balance?
— С трудом 🙂 Когда задачами заваливает больше обычного, чувствую себя как выжатый лимон и с утра просто не могу отлипнуть от кровати. Чтобы переключиться, стараюсь чаще встречаться с друзьями, играть в настольные игры или просто «отлёживаться» дома.
— Помимо курса, какие источники для самостоятельного изучения Java можешь посоветовать?
— О, у меня длинный список. В свободное время всегда стараюсь изучать новое, развиваться. Выделю личный топ-5:
- Ютуб-канал Amigoscode. Шикарные лекции по Java на английском языке.
- Ютуб-канал Jetbulb. Полезные разборы mock-собеседований: объяснение частых вопросов, углубление в узкие темы. На русском.
- Ютуб-канал Sergey Nemchinskiy. Автор простыми словами рассказывает о сложных вещах в программировании, выпускает интервью с интересными людьми. На канале есть записи классного курса по паттернам в Java.
- Ютуб-канал dmdev. Море полезной информации для продвинутых джавистов: про фреймворки, базы данных. Отлично зайдёт после курса Skillbox.
- Ютуб-канал Eugene Suleimanov. Полезная информация по архитектуре приложений и не только.