Polyglot programming refers to making applications that are comprised of multiple languages, each used to handle a specific aspect of the application. Polyglot programming is becoming increasingly popular and will only continue to do so over the next few years - meaning that general purpose languages like Java and C# won't be the sole language used on a project and will instead be augmented with other languages. I'm all for this approach but have always assumed that it meant the entire team would be proficient in all of the languages used on a project. However, reading the chapter on polyglot programming in Neal Ford's The Productive Programmer has me reconsidering this notion. Ford writes:
“All doctors at one time were general practitioners, but as their field advanced, specialization became inevitable. Software complexity is quickly driving us toward specialization, both because of the types of applications we must write and the underlying platforms.”
I had never considered polyglot programming leading to specialization within teams - and perhaps throughout the industry. So I could be working on a Rails site and have a contractor specializing in Haskell come in to work on some tricky backend code that needs parallelized. Interesting. Though when I think about it, this specialization is already kind of present in our team. There's a guy everyone goes to with their JavaScript and CSS problems, as well as another who's known as our SQL and SQL Server guru. We could continue this and have other developers on the team become experts in different languages.
There are definitely some benefits of a team practicing language specialization. When a team understands a variety of languages, it increases the breadth of their problem-solving abilities - and more importantly, it allows them to leverage the best language for each particular problem. Furthermore, specializing enables a developer to become extremely knowledgeable and efficient in a language, allowing him or her to really maximize a language’s capabilities, instead of having a team of developers who are merely proficient in the language and don't use it to its full extent.
However, there could be some potential drawbacks to this approach. Specialization could hamper knowledge dissemination amongst teammates and possibly create silos within the team. Similarly, it could lead to a negative outcome in the hit-by-bus scenario. That is, what would happen if a teammate was hit by a bus? Would the team be able to substitute the missing developer and proceed with a project, or does the missing teammate have knowledge or a skill set that no other team member has, thus crippling a project if he or she is not there? I know we have at least one person like this on our team, and he sometimes has been unfairly pressured to work because his absence would severely jeopardize the completion of a project. This is certainly not a good situation for the team to be in.
Yet these drawbacks can be mitigated and will certainly not impede polyglot programming's rise in popularity. I'm uncertain, though, whether it will lead to a team and an industry of language specialists - but regardless, I better learn some more languages (starting with some dynamic and functional ones).
So what do you think? Do you agree that polyglot programming will become pervasive in the industry, and if so, how will it impact the makeup of a team?
4 comments: