<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Groovy on Backend Engineering Strategy Tools</title><link>https://backend-engineering-strategy-tools.github.io/site/tags/groovy/</link><description>Recent content in Groovy on Backend Engineering Strategy Tools</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Wed, 03 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://backend-engineering-strategy-tools.github.io/site/tags/groovy/index.xml" rel="self" type="application/rss+xml"/><item><title>JVM Languages</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/languages/jvm/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/languages/jvm/</guid><description>&lt;p&gt;JVM-hosted languages beyond Java. Each trades something to gain something, and each found a niche where the trade made sense.&lt;/p&gt;
&lt;p&gt;Java was enough. It still is. The honest reason to know Groovy, Scala, and Kotlin is not that they are better — it is that the ecosystem puts them in front of you whether you choose them or not. Build tools, CI pipelines, and frameworks make that decision for you.&lt;/p&gt;
&lt;p&gt;A practical tell: if the Java code you are reading starts to feel syntactically off — closures where you did not expect them, type inference that seems too aggressive, operators that should not be there — you are probably looking at Groovy, Scala, or Kotlin. Worth knowing enough to recognise each and get things done.&lt;/p&gt;
&lt;p&gt;Also worth noting: Java itself has been catching up fast. Virtual threads, records, sealed classes, pattern matching, a faster release cadence — the gap between &amp;ldquo;Java&amp;rdquo; and &amp;ldquo;a more modern JVM language&amp;rdquo; has narrowed considerably. The case for leaving Java for something else on the JVM is weaker now than it was five years ago.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="groovy"&gt;Groovy
&lt;/h2&gt;&lt;p&gt;Dynamic, optionally typed JVM language with a syntax that is a superset of Java. Groovy code is often valid Java. The dynamic parts — closures, metaprogramming, GStrings — are what made it popular as a scripting and DSL language.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where you find it today:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gradle build scripts&lt;/strong&gt;: the Groovy DSL is the original Gradle scripting language (now being replaced by Kotlin DSL)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jenkins pipelines&lt;/strong&gt;: Groovy is the language of Jenkinsfile declarative and scripted pipelines&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spock framework&lt;/strong&gt;: expressive BDD-style testing for JVM projects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Groovy&amp;rsquo;s peak was the early Gradle/Jenkins era. Kotlin has taken over most of the &amp;ldquo;better Java scripting&amp;rdquo; use cases. Still found widely in CI/CD tooling — if you work with Jenkins or older Gradle builds, you will write Groovy.&lt;/p&gt;
&lt;p&gt;Groovy shows up in Gradle builds and Jenkins pipelines. Know enough to read and modify it; not a reason to seek it out.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="scala"&gt;Scala
&lt;/h2&gt;&lt;p&gt;Statically typed functional + OOP hybrid on the JVM. Strong type system, pattern matching, immutable data by default. Compiles to JVM bytecode and interops with Java libraries.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where you find it today:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Apache Spark&lt;/strong&gt;: the dominant big data / data engineering platform is written in Scala and has a native Scala API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Akka&lt;/strong&gt;: actor model concurrency framework&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Play Framework&lt;/strong&gt;: web framework, less common now&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SBT&lt;/strong&gt;: build tool, build definition is Scala code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scala has a reputation for complexity and a steep learning curve. The community split between Scala 2 and Scala 3 (Dotty) added friction. If you are working with Spark, you will encounter Scala. If you are not, the reasons to choose it over Kotlin or Java are narrower than they used to be. Another case where Java catching up makes the trade less obvious.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="kotlin"&gt;Kotlin
&lt;/h2&gt;&lt;p&gt;JetBrains&amp;rsquo; answer to Java&amp;rsquo;s verbosity. Statically typed, concise, null-safe by design. Full Java interop — Kotlin and Java can call each other in the same project. Official Android development language since 2017.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where you find it today:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Android development (the default)&lt;/li&gt;
&lt;li&gt;Spring Boot (first-class support since Spring 5)&lt;/li&gt;
&lt;li&gt;Gradle Kotlin DSL (replacing Groovy as the recommended build script language)&lt;/li&gt;
&lt;li&gt;Ktor — Kotlin-native web framework from JetBrains&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kotlin is what you reach for when you want Java but less of it. Coroutines handle async cleanly. The Kotlin DSL in Gradle gives type safety that the Groovy DSL could not.&lt;/p&gt;
&lt;p&gt;Kotlin is the cleanest of the JVM alternatives — but again, Java has been closing the gap. Worth knowing if the project is already Kotlin; not a compelling reason to switch from Java.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="jython"&gt;Jython
&lt;/h2&gt;&lt;p&gt;Python running on the JVM. Jython implements the Python language but executes on the JVM, meaning Python code can import and use Java classes directly.&lt;/p&gt;
&lt;p&gt;Worth knowing it exists. In practice: Jython implements Python 2 (Python 3 support was never completed), which limits its relevance post-2020. Main use case was embedding Python scripting in Java applications. A few enterprise tools and test frameworks still use it.&lt;/p&gt;
&lt;p&gt;If you need Python-JVM interop today, consider alternatives: GraalVM&amp;rsquo;s polyglot API, or just making an HTTP boundary between a Python service and the JVM service.&lt;/p&gt;
&lt;hr&gt;</description></item></channel></rss>