Back in 2012 there was no question that ruby was the language of DevOps, then Ansible took over. Puppet was a true pain to work with, and through at least version 4, their language designers were simply wrong about what it meant to be a declarative language (you could only declare each resource once, they pretended/falsely believed that inference and/or unification were incompatible with declarative languages), but wow was it powerful to maintain dependable state on long lived servers