Митап Java Guild: T-Shape и реактивное программирование
Митап JVM Guild — Community of Practice, основанный мной в Dats.Team. Выступали два разработчика из моих команд.
Бэкап видео (OneDrive) · Бэкап видео (Wayback Machine)
Доклад 1. Иван Самойлов — «Практика T-Shape»
Soft-skill доклад о концепции T-Shape специалистов и том, зачем развивать смежные компетенции.
Концепция появилась в 1991 году в дизайнерской компании IDEO для найма. I-Shape — узкий специалист с глубокой экспертизой в одной области; generalist — широкий кругозор без глубины; T-Shape — комбинация: глубокая экспертиза + широкий кругозор по смежным областям.
Команды из чистых I-Shape-специалистов лучше подходят под waterfall и требуют сильного менеджмента сверху. T-Shape — гибче, лучше для agile.
Плюсы T-Shape
- Скорость поставки, меньше простоев
- Высокий bus-factor (команда устойчива к выпадению человека)
- Возможности роста сотрудников
Минусы
- Подходит не всем
- Такие специалисты дороже
- Узкая специализация всё ещё оправдана для сложных проектов
Развитие концепции
P-Shape — две глубокие экспертизы (например fullstack или SDET), M-Shape / Comb-Shape («человек-расчёска») — несколько глубоких экспертиз.
Как развиваться
- Работать в гибкой команде, где можно подключаться к смежным задачам
- Составлять командой карту компетенций (Star Map), чтобы видеть потребности и желания роста
- Искать ментора или комьюнити
Доклад 2. Дмитрий Рудопысов — «От стримов к флюксам»
Технический kick-off по реактивному программированию в Java для тех, кто знаком со Stream API, но не с Project Reactor.
Stream API → Flux
Stream API (Java 8) даёт декларативный стиль: filter, sorted, map, collect — код читается почти как английский. Но стримы работают с готовой коллекцией. Когда данные приходят асинхронно — из БД, по WebSocket, от пользователя — нужен Flux (Project Reactor).
API Flux намеренно похоже на стримы (map, filter, flatMap, reduce), поэтому переход относительно простой. Но Flux — это не замена стримов, а другая концепция для другого класса задач.
Лайв-кодинг
На демо-проекте Currency Calculator: создание Flux через sink, tryEmitNext, подписка через subscribe. Без терминальной операции — как и в стримах — ничего не запустится.
Backpressure
Ключевое отличие от стримов. На демо приложение «застряло» на 256 запросах (дефолтный буфер). Можно тюнить размер буфера или применять стратегии управления, когда производитель быстрее потребителя.
Параллелизм
У parallelStream() один общий thread pool на всё приложение — опасно. У Flux можно гибко указывать scheduler.
Реальный пример
Обработка WebSocket-сообщений через Flux с doFirst (аутентификация), timeout, flatMap для бизнес-логики и обратным потоком через sink. Сейчас реактивные драйверы есть для БД, очередей, браузеров — экосистема дозрела.