«Прокачался в ПО телефонов и не остановился на достигнутом»: путь Java-разработчика Ивана
Иван ремонтировал смартфоны в сервисном центре, но мечтал о программировании. Освоив Java, он начал разрабатывать свои проекты.


Фото: личный архив Ивана Румянцева

Иван Румянцев
Россия, Томск
Пройденные курсы
Достижения
Обучился Java-разработке и уже реализовал несколько проектов.
Иван рассказал:
- для чего разработчику стоит использовать ChatGPT, а для чего — нет;
- в чём преимущества микросервисной архитектуры;
- что помогает ему не забрасывать разработку, несмотря на усталость;
- почему не спешит привлекать команду к своему pet-проекту.
«Занимался в свободное между ремонтами время»: как специалист сервисного центра освоил Java
— До обучения ты занимался ремонтом смартфонов в сервисном центре. Как попал в эту сферу?
— Абсолютно случайно. Тогда я уже полгода самостоятельно изучал HTML, CSS и JavaScript и искал работу фронтендером. И вот среди объявлений наткнулся на вакансию в сервисном центре. Я даже не предполагал, что буду заниматься ремонтом, потому что изначально пришёл на позицию обычного продавца: предлагал клиентам купить защитные стёкла и другие товары.
Со временем я заинтересовался починкой техники и начал тренироваться на сломанных подержанных телефонах: восстанавливал их, а потом продавал, объясняя покупателям, что конкретно я починил и модифицировал. После полугода практики я перешёл к починке смартфонов уже клиентов сервисного центра. Параллельно я прокачался в программном обеспечении телефонов.
Когда я уже стал заниматься в центре руководящими функциями, например вёл отчётность, я понял, что не хочу останавливаться на достигнутом, и решил продолжить учиться.
Тогда мне попалась реклама Skillbox, я заинтересовался и стал изучать, какие языки программирования лучше всего освоить новичку. Остановился на Java — он показался мне самым сбалансированным: востребованным, не слишком простым, но и не слишком сложным.
Плюс я понимал, что хочу развиваться именно в бэкенде, — на мой взгляд, это более перспективная и интересная специализация. При этом я не ограничиваюсь бэкендом — сейчас, например, делаю сайт для интернет-магазина и создаю для него в том числе фронт.
— Не сложно было совмещать работу с обучением?
— В этом плане мне повезло с работой: график позволял заниматься в свободное время между ремонтами. Плюс я учился каждый вечер после работы. Первые полгода вообще занимался очень плотно, нередко засиживаясь до ночи. Не могу сказать, что это было правильно с точки зрения здоровья, но мне было интересно и не терпелось поскорее пройти обучение. Я очень хотел стать лучше как профессионал.
— До обучения у тебя уже был опыт в программировании, хоть и во фронтенде, а не бэке. Эти знания как-то помогли влиться в учёбу?
— Думаю, да. Я же в целом заинтересовался программированием задолго до сервиса и курса — ещё на первом курсе медицинского самостоятельно пытался кодить. Это заложило базу, благодаря которой уже к середине обучения я понял, как технически взаимосвязаны фронтенд и бэкенд.
— Какие у тебя были инсайты на этот счет?
— Только когда я начал изучать Java, я понял, что бэкенд может отправлять API-запросы на фронтенд, а клиентская часть, наоборот, отправляет запросы на бэкенд. Раньше я просто не понимал, как это работает.
Кроме того, я познакомился с Thymelift — это шаблонизатор, который позволяет выводить страницы и фрагменты HTML на клиентскую часть. Теперь я использую этот инструмент для создания интернет-магазина, подключая JavaScript-файлы и стили.
Пока без сборщиков вроде Gulp, но уже получается самописный интернет-магазин.
— Ты выбрал Java, потому что это «сбалансированный» язык. Твои ожидания от языка совпали с реальностью?
— Честно говоря, я думал, что всё будет гораздо проще. Было много тем, на которых я попросту зависал, — например, когда речь шла об объектах в Java. Только после того, как я выполнил практическое задание по этому модулю, я начал немного ориентироваться.
Это был сложный, но полезный опыт.
— Здорово, что трудности получилось преодолеть через практику!
— Через практику и помощь в чате курса. Другие студенты постоянно делились там полезной информацией, которая очень выручало. А всё, что я не мог найти там, искал в интернете. Особенно помогал ChatGPT — ему можно задать миллион вопросов и получить действительно полезные ответы.
— Среди программистов есть мнение, что ChatGPT очень плохо работает с кодом. Ты заметил такой недочёт?
— Я согласен с тем, что он может генерировать плохой код, но при этом он отлично знает теорию. Всё, что связано с архитектурой приложений или классами, он легко может подсказать.
Например, я просил его помочь с названием для класса, который выполняет роль основного сервиса для моих CRUD-сервисов. Он предложил несколько вариантов, а я их учёл и оптимизировал.
— Кстати, расскажи про практику, которая помогла тебе освоиться в Java.
— В рамках своего дипломного проекта я разрабатывал поисковой движок. Задача была в том, чтобы реализовать бэкенд для уже готового фронта. Основная функция движка заключалась в том, чтобы индексировать страницы: проходить от одной к другой, находить нужные ссылки, собирать их в стеки... Таким образом он формировал «дерево» из страниц — таблицу, в которой указывалось количество проиндексированных сайтов, страниц и лемм, то есть разных форм слов.

Читайте также:
Кроме того, в движке был модуль поиска по проиндексированным страницам. С его помощью можно было найти любое слово и получить список страниц, где оно встречается. В целом это типичная история, которая есть в большинстве поисковиков.
Но я добавил нововведение — с помощью простого кэша ускорил процесс отображения страниц при прокрутке. Кроме того, я добавил JavaDoc к контроллерам, чтобы было проще.
Не считаю этот проект мощным, но для старта он точно был неплохим.
— Тем более ты по своей инициативе добавил несколько фичей, — не все студенты так делают!
— Это правда. Мой куратор предложил мне добавить в проект Docker. В итоге я добавил и Docker, и Docker Compose, настроив всё так, чтобы проект запускался через них.
Когда пришло время сдачи диплома, вопросов по коду мне почти не задавали, и я защитил проект буквально за минуту.
«Три месяца разрабатываю, пару недель отдыхаю»: как совмещать крупный pet-проект с работой
— Круто! А как у тебя с неучебными проектами? Ты упомянул, что разрабатываешь интернет-магазин, — это первая твоя коммерческая задача?
— Нет, до этого я по просьбе знакомого сделал сайт для сервиса по ремонту техники, который уже работает и приносит доход. Сайт довольно простенький: статические HTML-страницы, файлы стилей и совсем немного JavaScript без использования препроцессоров или сборщиков. То есть полностью самописный сайт.
Интернет-магазин — мой второй проект, который я делаю для себя. Он уже сложнее — делаю к нему CRM. Основная часть работы уже позади: шаблоны и фронтенд отрисованы, уже понятно, как будут выглядеть главная страница, страница входа, пользовательский CRM и карточки товаров. Осталось только реализовать бэкенд, над которым я работаю уже около четырёх месяцев.
В целом использованию большинству технологий, которые я применяю на этом проекте, я научился на курсе. Spring-Boot-Starter-Web, Spring-Boot-Starter-Data-JPA, Liquibase, Envy Client, MapStruct и Lombok — стартовый набор инструментов, который позволил мне качественно начать работу. Для работы с базой данных я применяю PostgreSQL, для кэша — Redis, а фронтенд генерирую с помощью Thymeleaf, JavaScript и CSS-файлов.
В будущем я планирую перевести проект на микросервисную архитектуру, чтобы проект стал более масштабируемым и гибким.

Читайте также:
— А в чём преимущество перехода на микросервисную архитектуру?
— Она удобна тем, что в ней каждый сервис разрабатывается и работает отдельно. То есть если в одном из них возникает ошибка, она не приводит к полной остановке системы, как в случае с монолитом. В худшем случае падает только один микросервис, а остальные продолжают функционировать.
Например, если в Ozon вдруг перестанет работать модуль оформления заказа, то товары всё равно будут отображаться и бизнес не остановится.
Кроме того, микросервисную архитектуру можно масштабировать — развернуть микросервисы по серверам в разных регионах и равномерно распределять нагрузку, чтобы повысить стабильность и гибкость системы.
А ещё умение работать с микросервисами — большое преимущество при трудоустройстве в разработке.
— Интернет-магазин — твой pet-проект. Как тебе удается поддерживать мотивацию и не забрасывать проект без стимулов вроде оплаты и внешних дедлайнов?
— Это непросто. Плюс у меня почему-то выработался такой ритм: я три месяца очень плотно занимаюсь разработкой, а потом минимум пару недель отдыхаю, чтобы восстановить силы. После паузы снова возвращаюсь в колею, и цикл повторяется. Думаю, это связано с тем, что мне сложно совмещать основную работу и разработку. Благо, спорт помогает не выгорать и разгружать голову — я регулярно бегаю и тренируюсь.
— Наверное, усталость выше ещё и из-за того, что ты работаешь над проектом совсем один.
— Да. Иногда приходит мысль подключить кого-то ещё, но я пока не решаюсь: опыта управления командой у меня нет, и я боюсь, что поэтому результат может оказаться сомнительным. Думаю, правильнее сначала поработать в компании, чтобы набраться опыта в командной разработке, и только потом вести собственный проект и собирать вокруг него людей.
Всё-таки хочется, что этот сайт стал не просто учебным макетом, а нужным и сильным продуктом.
При этом я понимаю, что в одиночку у меня не получится закрыть все направления. Особенно в части безопасности и правовых нюансов — здесь явно понадобятся консультации специалистов.
— Здорово, что у тебя уже есть чёткая цель. Какие ещё у тебя планы на будущее?
— Я бы точно хотел поработать с ИИ, но понимаю, что пока до этого не дорос. Поэтому для начала я просто хочу отточить скиллы в команде опытных разработчиков. Для меня это приоритет — увидеть, как происходит взаимодействие в команде, как работают тимлид и проектные менеджеры.
Сейчас, помимо интернет-магазина, я работаю над небольшими проектами. Например, я разрабатываю экспериментальный телеграм-бот, который будет помогать клиентам сервиса определить тип поломки, сориентироваться в стоимости и сделать заказ.
В долгосрочной перспективе я хочу стать экспертом в разработке ПО.
Эта цель кажется мне абсолютно достижимой: базовые навыки и понимание сферы у меня уже есть.