Domanda imparare a programmare

Stato
Discussione chiusa ad ulteriori risposte.

matt sbianzo

Utente Silver
25 Aprile 2013
84
11
5
59
salve ragazzi, sono uno studente appassionato di programmazione però non me la cavo proprio bene con programmi abbastanza complessi.
a parte html e css che non sono linguaggi propriamente di programmazione e per me è stato semplice studiarli(alla fine un pò di sintassi e fai tutto, escludendo layout e grafica professionale). Io ho studiato java come primo linguaggio a livello scolastico in un itis indirizzo informatico e il php per lavorare con i database, finchè devo fare cose semplice va bene lo faccio e fine, ma quando devo provare a fare programmi complessi e utilizzare la oop diventa un pò un casino. Diciamo che scrivo codice e vado a tentavi, cosa che mi vergogno e so che non va bene, quindi vorrei evitare questo mio metodo del tutto sbagliato!
Sapete come migliorare la mia tecnica nel programmare? Avete dei consigli o dei manuali per esempio sul problem solving e sulla oop?
Probabilmente se mi mettessi a studiare un altro linguaggio di programmazione avrei sempre delle difficoltà, invece se uno conosce bene i principi della programmazione e ha buone basi matematico-logiche può imparare qualsiasi cosa...
A settembre vado a fare scienze informatiche e spero che mi aiuti a ragionare di più. Saluti :)
 
Come libri ti posso consigliare: "Head Fist Java", "Java fo Dummies" e "Thinking in Java" che coprono più o meno tutto.
Per quanto riguarda problem solving ti potrei dire che il modo migliore per evitare di incorrere in errori è mantenere il codice "pulito". Per questo ci sono ebook appositi come "Clean Code" e "The Clean Coder". Per il problem solving vero e proprio credo che l'unica cosa da fare sia il debugging e poi capire in che punto il programma incorre in un errore..
Per migliorare il proprio stile ci sono testi come "The Pragmatic Programmer".

Devi però tener conto che tutti i libri che ho sopra citato sono ebook a pagamento in lingua inglese.

Spero di esserti stato di aiuto per quel poco che so, buona fortuna!
 
Ultima modifica:
Claudio De Sio Cesari Home Page

Il resto è esperienza.

P.S: Non è vero nulla che chi programma è anche matematico o comunque deve per forza conoscere la matematica come le sue tasche. Essere un matematico non significa saper programmare ed essere programmatore non significa essere un matematico. La matematica se la sai è meglio ma non è che senza di essa non sarai mai un bravo programmatore. Certamente, essere bravi in matematica significa anche avere una logica più forte al problem solving e agli algoritmi ed un'efficienza maggiore poiché se per un algoritmo conosci qualcosa della matematica che ti può aiutare, farai quasi sicuramente un algoritmo più pulito.

Praticamente, essere molto bravi in matematica ti darà quella logica che altrimenti la dovresti ottenere col tempo programmando e sbatterti sulla programmazione.
 
Ultima modifica da un moderatore:
Ni: saper programmare e' come avere in mano un cacciavite.

Fino a che devi svitare le classiche viti con la testa a taglio, non ti serve niente altro.
Nel momento in cui le viti hanno la testa a croce, ecco che il tuo cacciavite non ti basta piu', ma ti serve uno a croce.
Ma se devi svitare una vite che si trova su un satellite in orbita, e tu ti trovi dentro una tuta spaziale, con i guantoni, ecco che magari devi progettare un nuovo tipo di cacciavite.

Avere un buon background matematico, non ti serve per programmare, fino a che devi fare cose semplici, ma ti serve per affrontare i problemi piu' complessi, quelli che il programmatore, diciamo medio, non e' in grado di affrontare per la mancanza proprio di quelle conoscenze di matematiche. Ma sopprattutto quando devi inventarti una soluzione ad un problema mai affrontato prima.

Ad esempio, per fare paginette html ti basta conoscere le 4 operazioni.
Gia' se dentro una paginetta html ci devi mettere un diagramma, ti serve un po' di piu'.

Se devi progettare una libreria per manipolare una nuova struttura dati, progettata da te, ecco che ti serve avere un'infarinatura di algebra astratta, di teoria della complessita' computazionale, ecc.
La prima per sapere quali sono le operazioni che puoi fare su quella struttura dati, la seconda per implementare le operazioni nel modo piu' efficiente possibile.

La pura esperienza non basta: serve anche lo studio.


Ma tanto per dare un'idea, in questo momento sto studiando per implementare un programmino da linea di comando per inserire in un'imnagine un digital watermark (che non e' quella sciocchezza di aggiungere un logo o una scritta ad un'immagine gia' esistente).

Per fare questo, le conoscenze che mi servono sono:

- algebra lineare/autovalori, autovettori, ...
- statistica/distribuziond uniforme, normale, media, deviazione standard, ...
- teoria dei codici a correzione di errore/distanza di hamming, codifica tellis...
- trasformata di fourier: FFT, DCT, DFT
- wavelets, ...
- cosa sono e come si convertono gli spazi colore: RGB, HSV, ...
- infarinatura di fisiologia umana, almeno per quanto riguarda la vista, ...
- struttura di un file png, jpeg
- ecc

E questo solo per iniziare ... poi c'e' tutta una serie di teoremi, definizioni, assiomi, corollare, ... che si devono conoscere per poter leggere i testi (libri ;) ) di settore.


E questo solo per implementare un semplice programmino da linea di comando in cui passi il path di un'immagine ed una stringa. Immaginarsi per inventare un nuovo tipo di watermarking.
 
Quando succedono queste cose entra in gioco la voglia di apprendere. A volte basta informarsi per arrivare a risolvere il problema. Esempio stupido affrontato da me anni fa: stavo provando a fare un "giochino" 2d (mai finito, nemmeno abbozzato), ad un certo punto mi ero bloccato perché non sapevo come creare la gravità. Alla fine mi è bastata qualche ricerca di google per capire il concetto, eccetera, per poi cosi applicare ciò che avevo imparato al mio "gioco".

Poi certo, se parliamo di programmi matematici, li è tutt'altra cosa, li la matematica e la programmazione hanno un punto di incontro molto forte, altrimenti nulla è impossibile, basta avere la voglia di apprendere cose nuove.

Recentemente, ho giocato un free to play (Unturned) che, da quello che ho letto sul web, è stato sviluppato da un 16enne. Ora, per quanto questo possa essere un genio, stendo a crederci che abbia già studiato: quaternioni, eccetera.
 
Stato
Discussione chiusa ad ulteriori risposte.