Какие источники вы используете для изучения и поддержания актуальности знаний в Java?

Ответ

Использую многоуровневый подход к обучению, сочетающий фундаментальные источники, практику и отслеживание трендов.

Фундаментальные источники (глубина):

  • Официальная документация: Oracle Java SE Docs, JSR-спецификации, Javadoc.
  • Классические книги:
    • "Effective Java" (Joshua Bloch) — best practices.
    • "Java Concurrency in Practice" (Brian Goetz) — многопоточность.
    • "Clean Code" (Robert C. Martin) — принципы написания кода.

Практика и решение задач:

  • LeetCode, Codewars — для оттачивания алгоритмических навыков и изучения новых API.
  • Пет-проекты и опенсорс — для экспериментов с новыми технологиями (например, реализация REST API на Spring Boot с реактивными потоками).

Актуальные знания и сообщество:

  • Технические блоги и статьи: Baeldung, DZone, InfoQ, Medium (избранные авторы).
  • Q&A: Stack Overflow — для анализа конкретных проблем и решений.
  • Видеоконтент: Записи конференций (JPoint, Joker, JavaOne), курсы на Pluralsight/Udemy.

Отслеживание изменений:

  • Release Notes для новых версий Java (например, миграция с Java 11 на 17 или 21).
  • RFC и предложения по развитию языка (OpenJDK mailing lists).

Пример изучения на практике:

// Сравнение synchronized и java.util.concurrent.locks.ReentrantLock
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class LockExample {
    private final Lock lock = new ReentrantLock(true); // fair lock
    private int counter = 0;

    public void threadSafeIncrement() {
        lock.lock(); // Более гибкая альтернатива synchronized
        try {
            counter++; // Критическая секция
        } finally {
            lock.unlock(); // Гарантированное освобождение
        }
    }
}
// Изучение через код помогает понять тонкости работы с примитивами синхронизации.

Ответ 18+ 🔞

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

Сначала — фундамент, чтоб мозги не просрать. Ты ж не будешь дом на песке строить? Вот и я нет.

  • Доки Oracle — это как священное писание, ёпта. Там всё, от и до. JSR, Javadoc — читать, вникать, даже если глаза вытекают.
  • Книги-кирпичи. Без них — никуда.
    • "Effective Java" от Джоша Блоха — это, блядь, библия. Best practices, которые отбивают дурные привычки на корню.
    • "Java Concurrency in Practice" — хочешь потоки по-взрослому? Читай. Иначе твоё многопоточное приложение будет похоже на эпилептический припадок.
    • "Clean Code" — чтобы код не выглядел как помойка, в которую даже ты через неделю бояться заглянуть.

Потом — практика, а то теория без неё — просто пиздёж.

  • LeetCode, Codewars — тут я алгоритмы оттачиваю. Иногда такие задачи попадаются, что волосы дыбом, но зато потом API новые как орешки щёлкаешь.
  • Свои пет-проекты и опенсорс — тут можно оторваться по полной. Вот, например, REST API на Spring Boot запилил, да ещё и с реактивными потоками поигрался. Без этого — скучно.

Чтобы не отстать от жизни, как лох последний.

  • Блоги и статьи (Baeldung, InfoQ) — там ребята умные всё разжёвывают. Иногда такое прочитаешь — просто охуеешь, как сам до этого не додумался.
  • Stack Overflow — святая святых для решения конкретных косяков. Пока не наступишь на грабли сам, не поймёшь, о чём они там пишут.
  • Записи конференций (JPoint, Joker) — смотрю, как гуру выступают. Иногда кажется, что они на другом языке говорят, но потом врубаешься — и красота.

И, конечно, слежу, куда ветер дует.

  • Release Notes для новых Java — с 11 на 17, потом на 21 перепрыгнул. Кто не успел, тот опоздал, а опоздавших, как говорится... ну ты понял.
  • RFC и предложения по OpenJDK — чтобы заранее знать, какую дичь нам ещё придумают.

Ну и главное — через код всё проверяю. Вот смотри, простой пример:

// Сравнение synchronized и java.util.concurrent.locks.ReentrantLock
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class LockExample {
    private final Lock lock = new ReentrantLock(true); // fair lock
    private int counter = 0;

    public void threadSafeIncrement() {
        lock.lock(); // Более гибкая альтернатива synchronized
        try {
            counter++; // Критическая секция
        } finally {
            lock.unlock(); // Гарантированное освобождение
        }
    }
}
// Изучение через код помогает понять тонкости работы с примитивами синхронизации.

Вот так и живу. Не сказать, что легко, зато потом не стыдно в зеркало посмотреть и код свой показать. А иначе зачем всё это, спрашивается?