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

Ответ

Развитие hard skills — это системный процесс. Вот мой подход:

1. Практика кода и алгоритмов:

  • LeetCode / Codewars: Регулярное решение задач для поддержания знания алгоритмов и структур данных. Акцент на паттерны, оптимизацию и чистоту кода.
  • Pet-проекты на GitHub: Создание небольших приложений для изучения новых технологий (например, Quarkus, реактивные потоки, GraphQL).

2. Изучение технологий и best practices:

  • Официальная документация и RFC: Первичный источник для понимания спецификаций (Java SE, JPA, HTTP/2).
  • Книги: Углублённое изучение по книгам, таким как:
    • "Effective Java" (Joshua Bloch)
    • "Java Concurrency in Practice" (Brian Goetz)
    • "Designing Data-Intensive Applications" (Martin Kleppmann)
  • Конференции и доклады: Просмотр записей с JPoint, Devoxx, SpringOne.

3. Участие в сообществе:

  • Опенсорс: Внесение небольших исправлений или документации в проекты, которыми пользуюсь (например, Apache Commons).
  • Технические блоги и статьи: Чтение и анализ статей от инженеров ведущих компаний.

Пример пет-проекта — изучение WebSockets в Spring:

@Controller
public class ChatController {
    @MessageMapping("/chat") // Куда клиент отправляет сообщение
    @SendTo("/topic/messages") // Куда рассылается ответ
    public ChatMessage broadcast(ChatMessage message) {
        // Здесь может быть логика сохранения, валидации и т.д.
        return message;
    }
}

Это позволяет не только изучать теорию, но и сразу сталкиваться с практическими проблемами развёртывания, отладки и проектирования.

Ответ 18+ 🔞

Да ты посмотри, какой системный подход, блядь! Прямо как в аптеке, всё по полочкам разложил. Ну ладно, давай разберём этот план по косточкам, а то я тут сижу, и у меня волнение ебать, как же так правильно можно жить.

1. Код и алгоритмы, ёпта.

  • LeetCode / Codewars: Ну, это классика, блядь. Сидишь, бычишь эти задачки, чтобы мозги не засохли, как сухарь в заднице. Главное — не просто решить, а понять паттерн, сука, чтобы потом не изобретать велосипед, когда на работе пиздец и дедлайн горит. Чистота кода — это святое, а то потом сам на свой же код смотреть не сможешь, пиздец.
  • Pet-проекты на GitHub: Вот это, блядь, самое то! Берёшь какую-нибудь новую хуйню, вроде того же Quarkus, и начинаешь лепить какую-нибудь дичь. Не для денег, а для себя, для души. Один раз накосячил — зато понял, где подводные камни. Лучше тут, чем на проде, ядрёна вошь.

2. Технологии и как их правильно жрать.

  • Доки и RFC: Официальные мануалы — это наше всё, блядь. Не какой-то левый туториал с ютуба, где чувак сам нихуя не понял, а прям первоисточник. Почитал спецификацию HTTP/2 — и сразу чувствуешь себя полубогом, а не просто кодерастом.
  • Книги: Да, тут без вариантов. Блох, Гётц, Клеппман — это как библия, только проще. «Effective Java» — это ж надо читать, перечитывать, а потом снова читать, пока не дойдёт, блядь. Иначе будешь писать говнокод, а потом удивляться, почему всё падает.
  • Конференции (JPoint, Devoxx): Включил запись, сидишь, чипсы жрёшь, а тебе умные дядьки рассказывают про всякие ништяки. Иногда, правда, такое несут, что думаешь — «ни хуя себе, а я-то жил в пещере». Просветление наступает, ёпта.

3. Сообщество, блядь.

  • Опенсорс: Ну, тут всё просто. Увидел в библиотеке, которой пользуешься, очевидную хуйню — опечатку в комменте или кривой пример. Делаешь пул-реквест. Тебе говорят «спасибо». Душа радуется, что хоть чем-то полезен этому ебучему миру.
  • Технические блоги: Читаешь, как ребята из Netflix или Google свои проблемы решали. Иногда такие костыли и велосипеды увидишь, что понимаешь — овердохуища гениальности рождается в муках, а не в спокойной жопе.

А вот пример, как это всё вместе работает, на пет-проекте:

Смотри, решил ты, сука, WebSockets в Spring освоить. Не просто туториал пробежать глазами, а сделать маленький чатик. И вот ты пишешь этот контроллер:

@Controller
public class ChatController {
    @MessageMapping("/chat") // Куда клиент отправляет сообщение
    @SendTo("/topic/messages") // Куда рассылается ответ
    public ChatMessage broadcast(ChatMessage message) {
        // Здесь может быть логика сохранения, валидации и т.д.
        return message;
    }
}

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

Но зато, когда эта мартышлюшка заработает, и ты сможешь из браузера себе сообщения слать, чувствуешь себя богом вебсокетов, ёпта. И главное — ты на своей шкуре прочувствовал все грабли, отладку и проектирование этой, с позволения сказать, «простой» фичи. Вот это и есть развитие, а не просто галочки в резюме ставить.