Polyglot Development
Today it is pretty common for developers to be involved with end-to-end development, especially when using DevOps principles. With multiple tools and libraries involved in this type of “full” stack development, it is common for developers to use different languages. A developer working on CI / CD will likely have to work with build tools like Make, Gradle or Bazel, and then use CD tools like Helm, Ansible or Terraform. Just by practising DevOps, you will have to be a polyglot developer. A polyglot is defined as somebody proficient in multiple languages.
What about developers that do not practice DevOps? Is there a benefit to being a Polyglot developer? Let us quickly look at the advantages and disadvantages of each approach.
Polyglot Developer
Practising Polyglot development allows you to experience different approaches to writing and building code. From using functional or object-oriented programming to full-stack environments or pick-and-choose libraries. Being exposed to multiple concepts provides flexibility in solving problems. The drawback is that most languages require a substantial investment in time to master and not everyone will have the patience to learn different languages when developing solutions.
Context switching is also a challenge for some developers and not every development tool behaves the same way with different languages. Finally, I feel that being a jack of all trades might prevent you from building amazing and elegant solutions from time to time.
Specialized Developer
Mastering a single technology might not bring the same flexibility, but you will find that the velocity in solving problems and building solutions will make up for that. Most modern languages are also evolving rapidly so just keeping up to date with new features can be a full-time commitment. I also find that most languages have gotchas that only can be learned with painful experience, and can derail polyglot developers that have not mastered the language.
Unfortunately, if the language falls out of popularity you could find yourself in a situation where nobody uses or needs the language skills you spent years developing. I doubt that experts in Ruby find the same opportunities today compared to ten years ago.
Can you avoid being a polyglot?
Honestly, I do not think that a successful developer can avoid being a polyglot developer. Most modern development requires multiple tools and languages today. For example, let’s assume that you are tasked with developing a shopping site for a client. You pick a typical MERN (Mongo, Express, React, NodeJS) stack to deliver the solution. This stack is great because the language (JavaScript) can be used for the entire stack. You build the site and use NPM to manage the entire build pipeline for both the front-end and back-end. The client wants to use an existing AWS account to host the solution. This is when the first challenge might arise since you could use a library like Pulumi to at least keep using JavaScript, or maybe choose Terraform or Cloudformation instead.
If you are not a strong JavaScript developer and would prefer to use Go instead then the situation changes. Since Go does not remove the JavaScript requirements potentially, but instead limits the amount of JavaScript used. The CD builds are also different since NPM is not a great option for managing Go builds. You might want to use Gradle or Bazel to try and manage the multi-language builds. Suddenly you find that your simple project has multiple languages and tools involved (Gradle, Go, NodeJS, etc).
The above example just shows how embracing Polyglot Development in the same project might introduce complexity. Depending on the stack and environments you are working in you might not be able to avoid learning the different languages. A different way of thinking about this is that the tools you use in your development pipelines should be consistent. If you use Terraform in one project, it is a good idea to keep using it in other projects.