Какими ресурсами вы пользуетесь для профессионального развития?

Ответ

Для постоянного развития я использую комбинацию практики, чтения и анализа.

Теория и новости:

  • Блоги и порталы: Baeldung, DZone, InfoQ, технические каналы на Medium.
  • Книги: «Effective Java» (J. Bloch), «Java Concurrency in Practice» (B. Goetz), «Clean Code» (R. Martin).
  • Конференции и доклады: Записи с JPoint, Joker, Devoxx для знакомства с трендами и best practices.
  • Подкасты: «The Java Pub House», «Software Engineering Daily» для обучения в фоновом режиме.

Практика и углубление:

  • Алгоритмы: Регулярные тренировки на LeetCode и HackerRank для поддержания навыков решения задач.
  • Исследование кода: Изучение исходного кода популярных библиотек (Spring Core, Guava) на GitHub для понимания внутреннего устройства.
  • Pet-проекты: Создание небольших проектов для опробования новых технологий (например, Quarkus, Project Loom).

Пример изучения через код:

// Глубокое понимание Stream API через отладку и анализ
List<String> result = items.stream()
        .filter(s -> {
            System.out.println("filtering: " + s); // Логируем для понимания ленивости
            return s.length() > 3;
        })
        .map(String::toUpperCase)
        .collect(Collectors.toList());

Иногда участвую в open-source проектах, чтобы получить опыт командной работы над реальным кодом.

Ответ 18+ 🔞

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

Про теорию и новости, эту всю пиздопроебибну:

  • Блоги и порталы: Ну, Baeldung — это святое, там хоть что-то понятно объясняют. DZone и InfoQ — чтобы просто знать, что творится в мире, а то выйдешь из вакуума, а там уже все на Project Loom переписались, а ты про synchronized молишься.
  • Книги: «Effective Java» — это как библия, блядь. Открываешь на любой странице — и там либо про то, что ты делал неправильно последние пять лет, либо про то, как ты завтра сломаешь продакшн. «Java Concurrency in Practice» — книга, после которой начинаешь бздеть от каждого volatile. «Clean Code» — чтобы понимать, что твой код — говно, и стремиться к чему-то лучшему.
  • Конференции: Смотреть доклады — это да. Сидишь, чипсы жрёшь, а какой-нибудь архитектор из Гугла рассказывает, как они там петушились с миллиардом запросов. Осознаёшь масштаб и понимаешь, что твой микросервис на два запроса в минуту — это просто детский лепет.
  • Подкасты: Включаешь, когда везешься в метро или моешь посуду. Фоном идет. Иногда выхватываешь какую-то мысль и думаешь: «А ведь и правда, ёпта, а я и не задумывался».

А вот практика — это уже пиздец где жопа начинается:

  • Алгоритмы: LeetCode, HackerRank... Э, сабака сука, это же надо реально мозги включать. Сидишь, ебёшься с какой-нибудь задачей про двоичные деревья, понимаешь, что на собеседовании бы уже вылетел, и терпения ноль ебать. Но без этого нихуя — заржавеешь.
  • Исходники библиотек: Вот это, я считаю, высший пилотаж. Открываешь код Spring'а, смотришь на эти все BeanPostProcessor и AOP proxies... Сначала думаешь «какие умные ребята», потом «какой пиздец», а потом, если повезёт, «а, кажется, понял!». Это как заглянуть под капот гоночного болида — страшно, но чертовски интересно.
  • Pet-проекты: Тут главное — не начать десятый проект «To-Do лист на новом фреймворке», а бросить его на третий день. Надо придумать какую-то свою, пусть ебанутую, но идею. Типа «сервис для генерации отмазок, почему я не сделал таску» на Quarkus. Чтобы был стимул допилить.

Пример изучения через код — вот это прям в точку:

// Глубокое понимание Stream API через отладку и анализ
List<String> result = items.stream()
        .filter(s -> {
            System.out.println("filtering: " + s); // Логируем для понимания ленивости
            return s.length() > 3;
        })
        .map(String::toUpperCase)
        .collect(Collectors.toList());

Вот смотри, многие думают, что стримы работают как цикл: взял первый элемент, отфильтровал, мапнул, потом второй. А тут, блядь, если без collect(), нихуя не выполнится — ленивые они. И когда вот так вот println в filter вставишь, сразу видишь этот порядок. Прям озарение, ёперный театр! Осознаёшь, что map может и не вызваться для отфильтрованного элемента. Просто и гениально.

Ну и open-source... Это когда уже совсем скучно и хочется почувствовать себя частью чего-то большого. Найдёшь какую-нибудь библиотечку, увидишь опечатку в документации (typo fix, блядь!), сделаешь пул-реквест — и ты уже контрибьютор! А потом посмотришь на issues, там какой-нибудь баг на три года висит, и подумаешь: «Нет уж, спасибо, я пас». Но опыт, да, бесценный — видишь, как другие кодят, как ревью проходят. В общем, план у тебя овердохуищный, главное — не сгореть в этом аду постоянного обучения.