Io penso che il modo migliore per imparare a programmare sia di impegnarsi a scrivere qualcosa che abbia un minimo di utilita' pratica.
Se fai solo i programmi di esempio alla fine di ogni capitolo di un libro ti concentri solo su quell'argomento, mentre se cominci a fare un programma un po' piu' ampio sei costretto ad affrontare un insieme di problematiche piu' vasto e la cosa ti risulta sicuramente piu' utile.
In generale penso che non sia fondamentale avere un professore che spieghi, certo se c'e' e' meglio, ma poi lo stile di programmazione e' una cosa molto personale, che non puo' essere insegnata.

Per quanto riguarda i dubbi, credo che le possibilita' siano due: chiedi a qualcuno che ne sa piu' di te (basta anche un amico programmatore, oppure ti leggi le discussioni degli altri nei forum e nei newsgroup) e poi ti scrivi dei programmi molto semplici per cercare di risolvere eventuali dubbi. (Ad esempio la differenza di funzionamento tra funzioni simili, oppure il costo degli algoritmi, ecc..)