Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Consapevolezza digitale, Schemi e mappe concettuali di Elementi di Informatica

Appunti di fondamenti di informatica

Tipologia: Schemi e mappe concettuali

2023/2024

Caricato il 02/03/2025

Utente sconosciuto
Utente sconosciuto 🇮🇹

1 / 36

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
CONSAPEVOLEZZA 2.0
Computer science
Hardware: costruzione fisica del computer, costruzione fisica del processore (pezzo di scheda
madre, hard disk, telefono, laptop
Software: programmi girano nel processore > sopra c’è un algoritmo : logica di funzionamento del
software. (Word, software aziendale, videogioco)
Diventare consapevoli del grado di complessità e della non neutralità della produzione del software
1. conoscere e comprendere i diversi livelli di astrazione coinvolti nello sviluppo e nell'esecuzione
dei programmi
2. capire cosa significa e che limiti ha la valutazione della qualità del software.
3. riflettere e capire cosa significa e quanto sia difficile comunicare (le caratteristiche) del
software
CONSAPEVOLEZZA
1. sviluppare programmi non è solo scrivere codice
- Confusione assai diffusa fra uso delle applicazioni informatiche e l’impresa concettuale di:
immaginarne l’utilità
Progettarle
realizzarle
convalidarne il funzionamento
comprenderne l’impatto
2. informatica non è solo sviluppare programmi > è anche gestire informazioni
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24

Anteprima parziale del testo

Scarica Consapevolezza digitale e più Schemi e mappe concettuali in PDF di Elementi di Informatica solo su Docsity!

CONSAPEVOLEZZA 2.

Computer science Hardware : costruzione fisica del computer, costruzione fisica del processore (pezzo di scheda madre, hard disk, telefono, laptop Software : programmi girano nel processore > sopra c’è un algoritmo : logica di funzionamento del software. (Word, software aziendale, videogioco) Diventare consapevoli del grado di complessità e della non neutralità della produzione del software

  1. conoscere e comprendere i diversi livelli di astrazione coinvolti nello sviluppo e nell'esecuzione dei programmi
  2. capire cosa significa e che limiti ha la valutazione della qualità del software.
  3. riflettere e capire cosa significa e quanto sia difficile comunicare (le caratteristiche) del software CONSAPEVOLEZZA
  4. sviluppare programmi non è solo scrivere codice
  • Confusione assai diffusa fra uso delle applicazioni informatiche e l’impresa concettuale di:  immaginarne l’utilità  Progettarle  realizzarle  convalidarne il funzionamento  comprenderne l’impatto
  1. informatica non è solo sviluppare programmi > è anche gestire informazioni

GESTIONE DELLE INFORMAZIONI E VISUALIZZAZIONE

Informatica è anche fare simulazioni e analisi di fenomeni complessi. Modello matematico: equazioni che descrivono il comportamento del sistema.

  • 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 simulazione. informatica e analisi di fenomeni complessi
    • capacità di analisi, simulazione e previsione tramite modelli molto sofisticati
    • ma per poter applicare le tecniche informatiche servono assunzioni e metodologie, che non sono neutrali. NON NEUTRALE : i dati non sono il fenomeno " datificato ", e nello scarto si perde qualcosa, a volte essenziale.

PENSIERO COMPUTAZIONALE

Come pensa un informatico?

  • Capacità di formulare problemi in modo che ammettano soluzioni rappresentabili in una forma eseguibile da un uomo o da una macchina o da una combinazione dei due > an information processing agent
  • Orienta la formulazione di un problema non verso la sua analisi o comprensione, ma verso una soluzione operativa, effettiva cioè scritta in un formato estinguibile in modo automatizzato.
  • Una serie di strumentali 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 queste capacità di formulare e risolvere problemi orientandoli a soluzioni effettive. Soluzioni in formati eseguibile  Un programma consiste in una serie di istruzioni che spiegano alla macchina come effettuare una computazione.
  • Es. un calcolo matematico, una elaborazione di un testo, un’operazione grafica, la riproduzione di un filmato.  Il linguaggio di programmazione è progettato per essere coinciso e non ambiguo:
  • Poche istruzioni con significato univoco e indipendente dal contesto
  • Esclusa molta dell’espressività del linguaggio naturale, considerato preciso solo ciò che è formalizzabile in uno specifico linguaggio di programmazione.  Un programma può contenere 2 tipi di errori :
  • Errori di sintassi: istruzioni sintatticamente errate o struttura delle “frasi” non corretta (analogo ad errore di ortografia)  Sono individuati dalla macchina, che non sa come procedere
  • Errori di semantica (o di logica): istruzioni sintatticamente corrette, quindi eseguite dalla macchina, ma portano ad un risultato scorretto.  Il programmatore ha ragionato in modo errato, sbagliando l’idea risolutiva (e.g. errato modo di calcolare la media degli esami).  Il ragionamento del programmatore è corretto, ma nella fase di “codifica del ragionamento”, ha inserito nel software delle istruzioni che non rappresentano correttamente il suo ragionamento.  https://snap.berkeley.edu/  https://bjc.edc.org/bjc-r/course/bjc4nyc.html

Errori di semantica (o di logica)  Istruzioni sintatticamente corrette, quindi eseguite dalla macchina, ma che portano ad un risultano scorretto. Come si individuano gli errori semantici?

  • Spesso non è facile accorgersi che il risultato finale non è corretto
  • Possono rivelarsi solo nel caso di particolari input > es. software di calcolo do tasse può dare risultati errato solo quando inseriscono mese o4 senza 0. Esempio Smart Contracts and Code is Law … vs … errori semantici Lavorare con il linguaggio naturale porta una marea di problemi e abusi di potere. Se la legge invece di scriverla a parole la scriviamo in codice macchina o linguaggio di programmazione non è più ambigua, le controversie saranno inesistenti. Fare le cose scritte nel codice, leggo le istruzioni e dà sicurezza.
  • Giugno 2016, The DAO è un fondo di investimento completamente automatizzato su Ethereum di 150 m$ e 11.000 persone: un partecipante sfrutta una vulnerabilità del codice per trasferire 50 m$ al fondo Dark DAO.
  • Secondo il contratto legale della DAO (decentralized autonomous org.) tutte le regole sono definite dal codice stesso.
  • Quindi c’è incertezza legale se questo era un furto oppure una feature del codice.

ci sono tanti modi diversi di scrivere lo stesso algoritmo, o algoritmi simili Un algoritmo può essere molto dettagliato oppure poco dettagliato, MA indica sempre i passi da seguire per risolvere il problema o effettuare un compito. Algoritmo vs Software

  • Un algoritmo è ” una sequenza non ambigua di passi che determina la procedura di soluzione di un problema ”.
  • Ma questa sequenza di passi può essere descritta in qualsiasi modo (es. una ricetta per la pasta alla carbonara scritta a parole)
  • L’algoritmo va implementato, cioè tradotto in un software : una sequenza di istruzioni scritte in un linguaggio di programmazione :
  • solo questa traduzione è pienamente non ambigua ed effettivamente eseguibile.
  • lo stesso algoritmo può essere implementato in modi diversi e in linguaggi diversi Algoritmo
  • Un algoritmo è scritto con qualche linguaggio adatto ad esprimere "sequenze di passi che portano alla soluzione".
  • Ci sono tanti linguaggi possibili , come i diagrammi di flusso, o i sofisticati diagrammi UML, o varie forme di pseudo-codice.
  • Anche il linguaggio naturale si presta a scrivere un algoritmo. Usando però
  • un elenco di frasi brevi e chiare, e
  • i costrutti "se ... allora ... altrimenti ..." e "ripeti ..." Esempio Specifica:
  • un programma che, dato un numero, dice se si tratta di un numero pari o dispari Algoritmo:  IDEA :
  • divido il numero per 2 e guardo il resto della divisione, se è 0 il numero è pari altrimenti è dispari

Esempio Specifica:

  • un programma che, dato un numero, dice se si tratta di un numero pari o dispari. Esempio

Esempio Specifica:

  • un programma che, dato un elenco di prezzi di articoli, stampa lo scontrino della spesa (cioè stampa anche i singoli prezzi). Esercizio IMPORTANTE su Algoritmi Scrivere i seguenti algoritmi, trovando un linguaggio efficace. Inserire le soluzioni, eventualmente incomplete, sul forum Moodle e discuterne ATTENZIONE : questo è un esercizio difficile perché non è facile trovare il modo più adatto di scrivere questi algoritmi. Lo scopo vero dell'esercizio, non è arrivare alla soluzione ma esplorare quali difficoltà si incontrano provandoci.
  1. Scrivere l'algoritmo per calcolare la media dei voti degli esami sostenuti.
  2. Scrivere l'algoritmo per un programma che, dato in ingresso il prezzo di un prodotto, calcola e stampa a video il prezzo finale scontato del 20%
  3. Scrivere l'algoritmo per preparare la carbonara. Elencare all'inizio gli ingredienti (cioè i dati di input) e poi descrivere l'algoritmo per realizzare il piatto.
  4. Il gioco "pari o dispari" ammette 2 giocatori: il primo giocatore scommette sempre su "pari", mentre il secondo scommette sempre su "dispari". Ogni giocatore sceglie un numero, e se la somma dei due numeri è pari vince il primo giocatore, altrimenti vince il secondo. Scrivere l'algoritmo di un programma che gioca a "pari o dispari"
  1. Scrivere algoritmo di un torneo sportivo ad eliminazione diretta a partire dai quarti di finale. Cioè ci sono 4 coppie di squadre che giocano, le vincitrici vanno alle semifinali e le vincitrici alla finale.
  2. Scrivere un algoritmo per l'elezione del capoclasse. Esempio: Algoritmo che, dato un numero n dice se è primo oppure no Specifica:
  • un programma che, dato un numero n, dice se è primo oppure no.
  • dato l'algoritmo posso ragionare sulla correttezza della procedura risolutiva
  • quando mi sembra di avere un algoritmo corretto devo scrivere un software che lo esegue. “Se una di queste divisioni ha resto 0”> che istruzioni software gli faccio corrispondere?  faccio tutte le divisioni e poi guardo tutti i risultati?  ma se n =100, divido per 2,3,4,...,99 ma potrei accorgermi subito che già la divisione per 2 ha resto 0, evitando altre 98 divisioni inutili!  raffino l'algoritmo usando l'istruzione: "dividi n per m e controlla il resto, se il resto è 0 smetti, altrimenti ripeti dividendo per m+1. Inizia con m=2 e smetti di ripetere se m= n-1"

Diversi livelli di astrazione un errore può stare su ciascuno dei livelli !!

  1. Specifica del programma: Il programma prende in input un numero e ritorna in output se è primo oppure no"
  2. Algoritmo risolutivo:
  3. Implementazione: App Immuni https://www.immuni.italia.it/
  • High level description https://github.com/immuni-app/immuni-documentation https://github.com/immuni-app/immuni-dashboard-data/blob/master/dati/
  • documentazione tecnica https://github.com/immuni-app/immuni-app-android https://github.com/immuni-app/immuni-documentation/blob/master/Technology.md
  • esempi di codice sorgente (Kotlin e Go) https://github.com/immuni-app/immuni-appandroid/blob/development/app/src/main/java/it/ ministerodellasalute/immuni/logic/exposure/repositories/ExposureAnalyticsStoreRepository.kt https://github.com/immuni-app/immuni-app-android/blob/development/app/src/main/java/it/ ministerodellasalute/immuni/logic/notifications/AppNotificationManager.kt https://github.com/google/exposure-notifications-server/blob/main/internal/integration/client.go Diversi livelli di astrazione 1. Specifica del programma 2. Algoritmo risolutivo 3. Implementazione 4. Infrastruttura di esecuzione  molto spesso i primi 3 livelli sono confusi e mescolati  es. inizio prototipo di implementazione con idea grezza di cosa fa
  • se l'algoritmo resta implicito, rischio ci siano errori di correttezza
  • se la specifica (chiara) manca (es. solo commenti al codice), è difficile comunicare cosa fa il software, e mantenerlo. N.B. > spesso l'infrastruttura di esecuzione ha importanti conseguenze sui livelli superiori!

Programma e ambiente di sviluppo

**- Dove avviene la computazione?

  • Dove si esegue il programma?
  • Se salvo/apro un progetto, dove risiede?**  applicazione distribuita es. mail, stampare  applicazione Web es. web mail, banking online, twitter  se un’applicazione funziona tramite il browser web, la si può usare da desktop, tablet, smartphone.  applicazione che usa un servizio cloud es. Moodle, firma digitale, archivio foto.  La app può causare computazione sia locale che remota
  • se si connette a server remoto, che dati gli manda?
  • non è sempre facile capire se c’è computazione remota (opp. disattivare rete) N.B. > c’è tanta complessità nascosta (astrazione) tra le istruzioni di un programma e l’esecuzione della macchina! Bisogna esserne Consapevoli INFRASTRUTTURA DI ESECUZIONE:
  • un computer (esecuzione locale)
  • uno smartphone (esecuzione parzialmente remota)
  • un sistema distribuito (esecuzione su server tramite interfaccia web)
  • un cloud = un sistema distribuito privato e opaco DIVERSI LIVELLI DI ASTRAZIONE
  • Un errore può stare su ciascun livello:
  • tenere presente che esistono tutti
  • saper assegnare ad ogni errore il livello a cui appartiene

Secondo gli appellanti, tale algoritmo avrebbe disposto i trasferimenti in una provincia piuttosto che in un’altra, in un posto di sostegno piuttosto che in un posto comune, senza tener conto delle preferenze indicate nelle rispettive domande di trasferimento, senza alcuna motivazione e in difetto della benché minima trasparenza [...] l’utilizzo di una procedura informatica che conduca direttamente alla decisione finale non deve essere stigmatizzata, ma anzi, in linea di massima, incoraggiata: essa comporta infatti numerosi vantaggi quali, ad esempio, la notevole riduzione della tempistica procedimentale per operazioni meramente ripetitive e prive di discrezionalità, l’esclusione di interferenze dovute a negligenza (o peggio dolo) del funzionario (essere umano) e la conseguente maggior garanzia di imparzialità della decisione automatizzata. 8.2 - L’utilizzo di procedure “robotizzate” non può, tuttavia, essere motivo di elusione dei princìpi che conformano il nostro ordinamento e che regolano lo svolgersi dell’attività amministrativa. Difatti, la regola tecnica che governa ciascun algoritmo resta pur sempre una regola amministrativa generale, costruita dall’uomo e non dalla macchina, per essere poi (solo) applicata da quest’ultima, anche se ciò avviene in via esclusiva. Questa regola algoritmica, quindi:

  • possiede una piena valenza giuridica e amministrativa, anche se viene declinata in forma matematica, e come tale, come si è detto, deve soggiacere ai principi generali dell’attività amministrativa, quali quelli di pubblicità e trasparenza (art. 1 l. 241/90), di ragionevolezza, di proporzionalità, etc.;
  • non può lasciare spazi applicativi discrezionali (di cui l’elaboratore elettronico è privo), ma deve prevedere con ragionevolezza una soluzione definita per tutti i casi possibili, anche i più improbabili (e ciò la rende in parte diversa da molte regole amministrative generali); la discrezionalità amministrativa, se senz’altro non può essere demandata al software, è quindi da rintracciarsi al momento dell’elaborazione dello strumento digitale;
  • vede sempre la necessità che sia l’amministrazione a compiere un ruolo di mediazione e composizione di interessi, anche per mezzo di costanti test, aggiornamenti e modalità di perfezionamento dell’algoritmo (soprattutto nel caso di apprendimento progressivo e di deep learning);
  • deve contemplare la possibilità che – come è stato autorevolmente affermato – sia il giudice a “dover svolgere, per la prima volta sul piano ‘umano’, valutazioni e accertamenti fatti direttamente in via automatica”, con la conseguenza che la decisione robotizzata “impone al giudice di valutare la correttezza del processo automatizzato in tutte le sue componenti”. In definitiva, dunque, l’algoritmo, ossia il software, deve essere considerato a tutti gli effetti come un “atto amministrativo informatico”. Ciò comporta, ad avviso del collegio, un duplice ordine di conseguenze. 8.3. – In primo luogo, come già messo in luce dalla dottrina più autorevole, il meccanismo attraverso il quale si concretizza la decisione robotizzata (ovvero l’algoritmo) deve essere “conoscibile”, secondo una declinazione rafforzata del principio di trasparenza, che implica anche quello della piena conoscibilità di una regola espressa in un linguaggio differente da quello giuridico. Tale conoscibilità dell’algoritmo deve essere garantita in tutti gli aspetti: dai suoi autori al procedimento usato per la sua elaborazione, al meccanismo di decisione, comprensivo delle priorità assegnate nella procedura valutativa e decisionale e dei dati selezionati come rilevanti. Ciò al fine di poter verificare che gli esiti del procedimento robotizzato siano conformi alle prescrizioni e alle finalità stabilite dalla legge o dalla stessa amministrazione a monte di tale procedimento e affinché siano chiare – e conseguentemente sindacabili – le modalità e le regole in base alle quali esso è stato impostato. In altri termini, la “caratterizzazione multidisciplinare” dell’algoritmo (costruzione che certo non richiede solo competenze giuridiche, ma tecniche, informatiche, statistiche, amministrative) non esime dalla necessità che la “formula tecnica”, che di fatto rappresenta l’algoritmo, sia corredata da spiegazioni che la traducano nella “regola giuridica” ad essa sottesa e che la rendano leggibile e comprensibile, sia per i cittadini che per il giudice. 8.4 – In secondo luogo, la regola algoritmica deve essere non solo conoscibile in sé, ma anche soggetta alla piena cognizione, e al pieno sindacato, del giudice amministrativo. 9 – Alla luce delle riflessioni che precedono, l’appello deve trovare accoglimento, sussistendo nel caso di specie la violazione dei principi di imparzialità, pubblicità e trasparenza, poiché non è dato comprendere per quale ragione le legittime aspettative di soggetti collocati in una determinata posizione in graduatoria siano andate deluse. Infatti, l’impossibilità di comprendere le modalità con le quali, attraverso il citato algoritmo, siano stati assegnati i posti disponibili, costituisce di per sé un vizio tale da inficiare la procedura. Non solo, gli esiti della stessa paiono effettivamente connotati dall’illogicità ed irrazionalità denunciate dalle appellanti, essendosi verificate situazioni paradossali per cui docenti con svariati anni di servizio si sono visti assegnare degli ambiti territoriali mai richiesti e situati a centinaia di chilometri di distanza dalla propria città di residenza.