Gia, la scelta e' difficile.... si distinguono i linguaggi di programmazione un po' per il modo di pensare che bisogna adottare usandoli.
I piu classici sono quelli funzionali, dove un programma e' visto come funzioni concatenate ad altre funzioni. (Pascal, Scheme, ...).
Ad es. definisci:
funzione quadrato (x * x)
funzione cubo (x * x * x)
Allora potrai computare (cubo (quadrato (x))) ecc...
Poi ci sono i linguaggi oriantati ad oggetti (OOP) (come Java, C++), dove un programma è un indsieme di oggetti e messaggi.
Es: definisci la classe degli oggetti 'cane' e la classe 'gatto'
Instanzializzi un oggetto
cane fido = new cane();
gatto lilly = new gatto();
e poi siccome hai definito che chi appartiene alla classe cane sa abbaiare (ha un metodo definito che e' come dire una funzione definita: 'abbaia'), potrai fare:
fido.abbaia();
dove ad es. l'output sara una stringa su schermo 'Bau'.
Altro es:
cane.faiScappareGatto(lilly);
...
divertente
Gli OOP sono un po' piu evoluti e sono fatti in modo che tu possa modificare caratteristiche degli oggetti che programmi in modo da non dover riscrivere mezzo programma...
Tu ad es. puoi avere la classe 'gatto'. Poi a un certo punto nel gioco che stai programmando, vuoi inserire un oggetto 'gattoRobot'. E' un gatto? piuo o meno. Non un gatto, ma avra gli stessi metodi, miagolare, mangiare e camminare... Bhe gli OOP permettono di affrontare situazioni del genere senza dover fare copia e incolla su tutte le funzioni del vecchio gatto tradizionale e rinominare le nuove come funzione_xGattoRobot()...
Oppure hai la classe 'Auto' in una gerarchia dove hai sottoclassi 'Fiat', 'Alfa', 'Daewoo'. Automaticamente tutte le sottoclassi, hanno i metodi della superclasse Auto.
Ad es. possono saper suonare il claxon quando dici unAuto.suona(), sanno marciare quando dici auto1.avanza(3) //dove 3 sono metri ad es.
Bhe non e' facile spiegare i benefici della OOP... Dico che e' strano iniziare a programmare ad oggetti, perche non sembra neanche di fare informatica.... Ma se hai un filo di esperienza su linguaggi un po' meno moderni, passando a Java ad es., diventa molto divertente... Poi per chi ha usato C, e' ancora piu facile Java, molti concetti sono presenti in entrambi i linguaggi...
Purtroppo non posso consigliare nessun libro italiano perche' io ho studiato su
Head First Java che è in inglese
PS: per chi volesse approfondire sui paradigmi di programmazione (quelli che io ho chiamato 'modi di pensare'),
http://it.wikipedia.org/wiki/Paradigma_di_programmazione