Отказ от ответственности: я пристрастен, поскольку я пишу книгу о программировании Polyglot на JVM (Бесстыдный плагин !! - Обоснованный Java-разработчик) :)
Во-первых, вы должны вносить изменения только там, где это действительно необходимо!
Хорошее место для начала - рассмотреть языковую пирамиду Олы Бини. Ола говорит о стабильных, динамических и предметно-ориентированных языках.
Java является стабильным языком (статически типизированным и управляемым), и по разным причинам (я могу перейти к ним позже, если кому-то интересно) не является идеальным выбором для проектов с динамическим уровнем (например, Rapid Web Development) или проектов уровня, специфичного для предметной области (например, моделирование). домен Enterprise Integration Pattern). Если у вас есть проект, который вписывается в один из этих слоев, то это может быть хорошим местом для начала.
Вы также можете рассмотреть вопрос о введении нового языка на стабильном уровне для замены Java, если есть фундаментальная особенность, которую предлагает альтернативный язык. Например, Scala просто обрабатывает параллелизм более безопасным и естественным образом, чем Java.
По просьбе, еще немного об этом. WRT Java:
- Перекомпиляция трудоемка
- Статическая типизация может быть негибкой и приводить к длительному времени рефакторинга
- Развертывание - это тяжеловесный процесс
- Синтаксис Java не подходит для создания DSL
В этот момент вы можете спросить себя: «Какие проблемы программирования подходят для этих слоев? Какой язык (языки) я должен выбрать? », Помните, что серебряной пули нет, но у меня есть некоторые критерии, которые вы могли бы учитывать при оценке своего выбора.
Предметно-ориентированные
- Сборка / Непрерывная интеграция / Непрерывное развертывание
- Dev-OPS
- Моделирование корпоративной интеграции
- Моделирование бизнес-правил
динамический
- Быстрая веб-разработка
- макетирования
- Интерактивные административные / пользовательские консоли
- Scripting
- Разработка через тестирование / Разработка через поведение
стабильный
- Параллельный код
- Аппликационные контейнеры
- Основная бизнес-функциональность
Начните с небольшого модуля низкого риска (помните, что эти языки JVM часто прекрасно взаимодействуют с существующим кодом Java) или проекта. Дайте понять, что это будет одноразовый прототип.
Убедитесь, что вы изучили жизненный цикл программирования и аспекты инструментов для этого языка. Вам нужно убедиться, что вы можете использовать TDD, запускать инструменты сборки и непрерывную интеграцию, иметь мощную поддержку IDE и все эти другие факторы. Для некоторых языков вам просто нужно признать, что определенного инструментария нет или он очень простой. Сила разработчика и инструментальная поддержка могут перевесить силу языка.
Убедитесь, что есть активное сообщество, которое может помочь вашей команде, когда они застрянут. Локальные группы пользователей даже лучше для этого.
Убедитесь, что разработчики проходят начальную языковую подготовку, особенно если язык не является языком стилей OO (переход на Clojure не тривиален).
Вот об этом я думаю. Лично я успешно использовал Groovy, Scala и Clojure в своей разработке вместе с Java для таких задач, как обработка XML, создание быстрых веб-сайтов и выполнение некоторого перебора данных.