Skoro znasz Javę i C++ to powinieneś znać różnice. Są np takie:
- programy w Javie wymagają JVMki do odpalenia, programy w C++ kompilują się do samodzielnej binarki,
- w Javie masz z automatu sprawdzane dużo rzeczy jak np puste referencje (null), indeksy tablic, typy obiektów przy rzutowaniu, nie masz arytmetyki wskażników,
- C++ nie sprawdza tych rzeczy domyślnie, więc łatwo sobie strzelić w stopę,
- C++ kompilujesz pod konkretną platformę sprzętową, ale też i programową, stąd masz wymagania nie tylko co do sprzętu, ale i systemu operacyjnego,
- w Javie zwykle piszesz pod konkretną wersję Javy i tylko to cię interesuje, nie ma znaczenia na jakim procesorze jest odpalany program czy jakie biblioteki są zainstalowane w systemie,
- Java jest językiem zarządzanym, więc mamy GC, które robi pauzy - pauzy powodują, że np Javy nie stosuje się w dynamicznych grach,
C++ jest używany tam, gdzie trzeba mieć pełny dostęp do RAMu i móc mazać sobie po nim dowolnie, tam gdzie trzeba unikać narzutu pamięciowego VMki, tam gdzie pauzy spowodowane GC mogłyby zaburzyć pracę systemu (czyli np oprogramowanie jakichś kontrolerów), etc W aplikacjach biznesowych nie trzeba się martwić takimi rzeczami, więc Javka jest tam idealna. Podobnie programowanie na Androida - smartfony są dość wydajne, narzut Javy jest z nawiązką wynagrodzony przez łatwość kodzenia.
Z lotu ptaka, różnice między platformą Java, a .NETem są niewielkie. Główna różnica polega na pewnym zespawaniu .NETa z Windowsem. Windows zawiera często wbudowaną już jakąś wersję .NETa, .NET instaluje jakieś tam swoje usługi w Windowsie, daje dostęp do czysto Windowsowych funkcjonalności, etc