Imparare a programmare - Consigli pratici per evitare il volo dalla finestra

Sergei

Utente Attivo
115
1
Salve gente
icon_smile.gif


Probabilmente questa domanda sarà stata fatta milioni di volte e con molte risposte. Ho vagato in giro per il web ma non ho trovato nulla che mi potesse interessare però.

Avrei una domanda molto semplice per tutti quelli che sanno programma (non importa assolutamente in che linguaggio).
La questione è facile: come si impara a programmare?
Voi come avete imparato?

Mi spiego. Posso prendere un testo che mi insegni la programmazione in Java, C++ o altro, posso seguire un corso etc, eppure, nonostante questo io trovo difficoltà nel capire come si possa imparare sul serio a fare un programma (se pur molto semplice). Entro ancora meglio nel dettaglio, almeno per quanto riguarda la mia persona.
Ho sempre voluto imparare a programmare, più che altro per passione niente di particolare, ma non ho mai avuto quella dedizione negli anni passati di mettermi lì e provare e riprovare. Negli ultimi tempi ho deciso di riprendere un po' questo discorso e mi sono avvicinato prima a Python e poi a Java. Python mi è stato molto d'aiuto nel capire i concetti basi (ha una sintassi chiarissima) poi però sono passato a Java grazie al quale, stranamente, mi sono sentito a mio agio a vagare per le classi (sarà stato grazie a Platone
stordita.gif
?). Ho provato diversi testi e alla fine ho utilizzato quello di Claudio De Sio che mi è semprato quello più adatto a me. Ebbene, ora entra in gioco il mio problema. Posso anche imparare tutto il libro, ma per me resta sempre teoria
icon_frown.gif
Vedo solo concetti, posso anche risolvere gli esercizi proposti, ma per me resta solo teoria che sul serio non riesco a capire come possa essere messa in pratica. E sottolineo che non è colpa del testo, perché ne ho provati altri, ho provato anche Pensare Informatico (che almeno è stato utilissimooo nel farmi entrare nell'ottica della programmazione). E' chiaro che un testo come un corso non potrà mai affrontare tutto quello che c'è da sapere. Il mio dilemma è quindi: come si fa a rendere pratico i concetti appresi? Avevo pensato di realizzare semplici giochi come la tombola o la scopa (forse quest'ultimo è un po' più complesso) ma ho serie difficoltà a comprendere il meccanismo, ecco perché ero in cerca di consigli pratici prima di abbandonare definitivamente questa esperienza che ho già messo da parte da alcuni mesi.
Spero di essere stato chiaro (cosa che dubito fortemente
icon_mrgreen.gif
)
 

Roberto Buonanno

Amministratore
1,721
257
Passare dalla teoria alla pratica è un problema non da poco. Nelle scuole e università passi anni a risolvere esercizi basati solo ed esclusivamente su algoritmi di ordinamento o risoluzione di problemi di matematica. Cose che poi, nella vita reale, non servono a nulla.
Io che da oltre 15 anni lavoro a fasi alterne con la programmazione ti consiglierei uno degli sviluppi più interessanti e pratici. Creati un sito web generato da database, magari in PHP e MySQL. Visto che ti piace Java, troverai che la sintassi di PHP non è molto diversa.

Come alternativa, puoi fare lo stesso con Visual C# Express e SQL Server Express, strumenti gratuiti di Microsoft. Se lavori con questi ultimi imparerai anche a creare applicazioni per Windows, che è un'altra bella attività.
 

feanor981

Utente Attivo
103
5
Visto che hai imparato Python, il sito web magari fallo con quello.
Eviterai di apprendere le cattive abitudini che prendono molti con il PHP.

In generale però devi trovare un problema che vuoi risolvere e cercare di risolverlo con un tuo programma: se non sbatti la testa contro un problema pratico, molte cose non le imparerai mai.

PS: dissento però completamente dal fatto che gli algoritmi che insegnano all'università non servano a nulla. Che serva più pratica sono d'accordo, tant'è che mi costrinsero a realizzare sistematicamente dei progettini per poter passare gli esami di informatica, in modo da farci fare le ossa.
Ma algoritmi e strutture dati sono fondamentali, le loro mancate conoscenza ed utilizzo sono una delle ragioni per cui tanti programmatori scrivono programmi fatti con i piedi, reinventando la ruota tutte le volte che c'è da risolvere un problema e risolvendolo poi con una soluzione solitamente inefficiente (è tosta trovare persone che, intuitivamente, riscoprano le stesse soluzioni di gente come Dijkstra e Knuth...).
 

Sergei

Utente Attivo
115
1
e se avessi un problema di approccio al problema?
Mi spiego. Mettiamo che devo realizzare la tombola, tanto per dirne una, ho la vaga idea che nel realizzare qualcosa io penso troppo difficilmente. Se devo fare un calcolo che mi dà 4, la cosa più semplice da fare sarebbe 2 + 2, io invece vado sempre sul difficile, nel senso che penso di più a fare 1 + 1 + 1+ 1 o 58 - 54. Se fosse così c'è qualche testo che mi puoi aiutare o qualche consiglio? Vorrei evitare di spararmi insomma :D

EDIT: ah, per quanto riguarda l'apprendimento di un linguaggio, dite che conviene studiare tutto il testo a disposizione o imparare le basi e sperimentare e in caso di necessità ritornare al testo per apprendere quello che può servire in quel dato momento?
 

feanor981

Utente Attivo
103
5
e se avessi un problema di approccio al problema?
Mi spiego. Mettiamo che devo realizzare la tombola, tanto per dirne una, ho la vaga idea che nel realizzare qualcosa io penso troppo difficilmente. Se devo fare un calcolo che mi dà 4, la cosa più semplice da fare sarebbe 2 + 2, io invece vado sempre sul difficile, nel senso che penso di più a fare 1 + 1 + 1+ 1 o 58 - 54. Se fosse così c'è qualche testo che mi puoi aiutare o qualche consiglio? Vorrei evitare di spararmi insomma :D

La capacità di analisi di un problema e decomposizione funzionale in sottoproblemi è difficile da imparare solo leggendo un libro. Devi applicarti al problema, decomporlo in sottoproblemi più piccoli, capire come risolverli e poi ricomporre il tutto.
Per quanto riguarda problematiche generali e ricorrenti, potrebbero esserti utili dei libri sui "pattern", che sono soluzioni generalmente adottate a problemi di ingegnerizzazione del software ricorrenti.
E' importante acquistarne uno che non si limiti a elencare i pattern ma ne spieghi il razionale e la filosofia, in modo che tu possa estenderne l'applicazione ai tuoi casi reali.

Maggiori info: Design Patterns - Wikipedia, the free encyclopedia

EDIT: ah, per quanto riguarda l'apprendimento di un linguaggio, dite che conviene studiare tutto il testo a disposizione o imparare le basi e sperimentare e in caso di necessità ritornare al testo per apprendere quello che può servire in quel dato momento?

La seconda che hai detto. Ma devi avere le basi ben chiare.
 

Sergei

Utente Attivo
115
1
ti ringrazio tantissimo :)

Io in Java avevo imparato a fare (se pur a livello teorico e pratico in base agli esercizi ovviamente): Classi ed oggetti, i metodi, le variabili, i costruttori, gli identificatori, i tipi di dati, gli array, gli operatori, i costrutti, l'incapsulamento, l'ereditarietà, il poliformismo, l'overload e l'override, il super, le classi innestate, poi stavo per imparare l'eccezioni e le asserzioni e ho mollato. Sono stato un'idiota a mollare? :D
 

Roberto Buonanno

Amministratore
1,721
257
PS: dissento però completamente dal fatto che gli algoritmi che insegnano all'università non servano a nulla. Che serva più pratica sono d'accordo, tant'è che mi costrinsero a realizzare sistematicamente dei progettini per poter passare gli esami di informatica, in modo da farci fare le ossa.
Ma algoritmi e strutture dati sono fondamentali, le loro mancate conoscenza ed utilizzo sono una delle ragioni per cui tanti programmatori scrivono programmi fatti con i piedi, reinventando la ruota tutte le volte che c'è da risolvere un problema e risolvendolo poi con una soluzione solitamente inefficiente (è tosta trovare persone che, intuitivamente, riscoprano le stesse soluzioni di gente come Dijkstra e Knuth...).

Le singole materie algoritmi , logica e strutture dati / basi di dati sono fondamentali.
Esercitarsi invece sempre e solo sulla risoluzione di problemi matematici non porta nessun vantaggio nella vita reale di molti programmatori. Mi piacerebbe un'università che desse esempi più pratici o si accordasse con le aziende per far sviluppare in gruppo applicazioni vere. Così poi con gli introiti si potrebbero mettere computer più moderni dei Vic 20 nei lab delle facoltà :)
 

feanor981

Utente Attivo
103
5
ti ringrazio tantissimo :)

Io in Java avevo imparato a fare (se pur a livello teorico e pratico in base agli esercizi ovviamente): Classi ed oggetti, i metodi, le variabili, i costruttori, gli identificatori, i tipi di dati, gli array, gli operatori, i costrutti, l'incapsulamento, l'ereditarietà, il poliformismo, l'overload e l'override, il super, le classi innestate, poi stavo per imparare l'eccezioni e le asserzioni e ho mollato. Sono stato un'idiota a mollare? :D

Perché dici che sei stato un'idiota?
Hai messo comunque fieno in cascina, quello che hai imparato sono mattoni necessari. Conoscere i mattoni non vuol dire saper progettare una casa, però è una condizione necessaria :-)

Al di là della sintassi, i concetti che ci stanno dietro sono la cosa più importante e che potrai riciclare in qualunque linguaggio.
Se ti interessa l'OOP, un'introduzione che secondo me è a dir poco eccellente è questa della Apple (parla di Objective C ma è valida anche per C++, Java etc): https://developer.apple.com/library...n.html#//apple_ref/doc/uid/TP40005149-CH1-SW2
 

Sergei

Utente Attivo
115
1
no, intendo ad aver abbandonato anziché fermarmi con la teoria e mettere in pratica il tutto :)

Grazie per il link
 

gaiapuffo

Utente Attivo
310
7
Passare dalla teoria alla pratica è un problema non da poco. Nelle scuole e università passi anni a risolvere esercizi basati solo ed esclusivamente su algoritmi di ordinamento o risoluzione di problemi di matematica. Cose che poi, nella vita reale, non servono a nulla.
Io che da oltre 15 anni lavoro a fasi alterne con la programmazione ti consiglierei uno degli sviluppi più interessanti e pratici. Creati un sito web generato da database, magari in PHP e MySQL. Visto che ti piace Java, troverai che la sintassi di PHP non è molto diversa.

CHE ******!Frequento l univeristà secondo semestre del secondo anno....vedi la differenza fra chi fa università e chi nn la fa!!!!Si dice che nn serve a nulla fare certi algoritmi e sapere algoritmi quali ordinamento ecc.....Saper calcolare il tempo di esecuzione di tali algoritmi oppure creare algoritmi da 0 che logicamente nn è di certo una cosa semplice è importante e spieghero in seguito perchè....Per quel che ho fatto fino ad adesso ho una grande conoscenza hardware,linguaggio mips e intel,linguaggio java,c,c++,database,uso del jdb,sistemi operativi...Voglio far notare questo piccolo particolare che crea la differenza fra chi sa e chi alla fine nn sa..tu credi di saper programmare..per carità magari lo sai fare a livello medio e questo nn l ho metto in dubbio..alla fine per saper programmare se qualcuno ti insegna diventi a buon livelli in 6 mesi all incirca 7 ore al giorno e fai un anno e mezzo sei già un buon programmatore...Però vi è differenza fra chi è smanettone e chi nn l ho è(cioè fra chi scrive imparando poche nozioni)Sai cosa è l'ingegneria del software???Nel caso nn lo sapessi bene nn potrai mai fare grandi progetti di grandi dimensioni...sai per caso come funzionano all'incirca gli strumenti hardware...in questo caso nn potrai mai realizzare un gioco...sai per caso cosa serve il corso più difficile di tutti chiamato ALGORITMI E STRUTTURE DATI? Serve a saper scegliere la librerie,conoscere l algoritmo e creare l'algoritmo..per farlo devi avere conscenze hardware e imparare le varie tecniche....tu utilizzi librerie a casaccio...e per questo potrai far solo programmi per il commerciante di via rovigo ma nn altro..ti faccio un esempio metti di usare una determinata libreria che ci mette 40 secondi per fare l operazione e ne esiste un altra che ci mette 20 secondi...moltiplica tale costo per un programma di grandi dimensioni diventa immenso...metti inoltre che nn esiste la libreria che vuoi...il tuo algoritmo scritto male anche con un computer i5 risulta lento......
cosa serve concoscere sistema operativo ecc....tu quando scrivi un file lo compili e basta metti che ne devi compilare 10 probabilmente tu li ricompilerai di nuovo sprecando tempo...tanti piccoli particolari...certo nn dico di certo che se uno poi studia informatica 2 anni nn sa nulla e come programmatore fa schifo certo c'è differenza....................
La differenza che l'università ti crea in modo professionale in modo che tu posso andare a lavorare all'eletronic games...anche se logicamente il tuo livello quando esci nn è paragonabile a quello di tali professionisti...d'altra parte il livello degli smanettoni come sinceramente se dici tali cose mi sembri è molto lontano..Anche se alla fine la maggior parte staranno nella loro città e faranno cose di livello molto molto inferiore

scusate gli errori di ortografia.

---------- Post added at 15:07 ---------- Previous post was at 15:04 ----------

Un altra cosa che mi è venuta in mente..metti di dover realizzare un database veramente di grandi dimensioni...certo se lavori per piccole aziende nn capiterà mai...metti però di doverlo fare..se tu sai solo usare l sql senza sapere cosa vi è dietro..nn potrai mai fare un database decente...perchè le tue query ci metterano mesi prima di finire
 
Ultima modifica da un moderatore:

Roberto Buonanno

Amministratore
1,721
257
CHE *******!!!!!!!!!!Frequento l univeristà secondo semestre del secondo anno....vedi la differenza fra chi fa università e chi nn la fa!!!!Si dice che nn serve a nulla

Caro mio, all'uni ci sono passato prima di parlarne ma tu mi confermi solo una cosa: non insegnano l'educazione. Sappi che nella vita la volgarità ti mette sempre dalla parte del torto, perfino se hai la verità in tasca. In questo caso hai pure torto marcio perché non l'ho scoperto io che l'università italiana è tutta teoria e poca pratica. Comunque questa me la segno: solo chi impara a programmare all'uni sa creare db efficienti, query veloci e applicazioni ottimizzate. Sei un genio.
 
Ultima modifica:

Blume.

Moderatore
Staff Forum
Utente Èlite
24,325
11,198
CPU
I7 8700K
Dissipatore
Silent loop B-Quiet 360
Scheda Madre
Fatal1ty Z370 Gaming K6
HDD
3 Tera su Western Digital 3 Tera su Toshiba p300 3Ssd da 500Gb
RAM
Corsair Vengeance DDR4 LPX 4X4Gb 2666Mhz
GPU
Msi Gtx 1080Ti Gaming Trio X
Audio
Integrata
Monitor
SyncMaster P2470HD
PSU
Evga Supernova 650W G2
Case
Dark Base 700 B-Quiet
Net
100/50 Ftth Fastweb
OS
Windows 10Pro. 64Bit

gaiapuffo

Utente Attivo
310
7
Be scusate per il linguaggio,anche se sinceramente nn credo proprio di aver utilizzato termini molto volgari. Se questa la considerate volgarità ad alto livello,cercherò di moderare molto di più i termini. Forse si fa tanta teoria perchè devi imparare molte..molte cose in poco tempo. Si no nn avrebbe neanche senso neanche farla. Certo io adesso nn mi ricordo a memoria qualsiasi scrittura di java,magari mi dimentico a volte tipo settimana scorsa a cosa serviva argc e argv.Questo però avviene perchè appunto in un anno e mezzo ho preso conoscenze a livello di architettura degli elaboratori,sistemi operativi,java,c,c++,database,matematica,statistica,algebra,ingegneria software...Certo che se mi fossi messo 6 mesi ha fare solo java ora il mio livello sarebbe molto più alto...e cosi vale per tutti gli altri campi.Soltanto che questo viene fatto in seguito. Se potessi andare a lavorare e ti dicono ti diamo 5 mesi dove nel frattempo ti impari il linguaggio e fai pratica,sarebbe bello. Per quanto riguarda database,nn sono super esperto ma sinceramente almeno che tu nn abbia il database oracle che ti otimizza la meglio da solo le query...devi ottimizzarle tu da solo e per far questo devi sapere come funziona la memoria e come funziona il compilatore database..quindi scusa ma rido io:)))..cmq questo vale solo nei casi in cui devi fare database importanti. Non voglio essere offensivo,solo espresso parere con ammetto termini nn idonei
 

Roberto Buonanno

Amministratore
1,721
257
mente tu ridi, io amministro server linux con database da gigabyte e conconcorrenza di centinaia di migliaia di utenti da oltre 10 anni, ma non me l'hanno insegnato all'uni. All'uni ho imparato pascal, java, c e tante cose molto utili nella teoria dell'informatica, oltre che ammazzarmi di matematica. Però la pratica delle ottimizzazioni, e lo vedrai quando ci picchierai il muso se ci lavorerai, la scopri solo tuffandoti nel lavoro vero. Cmq la prima cosa che devi imparare a scuola è l'umiltà, se inizi dicendo all'amministratore del sito che ti ospita che dice cazz... , marchi abbastanza male :)
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili