These decisions usually occur mostly for the reason you’ve already identified. They started with one technology and identified that another could be more useful for some tasks. And it is common not to give to migrate everything. In general it is neither by language, which in this case could not even be, since Node.js is even a programming language.
In most cases they found some library or something ready using a technology other than the one they were using, and they think it’s easier to use that and to cope with the integration between the technologies than to do something of their own, or carry what existed in one technology to another, or even find something similar in technology already used.
This last point is important because often the choice is made only because the person who made it does not know other things that will give the same result in the technology he already uses.
There are also political-social changes in teams that can drive the choices. Many people say they have to choose the right tool for the problem, but in practice decisions occur more based on the best tool is the one you know. What is not at all bad, in general gives better result to use something that dominates even if it is not the most suitable. As long as there are no exaggerations. The problem is when the team does not know how to properly use any technology. Even worse when it believes to know and not to be true. Of course the change may be only because the tool was more correct.
Otherwise you have taste too. You have no idea how many decisions are made based on no technical criteria, or based on false assumptions.
Programming languages are able to do everything you need. It is only a question of adequacy and only analyzing concrete cases to try to answer properly. Aside from the fact that you think they’re both languages, your observation that they’re almost the same thing is correct. Both should meet reasonably well any project and both will bring some challenges.
In general what can be said is this. Of course each case can have a different reason and some are well founded. But most decisions have a bit of arbitrariness or at least non-technical motivations, when it is not by fad.
Google case: "Python Where we can, C++ Where we must". http://stackoverflow.com/questions/2560310/heavy-usage-of-python-at-google/2561008. In this case it is because they see usefulness in both, they do not want to give up any of them
– Miguel
@Miguel because they have really different goals and they have very good heads to decide when it is must. Though I may be wrong too.
– Maniero
yes, I believe that the key to doing this is to have an excellent/wise software management, otherwise we might as well just stick to the right language?
– Miguel
@Miguel I believe so in most cases, but if I have to use more than one, I think they need to be very different.
– Maniero