S. Crafa A.A. 20/21
Let’s go UP
Computer Science is no more about computers than astronomy is about telescopes.
-- Edsger Dijkstra
Silvia Crafa - [email protected] Dipartimento di Matematica “Tullio Levi-Civita”
S. Crafa A.A. 20/21
Sistema Operativo
Hardware Software
“Algoritmo risolutivo”
compilatore editor
S. Crafa A.A. 20/21
il Pensiero Computazionale
come pensa un informatico quando affronta un problema?
capacità di formulare problemi in modo che
ammettano soluzioni rappresentabili in un formato eseguibile
da un uomo o da una macchina o una combinazione dei due
(an information processing agent)
una serie di strumenti mentali che ci consentono di
passare da un’idea alla sua realizzazione
• pensare in maniera creativa alle possibili soluzioni
• approccio trial-and-error (esplorare e sperimentare)
• iniziare programmando un prototipo
S. Crafa A.A. 20/21
il Pensiero Computazionale
come pensa un informatico quando affronta un problema?
capacità di formulare problemi in modo che
ammettano soluzioni rappresentabili in un formato eseguibile
da un uomo o da una macchina o una combinazione dei due
(an information processing agent)
una serie di strumenti mentali che ci consentono di
passare da un’idea alla sua realizzazione
• pensare in maniera creativa alle possibili soluzioni
• approccio trial-and-error(esplorare e sperimentare)
• iniziare programmando un prototipo
La programmazione è un modo di esercitare ed allenare questa capacità
di formulare e risolvere i problemi (come la scrittura è un modo per
esprimere i propri pensieri)
S. Crafa A.A. 20/21
1. Capacità di formulare i problemi
Due capacità fondamentali nell’affrontare problemi complessi:
•
astrazione: permette di focalizzarsi sugli aspetti cruciali del problema, ignorando i dettagli irrilevanti,•
maggiori dettagli possono essere eventualmente affrontati in seguito, ad un altro livello di astrazione o in un altro strato software•
decomposizione: un problema complesso si decompone in sottoproblemi, da risolvere separatamente.•
la soluzione dei sottoproblemi è spesso riutilizzabile in altri casiS. Crafa A.A. 20/21
Decomposizione
Sito di food delivery
•
interfaccia accattivante (grafica, marketing)•
interazione utente (programmazione front-end)•
funzionamento degli ordini (programmazione back-end)•
gestione database piatti, anagrafica e ordini dei clienti•
pagamento online…es. riuso un modulo già sviluppato per altro sitoS. Crafa A.A. 20/21
Astrazione
processo produttivo
√
@
modello formale
struttura statica
processo dinamico
focalizzarsi sugli aspetti cruciali del problema, ignorando i dettagli irrilevanti
S. Crafa A.A. 20/21
Astrazione
Sistema Operativo
Hardware Software
focalizzarsi sugli aspetti cruciali del problema, ignorando i dettagli irrilevanti
S. Crafa A.A. 20/21
Astrazione
modello epidemiologico
per studiare andamento di una pandemia
S. Crafa A.A. 20/21
S. Crafa A.A. 20/21
modello epidemiologico
per studiare andamento di una pandemia
•
una simulazione permette di modellare una situazione ed esplorare le sue possibili evoluzioni. È uno strumento molto potente per migliorare la comprensione di un fenomeno•
La computazione è unica nella sua capacità di rendere concreto il modello astratto definito dalla simulazionehttps://www.math.unipd.it/news/la-matematica-del-contagio/
modello matematico:
equazioni che descrivono il comportamento del sistema
S. Crafa A.A. 20/21
scienze naturali
informatica
ingegneria
•
progettazione (design)•
comporre e gestire sistemi•
valutare costi e benefici•
tecnologia informatica matematica•
uso di linguaggio formale per esprimere concetti•
scienzainformatica
•
osservare sistemi complessi, fare ipotesi e verificare previsioni:•
simulazione e analisiSOCIETA’
Politica Economia Filosofia Psicologia ….
S. Crafa A.A. 20/21
2. soluzioni in formato eseguibile
•
il linguaggio di programmazione è progettato per essere conciso e non ambiguo: poche istruzioni con significato univoco e indipendente dal contesto•
Un programma consiste di una serie di istruzioni che spiegano come effettuare una computazione•
es. un calcolo matematico, una elaborazione di un testo, un’operazione grafica, la riproduzione di un filmato…•
errori di sintassi: uso di simboli errati o di struttura non corretta•
errori di semantica (o di logica): il programma si comporta in modo diverso dal previsto… il programma fa quello che il programmatore ha scritto, ma si è espresso in modo erratoS. Crafa A.A. 20/21
https://snap.berkeley.edu
https://bjc.edc.org/bjc-r/course/bjc4nyc.html
S. Crafa A.A. 20/21
future su bitcoin (BTC)
linguaggio Marlowe
per scrivere smart contracts finanziari sulla piattaforma Cardano
S. Crafa A.A. 20/21
python 3
print('Ciao! a cosa vuoi giocare?')
input('1.Scacchi 2.Indovina il numero 3.Guerra termonucleare globale') print(‘Hai scelto: Indovina il numero Ottima scelta!')
answer = input('inserisci il numero: ') if answer == 7 :
print('Indovinato!') else:
print(‘Sbagliato...sarai piu fortunato in amore’)
È un programma
sbagliato?
S. Crafa A.A. 20/21
Algoritmo per disegnare una casa:
• disegna un quadrato
• disegna un triangolo
Decomposizione
Algoritmo per disegnare un quadrato:
ripeti 4 volte
• gira il cursore di 90 gradi
• disegna un lato
Algoritmo per disegnare un tirangolo:
…
Algoritmo per disegnare una fila di case:
ripeti finche’ c’è spazio:
• disegna una casa
• sposta il cursore
S. Crafa A.A. 20/21
dall’algoritmo all’ implementazione
•
Algoritmo si riferisce alla soluzione concettuale del problema•
Implementazione (dell’algoritmo) si riferisce al codice di un programma che realizza l’algoritmoS. Crafa A.A. 20/21
ripeti finche’ c’è spazio
disegna una casa sposta la pennae
dall’algoritmo all’ implementazione
S. Crafa A.A. 20/21
Decomposizione
# programma che disegna una fila di case:
# invoca l’algoritmo definito sopra draw_a_row_of_houses()
def draw_a_row_of_houses():
max_area=240 position=0
# 50 is the dimension of a house while position+50 < max_area:
draw_house(50)
print('sposta la penna') position=position+50
# procedura per disegnare una casa def draw_house(dim):
draw_square(dim) draw_triangle(dim)
# procedura per “disegnare” un quadrato def draw_square(dim):
print('disegna un quadrato')
# procedura per “disegnare” un quadrato def draw_triangle(dim):
print('disegna un triangolo')
# procedura per disegnare una fila di case:
dall’algoritmo all’ implementazione
in Snap! ci sono istruzioni per disegnare una linea e girare il
cursore, è un linguaggio pensato anche per questo.
in Python non ci sono, quindi scriviamo le parole (oppure usare la libreria grafica:
import turtle) python 3