Ответ
Развитие 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;
}
}
Это позволяет не только изучать теорию, но и сразу сталкиваться с практическими проблемами развёртывания, отладки и проектирования.