First of all, let me say this: take your time, go slow. No, I do not mean go with the option that you know it is slow. I mean do not decide in a hurry.
You should learn more languages. You should keep learning. And I do not mean when you have a project that may benefit from that in front of you. Instead, I mean in your spare time.
How long does it take to learn a new language and its standard library? Virtually forever. Often I do not finish learning the standard library of a language before a new version is out. No, you do not learn it all, you just learn what you need.
In fact, I would argue for making yourself confortable with learning new languages. Languages will evolve, the market share of languages will shift.
Alright, there are a few things we know in general about software engineering.
One of those is that the output in line of codes of a programming is roughly constant across languages. This means that using a higher level language (a languages with more and more powerful abstraction) will make you more productive.
Another thing that we know is that reusing code is good. A third party library can help you be more productive.
Treat those as heuristics when deciding.
To reiterate, take your time to decide. This can mean expending a day or two in taking the other languages and trying it out, perhaps following some tutorial. If it is true that domain Y
is really easy in language A
, that should be enough to confirm it. If you have to go with language X
and you know that will take time... well, what are a couple extra days in the long run?
Language A
and language B
are not your only options. Pretending for a moment that there are no more relevant languages to the domain Y
, you could look for libraries for the language B
.
Oh, but there are more languages. And learning a new languages similar to B
when you know B
will be easier than learning a language that is a lot different from B
when you know B
. Thus, if you have to select a language to learn to do a task, pick one that is similar to one you already know.
Consider that people suggesting language A
probably does so coming from their own experience. Similar to how you do not really know how hard it will be to use language A
, they would not know how hard it is to use some other language, which could actually be better that bon A
and B
.
Let us talk a little about economics. Tools have costs (licensing, learning). Development has costs (time, effort, expenses). Deployment has costs (hosting, hardware). In time and money. These costs you balance.
What is more expensive for you? Tools, Development or Deployment?
If development is more expensive, you will have to invest in tools and deployment. For example, you could expend in learning a new language that allows you to complete the software sooner. Or for example, do an sloppy job, have a bad performing application, yet completed sooner, and pay for better hardware to run it. Well, if the run-time of the language that allows you to finish faster is slower, you may also need better hardware.
If deployment where the expensive part (for example, in the case of embedded applications), then you want to put the time and money in development and the tools. In this case, the tools would probably not mean a language with a heavy run-time, but a better IDE, et.al. that help you make sure you do a good quality and performant software.
Let me throw a couple wrenches at the whole thing:
- There are plenty of libraries that have ports or binding for multiple languages. These have the potential to make the language decision secondary.
- A software solution could be built with components developed in different languages. Taking the concrete example... How about using a language to do console/terminal application that does the networking, and using another language to do the UI and talk to the console/terminal, for example via standard I/O? If you do that, you do not need a language that can do both parts well. Thus, you could get a couple of language such that each does its part really well.
So... Creating an UI? What better than a visual designer. You could pick a language for which there is a really good visual designer.
About networking... May I suggest ZeroMQ? That is a library. Multiple, actually. There are ZeroMQ libraries for plenty of languages. Yes, including C and Python.