> но до сих пор бэкэнд и фронтэнд пишутся на разных языках и никто с этим ничего так и не сделалФронтенд исполняется в браузере. Браузеры долгое время умели исполнять только Яваскрипт. Другой язык, например Питон, они исполнять не умели. Чтобы исполнять Питон - надо было написать интерпретатор Питона на Яваскрипте, и грузить его в браузер каждый раз в месте с Питоновским скриптом. Чтобы исполнять Ява-байткод - нужно было написать Ява-машину на Яваскрипте и грузить её каждый раз в браузер вместе с байткодом. Чтобы исполнять С++ код, скомпилированный для х86 - надо было написать на Яваскрипте x86 эмулятор и грузить его каждый раз в браузер вместе с бинарным кодом. Это всё неудобно и громоздко, люди предпочли просто использовать Яваскрипт.
Вот сравнительно недавно появился этот Webassemly, в который можно компилировать из других языков. Но, опять таки, нужно разработать хорошие компиляторы в него из компилируемых языков, адаптировать под выполнение в браузере разные популярные библиотеки на тех языках. Для интерпретируемых языков, типа Питона, надо скомпилировать интерпретатор Питона в Webassembly. Адаптировать Питон для браузера - сама по себе непростая задача, а ещё нужно дождаться достаточного развития компилятора С в Webassembly, так как интерпретатор Питон написан на С. С Явой тоже сложно. Надо либо скомпилировать Ява-машину в Webassembly, либо разработать компилятор из Ява-кода в Webassembly вместо Ява-байткода.
Вот поэтому на фронтенде в основном Яваскрипт.
> Но блин. Почему нельзя и то, и то написать как единую программу на одном языке?
Можно же. И фронтенд, и бэкенд можно писать на Яваскрипте.