@krautkraft

Java junior, серверное ПО, какие задачи решать, чтоб понять устройство системы?

Добрый день!
Прошу вашего профессионального совета по поводу дальнейшего направления развития.

Студент 4 курса, специальность - прикладная математика и информатика. Компьютерные дисциплины практически не преподавались, учил сам. Работал в техподдержке вуза, параллельно учил основы linux и сетей, плюс Java - с нуля, писал простые учебные программы.
Сейчас я джун в отделе, занимающемся развертыванием ПО на серверах распределенной системы, администрированием БД Postgres. Немного своего ПО пишем на Spring.

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

Дают изучать полезные вещи: Spring микросервисы, инструменты для работы с распределенными системами (Kafka, Zookeeper), Elasticsearch и ELK-стек, Spring JPA, репликация БД. Получается пока на уровне туториалов и quick start-ов. До прода далеко.

Свой код плохой, на досуге стараюсь решать задачки на базовые алгоритмы (Керниган, Пайк “Практика программирования”).
Высокоуровневые Java-фреймворки и интуитивно понятный API кажутся простыми на фоне C и рекурсии, вводят в заблуждение. Трудно докопаться до сути и понять, как связаны, скажем, ядро и драйвера с абстракциями и обертками.
Поэтому когда дело доходит до реальной задачи - все рушится из-за отсутствия понимания базовых вещей.

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

Скажите, пожалуйста, в каком направлении сейчас идти, какие задачки решать? На что сделать упор, чтоб приобрести тот самый уникальный опыт, нужный для реальных задач?

Заранее спасибо.
  • Вопрос задан
  • 349 просмотров
Решения вопроса 1
@Asapin
В свободное время ковыряюсь с Rust и Wasm
Если уже есть небольшой опыт работы со спрингом, то советую посмотреть "Spring-потрошитель" (2 части) от Евгения Борисова на ютубе. Он хорошо объяснил как спринг устроен изнутри. Магии много, на разобраться можно.

После этого можно начинать читать документацию по интересующим модулям спринга. Она обычно очень подробная и понятная. Вот например документация по Spring Jpa.

После этого попробуйте с нуля написать какое-нибудь простое приложение на спринге не используя туториалы, quick-старты и spring initializr, только maven/gradle (смотря что у вас в команде используется) и документация. Скажем, 3 пользовательских роли (админ, пользователь, аноним), 3 эндпоинта: 1 доступен для всех, 1 доступен админу и пользователю, 1 доступен только админу. Для начала пользователей можно захардкодить. Потом прикрутить постгрес для их хранения, потом прикрутить эластик для логов и т.п.
После этого добавить несколько тестов, причём как тестов, которые напрямую дёргают методы сервисов и репозиториев, так и тесты, которые эмулируют пользователя: отправляют http-запросы на вход в систему, а потом дёргают эндпоинты и проверяют, что ограничения эндпоинтов по ролям работают правильно.

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

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

Понимание рекурсии и базовых алгоритмов полезно, но в корпоративном сегменте это будет встречаться не часто: бизнес процессы в большинстве случаев будут расписаны либо бизнес-аналитиком, либо самим заказчиком, а большинство структур данных и алгоритмов работы с ними уже доступны в стандартной библиотеке, Apache Commons Lang 3 и Google Guava.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега Карьера в IT
software engineer
Хороший код приходит с опытом, проблематично целенаправленно учиться писать хороший код, это все равно как целенаправленно учить опыт.
В этом плане нужно просто понимать почему что делается.

А так - направление это совместная работа. Понимать весь цикл разработки. Как предсказуемо оценивать сроки задачи, как их правильно дробить, как взаимодействовать с другими разработчиками или командами.
Все инструменты, с которыми сталкиваешься - старайся добиться, чтобы работало, потом интересуйся как это работает. Таже кафка - что она вообще умеет. Тот же ELK стек - можно научиться парсить логи чтобы искать нужные вещи, а можно в самом приложении поправить логгер, чтобы он в ЕЛК отправлял более удобные для парсинга данные. И так с каждым сервисом/технологией - ты как разработчик и со стороны приложения можешь менять и со стороны сервиса можешь смотреть что от него взять можно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
28 апр. 2024, в 17:10
20000 руб./за проект
28 апр. 2024, в 15:00
100000 руб./за проект
28 апр. 2024, в 14:43
5000 руб./за проект