Задать вопрос
@krautkraft

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

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

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

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

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

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

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

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

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

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

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

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

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

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