Se uno deve partire da zero, deve prima di imparare un linguaggio qualsiasi imparare cosa è la programmazione in senso stretto, quella normale e quella a oggetti.
dopodiché inizia a studiare un linguaggio che supporti entrambi, imho, e forse è meglio il C++ in questo caso. Ma ne C++ ne Java, se non parti dalla base base, ti aiutano a capire cosa cazzo significa puntatore a un oggetto o puntatore a un registro di memoria, stack, fifo, socket, ecc. ecc.
Se uno vuole imparare da zero, meglio cominciare con i macro-concetti che van bene per ogni linguaggio, poi si inizia. A quel punto il linguaggio è relativamente importante, il linguaggio di programmazione è lo strumento che usi per fare una cosa che sai già fare, e quindi impari il linguaggio solo per conoscere uno strumento di lavoro, niente di piu'.
Parallelismo: se vuoi diventare un pilota d'aereo, non basta che ti insegnino come si porta il Cessna 152, se non sai cos'è la teoria del volo che sta alle spalle, ti schianti al primo atterraggio ammesso che hai avuto così tanto culo da riuscire a rullare senza sbattere contro la torre di controllo
