Ogólnie to trochę wróżenie z fusów, ale kilka rzeczy do przemyślenia napisałem poniżej:
Z podobnych języków do C/C++ Rust wydaje się ostro nabierać popularności. Java do backendu jest używana przede wszystkim w dużych korpo. Swift chyba na backend w ogóle się nie używa, Kotlin prędzej.
Na backendzie Python jest całkiem popularny (choć o "optymalności" to sobie w Pythonie za dużo nie porozmawiamy póki co), JavaScript/TypeScript trochę go gonią z uwagi na node.js i podobne, i jest jeszcze PHP, który z jakiegoś powodu jeszcze jest używany.
Więc trochę kwestia co tam dalej chcesz robić w przyszłości. Jeśli interesuje Cię ściśle "backend, algorytmy i rozwiązywanie problemów w optymalny sposób", to brzmi jakby język był trochę drugorzędny vs algorytmika. W zasadzie musisz wymaksować SPOJa + przedmioty algorytmiczne + najlepiej architekturę oprogramowania, a potem szukać pracy w jakimś dużym korpo. Tam pewnie Java będzie dominująca, a C++/Rust w kolejce.
W mniejszych firmach stawiam bardziej na Python, PHP, JavaScript, C#, etc. No i tam będzie mniej problemów algorytmicznych do rozwiązania.
Weź też pod uwagę, że tworząc oprogramowanie to tych "ważnych optymalnych algorytmów" to jest tak 1% kodu (bardzo ważne 1% kodu, ale nadal 1%), a cała reszta to "okablowanie" + luźna logika korzystająca najczęściej z gotowych bibliotek. Więc do póki nie wyrobisz sobie opinii jako "algorytmiczny troubleshooter" w dużej firmie (albo jako konsultant), to musisz to 99% kodu też umieć dobrze naklepać.
Ostatecznie możesz spróbować każdy z tych języków przez powiedzmy tydzień czy dwa, a potem wybrać ten, który najbardziej do Ciebie przemawia i się na nim skupić przez dłuższy czas. W swojej karierze i tak będziesz języki zmieniał co jakiś czas, i pewnie dojdziesz do poziomu eksperckiego w przynajmniej kilku z nich (a potem je będziesz stopniowo odkładał i zapominał).