Я бы раскидал примерно как-то так:
1. C# - разработка прикладного ПО под Windows. Т.е. если не предполагается поддержка других ОСей, то .NET в лице C# мне представляется наиболее удобным решением.
2. Java - прикладное ПО, к которому предъявляется требование кроссплатформенности (чтоб пахало и под Win, и под Linux, и под MacOS, причем без необходимости перекомпиляции).
3. C++ - разработка системного ПО; ПО с высокими требованиями к производительности (чтоб ни один процессорный такт не пропал впустую); мб также разработка ПО, напрямую работающего с API своей ОС и максимально независимого от сторонних библиотек (Java- и .NET-приложения требуют наличия соответствующих сред выполнения).
Сразу отмечу, что это грубо-приближенное деление. В реальной жизни следует также учитывать технологии, библиотеки и инструменты, доступные для каждого из яыков, опыт разработки на них и т.д. и т.п.