Progettazione e disegno algoritmo

di il
3 risposte

Progettazione e disegno algoritmo

Ciao a tutti.
Sto entrando ora nel mondo della programmazione, per ora mi sto dilettando col C.
Nello scrivere programmi, sento la necessità (oltre ovviamente ad essere buona pratica di programmazione) di scrivermi e segnarmi in modo chiaro l'algoritmo.
Vorrei chiedere a voi esperti come gestite la definizione dell'algoritmo, per trarne spunto e trovare la procedura più comoda ed efficiente.

Io per ora faccio una bozza in linguaggio italiano su carta, modi scaletta. Mi sono però reso conto che non è molto comodo, sopratutto al crescere del programma. Pensavo quindi ad un Flowchart. E' la soluzione migliore, oppure ne esistono altre? Che programmi usate? Perchè ho provato a dare un'occhiata e su linux l'unico appena decente mi sembra yed, ma in genere mi sembrano programmi macchinosi che richiedono molto tempo per disegnare i grafici (stare li a selezionare la figura, allargarla perchè spesso il testo non ci sta tutto dentro nel perimetro, selezionare poi la fraccia, collegare una estremità della freccia a una figura e l'altra estremità all'altra figura, etc etc....)

Altro aspetto: a che livello di dettaglio/astrazione vi spingete? Scrivete proprio tutti i particolari oppure usate una minima astrazione?

Come avrete capito sono alle basi, e al di là del linguaggio di programmazione, devo imparare come gestire un progetto, come imparare a "lavorare con la programmazione".
Se avete dei consigli, o anche dei testi/risorse/siti per imparare le buone pratiche della gestione della programmazione, ve ne sarei grato.

Grazie!

3 Risposte

  • Re: Progettazione e disegno algoritmo

    Sicuramente utilizzare la maniera classica, cioe' rappresentare il tuo algoritmo con un flowchart, potrebbe essere una condizione abbastanza ottimale nel momento in cui scrivi codice semplice.

    Imparare bene il metodo per creare algoritmi e' anche una buona cosa, perche' allena la mente ad essere piu' ordinati e logici nello sviluppare software.

    Il punto e' che nel momento in cui inizi con la programmazione bella tosta, cioe' quando arrivi a realizzare codice lungo e complesso, piu' che un algoritmo disegnato con i diagrammi di flusso, imparerai a sviluppare senza questo tipo di aiuto, anche perche' risulterebbe abbastanza complicato e complesso seguire un algoritmo su un programma con molte linee di comando nel momento in cui dovessi decidere di fare una modifica oppure piu' modifiche per migliorarne la sua efficienza.

    Ti faccio un esempio:
    1 CASO) Devi scrivere un programma in C per la risoluzione algebrica di un'equazione di secondo grado. In tal caso va benissimo svilupparti prima un algoritmo con il metodo dei flowchart... abbastanza semplice ed intuitivo.

    2 CASO) Devi scriverti un software complesso in C, magari che possa essere nella maniera piu' possibile ed affidabile simile a software commerciali di grafica3D, oppure di wordprocessing, oppure ancora di gestione e sviluppo sistemi al superenalotto con tutte le regole esistenti... Insomma qualsiasi cosa possa venirti in mente di lungo, mooolto lungo.
    Ecco che in tal caso svilupparti prima un algoritmo diventa ancora piu' lungo e tedioso, molto meglio avere la mente libera e sviluppare direttamente, cercando di risolverti i vari problemi che si pongono sulla programmazioni di volta in volta in maniera ordinata.

    Per sintetizzare tutto: va bene se impari a sviluppare algoritmi con i diagrammi di flusso, ma nel tempo dopo che avrai imparato a programmare per bene, ti renderai conto che tale metodo risultera' quasi inutile.

    PS. se vuoi veramente imparare a programmare per bene, devi fare tanta esercitazione direttamente sul campo: impare benissimo ad utilizzare il tuo IDE preferito, impara benissimo ad utilizzare il tuo linguaggio di programmazione preferito, cercando di scoprirne i trucchi di programmazione per diversi casi, evedrai che l'algoritimo ti servira' a poco perche' avrai acquisito nel tempo una tale esperienza da non trarne piu' alcun vantaggio sullo sviluppo di algoritmi.
  • Re: Progettazione e disegno algoritmo

    In realtà proprio ora non ho mai scritto flowchart, se non abbozzare a penna i passi fondamentali per ottenere quello che voglio. Anche se all'università insegnano che è una buonissima norma quella di fare prima il disegno dell'algoritmo, e che non si inizia subito a scrivere codice.

    Io ora sto lavorando su un programma da poco meno di 1'000 righe in C, in realtà non è tanto complesso, però capita che mi perdo, che non ho sotto mano la visione ad alto livello dell'algoritmo, astratta.
    Più che altro, se devo apportare anche delle piccole modifiche o aggiunte all'algoritmo, devo mettermi a riflettere in quale punto dell'algoritmo introdurre quelle 2 righe di codice aggiuntive che mi servono. Oppure che effetto fa se io modifico una parte piuttosto che un'altra.
    In tali casi, avere una astrazione e vedere l'algoritmo "dall'alto" invece che sporcato di tutti i dettagli implementativi che il programma ovviamente ha, è sicuramente utile.

    Più che altro sono convinto che se progettato bene e con l'algoritmo ben stampato in testa, si fanno molti meno errori. Perchè poi capita sicuramente che il programma non funziona subito alla prima esecuzione, bisogna vedere che errore da (oppure perchè il risultato non è quello atteso), andare a capire dove potrebbe essere l'errore, passare in rassegna tutto il codice... e oltre ad essere una perdita di tempo, personalmente dopo un po' infastidisce anche....
    Mi piacerebbe magari metterci qualche minuto in più, scrivere un buon codice, ben strutturato, chiaro e pulito, e diminuire le volte in cui bisogna andare alla ricerca di errori. Oppure semplicemente migliorare la ricerca, rendendola più semplice.

    Sicuramente l'esperienza conta tantissimo.

    Io però ora non ne ho, ho perso alcuni giorni e dovrei consegnare un progetto universitario per massimo venerdì (o meglio domani, giovedì). Però sono ancora in alto mare, perdo molto tempo per analizzare e correggere alcuni errori che magari avrei potuto evitare scrivendo l'algoritmo senza errori, in modo corretto.
    Questo però vale in genere, ogni volta che mi si presenta una situazione del genere, in cui devo scrivere del codice corretto e ben scritto, in un lasso di tempo breve... e quindi avere un qualche strumento/aiuto esterno del semplice codice scritto potrebbe essere utile.

    Se invece l'unica è farsi esperienza, e non esistono ausili in tal senso... beh, vorrà dire che porterò pazienza e cercherò di fare più esperienza possibile

    Anche se, quello che mi frega, è che basta qualche mese senza programmare che poi ci si dimentica molto di quanto si era appreso con sudore...
  • Re: Progettazione e disegno algoritmo

    Giustamente come mi pare d'aver capito, non avendo mai scritto diagrammi di flusso devi assolutamente imparare a crearli e saperli gestire nella maniera piu' approfondita possibile... quindi va benissimo iniziare con l'implementare il tuo codice in C sviluppando prima gli algoritmi.

    La metodologia di utilizzare i flowchart, ritengo sia la migliore, dal mio punto di vista, non mi pare di conoscerne altri metodi. Ps. scrivere a parole l'algoritmo prima ancora di disegnare lo schema con i flowchart pero' no, dai... gia' il flowchart ti permette la giusta astrazione come base di partenza.

    Detto questo, sapere a priori che devi consegnare un lavoro all'Uni entro giovedi/venerdi e sei ancora in alto mare, ti offre un vantaggio ed uno svantaggio:

    - (VANTAGGIO) hai la scusa per lavorarci tutto stanotte e magari anche domani senza uscire di casa, cosi anche se commetti errori, oppure non completi il lavoro, comunque hai imparato tantissime cose durante queste 24ore di full-immersion. Hai fatto semplicemente l'esperienza di cui sopra.

    - (SVANTAGGIO) hai preso il lavoro con molto ritardo e sicuramente sara' difficilissimo portarlo a termine.

    Per il fatto che potresti dimenticare tutto sulla programmazione dopo due oppure tre mesi che non programmi piu', Beh! Dipende tutto da te... nel senso che se veramente ti appassiona programmare, sara' molto difficile che dimentichi le cose perche' ti rimangono dentro come quando impari ad andare in bici, poi non dimentichi piu'.

    Fattelo dire da uno che ha programmato per anni, nei piu' svariati linguaggi di programmazione e che dopo aver abbandonato tutto per un decennio, oggi dopo che ho ripreso questo percorso, mi e' bastato neanche un mese per ricordarmi quasi tutto. Ma io ci lavoro per non meno di 8/9 ore al giorno tutti i giorni della settimana.

    Ho ripreso anch'io a programmare con la scusa dell'Universita', dopo 10 anni che non maneggiavo piu' codice. Prima di questo conoscevo linguaggi ad alto livello come: Basic e vari suoi dialetti, Pascal, Javascript, un pochino di assembler per CPU ad 8bit, e pseudo linguaggi come HTML, CSS.
    All'Universita' ho imparato ad utilizzare il C++ in un solo mese.

    Mio primo progetto per l'esame d'informatica: Battaglia navale in grafica con algoritmo d'intelligenza che sfruttava il metodo Montecarlo. Guarda... cio' studiato per 15 giorni pieni senza dormire, praticamente, e andavo avanti solo a caffe' e sigarette.

    Quando sono arrivato all'esame, pur non avendo portato a termine il progetto, ero arrivato a 7500 linee di codice, il prof. mi accetto' comunque tutto e alla fine presi 28. Che dire... meglio di questo alla mia eta', non potevo chiedere di piu'.
Devi accedere o registrarti per scrivere nel forum
3 risposte