Continuous learning with polyglot development

Tuesday, July 18, 2017

Originally published on Hacker Noon

You have discovered an interesting development topic when your Google search returns fewer than a million results.

Over the past two years, I’ve spent a good amount of time playing with different programming languages. I’ve learned the fundamentals of ES6 and written several APIs and CLIs using Node.js. I’ve automated tasks using my first Python scripts (phew!) and practiced the wonders of concurrency in Go.

But after realizing how many languages I’ve touched on, I began seriously thinking about it. Should companies be encouraging polyglot software development as a practice? That pushed me to do some basic searching, which led me to…controversial results.

What is a polyglot?

Let’s start with a definition. If you search for “polyglot developer,” “polyglot engineer,” “polyglot programmer,” or anything similar, you are likely to get mixed results. Some articles treat knowing two different web frameworks as polyglot. Others see having an understanding of two cloud providers as polyglot.

Neal Ford coined the specific phrase “polyglot programming” in 2006. However, for the purposes of this post, I’m going to start with the more general linguistic Wikipedia definition of a polyglot:

Polyglotism or polyglottism is the ability to master, or the state of having mastered, multiple languages.

In the case of software development, this would translate to:

Polyglot developers have the ability to master, or have already mastered, developing in multiple programming languages

First up, what’s the case *against *being a polyglot developer?

The case against the polyglot developer

Upon searching, one of the first links is a TechRepublic post titled, “Developers are calling it quits on polyglot programming”. Here’s the lead for that article:

As much as developers have enjoyed new options in programming languages, databases, and more, they’re increasingly asking for consolidation to simplify development.

Several other articles echo these thoughts. They mention that polyglot software development adds complexity, or increases the cost for a company to maintain projects. Posts such as these two from DZone mention the above issues and more.

In much of what I’ve read, the downsides of polyglot development tend to fall into two categories:

  • It’s costly/unmaintainable/risky/complex for a company or sponsor of the developer to have polyglot work done
  • It’s complex/tiring/distracting for a developer to focus on polyglot development

While these are valid concerns, I would argue that the case for the polyglot developer is much stronger if approached in the right way.

The case for the polyglot developer

It’s important to note that the volume of posts in favor of polyglot development is substantially greater. The biggest focus seems to be on how polyglot development allows people to, as Dean Wampler puts it, “use the best tool for a particular job.”

There are hundreds of examples, including popular tools like Emacs and Adobe Lightroom, that are built using polyglot development. But I’m going to look at this from a different angle: let’s look at polyglot in the world of human languages!

If you tell a parent that it would be a bad idea for their child to learn a second language, they’d stare at you in disbelief.

You’ve probably seen at least one article touting the benefits of bilingualism or multilingualism. Common benefits cited include items such as opening doors to new opportunities, adding diversity to thinking, better understanding of different cultures, and simply being valued more.

There’s research that points to the positive benefits of being a human language polyglot. In one overview of available research, the author writes that “…multilinguals have constant unconscious practice in using the executive function system…” (Diamond 332). In a meta-analysis of the available literature, another author writes that “[b]ilinguals also show evidence of enhanced problem-solving skills, particularly on tasks requiring executive control…” (Adesope 210).

It seems that on an individual level, there are substantial benefits to being a polyglot in human languages. While there seems to be very little, if any, research around the cognitive benefits of polyglot programming (and by extension, polyglot development), let’s consider this abstractly for a moment: even if a developer is not actively using more than one language in the course of routine work, can their experience in other programming languages influence their thought process and decision making?

Absolutely. For instance, although I routinely use JavaScript, I’m perfectly comfortable in C as well. While I don’t practice C programming regularly, the ingrained sense of bounds-checking, manual memory management, and limited data structure support causes me to think differently about problem solving, even when using a different language.

Is polyglot development even about programming?

Perhaps polyglot development isn’t about actively using multiple languages on projects. In comparison to linguistics, our understanding of the cognitive benefits of learning new tools and technologies is limited. Continuous learning is something that we all must engage in, as not only does it better equip us to deal with changing problems and constraints, but it engages our brains differently.

It seems that, at a minimum, individuals should explore polyglot development as a form of continuous learning. Ideally, companies should see it as a way of investing in their employees, and that encouraging continuous learning ultimately benefits the company as well. While it may not always make sense to practice the new languages in software projects, it helps the company explore new ideas while being open to longer-term shifts and adoption.

After all, there’s no better way to start a healthy debate amongst developers than to ask them to convince each other of their programming language’s merits.

What do you think? Is polyglot development valuable? Does it change the way you approach problem solving? Leave a comment and let me know!