Recently I’ve watched a technical talk about some tool, let’s call it X. This tool is written in Java. Presenter was really excited and energetic and he obviously knew his stuff. And then, there were two questions after the presentation:
- Are there any similar solutions in languages other than Java?
- What do you think about the concept Y?
The concept Y is very similar to what presenter showed us and it’s very popular in functional programming world.
His answers really scared me:
- I don’t know (but it sounded more like “I don’t care”)
- I don’t know (again, sounded more like “I don’t care” to me)
So, this person probably spent many days or weeks building this library and it seems like he has NO idea about existing research papers, available tooling and alternative libraries. Why? Because they’re not widely used in Java.
I’m really sorry, but I don’t understand this. I don’t understand people with titles like “Ruby Developer”. Why do you lock yourself? And no, I’m not talking about spending nights and weekends hacking with new languages as an alternative. There is always a way to learn something new at work. Cool, let’s say you use Java at work. Do you think it’s a horrible idea to may be introduce Scala or Clojure or Kotlin for that tiny little tool that you need to build right now? Yes, of course your manager/lead can argue with you: we don’t have enough people/time/resources to support this new language/framework, new people will need to learn multiple languages, etc. Totally reasonable unless that new language/framework really fits. Let’s say you need to build a rule engine. Clojure is really good at that! How about a cross-platform CLI tool? Go has an amazing support for that!
And if you don’t have a new project or time to build a new tool at work then you can always go to a conference, workshop, meetup, spend an hour or two per week during a work time (I’m pretty sure your manager won’t disagree) learning new things, reading a book, taking an online course, etc.
Sure, that might not sound very convincing. “We don’t need a new language to solve a new problem”, some people say. Or “We don’t want to end up with 20 different languages for all different problems we have”. Sure. But just a heads up – no one says that anybody can just use new library/language, build an app and commit it. It’s supposed to be backed by research and data. And obviously, it’s a shared decision.
If you’re still not convinced, here’s more thoughts:
- Polyglot software engineers are usually better at solving new problems. Sometimes they’re just better programmers. Scala made me a better CoffeeScript programmer. Haskell and Erlang made me a better Scala programmer. That’s why I don’t believe in an argument that 10 years of Python development make you an expert. They definitely make you a better Python coder, but not always better software engineer. Learning new languages and programming paradigms does.
- Polyglot software engineers usually stay longer at a current position (I wish I had a research to prove it, but let’s say it’s just my observation). For example, Python developers can build software in Python in any Python shop. So, if there’s a better offer, company, culture, scale, whatever – it’s easier for them to make a decision to leave. But polyglot programmers work with a unique mix of languages and frameworks. And it’s something that’s always exciting, challenging and interesting. You always have a room grow and chance to learn new things.
Here’s the final thought: if you still think that Java (or any other language) is the best language for your current role and you don’t need to explore anything else – ok, I won’t judge. But please, don’t try to promote and encourage everyone around you to be locked in their silos by showing your ignorance as an example.