Buongiorno a tutti. Penso che questo post sarà un pò lungo, quindi per facilitarne la lettura e comprensione, faccio una premessa.
Da diversi anni studio programmazione, nei ritagli di tempo. Poi sono riuscito ad organizzarmi meglio ed ho inizato a studiare tutto il programma previsto negli esami univeristari in informatica. Al momento, le mie conoscenze sono da secondo anno di informatica (fine corso). Nella pratica, sono iscritto al primi anno di informatica, pur essendo avanti con la preparazione. Per confermare la mia preparazione da autodidatta, ho deciso di dare tutti gli esami previsti, in una sessione, ottenendo il massimo voto in ognuno (programmazione, architettura dei calcolatori, analis1/2). Posso ritenermi soddisfatto di questo. Questo mi motiva a continuare così. Vengo ora al problema centrale: la programmazione. Come detto prima, "programmo" da diversi anni, dove per programmo intendo studio a menadito un linguaggio di programmmazione con relativa libreiria standard( finora c, c++, c#) e svolgo degli esercizi del tipo: algoritmi (implementazione di già esistenti oppure quelli che si trovano nella challenge di programmazione), esercizi proposti dai libri da cui studio, per verificare le conoscenze aquisite da ogni capitolo del libro. Quindi, per intenderci, saprei spiegare benissimo le regole di gni linguaggio che ho studiato, fare dei semplici esempi, ma...Ma non quello a cui miro veramente, ovvero la scrittura di un grosso progetto.
Questo problema in realtà è indipendente dal linguaggio, sono sicuro che qulcuno dirà che mi sono messo a studiare i lunguaggi più complessi esistenti che sono riservati a un'elitè di esperti ecc..., ma d'altronde, questo non è un passatempo, ma un investimento, che un giorno dovrà portarmi ad un serio lavoro (è così che si diventa esperti in qualsiasi attività umana). Vengo al dunque del problema: supponiamo io voglia realizzare un "grosso softaware", ridimensionato al mio ambito didattico; per esempio, se volessi realizzare un photoshop, che magari contine 1 milione di righe di codice, il mio photoshop ne avrà 3 mila. Al di là della conoscenza teorica richiesta per lo studio degli algoritmi di image processing, il problema sta nell'organizzazione del porprio programma. Supponiam io sappia tutt ciò che serve per realizzare un software del genere. Il problema è: come lo faccio? Per esempio se dovessi relizzarlo in c, sarebbe più semplice perchè ogni implementerei delle funzioni che fanno tutto ciò che serve, e una semplice interfaccia grafica. Diciamo lo 0.001% di ciò che è Gimp. Il problema grosso si presenta se volessi lavorare in c++. Questo perchè non saprei come organizzare il programma in classi e quindi oggetti, gerarchie di ereditarietà, quali sono le funzioni che dovranno essere ridefinite in calssi diverse, quindi il meccanismo del polimorfismo, quali classi devono scambiarsi informazioni ecc... Sinceramente, non avendolo mai fatto, non so elencare tutte le difficoltà che avrei. IL fatto che io sappia la sintassi e le regole del c++ ( o qualsiasi linguaggio OOP), che io sappia tutti gli algoritmi necessari, non mi premette di craere un prgramma del genere, seppure ridotto. Tra l'aver fatto svolto piccoli esercizi di OOP mirati a qualcosa di particolare e il saper organizzare un software su una cooperazione tra classi, metodi ecc.. c'è un divario. La prima domanda che vi faccio è: come colmare tale divario? Seconda domanda: come progettare un programma ( si intende sempre piccolo 2-3mila righe), ovvero craere dei "blocchi" di codice che cooperin tra di loro, che possano essere realizati indipendentemento l'uno dall'altro e che abbiano questa proprietà: se un "blocco" contiene un errore, questo non si propaghi negli altri "blocchi" quando quesi interagiscono con quello "difettoso" e sopratutto, se il programmatore si accorge di tale errore e lo risolve, questo non ne generi involontariamente in un altro blocco(per questo ho richiesto prima l'indipendenza).
Vi ringrazio per la pazienza nel leggerlo (anche se non è tanto scorrevole) e nell'aiutarmi.