Aggiungo anche la mia esperienza personale.
Io iniziai da Java, ma al contrario tuo partivo da zero. Java è un linguaggio che ti "sbatte" da subito in faccia la OOP oltre che la sua verbosità; ma l'ho amato anche per questo.
Java:
class Hello {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Questo Hello World racchiude già tante cose, che vedrai in molte pagine del libro che seguirai (se inizierai da Java): la parola chiave
public
, la parola chiave
static
il tipo di ritorno del metodo (void) e il concetto di classe.
Insomma, diciamo che come detto da Andretti la OOP la si nota subito.
Diciamo che le tue 135 righe di Python in Java sarebbero probabilmente il doppio, diciamo (forse con l'introduzione di lambda e altre cose è tutto più compatto, ma non è come in Python).
Per le GUI: in Java hai due scelte, fondamentalmente. Swing, che è un pò "vecchiotta" e JavaFx, che è quella che verrebbe consigliata. Volendo ci sono altre alternative, ma non fanno parte del JDK, dovrai scaricarle a parte.
Non conosco bene C++, ma posso dirti che mi sono sempre pentito di non averlo studiato da subito e come primo linguaggio. Non è semplice, noti un pò meno la OOP rispetto a Java/C# in quanto puoi usarlo anche come procedurale come detto da ife98. E' molto potente ed è complesso, anche come "dimensione"; per questo secondo me se lo affronti e lo impari bene come "primo linguaggio" ti crei una base molto solida (poi nella vita da programmatore, sinceramente, sarà difficle che potrai dire "conosco bene 3 linguaggi"... di solito ne conosci bene 1 o 2 e ne usi molti o ti adatti più o meno rapidamente).
Qui come dice anche Andretti direi le Qt; poi con uno strumento come Qt Creator non è affatto male lavorarci, a quanto ho visto.
C è un linguaggio che amo moltissimo. L'ho studiato però dopo Java. Passare da Java a C è stato un pò traumatico a "causa" di alcuni cocetti: in Java hai i riferimenti agli oggetti, non manipoli però la memoria come fai in C con i puntatori... e l'allocazione è decisamente più complicata, per non parlare della gestione delle stringhe (che non esistono come tipo a sè, e sono effettivamente una sequenza di caratteri) e altre cose ancora.
Secondo me è un linguaggio imprescindibile se vuoi capire meglio come funzionano le cose, e penso sia anche difficile non "amarlo" (e, tra parentesi, anche dare uno sguardo ad Assembly e a tutto il mondo poi delle architetture (in particolare x86 e x64) aiuta molto a comprendere meglio le cose).
Qui per le GUI è un pò diverso. Ci sono le GTK+2 e altre alternative, ma dipende cosa vai cercando, e di cosa necessiti; di certo è una gestione più complessa di quella di Java e forse anche di C++, considerando sturmenti come Qt Creator.
Poi volendo ci sono i linguaggi più recenti come Rust e Go. Go l'ho guardato pochissimo, non mi esprimo in merito; è comunque "semplice" da apprendere rispetto a un linguaggio come C++ o come Rust. Ha una curva di apprendimento ridotta.
Rust appunto ha una curva di apprendimento ben più ripida. Non è propriamente pensato per applicazioni grafiche, dovrai sempre scaricarti lib esterne.
Così, come parere personale, non ti consiglierei Rust all'inizio, potrebbe scoraggiarti, e ti mette di fronte a concetti che non vedi negli altri linguaggi sopra citati; lo lascerei come successivo.
Ho scritto troppo, come al solito... ?