Ответ
Для постоянного развития я использую комбинацию практики, чтения и анализа.
Теория и новости:
- Блоги и порталы: 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, там какой-нибудь баг на три года висит, и подумаешь: «Нет уж, спасибо, я пас». Но опыт, да, бесценный — видишь, как другие кодят, как ревью проходят. В общем, план у тебя овердохуищный, главное — не сгореть в этом аду постоянного обучения.