Il volume si rivolge in primo luogo agli studenti di un corso di laurea in area scientifica o ingegneristica che debbano affrontare un unico insegnamento di Informatica, nel quale vengono passati in rassegna tutti i diversi aspetti della disciplina.
Il testo è organizzato per livelli, a partire dai fondamenti algoritmici, per passare alle architetture hardware e software, alla programmazione in linguaggi di alto livello, alle applicazioni; il capitolo conclusivo affronta le più rilevanti implicazioni etiche e sociali dell’informatica.
Scopo principale degli autori è presentare l’informatica non come un insieme di strumenti e tecnologie, ma come una disciplina di base, che gioca un ruolo fondamentale, al pari della chimica o della fisica, in qualsiasi percorso formativo in ambito scientifico e tecnologico.
Capitolo 1 Introduzione all’informatica
1.1 Introduzione
1.2 Definizione di informatica
1.3 Algoritmi
1.3.1 La definizione formale di algoritmo
1.3.2 L’importanza della soluzione algoritmica dei problemi
1.4 Una breve storia dell’informatica
1.4.1 Il primo periodo: fino al 1940
1.4.2 La nascita dei computer: 1940-1950 VON NEUMANN (1903-1957)
1.4.3 L’età moderna: dal 1950 a oggi
1.5 Organizzazione del testo
Livello 1 I fondamenti algoritmici dell’informatica
Capitolo 2 Progettazione di algoritmi
2.1 Introduzione
2.2 Rappresentazione di algoritmi
2.2.1 Pseudocodice
2.2.2 Operazioni da eseguire in sequenza
2.2.3 Operazioni condizionate e iterative
2.3 Esempi di soluzione algoritmica di problemi
2.3.1 Esempio 1: Procedi e calcola un prodotto
2.3.2 Esempio 2: Cerca, cerca, cerca
2.3.3 Esempio 3: Grande, maggiore, massimo
2.3.4 Esempio 4: Trovare una corrispondenza
2.4 Conclusioni
Capitolo 3 L’efficienza degli algoritmi
3.1 Introduzione
3.2 Caratteristiche degli algoritmi
3.3 Misurare l’efficienza
3.3.1 Ricerca sequenziale
3.3.2 Ordine di grandezza – Ordine n
3.3.3 Ordinamento per selezione
3.3.4 Ordine di grandezza – Ordine n2
3.4 Analisi di algoritmi
3.4.1 Algoritmi di pulizia dei dati
3.4.2 Ricerca binaria
3.4.3 Pattern matching
3.4.4 Riassunto
3.5 Quando le cose sfuggono di mano
3.6 Riassunto del Livello 1
Livello 2 Il mondo dell’hardware
Capitolo 4 Elementi costruttivi: numeri binari, logica booleana e porte
4.1 Introduzione
4.2 Il sistema di numerazione binario
4.2.1 Rappresentazione binaria di informazioni numeriche e di testo
4.2.2 Rappresentazione binaria di suoni e immagini
4.2.3 L’affidabilità della rappresentazione binaria
4.2.4 Dispositivi per la memorizzazione binaria
4.3 Logica booleana e porte
4.3.1 Logica booleana
4.3.2 Porte
4.4 Costruire circuiti per computer
4.4.1 Introduzione
4.4.2 Un algoritmo per la progettazione di circuiti
4.4.3 Esempi di progettazione e costruzione di circuiti
4.5 Circuiti di controllo
4.6 Conclusione
Capitolo 5 Organizzazione dei sistemi di calcolo
5.1 Introduzione
5.2 I componenti di un sistema di calcolo
5.2.1 Memoria e cache
5.2.2 Ingresso/uscita e archiviazione di massa
5.2.3 L’unità aritmetico/logica
5.2.4 L’unità di controllo
5.3 Tutto insieme: l’architettura di Von Neumann
5.4 Macchine non di Von Neumann
5.5 Riassunto del Livello 2
Livello 3 La macchina virtuale
Capitolo 6 Introduzione al software di sistema e alle macchine virtuali
6.1 Introduzione
6.2 Il software di sistema
6.2.1 La macchina virtuale
6.2.2 Diversi tipi di software di sistema
6.3 Assemblatori e linguaggio assembly
6.3.1 Il linguaggio assembly
6.3.2 Esempi di codice in linguaggio assembly
6.3.3 Traduzione e caricamento
6.4 Sistemi operativi
6.4.1 Funzioni di un sistema operativo
6.4.2 Panoramica storica dello sviluppo dei sistemi operativi
6.4.3 Il futuro
Capitolo 7 Reti di calcolatori e cloud computing
7.1 Introduzione
7.2 I concetti di base delle
7.2.1 Linee di comunicazione
7.2.2 Reti locali (LAN)
7.2.3 WAN
7.2.4 Struttura globale di Internet
7.3 Protocolli di comunicazione
7.3.1 Strato fisico (Physical layer)
7.3.2 Strato di linea (Data Link layer)
7.3.3 Strato di rete (Network layer)
7.3.4 Strato di trasporto (Transport layer)
7.3.5 Strato applicativo (Application layer)
7.4 Servizi di rete
7.4.1 Comunicazioni interpersonali
7.4.2 Reti sociali
7.4.3 Condivisione di risorse
7.4.4 Commercio elettronico
7.5 Cloud computing
7.6 La storia di Internet e del World Wide Web
7.6.1 La rete Internet
7.6.2 Il World Wide Web
7.7 Conclusioni
Capitolo 8 Sicurezza delle informazioni
8.1 Introduzione
8.2 Minacce e difese
8.2.1 Autenticazione e autorizzazione
8.2.2 Minacce dalla rete
8.2.3 Cappelli bianchi e cappelli neri
8.3 Cifratura
8.3.1 Panoramica sulla cifratura
8.3.2 Semplici algoritmi di cifratura
8.3.3 DES
8.3.4 Sistemi a chiave pubblica
8.4 Sicurezza nella trasmissione web
8.5 Calcolatori embedded
8.6 Conclusioni
8.7 Riassunto del Livello 3
Livello 4 Il mondo del software
Capitolo 9 Introduzione alla programmazione in linguaggi di alto livello
9.1 L’evoluzione dei linguaggi
9.1.1 A che punto siamo e dove vogliamo andare?
9.1.2 Ritorno al binario
9.2 Una famiglia di linguaggi
9.3 Due esempi in cinque parti coordinate
9.3.1 Numero favorito
9.3.2 Pulizia dei dati (di nuovo)
9.4 Analisi delle caratteristiche
9.5 Soddisfazione delle aspettative
9.6 Il quadro generale: l’ingegneria del software
9.6.1 Aumento delle dimensioni
9.6.2 Il ciclo di sviluppo del software
9.6.3 Ambienti moderni
9.6.4 Sviluppo agile di software
9.7 Conclusione
Capitolo 10 La Torre di Babele: i linguaggi di programmazione
10.1 Perché Babele?
10.2 Linguaggi procedurali
10.2.1 Plankalkül
10.2.2 Fortran
10.2.3 COBOL
10.2.4 C/C++
10.2.5 Ada
10.2.6 Java
10.2.7 Python
10.2.8 C# e .NET
10.3 Linguaggi per problemi specifici
10.3.1 SQL
10.3.2 HTML
10.3.3 JavaScript
10.3.4 R
10.4 Paradigmi di programmazione alternativi
10.4.1 Programmazione funzionale
10.4.2 Programmazione logica
10.4.3 Programmazione parallela
10.5 Nuovi linguaggi, di continuo
10.5.1 Go
10.5.2 Swift
10.5.3 Milk
10.6 Conclusione
Capitolo 11 Compilatori e traduzione di linguaggi
11.1 Introduzione
11.2 Il processo di compilazione
11.2.1 Fase I: Analisi lessicale
11.2.2 Fase II: Analisi sintattica (parsing)
11.2.3 Fase III: Semantica e generazione del codice
11.2.4 Fase IV: Ottimizzazione del codice
11.3 Conclusione
Capitolo 12 Modelli di computazione
12.1 Introduzione
12.2 Cos’è un modello?
12.3 Un modello di agente di calcolo
12.3.1 Proprietà di un agente di calcolo
12.3.2 La Macchina di Turing
12.4 Il modello di un algoritmo
12.5 Esempi di macchine di Turing
12.5.1 Un invertitore di bit
12.5.2 Un generatore di bit di parità
12.5.3 Macchine per l’operazione di incremento con numeri unari
12.5.4 Una macchina per l’addizione unaria
12.6 La tesi di Church-Turing
12.7 Problemi irrisolvibili
12.8 Conclusione
12.9 Riassunto del Livello 4
Livello 5 Le applicazioni
Capitolo 13 Simulazioni e modelli
Introduzione
Conclusione
Capitolo 14 Ecommerce, basi di dati e data science
Introduzione
Conclusione
Capitolo 15 Intelligenza artificiale
Introduzione
Conclusione
Capitolo 16 Grafica e intrattenimento al computer: film, giochi e comunità virtuali .
Introduzione
Conclusione
Riassunto del Livello 5
I capitoli 13-16 sono disponibili online
Livello 6 Gli aspetti sociali
Capitolo 17 Computer, informazione e società: prendere decisioni
17.1 Introduzione
17.2 Casi di studio
17.2.1 Caso 1 - Condivisione o furto?
17.2.2 Caso 2 - Intercettazioni legali: privacy o sicurezza?
17.2.3 Caso 3 – Hacker: nemici pubblici o seccatori stimolanti?
17.2.4 Caso 4 – Informazioni genetiche e ricerca medica
17.3 Vita privata e social media
17.4 Notizie false, politica e social media
17.5 Conclusione
17.6 Riassunto del Livello 6
Indice analitico
Programmare in Python (online)
Programmare in Java (online)
Programmare in C++ (online)
Programmare in C# (online)
Programmare in Ada (online)
Soluzioni degli esercizi (online)