📘 Capitolo 1 – Introduzione
1. Introduzione
Benvenuti nella guida ufficiale ai linguaggi L0, L1 e L2, un ecosistema didattico pensato per chi vuole imparare a programmare partendo da una sintassi semplice, intuitiva e visualizzabile direttamente nel browser.
Questo manuale nasce con lo scopo di:
Accompagnare studenti, docenti e autodidatti nell’apprendimento graduale della programmazione
Offrire un linguaggio base (L0) che cresca fino a strutture complesse (L2)
Fornire uno strumento di scrittura, esecuzione e salvataggio di codice interamente basato su web
Integrare tutorial, esempi concreti, librerie di funzioni e materiali di esercitazione
A chi è rivolto
Studenti delle scuole secondarie e universitarie
Educatori e formatori che vogliono proporre coding in modo accessibile
Appassionati di programmazione che desiderano un ambiente educativo modulare
Chi vuole capire i concetti fondamentali di informatica attraverso un linguaggio progressivo
Cosa troverai nella guida
Una descrizione chiara e progressiva dei tre linguaggi: L0, L1, L2
Una panoramica degli strumenti didattici integrati (editor, console, debugger)
Una raccolta di librerie standard e di esempi reali, come giochi e algoritmi
Le basi per costruire un tuo ambiente di programmazione interattivo nel browser
Indicazioni per partecipare a una community educativa attorno al progetto
Come usare questa guida
Puoi usare questa guida in due modi:
Studio individuale: leggi ogni sezione e prova i codici proposti nel tuo ambiente L0–L2.
Didattica attiva: proponi esercizi, modifica gli esempi, costruisci nuove funzioni.
📘 Capitolo 2 – Il Linguaggio L0
Cos’è L0
Il linguaggio L0 è il punto di partenza per l’apprendimento della programmazione. È progettato per essere estremamente semplice, senza variabili, funzioni o strutture complesse. Serve a introdurre la logica sequenziale e il flusso di esecuzione attraverso comandi predefiniti.
Obiettivi didattici di L0
Familiarizzare con la sintassi di base di un linguaggio
Comprendere il concetto di istruzione sequenziale
Sperimentare con input, output, condizioni semplici
Eseguire programmi direttamente nel browser
Sintassi base di L0
Ogni comando in L0 corrisponde a un’azione precisa. Ecco alcuni comandi fondamentali:
mostra "Ciao mondo!"
chiedi "Come ti chiami?"
se risposta == "Anna" allora mostra "Benvenuta!"
mostra "...": stampa un messaggio
chiedi "...": pone una domanda e salva la risposta in risposta
se ... allora ...: condizione con azione immediata
Esempi semplici
✅ Saluto base
mostra "Ciao!"
mostra "Benvenuto nel linguaggio L0"
✅ Interazione
chiedi "Qual è il tuo nome?"
mostra "Ciao " + risposta
✅ Condizione
chiedi "Vuoi continuare? (sì/no)"
se risposta == "sì" allora mostra "Procediamo!"
Come eseguire un programma L0
Lancia l’interprete L0 nel browser
Inserisci il codice nella finestra di input
Premi “Esegui” per vedere l’output nella console
Cosa non è ancora presente in L0
📘 Capitolo 3 – Il Linguaggio L1
Cos’è L1
Il linguaggio L1 è una naturale estensione di L0. Introduce:
È ispirato a Python, ma molto più semplice e pensato per girare direttamente nel browser.
Obiettivi didattici di L1
Scrivere programmi con dati e parametri
Imparare a strutturare il codice
Definire e chiamare procedure
Costruire interazioni più articolate
Sintassi base di L1
nome = "Luca"
mostra "Ciao " + nome
procedura saluta(persona)
mostra "Ciao " + persona
saluta("Anna")
Elementi principali
Elemento | Descrizione |
= | Assegnazione |
mostra | Output a schermo |
chiedi | Input da tastiera |
procedura | Definizione di funzione |
se / altrimenti | Condizione con ramo alternativo |
Esempio: verifica accesso
chiedi "Password:"
se risposta == "segreta"
mostra "Accesso consentito"
altrimenti
mostra "Accesso negato"
Esempio: somma tra due numeri
chiedi "Inserisci il primo numero"
a = intero(risposta)
chiedi "Inserisci il secondo numero"
b = intero(risposta)
somma = a + b
mostra "La somma è " + somma
Esempio: funzione con parametro
procedura saluta(nome)
mostra "Ciao " + nome
saluta("Mario")
saluta("Sara")
Funzioni predefinite disponibili in L1
intero(stringa): converte una stringa in numero intero
casuale(min, max): genera un numero casuale tra min e max
lunghezza(stringa): restituisce la lunghezza di una stringa
ripeti(n): struttura di ripetizione (nelle estensioni successive)
Differenze tra L0 e L1
Aspetto | L0 | L1 |
Variabili | ✖️ | ✅ |
Procedure | ✖️ | ✅ |
Input/output | Solo risposta | Input + output variabili |
Strutture | Sequenza e condizione | Procedura, assegnazione |
📘 Capitolo 4 – Il Linguaggio L2
🔹 Cos’è L2
L2 è un linguaggio didattico ad alto livello progettato per sviluppare algoritmi e strutture più complesse in modo semplice. Si basa sui principi già introdotti in L1, ma aggiunge liste, funzioni con ritorno, funzioni ricorsive e librerie standard.
🎯 Obiettivi didattici di L2
Usare strutture dati come liste e stringhe
Comprendere e utilizzare la ricorsione
Saper costruire funzioni con valore di ritorno
Applicare modularità , librerie e riuso del codice
Avviare lo studente al pensiero algoritmico
🧱 Sintassi avanzata di L2
lista = [1, 2, 3, 4]
procedura somma(lista)
se lista è vuota
ritorna 0
altrimenti
ritorna primo(lista) + somma(resto(lista))
risultato = somma(lista)
mostra "Somma: " + risultato
🧠Concetti chiave introdotti
Concetto | Descrizione |
Liste | Collezioni ordinate di elementi |
Ricorsione | Funzione che richiama sé stessa con dati ridotti |
ritorna | Restituisce un valore da una procedura |
Librerie | Insiemi di funzioni pronte all’uso |
Stringhe come liste | Le stringhe possono essere iterate come insiemi di caratteri |
📚 Librerie standard disponibili
Libreria | Funzioni incluse |
math | radice(x), potenza(a, b), val_assoluto(x) |
stringhe | lunghezza(s), maiuscolo(s), minuscolo(s) |
liste | primo(lista), resto(lista), aggiungi(l, x) |
random | casuale(min, max) |
🧪 Esempi applicativi
✅ Ricorsione su lista
procedura conta(lista)
se lista è vuota
ritorna 0
altrimenti
ritorna 1 + conta(resto(lista))
✅ Generatore di saluti con liste
nomi = ["Anna", "Luca", "Marco"]
procedura saluta_tutti(lista)
se lista è vuota
ritorna
mostra "Ciao " + primo(lista)
saluta_tutti(resto(lista))
saluta_tutti(nomi)
✅ Calcolo fattoriale ricorsivo
procedura fattoriale(n)
se n == 0
ritorna 1
altrimenti
ritorna n * fattoriale(n - 1)
mostra fattoriale(5)
✅ Differenze tra L1 e L2
Aspetto | L1 | L2 |
Liste | ✖️ | ✅ |
Ricorsione | ✖️ | ✅ |
Funzioni con ritorno | ✖️ | ✅ (ritorna) |
Librerie | limitate | ampia gamma: math, liste, stringhe |
🧠Integrazione con ambiente interattivo
Nel browser è possibile:
Scrivere codice L2
Eseguire funzioni ricorsive
Usare liste e librerie standard
Ricevere messaggi di errore e visualizzare output formattato
📘 Capitolo 5 – Il Linguaggio L3
🔹 Cos’è L3
L3 rappresenta il livello avanzato dell’ambiente didattico, introducendo funzioni con parametri e valore di ritorno, scope locale delle variabili, e una gestione semplificata dello stack di esecuzione.
È pensato per avvicinare lo studente alla programmazione strutturata e al concetto di modularità , tipico dei linguaggi reali.
🎯 Obiettivi didattici di L3
Definire e invocare funzioni con parametri
Comprendere la differenza tra procedura e funzione
Usare il costrutto ritorna per restituire valori
Isolare le variabili locali dal contesto globale
Favorire la riusabilità del codice attraverso astrazione
🧱 Sintassi avanzata di L3
funzione somma(a, b)
ritorna a + b
fine_funzione
risultato = somma(5, 3)
mostra "Risultato: " + risultato
🧠Concetti chiave introdotti
Concetto | Descrizione |
funzione | Blocchi di codice con input e output |
ritorna | Termina una funzione restituendo un valore |
parametri | Valori in ingresso a una funzione |
variabili locali | Variabili definite all’interno di una funzione |
stack | Meccanismo logico per mantenere l’ordine delle chiamate |
🧪 Esempi applicativi
✅ Funzione matematica
funzione quadrato(n)
ritorna n * n
fine_funzione
mostra quadrato(7)
✅ Funzione booleana
funzione è_pari(n)
se n % 2 == 0
ritorna vero
altrimenti
ritorna falso
fine_funzione
mostra è_pari(10)
✅ Differenze tra L2 e L3
Aspetto | L2 | L3 |
Funzione senza ritorno | ✅ | ✅ |
Funzione con ritorno | limitato | ✅ |
Scope locale | ✖️ | ✅ |
Stack logico | ✖️ | ✅ (base) |
🧠Integrazione con ambiente interattivo
Nel browser è possibile:
Definire e richiamare funzioni con ritorno
Tracciare variabili locali e globali
Visualizzare risultati tramite ritorna
Costruire logica modulare con codice riutilizzabile
📘 Capitolo 6 – Esempi e Progetti Didattici
📂 Progetti di coding consigliati
Titolo | Obiettivo didattico |
Generatore di saluti | Uso di cicli o ricorsione |
Somma ricorsiva | Manipolazione di liste |
Verifica password | Condizioni, input/output |
Calcolatrice | Uso di variabili, condizioni, ritorni |
Conta parole | Uso di stringhe e funzioni stringa |
Memory Game | Liste, logica condizionale, funzioni |
🧩 Struttura per ogni esempio
Ogni progetto include:
✏️ Esempio guidato: Conta vocali
chiedi "Scrivi una parola:"
parola = risposta
vocali = ["a", "e", "i", "o", "u"]
conta = 0
procedura conta_vocali(lista)
se lista è vuota
ritorna 0
se vocali contiene primo(lista)
ritorna 1 + conta_vocali(resto(lista))
altrimenti
ritorna conta_vocali(resto(lista))
mostra conta_vocali(parola)
📘 Capitolo 7 – Ambiente Interattivo nel Browser
🧰 Componenti principali
Elemento | Funzione |
Editor (L0–L3) | Scrittura e colorazione codice |
Console output | Visualizzazione risultati |
LocalStorage | Salvataggio locale dei programmi |
Debugger | Esecuzione passo-passo, variabili |
Librerie caricate | Math, stringhe, random |
🧠Esperienza utente
Scrivi il tuo programma
Esegui con un clic
Visualizza gli errori o l’output
Salva il codice nel tuo browser
Condividi il tuo programma esportandolo
📘 Capitolo 8 – Appendici, Glossario e Riferimenti
🧾 Glossario essenziale
Termine | Definizione |
Comando | Istruzione singola eseguita dal programma |
Sintassi | Regole grammaticali del linguaggio |
Variabile | Spazio di memoria dove viene salvato un dato |
Procedura | Insieme di istruzioni che svolgono un compito e possono essere riutilizzate |
Ricorsione | Quando una funzione richiama sé stessa |
Lista | Collezione ordinata di elementi |
Output | Risultato mostrato dall’esecuzione del codice |
Console | Area di visualizzazione degli output ed errori |
Debugger | Strumento che aiuta a trovare errori eseguendo il codice passo-passo |
📎 Funzioni principali dei linguaggi L0–L2
L0 | L1 | L2 |
mostra | variabili | liste |
chiedi | procedura nome(x) | ricorsione |
se / allora | se / altrimenti | ritorna |
risposta (input) | conversioni (intero) | librerie standard |
📘 Capitolo 9 – Il Linguaggio L4
🔹 Cos’è L4
L4 è il livello più avanzato dell’ambiente L0–L4. Introduce tipi strutturati, dizionari, liste di oggetti, e una gestione modulare delle librerie esterne.
L’obiettivo è preparare lo studente ai concetti propri della programmazione ad oggetti e alla gestione di dati complessi.
🎯 Obiettivi didattici di L4
Rappresentare e manipolare strutture dati complesse
Comprendere il concetto di oggetto come collezione di proprietÃ
Utilizzare librerie avanzate per operazioni matematiche, statistiche o testuali
Approcciarsi alla modularità tramite librerie utente
Prepararsi alla programmazione ad oggetti e all’ambiente reale
🧱 Sintassi avanzata di L4
persona = { "nome": "Luca", "età ": 30 }
mostra persona.nome
gruppo = [
{ "nome": "Anna", "età ": 20 },
{ "nome": "Marco", "età ": 25 }
]
mostra gruppo[1].nome
🧠Concetti chiave introdotti
Concetto | Descrizione |
Dizionari | Collezioni di coppie chiave/valore |
Oggetti | Entità con proprietà (come JSON) |
Liste di oggetti | Liste che contengono dizionari |
Librerie | Codice esterno riutilizzabile |
Estendibilità | Possibilità di importare funzioni definite da altri |
📚 Librerie avanzate disponibili
Libreria | Funzioni incluse |
math | somma, min, max, media, mediana |
strutture | filtra(lista, cond), mappa(lista, funzione) |
tempo | data_corrente(), cronometro(), timestamp() |
json | carica_json(str), stringify(obj) |
🧪 Esempi applicativi
✅ Gestione di una rubrica
contatti = [
{ "nome": "Anna", "telefono": "1234" },
{ "nome": "Luca", "telefono": "5678" }
]
procedura mostra_contatti(lista)
per ogni contatto in lista
mostra contatto.nome + ": " + contatto.telefono
fine_procedura
mostra_contatti(contatti)
✅ Uso di funzione esterna
numeri = [3, 5, 8, 2, 7]
media_valori = media(numeri)
mostra "Media: " + media_valori
✅ Differenze tra L3 e L4
Aspetto | L3 | L4 |
Funzioni | ✅ | ✅ |
Oggetti/dizionari | ✖️ | ✅ |
Liste di oggetti | ✖️ | ✅ |
Librerie esterne | base | avanzate |
Modularità | base | espandibile |
🧠Integrazione con ambiente interattivo
Nel browser è possibile:
Definire dizionari e accedere ai campi
Usare liste di oggetti per gestire strutture complesse
Caricare librerie definite da altri utenti
Simulare operazioni di database e JSON
✅ Conclusione
I livelli L3 e L4 costituiscono il ponte tra il linguaggio didattico e la programmazione reale, offrendo strumenti per costruire progetti complessi, riutilizzabili e leggibili.
Con l’ambiente L0–L4, lo studente è ora in grado di:
Usare funzioni avanzate
Lavorare con strutture dati
Organizzare codice in modo modulare
Prepararsi ai linguaggi reali (Python, JavaScript, ecc.)
📘 Capitolo 10 – Il Linguaggio L4 Esteso
🔹 Cos’è L4 Estesa
L4 rappresenta l'evoluzione più avanzata del nostro linguaggio educativo. In questa versione, il linguaggio include strutture dati complesse, interazioni dinamiche, eventi, grafica e persino suoni, trasformando il codice in uno strumento creativo, interattivo e visivo.
Con L4, la programmazione si avvicina sempre di più alla costruzione di vere applicazioni e giochi nel browser, rimanendo però accessibile e leggibile anche da studenti alle prime armi.
🎯 Obiettivi didattici di L4
Comprendere oggetti, proprietà e relazioni
Costruire liste di oggetti e filtrarle
Introdurre il concetto di evento e risposta interattiva
Manipolare grafica, audio e interfacce
Integrare codice e contenuti visuali (HTML, canvas)
Salvare e caricare dati in locale
🧱 Nuove strutture sintattiche in L4
✅ Dizionari e oggetti
persona = { "nome": "Luca", "età ": 30 }
persona.età = 31
mostra persona.nome
✅ Liste di oggetti
studenti = [
{ "nome": "Anna", "voto": 8 },
{ "nome": "Marco", "voto": 6 }
]
✅ Iterazione per ogni
per ogni studente in studenti
se studente.voto >= 7
mostra studente.nome + " promosso"
altrimenti
mostra studente.nome + " rimandato"
✅ Eventi e pulsanti
quando clic su "saluta"
mostra "Ciao!"
fine_evento
crea_pulsante("saluta")
✅ Output HTML e stili
mostra_html "<h2 style='color:blue'>Benvenuto!</h2>"
✅ Grafica e suoni
suona("bip.wav")
disegna_cerchio(100, "rosso")
✅ Salvataggio e caricamento dati
salva_dati(studenti)
studenti = carica_dati()
🧠Concetti avanzati introdotti in L4
Concetto | Descrizione |
Oggetti | Strutture con proprietà (tipo JSON) |
Liste di oggetti | Elenchi strutturati, iterabili |
Eventi | Reazioni a input esterni (clic, timer) |
Grafica e audio | Uso di canvas e suoni integrati nel browser |
Output HTML | Messaggi con formattazione e stile |
Persistenza locale | Salvataggio dati nel browser |
📚 Librerie aggiuntive in L4
Libreria | Funzioni incluse |
interfaccia | crea_pulsante(id), mostra_html(contenuto) |
eventi | quando clic su, quando timer |
grafica | disegna_cerchio(raggio, colore) |
audio | suona(nome_file) |
storage | salva_dati(obj), carica_dati() |
🧪 Esempi applicativi
✅ Verifica studenti promossi
studenti = [
{ "nome": "Anna", "voto": 8 },
{ "nome": "Luca", "voto": 5 }
]
per ogni studente in studenti
se studente.voto >= 6
mostra studente.nome + " è promosso"
altrimenti
mostra studente.nome + " è rimandato"
✅ Saluto su pulsante
quando clic su "btn"
mostra "Hai premuto il bottone!"
fine_evento
crea_pulsante("btn")
✅ Messaggio HTML formattato
mostra_html "<p style='color:green'>Programma eseguito con successo!</p>"
✅ Disegno e suono
disegna_cerchio(100, "blu")
suona("ping.wav")
✅ Differenze tra L2 e L4
Aspetto | L2 | L4 Estesa |
Oggetti | ✖️ | ✅ |
Eventi | ✖️ | ✅ |
Output HTML | ✖️ | ✅ |
Grafica e audio | ✖️ | ✅ |
Persistenza dei dati | ✖️ | ✅ |
Iterazione su oggetti | ✖️ | ✅ (per ogni) |
Librerie utente avanzate | limitate | ampie |
🧠Integrazione con l’ambiente nel browser
L4 può essere eseguito direttamente nel tuo editor interattivo, ma per attivare grafica, audio e eventi serve:
un interprete con parsing avanzato (tokenizer, AST);
librerie JavaScript caricate nel file HTML;
supporto DOM per pulsanti e canvas.