Java-разработчики, особенно те, кто заняты в заказной разработке, находятся в постоянной борьбе за то, чтобы писать меньше бойлерплейт кода, будь то тривиальные геттеры-сеттеры, конструкторы и т.п. или CRUD репозитории и контроллеры. Часто решением является кодогенерация в разных видах: поддержка генерации в IDE, генерация байткода при помощи Lombok, процессоры аннотаций, порождающие новый код, фреймворки, позволяющие по описанию модели получить готовое (почти) приложение и много чего еще, не исключая новые и не очень JVM-языки, которые позволяют писать более лаконичный код и реализовывать DSL-и для решения прикладных задач.
С неоспоримой пользой в самых простых случаях приходят и ограничения, не позволяющие реализовать то, что требуется в конкретном проекте, и хуже всего, когда генерируемый код является источником дефектов, которые сложно обнаружить, а для исправления требуются специальные "костыли" поверх того, что генерируется.
В докладе мы сделаем ретроспективу наиболее часто применяемых подходов, поговорим об их сильных сторонах, ограничениях и практической применимости, а главное, попробуем взять ситуацию с кодогенерацией под контроль, чтобы она стала реально полезным инструментом эффективного разработчика.