Incontri tematici su GNU/Linux ed il Software Libero - programmazione per la scuola secondaria - ● Introduzione ● Perché la programmazione? ● Strumenti ● Metodologie differenti ● Linguaggi
Introduzione ● Rilevazione dell'esigenza ● Formalizzazione della problematica ● Creazione dell'algoritmo ● Implementazione dell'algoritmo ● Creazione del programma eseguibile (software) ● Test del programma
Creazione del programma eseguibile Codice sorgente int main(int argc, char *argv[]){ printf(“abcd...”); … “Compila zione” Program ma eseguibi le
Perché programmare? ● Formare tecnici preparati! ● Trovare lavoro ● Preparare agli esami universitari
Dubbi ● Il linguaggio che insegno oggi, domani...? ● Tecnologie differenti ● Specializzazione Ruoli differenti ● Scuola: forma mentis ● Mondo produttivo: specializzazione
Per associazione d'idee ● Per guidare un'auto posso rivolgermi ad una scuola guida. ● A scuola guido una “Bianchina". ● Imparo ad usarla e con essa sostengo l'esame. ● La motorizzazione mi rilascia una patente di guida per una particolare categoria di veicoli. ● Non per poter guidare la “Bianchina"!
Quindi perché? ● Il linguaggio di programmazione: non come fine dell'insegnamento, ma come mezzo per apprendere ● Sviluppare le capacità di ragionamento ● Sviluppare ed affinare l'approccio ai problemi (problem solving)
Paradigma ● Insieme di strumenti concettuali forniti da un linguaggio di programmazione per la stesura di programmi. ● Definisce/determina il modo in cui il programmatore concepisce e percepisce il programma. ● Il paradigma imperativo (e tutti i suoi sotto-paradigmi) e l'approccio più diffuso nella programmazione. ● Il programma viene inteso come un insieme di istruzioni che possono essere pensate come un ordine che viene impartito.
Strumenti Mappe concettuali (top-down/bottom-up): ● Freemind ● vym Diagrammi a blocchi: ● OpenOffice Draw ● Dia cond AB VF
Strumenti UML (Unified Modeling Language) What? Linguaggio di modellazione e specifica basato sul paradigma della programmazione ad oggetti (Object Oriented) ● Dia ● Umbrello (per KDE) ● Graphor Generazione automatica a partire dal codice: autodia, eclipse, ecc.
Esempio UML
Metodologie Purista ● Editor ● Compilatore/interprete ● Esecuzione
Consapevolezza Approccio migliore per chi inizia: ● Scrittura del codice separata dalla ● compilazione del codice separata dalla ● correzione degli errori separata dal ● debug del programma
Strumenti Editor da terminale: ● vi ● emacs ● nano e grafici: ● gedit ● tea ● leafpad ● nedit
Metodologie Intermedio ● Semplice IDE ● Segnalazione degli errori sull'editor (dopo la comp.) ● Strumenti di debug (non sempre disponibili) Compilazione integrata Esecuzione integrata
Intermedio Soluzione migliore per chi: ● ha già un base di conoscenze ● non rischia di confondere l'ambiente di sviluppo con il linguaggio di programmazione ● vuole avere un controllo più preciso del codice ● sviluppa programmi non banali ma neanche molto complessi
Strumenti IDE: ● geany ● anjuta ● codelite
Metodologie Avanzato/Professionale ● IDE con funzionalità avanzate ● “Precompilazione” – Documentazione integrata ● Esecuzione e Debug integrato ● Gestione dei TO DO ● Generazione documentazione ● Generazione UML Eclipse - NetBeans
IDE avanzato - “precompilazione”
IDE avanzato - debug
Avanzato Soluzione migliore per chi: ● conosce bene la programmazione ● deve gestire progetti di sviluppo complessi (molti file, molti progetti differenti, o in collaborazione con un team) ● ha bisogno di strumenti per gestire documentazione, versioni, refactor del codice sorgente ● necessita di un sistema di debug avanzato anche da remoto
Linguaggi I classici: ● C (gcc) ● Pascal (Free Pascal) ● Basic (basic256) Un po' diversi: ● Java (OOP) ● Python
Linguaggi Scripting ● Shell (bash, sh, c) ● Perl RAD (Rapid application develpment) ● Gambas (basic) ● Lazarus (pascal) ● Boa constructor (Python)
Ora un po' di esempi su... ● Editor ed IDE ● Gambas ● Python