Mi ci metto anch'io:
@darmen, non so che competenze di programmazione hai, ma io conosco C++, Java, Python, JavaScript, e qualche altro (tra cui anche Ruby, l'elenco sarebbe decisamente lungo ) e ti dico:
un buon linguaggio per imparare le base della programmazione e' un linguaggio che, innanzitutto, ti aiuta il piu' possibile a non fare errori, e ti obbliga a fare le cose in un certo modo.
Ora:
1) il 75/80% dei linguaggi di programmazione (ne esitsono centinaia, forse migliaia!) hanno una sintassi stile C/C++, quindi se un linguaggio usa questa sintassi, e' una buona cosa. Ci sono varianti a questa sintassi, ad esempio begin ... end invece che { ... }, ma questo non sposta di un millimetro il concetto di blocco di istruzioni che sta alla base di questa sintassi. Questo esclude Python
.
2) la gestione della memoria e' sempre stato un aspetto complicato da capire da parte di chi e' alle prime armi. E non e' nemmeno ben compreso da chi ha n-mila anni di esperienza. Un linguaggio basato su Garbage Collector e' un gran passo avanti: evita di scontrarsi con problematiche inizialmente non fondamentali (passaggio parametri by reference/by value, puntatori, allocazione/deallocazione statica/dinamica, stack/heap, deadling reference, buffer overrun, scrittura in allocazioni di memoria non permesse, memory leak, segmentation fault, ... ed altre n-mila rogne). Questo elimina C/C++ (e il C sta al linguaggio macchina come l'automobile sta' ai bulloni che la compongono! E' evidente che non hai mai scritto un programma in C e in Assembler o Assembly per i nuovi puristi)
.
3) un'altro problema e' il concetto di tipo/classe. Linguaggi che forzano l'uso del tipo corretto nelle espressioni, utilizzare il numero corretto di parametri, e del tipo corretto, quando si chiama una funzione o un metodo, e' cosa buona e giusta. Troppa flessibilita' e liberta', se non controllata, e' disastrosa e fonte di errori subdoli che una persona inesperta difficilmente potrebbe risolvere senza aiuto. Questo elimina Javascript e Ruby
.
4) un buon linguaggio di programmazione deve aver dimostrato la sua efficacia, potenza espressiva, flessibilita', gia' da qualche anno. Questo implica anche che ci sono libri, forum, tutorial, disponibili per qualunque esigenza. Questo elimina tutti i linguagetti che continuamente nascono, aggiungendo solo aria fritta. Semplificare la sintassi e' come dipingere una stanza di rosso invece che di bianco. Se la stanza ha i muri storti, storti rimarranno!
.
5) il linguaggio di programmazione non e' sufficiente per programnare. Servono altri due oggetti fondamentali: una libreria di funzioni predefinite, necessarie per interagire con le risorse del computer (filesystem, grafica, audio, video, mouse, tastiera, ....), ed un ambiente di sviluppo, detto IDE (Integrated Development Environment) che assista nella scrittura del codice. Notepad e' sufficiente si e no per i primi 5 minuti che uno ha a che fare con un nuovo linguaggio programmazione. Passati i primi 5 minuto, risulta TOTALMENTE INADATTO.
Cosa resta? Java!
Java e' un ottimo linguaggio:
1) e' tipato,
.
2) usa il garbage collection,
.
3) e' ad oggetti,
.
4) supporta la programmazione procedurale, con un piccolo e banale trucco di complessita' insignificante
.
5) ha una libreria di base molto ampia
.
6) c'e' una sterminata quantita' di librerie di terze parti per fare qualunque cosa
.
7) altrettanto sterminata e' la bibliografia disponibile
.
8 ) e' multipiattaforma
.
9) e' molto richiesto nel mondo del lavoro, al contrario di Python, Ruby, ed anche C/C++
.
10) esiste da un bel po' di anni
.
11) e' usato con successo lato server in complessi siti web. Ci sono applicazioni decisamente sofisticate scritte in Java che non hanno niente da invidiare, in fatto di performance, ad applicazioni scritte in C/C++.
.
12) e' gratuito
.
13) ci sono IDE gratuiti piu' che ottimi
Quindi, @Gelix91, il consiglio finale, a meno di specifiche necessita', e': studia Java.
Ma questa e' solo una parte (e pure sencodaria) della storia!
La parte pricipale e' la seguente:
1) imparare a programmare NON E' conoscere uno specifico linguaggio di programmazione, ma come convertire un'idea, un algoritmo, un comportamento in qualcosa che possa essere eseguito da un coputer. Questo e' legato ad un concetto piu' generale che non il linguaggio di programmazione, ma al paradigma di programmazione; ad esempio la programmazione ad oggetti e' uno dei tanti paradigmi di programmazione.
Una volta che hai capito come funziona il la programmazione ad oggetti, scrivere in C++, Java, Python, Ruby, JavaScript, ... e' solo una questione di sintassi (ed ammenicoli vari).
2) NON SI IMPARA A PROGRAMMARE a base di tutorial su internet! SI STUDIA SUI LIBRI. Vabbe' ci sono i libri in formato PDF, comunque sempre libri sono! Ma un un PDF non ha minimamente la comodita' di un libro di carta, su cui puoi anche prendere appunti (io lo faccio, scrivendoli in matita ).
Perche' su un libro? Banale: chi ha scritto il libro ha previsto un percorso che va dal capitolo 1 all'appendice, secondo una certa logica, facendo evolvere il lettore un concetto alla volta, secondo un ordine ben definito.
La scelta del libro e' importante tanto quanto la scelta del paradigma di programmazione e del linguaggio che lo implementa! Non tutti gli autori sono bravi a scrivere libri.
Quindi come fare?
C'e' il forum, ovviamente, ma una soluzione banale e' anche la seguente:
vai su Amazon.co.uk, e cerchi un libro con un titolo che potrebbe rappresentare quello che vuoi imparare (strettamente in inglese, ovviamente ).
Generalmente i libri in testa alla lista dei risultati sono delle ottime scelte.
Alcuni testi sono delle vere e proprie bibbie:
1) un programmatoer C non puo' non aver studiato sul libro di Kernighan & Ritchie,
2) un programmatore C++ che si rispetti non puo' non aver studiato sul libro di Stroustrup.
3) un pogrammatore Java non puo' non aver studiato sul libro di Gosling!
@ramcrack: non ti conviene fare certe affermazioni. Potrebbero risultare controproducenti.