B1703 - INTRODUZIONE ALLA PROGRAMMAZIONE (LM)

Anno Accademico 2025/2026

  • Docente: Silvio Peroni
  • Crediti formativi: 12
  • SSD: INF/01
  • Lingua di insegnamento: Italiano
  • Moduli: Silvio Peroni (Modulo 1) Michele Corazza (Modulo 2)
  • Modalità didattica: Convenzionale - Lezioni in presenza (Modulo 1) Convenzionale - Lezioni in presenza (Modulo 2)
  • Campus: Bologna
  • Corso: Laurea Magistrale in Dati, metodi e modelli per le scienze linguistiche (cod. 6725)

Conoscenze e abilità da conseguire

Al termine del corso, lo studente possiede il necessario background informatico ed una appropriata conoscenza dei linguaggi di programmazione. Sa utilizzare le conoscenze acquisite per progettare autonomamente algoritmi e strutture dati. Sa lavorare in modo autonomo, ma anche inserirsi in un gruppo di lavoro.

Contenuti

Il corso è organizzato in due blocchi di lezioni.

Il primo blocco (modulo 1) è organizzato in una serie di lezioni, ognuna delle quali introduce un argomento specifico e include riferimenti a fatti storici e personalità rilevanti (indicate tra parentesi quadrate) per l'argomento trattato. Le lezioni sono complementate da diverse sessioni laboratoriali, da svolgersi con un computer, per imparare i costrutti primari del linguaggio di programmazione che verrà usato per implementare ed eseguire i vari algoritmi proposti.

Il secondo blocco (modulo 2) è organizzato in una serie di sessioni pratiche che verranno svolte mediante l'uso di un computer, e includono attività laboratoriali basate su strumenti esistenti che permettono la sperimentazione degli argomenti introdotti nelle lezioni del primo blocco.

Lista delle lezioni

Primo blocco (modulo 1, Febbraio-Marzo)

  • Introduzione al pensiero computazionale [Chomsky]
    - Che cos'è un computer?
    - Linguaggi naturali e linguaggi di programmazione
    - Astrazione: lo strumento principale del pensiero computazionale
  • Algoritmi [Lovelace]
    - Che cos'è un algoritmo?
    - Le prime macchine e i primi programmatori
    - Come sviluppare un algoritmo: i diagrammi di flusso
    - Il nostro primo algoritmo: input, processo, decisioni, output
  • Laboratorio: installazione di Python
  • Linguaggi di programmazione [Hopper]
    - Storia dei linguaggi di programmazione
    - Python
    - Scrivere il nostro primo algoritmo in Python: variabili, assegnamenti, e blocchi condizionali
  • Organizzare l'informazione: strutture ordinate [Knuth]
    - Che cos'è una struttura dati?
    - Liste
    - Tuple
  • Algoritmi di forza bruta [Holberton]
    - Iterazione: costrutti for e while
    - Ricerca lineare
  • Laboratorio: costrutti Python di base
  • Organizzare l'informazione: strutture non ordinate [Borges]
    - Può una struttura dati essere infinita?
    - Insiemi
    - Dizionari
  • Ricorsione [Hofstadter]
    - Un'intuizione: il Piccolo Labirinto Armonico
    - Approcci ricorsivi in linguistica e fisica
    - Algoritmi ricorsivi
  • Laboratorio: utilizzare liste e tuple
  • Algoritmi divide et impera [von Neumann e Fibonacci]
    - Ordinare milioni di libri
    - Sequenza di Fibonacci
  • Laboratorio: utilizzare insiemi e dizionari
  • Organizzare l'informazione: alberi e grafi [Garcia Marquez and Euler]
    - Genealogia e markup di documenti
    - Alberi
    - La città di Königsberg
    - Grafi
  • Laboratorio: leggere e processare file CSV e JSON

Secondo blocco (modulo 2, Aprile-Maggio)

  • Stringhe: dai costrutti di base alle funzionalità avanzate
  • Introduzione alle espressioni regolari
  • Array e matrici con numpy
  • Manipolazione dei dati con Pandas
  • Visualizzazione dei dati

Le date e gli orari di tutte le lezioni indicate sopra sono a disposizione nella sezione "Calendario" del repository GitHub del corso.

Studenti/sse con DSA o disabilità temporanee o permanenti: si suggerisce di mettersi subito in contatto con l’ufficio di Ateneo responsabile e con il/la docente, per cercare insieme le strategie più efficaci nel seguire le lezioni e/o nel preparare l’esame.

Testi/Bibliografia

Dispense verranno messe a disposizione in modo aperto sul repository GitHub del corso prima dell'inizio dello stesso. Slide e qualunque altro materiale verrà messo a disposizione, nello stesso repository, qualche giorno prima di ogni lezione.

Le letture consigliate di seguito possono essere d'aiuto come materiale di approfondimento, in modo da impratichirsi della terminologia di base del corso:

Metodi didattici

Il corso è organizzato in 60 ore di lezioni frontali in presenza.

Modalità di verifica e valutazione dell'apprendimento

L'esame consiste di:

  1. una prova scritta (della durata di un'ora e mezza) che si terrà dopo il primo blocco del corso, in modo da valutare le competenze generali e le abilità analitiche acquisite dagli studenti su tutti gli argomenti del primo blocco - voto massimo: 33 punti; voto minimo per la sufficienza: 18 punti.
  2. l'implementazione di un progetto di gruppo da sottoporre dopo la fine del secondo blocco del corso, dove gli studenti devono necessariamente organizzarsi in gruppi di 3-4 persone; il tema del progetto verrà deciso in accordo con il professore o selezionato da una lista di proposte, e verrà discusso durante un colloquio orale con il professore - voto massimo: 33 punti; voto minimo per la sufficienza: 18 punti.

Se entrambi i voti dei punti (1) e (2) sono sufficienti, il voto finale dello/a studente/ssa è calcolato come la somma dei due voti ottenuti per ognuno dei punti (1) e (2) divisa per 2, e approssimato all'intero superiore più vicino nel caso in cui il risultato della divisione sia decimale. Qualunque punteggio finale maggiore di 30 verrà registrato come 30 cum laude. In particolare:

  • valutazione eccellente (voto superiore a 26): raggiungere un'approfondita conoscenza degli argomenti del corso e un coinvolgimento attivo nello svolgimento del progetto seguendo tutti i principi teorici e linee guida pratiche introdotte durante le lezioni e le sessioni laboratoriali;
  • valutazione sufficiente (voto tra 18 e 26): raggiungere una conoscenza parziale degli argomenti del corso e un coinvolgimento parziale nello sviluppo del progetto;
  • valutazione insufficiente (voto minore di 18): non aver raggiunto una conoscenza adeguata degli argomenti del corso, senza aver fornito alcuno contributo per lo sviluppo del progetto.

È fortemente suggerito seguire attivamente il corso in presenza in modo da prendere parte alle discussioni collegiali con i professori e gli altri studenti. Queste discussioni, infatti, sono estremamente importanti per meglio comprendere, e quindi rendere più semplice, lo studio degli argomenti del corso e l'implementazione del progetto. Tuttavia, sebbene scoraggiato, è possibile seguire il corso anche come non frequentante. Il materiale da studiare per la prova scritta è lo stesso sia per i frequentanti sia per i non frequentanti. Invece, per i non frequentanti, il tema del progetto deve essere discusso in anticipo con il professore.

Studenti/sse con DSA o disabilità temporanee o permanenti: si raccomanda di contattare per tempo l’ufficio di Ateneo responsabile: sarà sua cura proporre agli/lle studenti/sse interessati/e eventuali adattamenti, che dovranno comunque essere sottoposti, con un anticipo di almeno 15 giorni, all’approvazione del/la docente, che ne valuterà l'opportunità anche in relazione agli obiettivi formativi dell'insegnamento.

Strumenti a supporto della didattica

Le lezioni verranno svolte in aule equipaggiate con computer connessi alla Intranet di Ateneo e a Internet.

Le lezioni teoriche verranno sempre accompagnate da parti pratiche, che verranno rinforzate nei momenti laboratoriali. Tutto il materiale del corso - incluse le dispense e le slide - verrà messo a disposizione nel repository GitHub del corso. Verrà creato un gruppo apposito su una piattaforma per lo scambio di messaggi per favorire l'interazione tra gli/le studenti/esse e i professori.

Link ad altre eventuali informazioni

https://github.com/intro-prog/2025-2026/

Orario di ricevimento

Consulta il sito web di Silvio Peroni

Consulta il sito web di Michele Corazza

SDGs

Istruzione di qualità

L'insegnamento contribuisce al perseguimento degli Obiettivi di Sviluppo Sostenibile dell'Agenda 2030 dell'ONU.