High-level languages can be characterised by the programming paradigm(s) they support. Broadly speaking, the three most common paradigms are the imperative (OO & procedural), functional and logic (or constraint) styles. If you are watching the top-ten list of trendy new languages, you probably aren't seeing any that claim support for logic (or constraint) programming as their primary paradigm - yet for certain kinds of problems, it is arguably the preferred style to use. This talk looks at this less used style. What is it, when might you use it and how. The examples use the Apache Groovy programming language which supports this style of programming using libraries. Nearly all examples should be easily ported to your favourite JVM programming language.