|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2001
Messaggi: 291
|
Imparare a programmare - Consigli pratici per evitare il volo dalla finestra
Salve gente
![]() 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 ![]() ![]() Spero di essere stato chiaro (cosa che dubito fortemente ![]() |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
|
Quote:
![]()
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03 |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Personalmente ho cominciato a programmare in basic col c64. Poi mi sono "evoluto" col pascal ( funzioni, procedure, oggetti, tutta roba che il basic del c64 non supportava ).
Da lì sono passato allo studio dell'architettura x86, tutto assembly e tante ore a provare e riprovare, sbagliare e correggere. Poi vabbè, l'università e tutto il resto, con un pò di elettronica che mi ha aiutato a capire ulteriormente il perchè un pezzo di silicio sia in grado di ragionare. Ma imho il tuo problema è la logica algoritmica, cioè quella parte simil-matematica che trova una soluzione per un problema. In questo senso potrebbe venirti incontro un libro tipo il Cormen, che è 90% teoria, ma fa vedere pure in pseudocodice come mettere in pratica la teoria. Però ti consiglio di fare qualche esempio più sostanzioso. Ad esempio cos'è della tombola che proprio non ti va giù? Perchè vedi questa netta separazione tra teoria e pratica? In fondo un algoritmo ti dice quali passi seguire per risolvere il problema tramite piccoli elementari passi. Il codice è una traduzione dell'algoritmo in un linguaggio ben determinato, ma non è che si discosta così tanto. Oddio, ci sono libri che sembrano trattati di geometria più che libri d'informatica. Ne ho visti parecchi in vita mia e alcuni sono veramente sconclusionati ed incapaci di insegnare alcunchè. Però penso che l'approccio ultrapratico sia il migliore. Cioè tu parti con un libro tipo questo http://web.econ.unito.it/terna/infsi...othink_ita.pdf che ti dà molto sul fronte pratico e ti fa vedere come implementa determinati algoritmi. Dovrebbe a quel punto esserti chiaro come passare dalla teoria alla pratica. |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Oct 2001
Messaggi: 291
|
Credo che tu abbia centrato il mio problema, credo sia proprio la logica algoritmica che mi manca o con la quale ho difficoltà.
Stavo realizzando questa estate (dopo aver letto il libro da te proprosto, Pensare Informatico) il gioco della tombola in Python. Il problema principale non è come realizzare un ciclo for (che in Python mi pare sia solo For in) o una lista o altro, il problema che avevo era proprio quello di realizzare il pensiero sotto forma di codice. Ho chiesto aiuto su un forum e vedevo che le risposte e i suggerimenti che mi venivano dati erano molto semplici, tant'è vero che qualcosa avevo fatto ma poi ho abbandonato. Credo che il mio problema principale è che penso troppo difficilmente. Per farti capire: se devo realizzare 4, anziché pensare al classico 2 + 2, penso a 1 + 1 + 1 + 1 o a 72 - 68. Credo che da lì nasca il mio principale errore. Perché per realizzare l'estrazione dei numeri ho dovuto cercare su internet un codice che mi permetteva di generare numeri casuali (e questo era anche nel libro) ma dovevo togliere anche quelli che già erano stati estratti (cosa che nel testo non era presente). In Java ad esempio non c'ho proprio provato ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Scrivi un roguelike.
ps. non ti spiego cos'è nè come devi fare per cominciare perché il punto è proprio questo: hai di fronte un problema di cui non conosci la soluzione e devi risolverlo improvvisando. Quindi cominci a cercare su internet cos'è un roguelike, ne scarichi uno magari, vedi come funziona, scegli un linguaggio e provi a fare lo stesso, ricercando ogni volta qual'è lo stato dell'arte per risolvere un determinato problema e arrivando a dei compromessi quando è troppo complicato. Il ciclo è più o meno questo: 1) OMG cazzofigata la cosa X! La voglio rifare! 2) Ti documenti. 2a) Se puoi, rubi il codice fatto da altri. 3) Metti a punto il tutto secondo le tue esigenze. 4 .. Infinito) Risolvi i bug. In ambito professionale funziona allo stesso modo, ma il punto 1 non lo decidi tu.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Oct 2001
Messaggi: 291
|
Perfetto!
Un'altra curiosità per quanto riguarda lo studio del/dei testo/i: dite che è meglio sempre leggerlo/studiarlo tutto o imparare le basi e poi iniziare a sperimentare e in caso di necessità consultarlo? |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Metti mano al calcolatore da subito!
Non puoi imparare a suonare la chitarra leggendo un libro e poi comprando la chitarra, devi prenderla in mano e cominciare a fare le note. Idem per il pc. hai python installato? Bene, tieni il libro a portata di mano e comincia a giocare. Parti con programmi semplici (che ne so, una calcolatrice, un programma che cerca parole in un testo, ecc...) e aumenta la difficolta'. Il miglior modo per imparare a ragionare e' ragionare! Quindi sbattiti sui problemi! Cerca di dimostrare il teorema di pitagora o risolvi un esercizio sul lancio del proiettile e magari poi traduci la soluzione in python. Insomma... sveglia il tuo cervello che sta dormendo! ![]()
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli! ![]() |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Oct 2001
Messaggi: 291
|
![]() ![]() ![]() Prima stavo rivedendo tutta la roba che avevo studiato di java che nel dettaglio era: 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. Forse se avessi fatto meno teoria e più pratica da subito non mi ritroverei in questa situazione ![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
|
Quote:
![]() devi fare esercizi su esercizi man mano che vai avanti, non puoi studiarti un linguaggio in modo completo senza aver fatto nulla e "solo" studiando tutto un libro.
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03 |
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Oct 2001
Messaggi: 291
|
come lo sapevo che stavo sbagliando
![]() Domani riprendo gli appunti sperando che devo fare solo un ripasso e poi passare alla parte pratica ![]() |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Aug 2001
Città: Milano
Messaggi: 402
|
Io ho imparato (ho imparato ?) partendo con la classica calcolatrice, che vedendola troppo complicata (avevo 11 anni), è diventata un semplice :
Danni A, Danni B, C = A*B, Fine del programma (e la prima volta è anche andato in errore.. ![]() Man mano ho incrementato la difficolatà e l'unico medo per farlo è, come ha detto shinya, porsi un problema e risolverlo. Personalmente non ho mai aperto un libro / manuale dalla prima pagina per arrivare all'ultima, semplicemente lo sfogliavo per capire come affrontare il problema che avevo davanti. E' normale che le prime volte programmi da schifo, sfruttando il 5% del linguaggio e il 200% del tuo cervello visto che non puoi utilizzare qualcosa di cui non ne conosci neanche l'esistenza ma francamente metodo migliori non ne ho visti ed è inutile riempirsi la testa di nozioni senza un fine. Al lavoro ne ho visti tanti che sembravano la Treccani ma all'atto pratico facevano pena (e parlo al passato perchè durano poco). Non sei un programmatore se conosci un linguaggio (quello è solo lo strumento per raggiungere un fine), lo diventi quando raggiungi il fine...e se possibile nel modo migliore. Un consiglio : Java non è proprio per chi parte totalmente da 0. E' meglio utilizzare un linguaggio con meno direttive / possibilità anche perchè non devi imparare un linguaggio ma la logica che sta dietro la programmazione. Il C (quello classico) può andar bene o meglio ancora il Pascal (roba senza classi, oggetti ecc. ecc) e non pretendere di creare da subito programmi ma semplicemente algoritmi senza un contesto particolare. Prova a ordinare un'insieme di dati, a leggere un file di testo e scriverlo al contrario o ha visualizzarlo a video parola per parola ecc. ecc.
__________________
Phenom 2 555 X2@X4@3,6Ghz 1.33v Asus M4A785TD-V EVO 4GB Team Group Elite 1333Mhz AC Freezer Xtreme Corsair 450VX Samsung SyncMaster T220 Hd Seagate 500x2(Raid 0) Barton 2500+@3200+ vcore 1.550 (liquid cooled@+9° T.A.) Asus A7N8X-E Dlx 1Gb Ram Dual DDR Hd Maxtor SATA 160x2(Raid 0) GeXCube 9600XT Eizo 19P Le belle cose hanno un inizio e una fine...tutto il resto è la normalità |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
|
Quote:
![]()
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03 |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Se per cominicare/imparare a programmare hai bisogno di lavorare/smanettare/risolvere robe ad alto livello di astrazione per sentirti stimolato allora forse è il caso di utilizzare un linguaggio più moderno ed espressivo, ad alto livello di astrazione... prova con brainfuck ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Aug 2001
Città: Milano
Messaggi: 402
|
In C (e in qualsiasi altro linguaggio) puoi fare qualsiasi cosa, tutto dipende quanto vuoi sbatterti. Puoi utilizzare il VB per disegnarti una finestrella a video e non sai neanchè come e perchè avviene o puoi fartelo in C richiamando direttamente il GDI. Credi che il browser che stai utilizzando sia scritto in Java o in C++ ?
Volendo esistono anche RAD in grado di crearti applicazioni senza scrivere una sola riga di codice ma finchè utilizzi quella roba non impari a programmare. C'è da sbattersi e quindi aver voglia. Lui, e in generale chiunque sia ai primi passi con la programmazione, deve imparare la logica e non c'è modo migliore che partire con linguaggi di quel tipo che offrono ben poco.
__________________
Phenom 2 555 X2@X4@3,6Ghz 1.33v Asus M4A785TD-V EVO 4GB Team Group Elite 1333Mhz AC Freezer Xtreme Corsair 450VX Samsung SyncMaster T220 Hd Seagate 500x2(Raid 0) Barton 2500+@3200+ vcore 1.550 (liquid cooled@+9° T.A.) Asus A7N8X-E Dlx 1Gb Ram Dual DDR Hd Maxtor SATA 160x2(Raid 0) GeXCube 9600XT Eizo 19P Le belle cose hanno un inizio e una fine...tutto il resto è la normalità |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Programmare significa risolvere problemi (lo so: è il massimo dell'ovvietà).
Il che NON ha nulla a che vedere coi dettagli di basso livello.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Aug 2001
Città: Milano
Messaggi: 402
|
Che intendi con "dettagli di basso livello" ?
__________________
Phenom 2 555 X2@X4@3,6Ghz 1.33v Asus M4A785TD-V EVO 4GB Team Group Elite 1333Mhz AC Freezer Xtreme Corsair 450VX Samsung SyncMaster T220 Hd Seagate 500x2(Raid 0) Barton 2500+@3200+ vcore 1.550 (liquid cooled@+9° T.A.) Asus A7N8X-E Dlx 1Gb Ram Dual DDR Hd Maxtor SATA 160x2(Raid 0) GeXCube 9600XT Eizo 19P Le belle cose hanno un inizio e una fine...tutto il resto è la normalità |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quelli che ti costringe a imparare un linguaggio come il C, visto che non ha costrutti sintattici di livello molto elevato.
Oppure, per fare un altro esempio e visto che le hai citate, lavorare con le GDI anziché con un framework di più alto livello. Un RAD è uno strumento comodo, nato apposta per semplificare la vita allo sviluppatore, consentendogli di raggiungere gli obiettivi prefissi in meno tempo. Allo stesso modo sono nati linguaggi di livello più elevato, che consentono di essere più produttivi rispetto a linguaggi come il C.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#18 |
Junior Member
Iscritto dal: Feb 2012
Messaggi: 12
|
Secondo me si deve prima sapere cos'è un algoritmo, prima di scrivere un programma bisogna sapere con che metodo risolvere il problema.
Ho capito davvero cos'è un algoritmo quando a scuola ci diedero da fare, come esercizio, tutti i passaggi per risolvere un equazione di secondo grado. Senza scrivere programmi o altre cose, si doveva illustrare passo per passo tutte le operazioni che si dovevano eseguire. Prima si fa l'algoritmo, che sarebbe la strategia risolutiva, e poi si passa a linguaggio ![]() |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Aug 2001
Città: Milano
Messaggi: 402
|
Bhe in realtà non gli ho certo consigliato di interfacciarsi alle librerie di Windows (smette prima di iniziare), era la risposta a tecno789 per fargli capire che in C puoi far tutto.
Occhio che il C non è un linguaggio di basso livello eh, per essere precisi è un linguaggio di 3° generazione. Tutti quelli con costruttori, ereditarietà, ambienti RAD ecc. ecc. sono di 4° livello e hanno sicuramente i loro vantaggi ma anche delle problematiche in più che possono pesare su chi fa i primi passi e poi siamo sinceri...che vantaggio ha uno che non sa far nulla dai costruttori ? Diventa fuffa che confonde le idee. Ben vengano i RAD (utilizzai il primo C++ Builder della Borland ed era una figata) ma se non sai programmare non impari certo da li.
__________________
Phenom 2 555 X2@X4@3,6Ghz 1.33v Asus M4A785TD-V EVO 4GB Team Group Elite 1333Mhz AC Freezer Xtreme Corsair 450VX Samsung SyncMaster T220 Hd Seagate 500x2(Raid 0) Barton 2500+@3200+ vcore 1.550 (liquid cooled@+9° T.A.) Asus A7N8X-E Dlx 1Gb Ram Dual DDR Hd Maxtor SATA 160x2(Raid 0) GeXCube 9600XT Eizo 19P Le belle cose hanno un inizio e una fine...tutto il resto è la normalità |
![]() |
![]() |
![]() |
#20 | ||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quote:
Quote:
Giusto per essere chiari: il classico editor di testo + compilatore + linker + tu-che-devi-lanciare-l'eseguibile è di gran lunga una soluzione peggiore di un RAD che una volta lanciato ti presenta già un progetto nuovo (oppure ti basta qualche click per File / Nuovo progetto / OK per crearne uno), con l'editor pronto ad accogliere il codice, e col tasto Play per lanciare tutto... Quote:
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:34.