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


Introduzione all'informatica: Che cos'è un computer? - Prof. Peroni, Appunti di Fondamenti di informatica

Riassunto delle lezioni tenute dal professore; appunti comprendenti: foto, definizioni, elenchi puntati. Schematico e sintetico. Contiene tutte e 9 le lezioni del corso di Informatica di base del 1° anno di Lettere moderne.

Tipologia: Appunti

2021/2022

In vendita dal 23/11/2023

viola-cevoli-1
viola-cevoli-1 🇮🇹

5

(3)

24 documenti

1 / 50

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA 1
CHE COS’E’ UN COMPUTER
-COMPUTER:
“macchina per l'elaborazione di dati rappresentati da caratteri alfanumerici variamente codificati,
che vengono sottoposti a procedimenti aritmetici e logici, memorizzati in archivi e resi reperibili e
trasmissibili”
(definizione originale) (in uso dal XVII°) = “qualcuno che esegue calcoli matematici”
(definizione generale) = “qualsiasi agente (entità adeguatamente istruita) in grado di fare calcoli e
produrre una risposta (output) a partire da un’informazione iniziale (input)”
(in italiano) = calcolatore
-COMPUTER UMANI = gruppi di persone che hanno eseguito lunghi calcoli per determinati esperimenti
calcolare le coordinate astronomiche di oggetti extraterrestri (passaggio cometa di Halley)
creazione di tabelle matematiche per convertire i valori descritti con il vecchio sistema di misura
imperiale verso il nuovo sistema metrico (tutt’ora in uso) (Napoleone Bonaparte)
-1822 = Charles Babbage inizia i lavori per la MACCHINA DIFFERENZIALE = macchina per gestire calcoli come
quelli che facevano i computer umani, ma automaticamente, velocemente e senza errori
Realizza solo un prototipo parziale
poco flessibile
non programmabile -> poteva utilizzare solo un numero limitato di operazioni sull’input ricevuto
L’input doveva essere specificato fisicamente cambiando specifiche configurazioni della macchina
-1837 = Babbage inizia a progettare la MACCHINA ANALITICA
Nessun prototipo realizzato
Avrebbe dovuto permettere la risoluzione di qualsiasi calcolo procedurale
Sarebbe stato il 1° computer meccanico e general-purpose della storia
in grado di ricevere in input istruzioni e dati schede perforate
non obbligava l'utilizzatore a compiere manipolazioni fisiche della macchina per farla funzionare
-ci volle più di 1 secolo per vedere in una macchina fisica le idee pensate per la macchina analitica
->solo dopo la 2° guerra mondiale c’è stata un’accelerazione della tecnologia computazionale
(calcolatori costruiti per ragioni militari)
Bomba
-1940
-sviluppata da Alan Turing
-permise, dalla base militare segreta britannica di Bletchley Park, di decifrare le comunicazioni
tedesche che erano state cifrate dalla macchina Enigma
-ci avevano lavorato anche crittologi polacchi (Marian Rejewski)
-macchina estremamente efficace ed efficiente
-parzialmente basata su componenti prettamente meccanici
-svolgeva una sola operazione
-estremamente cruciale da un punto di vista storico
-1946 = negli Stati Uniti è sviluppato il 1° computer interamente digitale Electronic Numerical Integrator
and Computer (ENIAC)
Completamente programmabile con cavi e interruttori
1
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
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32

Anteprima parziale del testo

Scarica Introduzione all'informatica: Che cos'è un computer? - Prof. Peroni e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

INFORMATICA 1

CHE COS’E’ UN COMPUTER

- COMPUTER :

 “macchina per l'elaborazione di dati rappresentati da caratteri alfanumerici variamente codificati, che vengono sottoposti a procedimenti aritmetici e logici, memorizzati in archivi e resi reperibili e trasmissibili”  (definizione originale) (in uso dal XVII°) = “qualcuno che esegue calcoli matematici”  (definizione generale) = “qualsiasi agente (entità adeguatamente istruita) in grado di fare calcoli e produrre una risposta (output) a partire da un’informazione iniziale (input)”  (in italiano) = calcolatore

  • COMPUTER UMANI = gruppi di persone che hanno eseguito lunghi calcoli per determinati esperimenti calcolare le coordinate astronomiche di oggetti extraterrestri (passaggio cometa di Halley) creazione di tabelle matematiche per convertire i valori descritti con il vecchio sistema di misura imperiale verso il nuovo sistema metrico (tutt’ora in uso) (Napoleone Bonaparte) -1822 = Charles Babbage inizia i lavori per la MACCHINA DIFFERENZIALE = macchina per gestire calcoli come quelli che facevano i computer umani, ma automaticamente, velocemente e senza errori  Realizza solo un prototipo parziale  poco flessibile  non programmabile -> poteva utilizzare solo un numero limitato di operazioni sull’input ricevuto  L’input doveva essere specificato fisicamente cambiando specifiche configurazioni della macchina -1837 = Babbage inizia a progettare la MACCHINA ANALITICA  Nessun prototipo realizzato  Avrebbe dovuto permettere la risoluzione di qualsiasi calcolo procedurale  Sarebbe stato il 1° computer meccanico e general-purpose della storia  in grado di ricevere in input istruzioni e dati schede perforate  non obbligava l'utilizzatore a compiere manipolazioni fisiche della macchina per farla funzionare -ci volle più di 1 secolo per vedere in una macchina fisica le idee pensate per la macchina analitica ->solo dopo la 2° guerra mondiale c’è stata un’accelerazione della tecnologia computazionale (calcolatori costruiti per ragioni militari)  Bomba - -sviluppata da Alan Turing -permise, dalla base militare segreta britannica di Bletchley Park, di decifrare le comunicazioni tedesche che erano state cifrate dalla macchina Enigma -ci avevano lavorato anche crittologi polacchi (Marian Rejewski) -macchina estremamente efficace ed efficiente -parzialmente basata su componenti prettamente meccanici -svolgeva una sola operazione -estremamente cruciale da un punto di vista storico -1946 = negli Stati Uniti è sviluppato il 1° computer interamente digitale  Electronic Numerical Integrator and Computer (ENIAC)  Completamente programmabile con cavi e interruttori

 Punto fisso da cui i moderni computer sono stati creati -un computer può essere sia una macchina, sia una persona, PERO’: ->programmiamo un computer (elettronico) ->parliamo con una persona (computer umano) per istruirla all’esecuzione di specifiche azioni attraverso l’uso di un particolare linguaggio (In questo caso naturale), usato come canale di comunicazione  SCRIVERE UN PROGRAMMA = comunicare ad un computer elettronico utilizzando un linguaggio (in questo caso formale) che sia l’istruttore umano sia il computer stesso possano comprendere  Accordarsi sul linguaggio da usare tra istruttore e computer (umano / macchina)  Pensare una sequenza di istruzioni da comunicare (se seguite sistematicamente danno un risultato atteso per risolvere un certo problema)  Scopo = trovare un pattern (schema ricorrente) per risolvere una situazione attingendo da un insieme di situazioni omogenee ->si potrebbe riusare la stessa strategia (se funzionante) per raggiungere il nostro obiettivo PENSIERO COMPUTAZIONALE

  • PENSIERO COMPUTAZIONALE = approccio per risolvere problemi, sviluppare sistemi e capire il comportamento umano che riprende i concetti fondamentali della computazione (computazione = calcolo) definisce i processi mentali che coinvolgiamo quando formuliamo un certo problema ed esprimiamo le relative soluzioni usando un linguaggio che un computer (sia esso umano o macchina) può comprendere ed eseguire -connessa al pensiero computazionale c’è l’ ASTRAZIONE = abilità di esercitare pensiero astratto e di esibire abilità di astrazione  rimozione dei dettagli trascurabili  semplificazione di una situazione  focalizzazione dell’attenzione sulle caratteristiche principali -astrarre serve ad automatizzare certe operazioni con computer responsabili dell’interpretazione delle astrazioni -spesso usiamo astrazioni in modo inconscio -obiettivo = dare forma alle astrazioni che abbiamo già immagazzinato come conseguenza della nostra esperienza personale e che vengono riutilizzate spesso incoscientemente  per esserne nuovamente coscienti, dobbiamo ridefinirle con un linguaggio appropriato per renderle comprensibili a un computer ->servono precisione e adeguatezza -obiettivo (del pensiero computazionale) = far sì che le persone pensino come se fossero delle computer scientist (anche nell’affrontare attività del quotidiano) STRUTTURE DATI -processo base dell’astrazione = descrivere l’informazione presente in una certa situazione secondo un’organizzazione generica e riutilizzabile in più contesti  servono le STRUTTURE DATI = modi in cui possiamo organizzare l’informazione e i dati da essere processati (input) e restituiti (output) da un computer, in modo da potervi accedere in modo efficiente ed efficace a livello computazionale (contenitori dove possiamo posizionare alcune informazioni, e che forniscono metodi specifici per aggiungere e richiedere pezzi di questa informazione)

 ALBERO

*marcatura di un testo  riconoscimento dei ruoli strutturali e semantici delle varie parti (sezioni, capoversi, dialoghi, ecc.)  attività sistematica e inconsapevole ogni qual volta si prende un documento da analizzare o da leggere *ogni parte di un testo è organizzata in modo molto preciso  (capoversicapitolilibro)(dialogo personaggiocapoversicapitolilibro)(paragraphchapterbook) *marcatura = racchiudere una parte del testo in una scatola etichettata (esplicitata con opportuni linguaggi di markup)  albero = struttura dati che descrive in modo astratto queste organizzazioni gerarchiche  insieme di nodi collegati tra loro da una relazione gerarchica genitore-figlio  nodi disposti dall’alto al basso  bordo in grassetto -> nodo radice (root node) = unico senza genitore bordo tratteggiato -> nodi foglia dell’albero (leaf nodes) = nodi senza figli  Rispetto ad un nodo:  nodo genitore (parent node) = quello direttamente connesso quando ci si muove verso il nodo radice  nodo figlio (child node) = uno di quelli direttamente connessi quando ci si muove lontano dal nodo radice  nodo fratello (sibling node) = uno di quelli che condivide lo stesso nodo genitore  nodo antenato (ancestor node) = uno di quelli raggiungibili seguendo ripetutamente le relazioni genitore-figlio andando verso il nodo radice  nodo discendente (descendant node) = uno di quelli raggiungibili seguendo ripetutamente le relazioni genitore-figlio spostandosi lontano dal nodo radice  le strutture ad albero possono rappresentare informazioni molto diverse  GRAFO  l’origine deriva da un piccolo gioco (ai tempi, un vero e proprio problema matematico) che riguarda sette ponti di una specifica città, Königsberg ->“è possibile fare una passeggiata in città attraversando ogni ponte una ed una sola volta?” ->->Eulero nel 1736 lo dimostra negativamente, con una dimostrazione matematica formale Eulero:

 ha descritto, in modo astratto, le quattro terre che formavano Königsberg come nodi di una rete collegati da archi  ogni arco tra due nodi rappresentava un ponte tra due lembi di terra  ha dimostrato che non esiste alcuna soluzione al problema dei sette ponti di Königsberg  ha usato una RAPPRESENTAZIONE ASTRATTA = grafo  ogni nodo (eccetto il nodo di partenza e quello di arrivo) dovrebbe avere un numero pari di archi per essere raggiunti e poi abbandonati (implicazione pratica derivata dagli spostamenti che una persona deve fare per arrivare in un lembo di terra e poi passare oltre) (ogni volta che si entra in un nodo bisogna percorrere un arco, e un altro arco è necessario per uscire da quel nodo)  per poter essere attraversati, ogni nodo deve avere un numero pari di archi, per essere transitato una o più volte  MA i nodi di Konigsberg hanno un numero dispari di archi (contraddizione del requisito)  il problema dei sette ponti non può essere risolto  rappresentazione astratta  1 delle principali strutture dati in informatica e del pensiero computazionale  usati per descrivere, in termini astratti, situazioni del mondo reale  tragitti tra città / relazioni tra persone nei social network / organizzazione dei collegamenti ipertestuali tra pagine / relazioni concettuali nelle basi di dati o nei knowledge graph usati per esempio da Google Amazon e Facebook per i loro servizi  struttura dati interamente derivata dallo strumento matematico inventato da Eulero  distinguibili in due macro-categorie:  grafi non orientati (come quello di Eulero) -un arco può essere attraversato in una direzione o nell’altra a piacere  grafi orientati -ogni arco specifica esplicitamente la direzione di percorrenza INFORMATICA 2 USI POSSIBILI DELLA MACCHINA ANALITICA -Ada Lovelace o figlia di Lord Byron (non sopportava il suo interesse scientifico) o matematica di formazione o lavorò sulla Macchina Analitica di Babbage o la madre supportò il suo interesse per logica e nella matematica o 1833 = partecipò ad una festa organizzata da Charles Babbage per presentare la Macchina Differenziale o colpita dall’invenzione di Babbage + iniziò 27 anni di corrispondenza epistolare con lui o traduttrice in inglese del primissimo articolo sulla Macchina Analitica (annotazioni personali e riflessioni) o descrive come usare la Macchina Analitica per calcolare i numeri di Bernoulli  primo programma (nonché il primo algoritmo) per un computer digitale mai scritto, e fu creato da Ada senza avere neppure a disposizione la macchina reale, visto che la Macchina Analitica era soltanto una macchina teorica che Babbage non costruì mai o parlò dell’Informatica 100 anni prima della sua introduzione formale o spesso riconosciuta come il primo programmatore della storia COS’E’ UN ALGORITMO? -Gli algoritmi accompagnano le nostre attività della vita quotidiana

IL NOSTRO PRIMO ALGORITMO

-algoritmo = prendere in input tre stringhe (2 parole e 1 riferimento bibliografico di un articolo pubblicato) e restituire 2 se entrambe le parole sono contenute nel riferimento bibliografico, 1 se solo una delle parole è contenuta nel riferimento bibliografico, o 0 altrimenti  UNA VERSIONE INCOMPLETA -con i diagrammi di flusso qualunque algoritmo è definito usando 2 oggetti terminali (inizio e fine dell’algoritmo) -terminale di inizio -> ha una freccia che parte da esso e va verso l’istruzione successiva (la prima dell’algoritmo) -terminale di fine -> può essere raggiunto da differenti punti dell’algoritmo (collegato da almeno una freccia) -1° versione incompleta dell’algoritmo semplifica un poco le istruzioni in linguaggio naturale precedentemente introdotte mostra come possiamo usare alcuni iniziali oggetti per creare un algoritmo -la versione semplificata = prende in input solo 2 stringhe, 1 parola e 1 riferimento bibliografico, e restituisce 1 se la parola è contenuta nel riferimento bibliografico, 0 altrimenti -questa versione parziale usa già molti degli oggetti grafici propri ai diagrammi di flusso: terminali di inizio e fine 3 oggetti di input / output (per acquisire i valori specificati come input e per restituire 0 o 1 dipendentemente da questo input)

-la decisione su quale output restituire è stata codificata grazie all’oggetto decisionale dei diagrammi di flusso, in cui l’input è analizzato e, a seconda della situazione, uno specifico ramo del flusso dell’algoritmo viene percorso  L’ALGORITMO COMPLETO -implementazione dell’algoritmo completo attraverso lo sviluppo di un diagramma di flusso ->usati tutti gli oggetti grafici ->diagramma di flusso presentato = soltanto un possibile modo per implementare l’algoritmo originale. -è possibile creare anche un diagramma di flusso diverso che risolve il problema descritto dall’algoritmo in linguaggio naturale correttamente  utilizzato il primo oggetto di processo in cui il risultato che verrà restituito alla fine dell’esecuzione dell’algoritmo viene inizializzato a 0, associandolo implicitamente a una variabile (“result value”)  risultato = quello che l’algoritmo deve ritornare se entrambe le parole in input non sono contenute nel riferimento bibliografico specificato  oggetto di processo = seguito da due oggetti decisionali messi in sequenza, che controllano le due condizioni (se la prima parola è contenuta nel riferimento bibliografico, e se la seconda parola è contenuta nello stesso riferimento) se le 2 condizioni sono vere, eseguono un incremento di 1 al risultato finale da restituire (usando altri oggetti di processo)  risultato finale = restituito da un unico oggetto di output, che conclude l’esecuzione dell’algoritmo (qualunque sia il valore associatogli) CI SONO LIMITI ALLA COMPUTAZIONE?  possiamo usare gli algoritmi per computare qualsiasi cosa?  esiste un limite a quello che possiamo computare?  è possibile definire un problema computazionale (problema che può essere risolto algoritmicamente da un computer) che non può essere risolto da nessun algoritmo?

  • REDUCTIO AD ABSURDUM (dimostrazione per assurdo) = approccio molto usato per dimostrare che qualcosa non esiste tramite un paradosso (situazione apparentemente plausibile, poi rivelatasi paradossale/auto-contraddittoria) bisogna stabilire che una situazione è contraddittoria cercando di derivare un’assurdità dalla sua negazione, in modo da dimostrare che una tesi deve essere accettata perché la sua negazione non può essere e, alla fine, genera un paradosso -paradosso di Russell  uni dei più importanti paradossi in matematica

->biologia (studio che identifica i processi spontanei di creazione di pattern in natura)  1936 = sviluppò la sua macchina per cercare di rispondere al problema della terminazione di Hilbert  macchina solo teorica (non l’aveva costruita fisicamente) recentemente molte persone hanno provato a costruire prototipi fisici dell’idea di Turing  in grado di simulare l’esecuzione di qualunque algoritmo realmente implementabile  composta da un nastro di memoria infinito composto da celle ->ogni cella può contenere un simbolo (o 0 o 1, dove 0 è usato come default per inizializzare le celle di tutto il nastro) che può essere letto e scritto dalla testina della macchina  le operazioni che può fare sono definite in una tabella (finita) di istruzioni ->ogni istruzione dice cosa fare (scrivere un nuovo simbolo / muovere la testina a sinistra o a destra / spostarsi in un nuovo stato) in base allo stato in cui la macchina si trova e al simbolo presente nella cella sotto la testina  forniti anche stato iniziale e zero o più stati finali (per sapere dove iniziare e finire il processo)  usata da Turing per mostrare una soluzione per il problema della terminazione -dimostrazione per assurdo  supponiamo sia possibile sviluppare l’algoritmo “termina?” o si prende in input un certo algoritmo o restituisce “vero” nel caso in cui l’algoritmo specificato come input termina o restituisce “falso” in caso contrario o algoritmo ipotetico (stiamo supponendo che possiamo svilupparlo in qualche modo, senza mostrare come farlo davvero) -prendiamo in input un nuovo algoritmo ed eseguiamo su di esso l’algoritmo “termina?” ->salviamo il risultato nella variabile “ha_terminato” si arriva sempre ad una contraddizione: se “ha_terminato” è vero continuo ad eseguire istruzioni all’infinito se “ha_terminato” è falso (l’algoritmo in input non termina) restituisco 0 e l’algoritmo termina -se prendo come algoritmo in input il 2° algoritmo arrivo ad un paradosso  l’algoritmo “termina?” afferma che un altro algoritmo non termina e viceversa -siamo in grado di implementare ogni passo di questo nuovo algoritmo

  • (diagramma di flusso di un algoritmo che non termina se l’algoritmo specificato in input termina (verificato attraverso l’uso di dell’algoritmo ipotetico “termina?”), e restituisce 0 in caso contrario) -cosa succede se cerchiamo di eseguire l’algoritmo * usando se stesso come input? Abbiamo due situazioni possibili:  l’algoritmo “termina?” afferma che il nostro algoritmo * termina (e conseguentemente (per come è definito) non termina l’esecuzione)  l’algoritmo “termina?” afferma che il nostro algoritmo * non termina (e conseguentemente (per come è definito) restituisce 0 e termina l’esecuzione)

qualunque sia il comportamento dell’algoritmo *, la sua esecuzione, passando se stesso come input, genera sempre una contraddizione ->unica spiegazione possibile = l’algoritmo ipotetico “termina?” che usiamo per decidere se un algoritmo termina o meno non può essere sviluppato -è dimostrato per assurdo che l’algoritmo che verifica se un altro termina non può esistere (risposta al problema della terminazione) -la macchina di Turing e le analisi su di essa hanno imposto dei limiti a quello che possiamo calcolare + hanno permesso di dimostrare che determinati problemi computazionali (terminazione) non possono essere risolti da nessun approccio algoritmico INFORMATICA 3 CHE COS’E’ UN LINGUAGGIO?

  • LINGUAGGIO “NATURALE” = linguaggio comune (italiano), scritto o orale, che si è evoluto in maniera naturale all’interno di una comunità -> vantaggio (e svantaggio) = sono così espressivi che specifiche istruzioni comunicate attraverso il loro uso possono sembrare ambigue -“la vecchia porta la sbarra” ->significa che c’è una vecchia porta che blocca qualcuno o che c’è una signora anziana che trasporta una sbarra? -spesso riusciamo a disambiguare il significato di una frase con convenzioni sociali / analizzando il contesto (restringendo il possibile significato di un pezzo di informazione) -i linguaggi naturali non sono formali per definizione -molti linguisti cercano di formalizzare i linguaggi naturali Noam Chomsky  importante accademico  padre della linguistica moderna (con Ferdinand de Saussure etc.)  principali ipotesi di ricerca sul linguaggio umano: (1) la sua struttura sintattica di base è rappresentabile mediante una teoria matematica (2) tale struttura è determinata biologicamente in tutti gli umani (già presente in noi sin dalla nascita ->caratteristica unica che si è evoluta nel tempo, condivisa soltanto dagli umani e non da altri animali) -->visione d molto dibattuta -->visione che ha fondato su basi rigorose la ricerca sulle relazioni tra competenza e produzione linguistica, sulle dinamiche e le interazioni tra capacità “innate” e sviluppo cognitivo e sociale delle abilità linguistiche -->visione che ha chiarito distinzioni come sintassi vs. semantica, lessico vs. discorso, tra rappresentazione logica e rappresentazioni mentali, etc.  ha classificato le grammatiche formali in una gerarchia
  • GRAMMATICA FORMALE = strumento matematico usato che definisce la sintassi di un linguaggio (sia naturale (italiano), sia (artificiale)) attraverso l’uso di un insieme finito di regole di produzione -le regole di produzione o permettono di costruire una qualunque frase valida in quello specifico linguaggio o si esprimono in forma premessa ::= espressione (notazione Backus-Naur o BNF) (premessa ed espressione possono contenere uno o più simboli del tipo):

*lettere dell’alfabeto greco  indicano una qualsiasi possibile combinazione di simboli terminali e non terminali (incluso il simbolo terminale vuoto, solitamente rappresentato con ε) I LINGUAGGI DI PROGRAMMAZIONE

  • quale meccanismo possiamo usare per chiedere a un computer di eseguire una particolare attività? -la soluzione è connessa con il canale comunicativo che vogliamo adottare  computer umano  linguaggio naturale (ad esempio l’italiano) / diagrammi di flusso per istruirlo sui passi algoritmici che deve compiere  computer elettronico  linguaggi di programmazione
  • LINGUAGGIO DI PROGRAMMAZIONE = linguaggio formale utilizzato per comunicare con un computer elettronico, con regole sintattiche sviluppate in modo tale da evitare possibili istruzioni ambigue (cosicché tutte le “frasi” componibili possano trasmettere un solo possibile significato) o solitamente basato su grammatiche libere dal contesto, in conformità con la classificazione Chomskiana o possono distinguersi per un basso o elevato livello di astrazione dal linguaggio propriamente in uso da un elaboratore elettronico per eseguire le operazioni o raggruppabili in tre macro insiemi: 1. LINGUAGGIO MACCHINA -insieme di istruzioni che possono essere eseguite direttamente dalla central processing unit (CPU) / processore di un computer elettronico -codice binario eseguibile (composto da una sequenza di 0 e 1) che definisce una funzione (ovvero, uno strumento che prende qualche input e produce un qualche output) per calcolare l’n-esimo numero di Fibonacci: 100010110101010000100100000010001000001111111010000000000111011 100000110101110000000000000000000000000000000000011000011100000 111111101000000010011101110000011010111000000000010000000000000 000000000001100001101010011101110110000000100000000000000000000

*CPU = cuore di funzionamento di un computer elettronico, componente che esegue esplicitamente le istruzioni specificate in un qualsiasi programma in esecuzione

2. LINGUAGGI DI PROGRAMMAZIONE A BASSO LIVELLO -forniscono un livello di astrazione sopra il linguaggio macchina -permettono di scrivere programmi in modo che siano un pochino più intellegibili dagli umani -linguaggio di questo tipo più famoso = l’Assembly (introduce simboli più comprensibili + una linea di codice in Assembly rappresenta una specifica istruzione in linguaggio macchina) la funzione per calcolare l’n-esimo numero di Fibonacci introdotta precedentemente può essere definita in Assembly come segue: 3. LINGUAGGI DI PROGRAMMAZIONE AD ALTO LIVELLO -linguaggi con forte livello di astrazione dal linguaggio macchina -possono usare parole proprie del linguaggio naturale per definire costrutti specifici, così da essere di più facile comprensione per un umano -più astrazione da un linguaggio di programmazione a basso livello è fornita, più comprensibile è il linguaggio -dimostrazione di come usare il linguaggio di programmazione Python per implementare la stessa funzione introdotta in precedenza: -Grace Brewster Murray Hopper

 man a mano che si va avanti, il numero di azioni che si devono far compiere al coniglio diventa più elevato  ci sono costrutti addizionali, proposti man a mano che i livelli salgono di difficoltà, per semplificare la specificazione di queste lunghe sequenze di azioni  un nuovo oggetto grafico (o costrutto) potrebbe essere quello che permette di raggruppare sequenze ripetitive di azioni e di eseguirle un numero definito di volte, ovviando al problema di indicarle tutte per esteso (diagramma di flusso: ripetizione resa con un oggetto grafico decisionale che controlla se la sequenza di azioni “fai due passi avanti” e “gira a destra” è stata eseguita il numero necessario di volte (4) per risolvere il problema computazionale, e così concludere l’algoritmo) -esistono anche altri linguaggi di programmazione visuale, più general-purpose (permettono di sviluppare algoritmi per risolvere problemi computazionali di vario genere)  Blockly , creato da Google  dispone di diversi costrutti propri dei linguaggi di programmazione tradizionali  propone i costrutti sotto forma di blocchetti che si possono incastrare uno sull’altro o uno dentro l’altro per definire le sequenze di operazioni di un algoritmo  Blocky ha un algoritmo che costruisce la sequenza di azioni precedenti (coniglio), inserendole dentro una lista nell’ordine in cui vanno fatte eseguire al coniglio ->inizializzazione di una variabile di istruzioni con una lista vuota ->nelle operazioni successive la lista vuota viene riempita con le operazioni che devono essere eseguite dal coniglio ->ogni nuova istruzione viene inserita alla fine della lista per mantenere il giusto ordine delle azioni della sequenza  Si possono utilizzare specifici costrutti di Blocky per permettere ripetizioni sistematiche di un gruppo di istruzioni

(utilizzo del costrutto repeat while do , che permette l’esecuzione di una sequenza di operazioni in esso contenute fintanto che la condizione del costrutto è vera) (azioni inserite all’interno della lista con un costrutto che permette la ripetizione di tre specifiche operazioni fintanto che la condizione iterazione < 4 è vera)  Blocky mette anche a disposizione un traduttore che permette di descrivere i vari passi dell’algoritmo implementato in uno tra cinque diversi linguaggi di programmazione (Listato 1 che mostra la traduzione in Python delle istruzioni di *) (implementazione in Python dell’algoritmo descritto in Blocky di *)

  • PYTHON = linguaggio di programmazione ad alto livello general-purpose  uno dei linguaggi più usati per il Web e per attività di analisi automatiche di dati e del linguaggio naturale  uno dei linguaggi più semplici con cui iniziare a studiare come programmare e creare applicazioni INFORMATICA 4 LA NASCITA DEGLI IPERTESTI
  • IPERTESTO = corpo di materiale scritto interconnesso in modo così tanto complesso che non è conveniente presentare su carta (web = gigantesco ipertesto) -1945 = prima idea di un’esemplificazione tecnologica dell’ipertesto, in un famoso articolo “As We May Think” di Vannevar Bush -Vannevar Bush  famoso ingegnere ed inventore statunitense  a capo dell’Agenzia Federale per la Ricerca e lo Sviluppo durante la seconda guerra mondiale  articolo pubblicato in The Atlantic Monthly  problema = reperimento, trasmissione, immagazzinamento di importanti ricerche in mezzo a una massa esponenzialmente crescente di pubblicazioni  problema della crescita esponenziale delle pubblicazioni (a carattere accademico e non) conseguentemente alle nuove scoperte scientifiche, da divulgare (+ meccanismi di produzione sempre più industrializzati)  divulgazione accademica = principale dominio di discussione  evidenziava come i meccanismi, che all’epoca erano ancora usati per trasmettere e/o revisionare i risultati di una ricerca, erano molto vecchi e per niente adatti a facilitarne la divulgazione

-1960 = Ted Nelson inizia a lavorare ad un nuovo progetto = XANADU  obiettivo = creare una rete di computer che potesse essere depositaria dell’intera conoscenza umana e che potesse essere estesa mediante dei collegamenti ipertestuali bidirezionali che permettessero di collegare tra loro idee contenute in diversi documenti  riprese il concetto di percorsi associativi di Vannevar Bush  introdusse una serie di concetti chiave: trasclusione e intertwingularity (concetto di processo associativo della conoscenza tipico degli umani) -nello stesso periodo, Douglas Engelbart aveva iniziato l’implementazione di un sistema rivoluzionario per l’epoca (creazione di ipertesti su un computer) = On-Line System (NLS)  impatto dirompente sullo stato corrente e futuro delle tecnologie informatiche disponibili all’epoca  il suo sviluppo aveva portato a innovazioni software (applicazioni e programmi a disposizione di un computer) e hardware (parte fisica e tangibile di un computer)  prima di NLS non esistevano le finestre per la visualizzazione dei contenuti, l’ipertesto, un sistema di videoconferenza, il mouse ecc. (fondamenti per lo sviluppo dei moderni computer e sistemi operativi) L’INVENZIONE DEL WORLD WIDE WEB -passarono anni prima di un’implementazione su scala mondiale di un ipertesto, il World Wide Web  idea di un giovane scienziato del CERN di Ginevra nel 1989, Tim Berners-Lee  progetto inizialmente respinto dai suoi superiori (“vago, ma eccitante”)  progetto ritrovato più tardi da Berners-Lee su una copia a disposizione del suo capo di allora poi accettato come progetto collaterale per testare le potenzialità di un nuovo computer (il NeXT, realizzato dall’omonima azienda di proprietà di Steve Jobs negli anni di separazione da Apple) appena comprato dal CERN  idea originale di Berners-Lee:  Web = ipertesto che descrivesse una varietà di risorse eterogenee (documenti, persone, gruppi di persone, organizzazioni, concetti astratti, e altro)  Possibilità di collegare tra loro queste risorse con collegamenti ipertestuali etichettati, per specificare la semantica del collegamento come parte esplicita del link  ispirato alle idee di Ted Nelson  infrastruttura con alcune semplificazioni rispetto Nelson: tutti i collegamenti ipertestuali del Web dovevano essere percorribili in un’unica direzione (contrariamente all’organizzazione originaria di Ted Nelson con tutti i collegamenti ipertestuali pensati per essere percorribili in una direzione o nell’altra indistintamente)  1° prototipo del Web (realizzato da Tim Berners-Lee) -> ulteriore semplificazione

  1. riduzione ad 1 solo documento / pagina Web
  2. riduzione ad 1 sola tipologia di risorse descrivibili
  3. permesso di 1 sola tipologia di collegamento ipertestuale (semplice riferimento (il documento A fa riferimento al documento B))  per realizzare questo, Berners-Lee sviluppò tecnologie basate su altre già esistenti e messe a disposizione negli anni precedenti ->per permettere agli utenti di creare documenti ipertestuali (l’Hypertext Markup Language, o HTML) ->per permettere agli utenti di mettere a disposizione i suddetti documenti ipertestuali sul Web (attraverso la creazione di server web) ->per permettere agli utenti di poterli richiedere con un opportuno identificativo (Uniform Resource Locator, o URL) e con uno specifico protocollo di comunicazione (l’Hypertext Transfer Protocol, o HTTP) ->per permettere agli utenti di visualizzarli su un computer (attraverso l’uso di un browser)  fondamenta del Web = queste tecnologie (tutt’ora in uso)

 Web evolutosi molto negli ultimi anni  Web conformatosi sempre più all’idea iniziale di Tim Berners-Lee (Web Semantico)

  • cosa succede quando si clicca su un collegamento ipertestuale (o link) di una pagina web? UNIFORM RESOURCE LOCATOR (URL) -dentro il frammento di testo sottolineato e solitamente colorato in blu/viola che può essere cliccato, c’è nascosto un oggetto invisibile che inizia per “http://” (o “https://”)  Uniform Resource Locator, o URL  sorta di nome (più propriamente, un indirizzo) della pagina web a cui il link punta  permette di accedere cliccandoci sopra  (metaforicamente) modo per raggiungere un oggetto specifico all’interno di una casa  la forma di un qualunque URL nel Web ha seguente struttura (elementi tra quadre = opzionali): ://[:][/][?] [#] varie parti:  SCHEMA = protocollo di comunicazione usato per richiedere informazioni sulla risorsa indicata dall’URL -(metaforicamente) mezzo di trasporto usato per raggiungere la casa che contiene il suddetto oggetto dal luogo in cui ci si trova -tipicamente “http” o “https”  HOST = nome / sequenza numerica associata al server web -ha a disposizione le informazioni della risorsa identificata dall’URL -(metaforicamente) indirizzo che identifica la particolare casa che contiene l’oggetto che si vuol  PORTA = numero che identifica il particolare servizio a disposizione sul server web a cui si vuole inoltrare la richiesta per avere informazioni sulla risorsa indicata dall’URL -ingresso della casa: principale/sul retro/dal giardino -se non viene specificato nell’URL, si usa sempre la porta di default associata al protocollo specificato (80 nel caso di “http”, 443 nel caso di “https”) (metaforicamente = accedere alla casa dall’ingresso principale)  PERCORSO = sequenza di locazioni all’interno del server web da raggiungere per ottenere la risorsa indicata dall’URL -separate da “/” -(metaforicamente) sequenza di locali della casa che devo attraversare per arrivare alla stanza che contiene l’oggetto che mi interessa (ultimo elemento del percorso)  INTERROGAZIONE = sequenza di coppie chiave=valore che è possibile comunicare al server web in modo da eseguire determinate operazioni sulla risorsa indicata dall’URL -separate da “&” -(metaforicamente) come se potessimo chiedere alla casa di eseguire determinate azioni (accendere le luci)  FRAMMENTO = sequenza di caratteri che permette di identificare una parte o una posizione specifica all’interno della risorsa indicata dall’URL -(metaforicamente) come se potessimo indicare uno specifico oggetto presente nella camera in cui siamo entrati