programmare e' una questione di forma mentis: ci vuole purtroppo tanta, tanta pratica e da un certo livello in poi anche un certo studio teorico e un buon approccio da ingegnere.
ma in due parole, potremmo riassumere in: per programmare occorre essere SCHIFOSAMENTE ORDINATI. (e ve lo dico mentre mi sbraccio per rimanere a galla nei vestiti sparsi per camera mia

)
occorre identificare per bene il problema, dividerlo in sottoproblemi se e' troppo grande, stabilire delle dipendenze tra questi sotto-problemi, vedere quali parti si ripetono, quali devono resistere alle cannonate, quali porteranno via la maggior parte della cpu-time, come vanno organizzate tra loro, quale flusso(/flussi) seguirà il tutto, ecc...
poi scrivere il codice e' una faccenda un po' diversa e riguarda piu' che altro conoscere le capacità dello strumento: se devo memorizzare TOT dati, uso un vettore a dimensione fissa? un vettore non fisso (una lista)? normale o double linked? un vettore associativo? una hashtable? uno stack? oppure una matrice? o un albero? oppure mi appoggio a un database esterno? e se sto usando C piuttosto che Java, cosa mi conviene? ogni scelta ha i suoi pregi e difetti!
... comunque, ormai appurato che ci sono almeno 5 programmatori nel forum, magari scrivi due righe la prossima volta che ci vuoi mettere su le mani
... e comunque... adesso per lavoro programmo un modulo di kernel UNIX, in C.