Зачем делают backend на разных языках?
Возьмем например Дропбокс.
Изначально был написан на Python - это быстрее для прототипирования.
Потом был переделан на Go - для предсказуемости и скорости. Но зачем переделывать полностью? Многие куски на Python существуют там до сих пор. И работают.
И маааалюсенький кусочек был переделан на Rust - для ускорения самого узкого места.
Вот вам и 3 языка работающих одновременно в Дропбоксе на бэке.
Или имеется в данный момент свободен тот или иной специалист, который лучше знает тот или иной язык. Ему поручили - он сделал на том, что лучше знает, чтобы сделать быстрее и качественнее.
Или такова была особенность задачи. Пример с комбинацей Rust/Go выше приведен. Где то может быть лучше один язык, где то другой.
А если мы вспомним, что проект не только пишется, а еще и готовые компоненты применяются - то автоматически к любому почти проекту добавляются С/С++ те что в БД к примеру и пр. и пр. SQL - тоже язык бэкенда. И пр. и пр.
Вы преувеличивайте значение языка. Это всего лишь инструмент программиста. Такой же как клавиатура. Опытный программист за долгие годы изучает не меньше десятка языков, а кто то и намного больше. Ничего такого в этом нет.
C++, Java, Go, PHP, Python.
Это популярные в вебе языки, выстроенные по принципу "сначала самый эффективный, но сложный в разработке и поддержке код, в конце - самый легкий в написании и правке, но наименее эффективный".
Нет никакого смысла писать весь проект на С++ - затраты будут дикими, и тебя просто обгонят конкуренты, состряпавшие работающий чуть хуже аналог из говна и палок.
Нет ничего страшного в проекте на Python - пока он не ложится под нагрузкой, и переписать часть сервиса на С++ оказывается дешевле, чем покупать новые сервера.
Вот так и получается смешение языков. Благо принципы эффективного общения отдельных сервисов друг с другом давно известны, и что у сервиса "под капотом" - совершенно не играет роли в общей архитектуре.