Questa macro categoria si concentra sui principi, i meccanismi e i concetti che governano l'interazione, l'efficienza, la competenza e la comunicazione dei modelli linguistici avanzati.
Terminologie che descrivono le modalità con cui un modello linguistico interagisce efficacemente con gli utenti e l'ambiente circostante.
Collaborativo e situazionalmente consapevole: Un modello linguistico che è in grado di lavorare insieme all'utente per raggiungere un obiettivo e che comprende il contesto specifico della conversazione o della richiesta.
Mantenere la conversazione fino a segnale di conclusione: La capacità del modello di continuare a interagire e fornire risposte pertinenti finché l'utente non indica esplicitamente la fine della conversazione.
Ricordare conversazioni precedenti: La funzione che permette al modello di conservare e richiamare informazioni da interazioni passate all'interno della stessa sessione o attraverso sessioni diverse, mantenendo coerenza e contesto.
Rispondere in modo appropriato al contesto: La capacità di generare risposte che non solo siano grammaticalmente corrette, ma che siano anche rilevanti e adatte alla situazione specifica e alle informazioni fornite dall'utente.
Empatia: Nel contesto dei modelli linguistici, si riferisce alla capacità di interpretare e rispondere in modo adeguato ai segnali emotivi o al tono dell'utente, creando un'interazione più umana e comprensiva.
Personalizzazione: L'adattamento delle risposte e dello stile comunicativo del modello alle preferenze individuali, alla storia di interazione o alle esigenze specifiche dell'utente.
Feedback Loop: Un meccanismo in cui l'output del modello viene valutato (dall'utente o da un sistema automatico) e le informazioni risultanti vengono utilizzate per migliorare le prestazioni future del modello.
Terminologie relative all'ottimizzazione delle prestazioni del modello e alla focalizzazione sulle informazioni essenziali.
Affidabile ed efficiente: Descrive un modello che fornisce risultati coerenti e corretti in modo tempestivo e con un utilizzo ottimale delle risorse.
Fornire risposte significative e utili rapidamente: La capacità del modello di elaborare la richiesta e generare un output di valore in un breve lasso di tempo, migliorando l'esperienza dell'utente.
Concentrarsi sulle informazioni rilevanti: La tendenza del modello a identificare e utilizzare i dati e i concetti più importanti per rispondere a una query, ignorando i dettagli superflui.
Evitare ripetizioni, tangenti, preamboli: La pratica di generare risposte concise e dirette, evitando di ripetersi, divagare dall'argomento principale o includere introduzioni non necessarie.
Dichiarare l'impossibilità di rispondere o agire: La trasparenza del modello nel comunicare all'utente quando una richiesta non può essere soddisfatta, sia per mancanza di informazioni che per limiti tecnici o etici.
Rilevanza e Coerenza Tematica: Assicurare che le risposte del modello siano attinenti all'argomento trattato e mantengano una logica interna e una fluidità discorsiva.
Terminologie che definiscono la conoscenza del modello e la sua capacità di fornire informazioni dettagliate e perspicaci.
Competente e perspicace: Un modello che possiede una vasta base di conoscenza e che è in grado di analizzare le informazioni in modo acuto, offrendo intuizioni profonde.
Integrare vasta conoscenza: La capacità del modello di attingere e combinare informazioni da un ampio spettro di argomenti e discipline per formulare una risposta.
Offrire spunti, prospettive, fatti non facilmente reperibili: La capacità del modello di andare oltre la semplice aggregazione di informazioni, fornendo analisi originali, punti di vista differenti o dati difficili da trovare altrove.
Capacità di Astrazione e Generalizzazione: L'abilità del modello di identificare concetti generali da esempi specifici e di applicare principi appresi a situazioni nuove o diverse.
Terminologie relative allo stile comunicativo e all'atteggiamento del modello durante l'interazione.
Caldo e vibrante: Descrive un tono comunicativo amichevole, energico e accogliente.
Essere amichevole, premuroso, rispettoso (quando appropriato): Adottare un atteggiamento positivo e cortese, dimostrando attenzione alle esigenze dell'utente e mantenendo un comportamento rispettoso.
Mettere l'utente a proprio agio: Creare un ambiente di interazione rilassato e confortevole per l'utente.
Evitare atteggiamenti paternalistici o giudicanti: Astenersi dal comportarsi in modo superiore o esprimere giudizi sulle richieste o opinioni dell'utente.
Aperto mentalmente e rispettoso: Essere disposti a considerare diverse prospettive e trattare le opinioni altrui con riguardo.
Mantenere una prospettiva equilibrata: Presentare informazioni e argomenti in modo imparziale, considerando i pro e i contro o i diversi punti di vista.
Mostrare interesse per diverse opinioni: Dimostrare curiosità e considerazione per i pareri espressi dagli utenti o presenti nei dati di addestramento.
Esplorare idee da più angolazioni: Analizzare un argomento o un problema considerando varie prospettive e sfaccettature.
Terminologie che riguardano le modalità di presentazione delle informazioni e la chiarezza sui limiti del modello.
Stile e Formattazione: Le scelte stilistiche e le regole di impaginazione utilizzate per presentare le risposte in modo chiaro e leggibile.
Utilizzare voce attiva, linguaggio chiaro ed espressivo: Preferire costruzioni grammaticali dirette e impiegare un vocabolario preciso e vivace per rendere le risposte più efficaci.
Organizzare le idee in modo logico e sequenziale: Strutturare le informazioni seguendo un filo conduttore coerente e progressivo.
Variare struttura delle frasi, scelta delle parole, idiomi: Utilizzare diverse costruzioni sintattiche, sinonimi e espressioni idiomatiche per arricchire il testo ed evitare la monotonia.
Utilizzare LaTeX per notazioni matematiche/scientifiche (entro $): Adottare il sistema di composizione tipografica LaTeX, racchiuso tra i simboli del dollaro, per rappresentare formule e simboli complessi in ambito matematico e scientifico.
Non usare LaTeX in blocchi latex se non richiesto: Evitare l'uso di ambienti LaTeX specifici (come \begin{equation} o
...
) a meno che non sia esplicitamente richiesto, preferendo la notazione inline con singoli dollari.
Trasparenza (nei limiti): Essere aperti e chiari riguardo alle fonti di informazione utilizzate, ai processi decisionali (quando possibile) e ai potenziali limiti del modello.
Gestione dell'Ambiguità: La capacità del modello di identificare e, se possibile, chiarire le ambiguità presenti nelle richieste dell'utente o nei dati.
Limitazioni Consapevoli: La conoscenza e la comunicazione da parte del modello dei propri confini, come la mancanza di conoscenza su eventi molto recenti o l'incapacità di eseguire determinate azioni nel mondo reale.
Terminologie tecniche fondamentali nel campo dell'elaborazione del linguaggio naturale.
Tokenization: Il processo di suddividere un testo in unità più piccole chiamate "token", che possono essere parole, sottoparole o caratteri.
Embeddings: Rappresentazioni numeriche (vettori) di parole, frasi o altri token che catturano il loro significato semantico e le relazioni con altri token.
Transformer Architecture: Un'architettura di rete neurale, particolarmente efficace per le attività di sequenza a sequenza come la traduzione e la generazione di testo, basata sul meccanismo di attenzione (attention mechanism).
Fine-tuning: Il processo di adattare un modello pre-addestrato su un vasto corpus di dati a un compito specifico o a un dataset più piccolo, migliorandone le prestazioni per quel particolare scopo.
Prompt Engineering: L'arte e la scienza di formulare input (prompt) efficaci per i modelli linguistici al fine di ottenere l'output desiderato.
Questa macro categoria copre i concetti base, i principi teorici e le strutture fondamentali che sono alla base di tutti i sistemi informatici.
Le definizioni essenziali per comprendere il funzionamento dei computer e del software.
Dato: Una rappresentazione elementare di un fatto, un'osservazione o una misura.
Informazione: Dati elaborati, organizzati e strutturati in un contesto significativo.
Algoritmo: Una sequenza finita e ordinata di istruzioni ben definite per risolvere un problema o eseguire un compito.
Programma: Una serie di istruzioni scritte in un linguaggio di programmazione che un computer può eseguire.
Software: L'insieme dei programmi, dei dati e della documentazione correlata che istruisce l'hardware su cosa fare.
Hardware: Le componenti fisiche di un computer o di un sistema informatico.
Sistema Operativo: Un software fondamentale che gestisce le risorse hardware e software del computer e fornisce servizi comuni per i programmi applicativi.
File: Una collezione di dati correlati memorizzati su un supporto di memoria, identificato da un nome.
Cartella/Directory: Uno spazio virtuale utilizzato per organizzare e raggruppare file e altre cartelle su un supporto di memoria.
Bit: L'unità più piccola di informazione in un computer, che può assumere i valori 0 o 1.
Byte: Un gruppo di 8 bit, comunemente utilizzato come unità di misura fondamentale della memoria e dello spazio di archiviazione.
Memoria: Il componente hardware utilizzato per memorizzare temporaneamente o permanentemente dati e istruzioni (es. RAM, ROM).
Processore (CPU): L'unità centrale di elaborazione, responsabile dell'esecuzione delle istruzioni dei programmi.
Input: I dati o i segnali forniti a un sistema informatico.
Output: I risultati o i segnali prodotti da un sistema informatico.
Astrazione: Il processo di nascondere i dettagli complessi e mostrare solo le funzionalità essenziali, semplificando la gestione dei sistemi informatici.
Descrizioni dei modelli fondamentali di organizzazione dei componenti hardware di un computer.
Architettura di Von Neumann: Un modello architetturale in cui le istruzioni del programma e i dati sono memorizzati nello stesso spazio di memoria e vengono trasferiti tramite un singolo bus.
Architettura Harvard: Un modello architetturale che utilizza spazi di memoria separati e bus dedicati per le istruzioni e i dati, consentendo un accesso simultaneo e potenzialmente più veloce.
Bus di indirizzamento: Un insieme di linee fisiche utilizzate per trasmettere gli indirizzi di memoria o delle periferiche a cui la CPU vuole accedere.
Bus dati: Un insieme di linee fisiche utilizzate per trasmettere i dati tra la CPU, la memoria e le periferiche.
Bus di controllo: Un insieme di linee fisiche utilizzate per trasmettere i segnali di controllo che sincronizzano le operazioni tra i vari componenti del computer.
Ciclo Fetch-Decode-Execute: Il ciclo fondamentale di funzionamento della CPU, che consiste nel prelevare (fetch) un'istruzione dalla memoria, interpretarla (decode) e infine eseguirla (execute).
Interruzione (Interrupt): Un segnale inviato a un processore che indica un evento che richiede attenzione immediata, interrompendo l'esecuzione del programma corrente per gestire l'evento.
Terminologie relative alla velocità, efficienza e capacità di un sistema informatico di gestire carichi di lavoro.
Parallelismo: L'esecuzione simultanea di più compiti o istruzioni su hardware che dispone di più unità di elaborazione (es. multi-core CPU).
Concorrenza: La gestione di più compiti che sembrano essere eseguiti simultaneamente (alternando l'esecuzione su una singola CPU) o che sono effettivamente eseguiti in parallelo su più CPU.
Throughput: La quantità di lavoro completato da un sistema in un dato periodo di tempo.
Latenza: Il tempo impiegato per un segnale o un dato per viaggiare da un punto all'altro di un sistema.
Scalabilità: La capacità di un sistema di gestire un carico di lavoro crescente o di espandersi per soddisfare maggiori esigenze.
Affidabilità: La probabilità che un sistema funzioni correttamente senza guasti per un determinato periodo di tempo.
Disponibilità: La misura in cui un sistema è operativo e accessibile quando necessario.
Concetti matematici e teorici alla base dell'informatica.
Teoria della computabilità: Lo studio di quali problemi possono essere risolti da un computer e quali no.
Macchina di Turing: Un modello teorico di calcolo che definisce un dispositivo in grado di manipolare simboli su un nastro secondo un insieme di regole, utilizzato per studiare i limiti della computabilità.
Problema della fermata: Un problema indecidibile in informatica teorica, che chiede se sia possibile determinare, dato un programma e il suo input, se il programma terminerà o continuerà all'infinito.
Complessità algoritmica: La misura delle risorse (tempo e spazio di memoria) richieste da un algoritmo per risolvere un problema in funzione della dimensione dell'input.
Big O notation: Una notazione matematica utilizzata per descrivere il comportamento asintotico della complessità di un algoritmo, ovvero come crescono le risorse richieste all'aumentare della dimensione dell'input.
Logica booleana: Un sistema logico basato su due valori di verità, vero (True) e falso (False), e operatori logici come AND, OR e NOT.
Algebra di Boole: Un ramo dell'algebra che tratta variabili che possono assumere solo due valori (tipicamente 0 e 1) e operatori che rappresentano operazioni logiche.
Sistemi numerici (binario, esadecimale): Metodi per rappresentare i numeri; il sistema binario utilizza solo le cifre 0 e 1 (base 2), mentre il sistema esadecimale utilizza 16 simboli (0-9 e A-F, base 16), spesso usato in informatica per la sua compattezza rispetto al binario.
Organizzazioni specifiche di dati e procedure per manipolarli efficacemente.
Array: Una collezione di elementi dello stesso tipo memorizzati in posizioni contigue di memoria, accessibili tramite un indice.
Liste concatenate (Linked Lists): Una struttura dati lineare in cui gli elementi non sono necessariamente memorizzati in posizioni contigue, ma ogni elemento contiene un puntatore al successivo.
Alberi (Trees): Strutture dati gerarchiche composte da nodi collegati da archi, con un nodo radice e nodi figli.
Grafi (Graphs): Strutture dati costituite da un insieme di vertici (nodi) e un insieme di spigoli (archi) che collegano coppie di vertici, utilizzate per rappresentare relazioni complesse.
Tabelle Hash (Hash Tables): Strutture dati che associano chiavi a valori, consentendo un accesso rapido ai dati tramite una funzione hash che calcola un indice per la posizione di archiviazione.
Algoritmi di Ordinamento (Sorting Algorithms): Procedure per disporre gli elementi di una lista o di un array in un ordine specifico (es. numerico o alfabetico).
Algoritmi di Ricerca (Searching Algorithms): Procedure per trovare uno o più elementi all'interno di una struttura dati.
Ricorsione (Recursion): Una tecnica di programmazione in cui una funzione chiama se stessa per risolvere un problema, suddividendolo in sottoproblemi più piccoli dello stesso tipo.
Questa macro categoria esplora i componenti fisici di un computer e come interagiscono tra loro.
I blocchi costitutivi fondamentali di un sistema hardware.
CPU (Central Processing Unit) / Processore: Il "cervello" del computer, esegue le istruzioni dei programmi e coordina le operazioni degli altri componenti.
RAM (Random Access Memory) / Memoria volatile: Una memoria ad accesso casuale utilizzata per memorizzare temporaneamente i dati e le istruzioni dei programmi in esecuzione; i dati vengono persi quando l'alimentazione viene interrotta.
ROM (Read-Only Memory): Una memoria di sola lettura che contiene istruzioni permanenti necessarie all'avvio del computer; i dati non vengono persi senza alimentazione.
Scheda Madre (Motherboard): La scheda principale che collega tutti i componenti hardware del computer, fornendo le connessioni e i bus per la loro comunicazione.
GPU (Graphics Processing Unit) / Scheda Video: Un processore specializzato nella elaborazione delle immagini e dei video, fondamentale per la grafica e, sempre più spesso, per calcoli paralleli.
Disco Rigido (Hard Disk Drive - HDD): Un dispositivo di archiviazione magnetico che memorizza dati in modo permanente su piatti rotanti.
Unità a Stato Solido (Solid State Drive - SSD): Un dispositivo di archiviazione che utilizza memoria flash per memorizzare dati in modo permanente, offrendo velocità di accesso molto superiori rispetto agli HDD.
Periferiche: Dispositivi esterni collegati al computer per l'input (es. tastiera, mouse), l'output (es. monitor, stampante) o l'archiviazione (es. chiavetta USB).
BIOS (Basic Input/Output System): Un firmware memorizzato sulla scheda madre che esegue test iniziali all'avvio del computer e carica il sistema operativo.
UEFI (Unified Extensible Firmware Interface): Un'interfaccia firmware più moderna e flessibile che sostituisce il BIOS nella maggior parte dei computer recenti.
Chipset: Un insieme di circuiti integrati sulla scheda madre che gestiscono il flusso di dati tra la CPU, la memoria e le periferiche.
Controller (di memoria, disco, ecc.): Componenti hardware o software che gestiscono l'interazione tra la CPU e specifici tipi di dispositivi (es. controller di memoria gestisce la RAM, controller di disco gestisce gli HDD/SSD).
RAID (Redundant Array of Independent Disks): Una tecnologia che combina più dischi rigidi in un'unica unità logica per migliorare le prestazioni o fornire ridondanza dei dati.
Scheda di rete (NIC - Network Interface Card): Un componente hardware che consente a un computer di connettersi a una rete.
Scheda audio: Un componente hardware che gestisce l'input e l'output audio del computer.
Alimentatore: Il componente che fornisce energia elettrica a tutti gli altri componenti del computer.
Case/Chassis: La struttura fisica che contiene e protegge i componenti interni del computer.
Dissipatore di calore: Un componente (spesso combinato con una ventola) utilizzato per assorbire e disperdere il calore generato da componenti come la CPU o la GPU.
Dispositivi e tecnologie per l'interazione utente e lo scambio di dati.
Touchscreen: Uno schermo che rileva il tocco diretto dell'utente, consentendo l'interazione senza l'uso di tastiera o mouse tradizionali.
Trackpad: Un dispositivo di puntamento piatto e sensibile al tocco, comunemente trovato sui computer portatili, che consente di controllare il cursore sullo schermo.
Webcam: Una telecamera digitale collegata a un computer, utilizzata per acquisire immagini o video, spesso per videoconferenze o streaming.
Lettore ottico (CD/DVD/Blu-ray): Un dispositivo che utilizza un laser per leggere dati da dischi ottici come CD, DVD o Blu-ray.
Dettagli sull'organizzazione interna del processore e delle gerarchie di memoria.
Registri della CPU: Piccole aree di memoria ad altissima velocità all'interno della CPU, utilizzate per memorizzare temporaneamente dati e istruzioni durante l'elaborazione.
ALU (Arithmetic Logic Unit): La parte della CPU responsabile dell'esecuzione delle operazioni aritmetiche (addizione, sottrazione, ecc.) e logiche (AND, OR, NOT).
Unità di controllo: La parte della CPU che dirige e coordina tutte le operazioni del processore, interpretando le istruzioni e generando i segnali di controllo necessari.
Memorie cache (L1, L2, L3): Piccole memorie ad alta velocità situate vicino alla CPU, utilizzate per memorizzare copie dei dati e delle istruzioni più frequentemente utilizzate dalla RAM, riducendo i tempi di accesso. L1 è la più veloce e vicina, seguita da L2 e L3.
SRAM (Static Random-Access Memory): Un tipo di RAM che mantiene i dati finché l'alimentazione è presente, più veloce e costosa della DRAM, spesso utilizzata per le memorie cache.
DRAM (Dynamic Random-Access Memory): Un tipo di RAM che richiede un aggiornamento periodico per mantenere i dati, più lenta ed economica della SRAM, comunemente utilizzata come memoria principale (RAM).
EEPROM (Electrically Erasable Programmable Read-Only Memory): Un tipo di memoria ROM che può essere letta, cancellata e riprogrammata elettricamente.
Memoria Flash (Flash Memory): Un tipo di EEPROM che consente la cancellazione e la scrittura di blocchi di dati interi, ampiamente utilizzata in SSD, chiavette USB e schede di memoria.
I percorsi e le tecnologie utilizzate per la comunicazione tra i componenti hardware.
Bus PCIe: PCI Express, uno standard di bus di espansione seriale ad alta velocità utilizzato per collegare periferiche come schede grafiche, schede di rete e SSD alla scheda madre.
NVMe: Non-Volatile Memory Express, un'interfaccia ad alte prestazioni progettata specificamente per accedere alle unità SSD tramite il bus PCIe, riducendo la latenza.
SATA (Serial ATA): Serial Advanced Technology Attachment, un'interfaccia standard per collegare dispositivi di archiviazione come HDD e SSD alla scheda madre.
USB (Universal Serial Bus): Uno standard di interfaccia comune per collegare un'ampia gamma di periferiche esterne (es. tastiere, mouse, stampanti, unità di archiviazione) al computer.
Altri dispositivi fisici rilevanti in un sistema informatico.
Modem: Un dispositivo che converte i segnali digitali del computer in segnali analogici per la trasmissione su linee telefoniche o via cavo, e viceversa.
Hub: Un semplice dispositivo di rete che collega più dispositivi, trasmettendo i dati ricevuti da una porta a tutte le altre porte, senza analizzare il traffico.
Repeater: Un dispositivo che amplifica e ritrasmette un segnale per estenderne la portata.
Tecnologie di Display (LCD, LED, OLED): Diverse tecnologie utilizzate per creare gli schermi dei monitor e dei dispositivi mobili, basate su cristalli liquidi (LCD), diodi a emissione di luce (LED) o diodi organici a emissione di luce (OLED).
Questa macro categoria copre i vari tipi di software, gli strumenti utilizzati per crearli e i principi che guidano il processo di sviluppo.
Classificazione del software e degli ambienti di lavoro per i programmatori.
Sistema Operativo (Operating System - OS): Software di base che gestisce l'hardware e le risorse del sistema, fornendo un'interfaccia per l'utente e per l'esecuzione delle applicazioni.
Applicazione (App): Un programma progettato per eseguire un compito specifico o fornire una funzionalità all'utente (es. browser web, elaboratore di testi).
Driver: Un software che consente al sistema operativo di comunicare e interagire con un dispositivo hardware specifico.
Firmware: Un tipo di software memorizzato nella memoria non volatile di un dispositivo hardware (es. BIOS, firmware di router) che fornisce le istruzioni di base per il suo funzionamento.
Linguaggio di Programmazione: Un linguaggio formale utilizzato per scrivere istruzioni che un computer può eseguire (es. Python, Java, C++).
Algoritmo: Una sequenza di passaggi ben definiti per risolvere un problema o eseguire un compito, che viene poi implementata in un programma.
Middleware: Software che funge da ponte tra i sistemi operativi o i database e le applicazioni, facilitando la comunicazione e la gestione dei dati.
API (Application Programming Interface): Un insieme di regole e definizioni che consente a diverse applicazioni software di interagire tra loro.
SDK (Software Development Kit): Un pacchetto di strumenti, librerie, documentazione ed esempi di codice che gli sviluppatori utilizzano per creare applicazioni per una specifica piattaforma o tecnologia.
IDE (Integrated Development Environment): Un ambiente software che fornisce agli sviluppatori un set integrato di strumenti per la scrittura, il debug e il testing del codice (es. editor di codice, debugger, compilatore).
Debugger: Uno strumento utilizzato dagli sviluppatori per individuare e correggere errori (bug) nel codice di un programma.
Profiler: Uno strumento utilizzato per analizzare le prestazioni di un programma, identificando le parti che consumano più tempo o risorse.
Compilatore (Compiler): Un programma che traduce il codice sorgente scritto in un linguaggio di programmazione di alto livello in codice macchina o codice intermedio che può essere eseguito dal computer.
Interprete (Interpreter): Un programma che esegue direttamente il codice sorgente di un linguaggio di programmazione, traducendo ed eseguendo istruzione per istruzione.
Strumenti e pratiche per gestire le modifiche al codice sorgente nel tempo.
Repository (Git repository): Un archivio che contiene tutti i file di un progetto, insieme alla storia completa delle modifiche (commit). Git è uno dei sistemi di controllo versione distribuiti più popolari.
Branch (in Git): Una linea di sviluppo indipendente all'interno di un repository Git, che consente agli sviluppatori di lavorare su nuove funzionalità o correzioni senza influenzare la linea di sviluppo principale.
Merge (in Git): Il processo di combinare le modifiche da un branch all'interno di un altro branch.
Linee guida, modelli e approcci per la progettazione e la costruzione di software.
Refactoring: Il processo di ristrutturare il codice esistente senza modificarne il comportamento esterno, al fine di migliorarne la leggibilità, la manutenibilità e l'efficienza.
Design Pattern: Soluzioni riutilizzabili e collaudate a problemi comuni di progettazione software.
Architettura Software: La struttura fondamentale di un sistema software, che definisce l'organizzazione dei suoi componenti, le loro relazioni e i principi che guidano la sua progettazione ed evoluzione.
Metodologie di sviluppo (Waterfall): Approcci strutturati per la gestione dei progetti software; Waterfall è un modello sequenziale in cui ogni fase deve essere completata prima di passare alla successiva.
Principi di progettazione (SOLID): Un acronimo che rappresenta cinque principi fondamentali della programmazione orientata agli oggetti per creare software più flessibile e manutenibile: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion.
Pattern architetturali (MVC, MVVM): Modelli di alto livello per organizzare la struttura di un'applicazione software; MVC (Model-View-Controller) e MVVM (Model-View-ViewModel) sono pattern comuni nell'ingegneria del software, specialmente nello sviluppo di interfacce utente.
Ingegneria del software: La disciplina che si occupa della progettazione, dello sviluppo, del testing e della manutenzione del software in modo sistematico, disciplinato e quantificabile.
Pattern Architetturali Aggiuntivi (Aggiuntivo): Altri modelli strutturali per l'organizzazione del software.
Event Sourcing: Un pattern in cui tutte le modifiche allo stato dell'applicazione sono memorizzate come una sequenza immutabile di eventi.
Microkernel: Un pattern architetturale in cui il nucleo del sistema operativo (kernel) fornisce solo le funzionalità minime essenziali, mentre altri servizi sono implementati come processi separati.
Processi e tecniche per verificare che il software funzioni correttamente.
Test (unitario, integrazione, di sistema, utente, mocking, stubbing): Diverse fasi e approcci per testare il software; il test unitario verifica singole unità di codice, l'integrazione testa l'interazione tra i moduli, il test di sistema verifica il sistema completo, il test utente coinvolge gli utenti finali, mocking e stubbing sono tecniche per isolare le dipendenze durante i test.
Tipi di Test Aggiuntivi (Aggiuntivo): Ulteriori categorie di test software.
Test di Integrazione (Integration Testing): Verifica che moduli o componenti diversi di un'applicazione funzionino correttamente quando vengono combinati.
Test di Sistema (System Testing): Valuta il sistema software completo e integrato per verificarne la conformità ai requisiti specificati.
Test di Accettazione (Acceptance Testing): Un test formale condotto per determinare se un sistema soddisfa i requisiti di business e se è pronto per la distribuzione.
Test di Regressione (Regression Testing): Eseguito per garantire che le modifiche apportate a un software non abbiano introdotto nuovi bug o riattivato bug precedentemente risolti.
Test di Performance (Performance Testing): Valuta la velocità, la reattività e la stabilità di un'applicazione sotto un determinato carico di lavoro.
Test di Carico (Load Testing): Un tipo di test di performance che valuta il comportamento di un'applicazione sotto carichi di lavoro normali e di picco previsti.
Test di Stress (Stress Testing): Un tipo di test di performance che valuta il comportamento di un'applicazione sotto carichi di lavoro estremi, oltre i limiti operativi normali, per determinarne il punto di rottura.
Test di Sicurezza (Security Testing): Valuta la capacità di un sistema software di proteggere i dati e le funzionalità da accessi non autorizzati o attacchi.
Test di Usabilità (Usability Testing): Valuta quanto sia facile per gli utenti finali utilizzare un'applicazione e raggiungere i loro obiettivi.
Diversi stili e approcci per strutturare il codice e risolvere i problemi di programmazione.
Imperativo: Un paradigma in cui il programmatore specifica una sequenza di istruzioni che il computer deve eseguire per modificare lo stato del programma.
Orientato agli oggetti: Un paradigma basato sul concetto di "oggetti", che sono istanze di classi e contengono dati (attributi) e codice (metodi) che operano su tali dati.
Funzionale: Un paradigma in cui la computazione è trattata come la valutazione di funzioni matematiche e si evita la modifica dello stato e dei dati mutabili.
Concetti di Programmazione Orientata agli Oggetti (Aggiuntivo): Principi fondamentali del paradigma orientato agli oggetti.
Polimorfismo (Polymorphism): La capacità di oggetti diversi di rispondere allo stesso messaggio o chiamata di funzione in modi diversi, in base al loro tipo.
Incapsulamento (Encapsulation): Il raggruppamento di dati e metodi che operano su quei dati all'interno di un'unica unità (classe) e la limitazione dell'accesso diretto ai dati dall'esterno.
Ereditarietà (Inheritance): Un meccanismo che consente a una nuova classe (sottoclasse) di ereditare proprietà e comportamenti da una classe esistente (superclasse), promuovendo il riutilizzo del codice.
Astrazione (Abstraction): Il processo di nascondere i dettagli complessi di un oggetto e mostrare solo le caratteristiche essenziali rilevanti per l'utente.
Concetti di Programmazione Funzionale (Aggiuntivo): Principi chiave del paradigma funzionale.
Immutabilità (Immutability): Il principio secondo cui lo stato dei dati non può essere modificato dopo la loro creazione; qualsiasi "modifica" produce una nuova copia dei dati.
Funzioni Pure (Pure Functions): Funzioni che restituiscono sempre lo stesso output per gli stessi input e non hanno effetti collaterali (non modificano lo stato esterno).
Funzioni di Ordine Superiore (Higher-Order Functions): Funzioni che accettano altre funzioni come argomenti o restituiscono funzioni come risultato.
La creazione della parte di un'applicazione con cui l'utente interagisce direttamente nel browser o su un dispositivo mobile.
Interfaccia Utente (User Interface - UI): La parte visibile e interattiva di un'applicazione con cui l'utente interagisce (es. pulsanti, menu, moduli).
Esperienza Utente (User Experience - UX): L'insieme delle percezioni e delle reazioni di una persona derivanti dall'uso o dall'esperienza anticipata di un prodotto, sistema o servizio; si concentra sulla facilità d'uso, l'efficacia e la soddisfazione complessiva.
Framework Front-End (React, Angular, Vue.js, Svelte): Strumenti software che forniscono una struttura e un set di componenti predefiniti per semplificare e accelerare lo sviluppo di interfacce utente complesse e reattive.
Libreria JavaScript (jQuery, Lodash): Collezioni di codice JavaScript pre-scritto che fornisce funzionalità comuni per semplificare compiti come la manipolazione del DOM, la gestione degli eventi o l'elaborazione dei dati.
Componente: Una parte autonoma e riutilizzabile dell'interfaccia utente, che incapsula la propria logica, il proprio aspetto e il proprio comportamento.
Stato (State): I dati che rappresentano lo stato attuale di un componente o di un'applicazione e che possono cambiare nel tempo, influenzando la visualizzazione dell'interfaccia utente.
Props (Properties): Dati che vengono passati da un componente genitore a un componente figlio per configurarne il comportamento o il contenuto.
Rendering: Il processo di generare l'output visibile di un'applicazione nell'interfaccia utente, spesso trasformando lo stato dei dati in elementi grafici.
DOM (Document Object Model): Una rappresentazione ad albero della struttura di un documento HTML o XML, che consente ai linguaggi di scripting (come JavaScript) di accedere e manipolare il contenuto, la struttura e lo stile del documento.
API (Application Programming Interface): Nel contesto front-end, spesso si riferisce alle API web fornite dai browser (es. API del DOM, API Fetch per le richieste HTTP) o alle API esposte dal back-end con cui il front-end interagisce.
Responsive Design: Una metodologia di progettazione web che mira a creare siti web che si adattano e si visualizzano correttamente su una varietà di dispositivi e dimensioni dello schermo (desktop, tablet, smartphone).
CSS (Cascading Style Sheets): Un linguaggio a fogli di stile utilizzato per descrivere la presentazione di un documento scritto in HTML o XML, controllando l'aspetto, il layout e la formattazione degli elementi.
HTML (HyperText Markup Language): Il linguaggio di markup standard utilizzato per creare la struttura e il contenuto delle pagine web.
JavaScript (JS): Un linguaggio di programmazione interpretato, ampiamente utilizzato per rendere le pagine web interattive e dinamiche.
Single Page Application (SPA): Un'applicazione web che carica una singola pagina HTML e aggiorna dinamicamente il contenuto al variare delle interazioni dell'utente, senza richiedere ricaricamenti completi della pagina.
Routing: Nel contesto delle SPA, il processo di gestire la navigazione tra diverse "viste" o componenti dell'applicazione lato client, aggiornando l'URL senza ricaricare la pagina.
Progressive Web Apps (PWAs): Applicazioni web che utilizzano moderne capacità del browser per offrire un'esperienza utente simile a quella delle applicazioni native, inclusa la funzionalità offline e le notifiche push.
WebSockets: Una tecnologia che consente una comunicazione bidirezionale persistente tra il browser del client e un server su una singola connessione TCP, abilitando aggiornamenti in tempo reale.
WebAssembly (Wasm) (Aggiuntivo): Un formato di istruzioni binarie a basso livello per una macchina virtuale basata su stack, progettato come target di compilazione portatile per linguaggi di alto livello (come C, C++) sul web.
Strumenti di Build (es. Webpack, Babel) (Aggiuntivo): Software utilizzati nel processo di sviluppo front-end per automatizzare compiti come la compilazione del codice (es. da linguaggi moderni a JavaScript compatibile con browser più vecchi), la gestione delle dipendenze, la minificazione e il bundling dei file.
La creazione della parte di un'applicazione che gira sul server, gestendo la logica di business, i database e l'interazione con i servizi esterni.
Back-end Development: Il processo di creazione e manutenzione del software lato server che gestisce l'elaborazione dei dati, la logica dell'applicazione e l'interazione con i database e altri servizi.
Framework Back-End (Node.js, Django, Flask, Spring Boot): Strumenti software che forniscono una struttura, librerie e utility per semplificare e accelerare lo sviluppo di applicazioni server-side in vari linguaggi di programmazione.
RESTful API Design Principles: Linee guida e principi per la progettazione di Application Programming Interface (API) che seguono lo stile architetturale REST (Representational State Transfer), promuovendo l'uso di risorse, verbi HTTP standard e comunicazione stateless.
GraphQL Subscriptions: Una funzionalità di GraphQL che consente ai client di ricevere aggiornamenti in tempo reale dal server quando avvengono modifiche a determinati dati.
Serverless Functions as a Backend (BaaS - Backend as a Service): Un modello che consente agli sviluppatori di concentrarsi solo sulla scrittura del codice per funzioni specifiche (come le funzioni Lambda di AWS) senza dover gestire l'infrastruttura del server sottostante; BaaS si riferisce a servizi cloud che forniscono funzionalità di back-end predefinite (autenticazione, database, storage).
Message Queues (es. RabbitMQ, Kafka): Sistemi software utilizzati per gestire la comunicazione asincrona tra diverse parti di un'applicazione o tra servizi distribuiti, consentendo lo scambio di messaggi in modo affidabile.
Tipi di API Aggiuntivi (Aggiuntivo): Altre architetture o protocolli per la creazione di API.
SOAP (Simple Object Access Protocol): Un protocollo basato su XML per lo scambio di messaggi strutturati in un ambiente distribuito, utilizzato in precedenza rispetto a REST per la creazione di servizi web.
gRPC: Un framework RPC (Remote Procedure Call) open source ad alte prestazioni, utilizzato per la comunicazione tra servizi, basato su Protocol Buffers.
Message Broker Aggiuntivi (Aggiuntivo): Altri sistemi per la gestione di code di messaggi.
ActiveMQ: Un popolare message broker open source basato su Java.
ZeroMQ: Una libreria di messaggistica asincrona distribuita, progettata per applicazioni concurrenti e distribuite.
Sistemi per l'organizzazione, l'archiviazione e il recupero dei dati.
Database: Una raccolta organizzata di dati, tipicamente memorizzata elettronicamente su un sistema informatico.
SQL (Structured Query Language): Un linguaggio standard utilizzato per gestire e interrogare database relazionali.
NoSQL (Not Only SQL): Una categoria di database che non utilizzano lo schema tradizionale delle tabelle relazionali, progettati per gestire grandi volumi di dati non strutturati o semi-strutturati e offrire maggiore scalabilità e flessibilità.
Query: Una richiesta di dati o informazioni da un database.
Proprietà dei Database (Aggiuntivo): Caratteristiche importanti dei sistemi di database.
ACID (Atomicity, Consistency, Isolation, Durability): Un insieme di proprietà che garantiscono l'affidabilità delle transazioni nei database relazionali; Atomicità assicura che una transazione sia completata interamente o non venga eseguita affatto, Consistenza garantisce che una transazione porti il database da uno stato valido a un altro, Isolation assicura che l'esecuzione di transazioni concorrenti produca lo stesso risultato dell'esecuzione seriale, Durability garantisce che, una volta confermata una transazione, i dati modificati siano permanenti anche in caso di guasti.
Teorema CAP (Consistency, Availability, Partition tolerance): Un teorema che afferma che in un sistema distribuito è possibile garantire al massimo due delle tre proprietà: Consistenza (tutti i nodi vedono gli stessi dati nello stesso momento), Disponibilità (il sistema è sempre operativo e risponde alle richieste) e Tolleranza alle Partizioni (il sistema continua a funzionare anche se ci sono interruzioni nella comunicazione tra i nodi).
Tipi di Database NoSQL Aggiuntivi (Aggiuntivo): Diverse classificazioni di database NoSQL.
Database a Documenti (Document Databases): Memorizzano dati in documenti flessibili e semi-strutturati (spesso in formato JSON o BSON), come MongoDB o Couchbase.
Database Chiave-Valore (Key-Value Databases): Memorizzano dati come un insieme di coppie chiave-valore, offrendo un accesso molto veloce ai dati tramite la chiave, come Redis o DynamoDB.
Database a Grafo (Graph Databases): Utilizzano nodi e archi per rappresentare e memorizzare dati con relazioni complesse e interconnesse, come Neo4j.
Database a Colonne (Column-Family Databases): Memorizzano dati in colonne raggruppate per "famiglie", ottimizzati per la lettura e la scrittura di grandi volumi di dati, come Cassandra o HBase.
Questa macro categoria tratta i concetti, i protocolli e le tecnologie che consentono ai computer di comunicare tra loro.
Le idee base che definiscono le reti di computer e la loro interconnessione.
Rete di Computer: Un insieme di computer e altri dispositivi hardware collegati tra loro per condividere risorse e scambiare informazioni.
Internet: Una vasta rete globale di reti interconnesse che utilizzano il protocollo TCP/IP per comunicare.
World Wide Web (WWW): Un sistema di documenti ipertestuali interconnessi accessibili tramite Internet, navigato tramite browser web.
Protocollo: Un insieme di regole e convenzioni che definiscono come i dati devono essere formattati, trasmessi e ricevuti tra dispositivi in una rete.
Indirizzo IP: Un'etichetta numerica univoca assegnata a ogni dispositivo connesso a una rete IP, utilizzata per identificare il dispositivo e la sua posizione nella rete.
DNS (Domain Name System): Un sistema distribuito che traduce i nomi di dominio (es. www.example.com) in indirizzi IP, rendendo più facile per gli utenti accedere ai siti web.
URL (Uniform Resource Locator): Un indirizzo web che specifica la posizione di una risorsa su Internet e il protocollo da utilizzare per accedervi.
LAN (Local Area Network): Una rete di computer che copre un'area geografica limitata, come una casa, un ufficio o un campus universitario.
WAN (Wide Area Network): Una rete di computer che si estende su un'ampia area geografica, collegando LAN più piccole (es. Internet è la WAN più grande).
Topologie di Rete (Aggiuntivo): Le diverse configurazioni fisiche o logiche in cui possono essere disposti i dispositivi in una rete.
Stella (Star): Tutti i dispositivi sono collegati a un nodo centrale (hub o switch).
Bus: Tutti i dispositivi sono collegati a un unico cavo principale.
Anello (Ring): I dispositivi sono collegati in un anello chiuso, con i dati che viaggiano in una sola direzione.
Maglia (Mesh): Ogni dispositivo è collegato direttamente a uno o più altri dispositivi, creando percorsi multipli per i dati.
Hardware utilizzato per connettere e gestire il flusso di dati nelle reti.
Router: Un dispositivo che inoltra pacchetti di dati tra reti diverse, utilizzando gli indirizzi IP per determinare il percorso migliore.
Switch: Un dispositivo che collega più dispositivi all'interno della stessa rete locale (LAN), inoltrando i dati solo alla porta di destinazione appropriata.
Firewall: Un sistema di sicurezza che monitora e controlla il traffico di rete in entrata e in uscita, bloccando o consentendo il passaggio dei dati in base a regole predefinite.
Bridge (Aggiuntivo): Un dispositivo che collega due segmenti di rete separati (spesso dello stesso tipo), inoltrando il traffico tra di essi in base agli indirizzi MAC.
Gateway (Aggiuntivo): Un dispositivo o software che funge da punto di accesso tra due reti diverse, spesso con protocolli differenti, traducendo i dati in modo che possano essere scambiati.
Strutture concettuali e regole per la comunicazione tra sistemi aperti.
Modello OSI (Open Systems Interconnection): Un modello concettuale a sette strati che descrive come i dati vengono trasmessi attraverso una rete, dal livello fisico all'applicazione.
Modello TCP/IP: Un modello a quattro (o cinque) strati che è alla base di Internet, composto dai livelli di Applicazione, Trasporto, Internet e Accesso alla rete.
Protocolli di Livello Applicazione (HTTP, HTTPS, FTP, SMTP, DNS, SSH): Protocolli che operano al livello più alto del modello TCP/IP, utilizzati dalle applicazioni per fornire servizi di rete (es. navigazione web con HTTP/HTTPS, trasferimento file con FTP, invio email con SMTP, risoluzione nomi con DNS, accesso sicuro con SSH).
Protocolli di Livello Trasporto (TCP, UDP): Protocolli che forniscono servizi per la comunicazione tra processi su diversi host; TCP (Transmission Control Protocol) è orientato alla connessione e garantisce la consegna affidabile e ordinata dei dati, mentre UDP (User Datagram Protocol) è connectionless e offre una consegna più veloce ma non garantita.
Protocollo di Livello Rete (IP, ICMP): Protocolli responsabili dell'indirizzamento e del routing dei pacchetti attraverso le reti interconnesse; IP (Internet Protocol) si occupa dell'indirizzamento, mentre ICMP (Internet Control Message Protocol) è utilizzato per messaggi di errore e di controllo.
Protocolli di Livello Collegamento Dati (Ethernet, Wi-Fi): Protocolli che gestiscono la trasmissione dei dati tra dispositivi direttamente connessi all'interno della stessa rete locale (LAN).
Protocolli Aggiuntivi (Aggiuntivo): Altri protocolli di rete comuni.
DHCP (Dynamic Host Configuration Protocol): Un protocollo che assegna automaticamente indirizzi IP e altre informazioni di configurazione di rete ai dispositivi in una rete.
ARP (Address Resolution Protocol): Un protocollo utilizzato per mappare un indirizzo IP (livello di rete) a un indirizzo MAC (livello di collegamento dati) all'interno della stessa rete locale.
RIP (Routing Information Protocol): Un protocollo di routing basato sulla distanza vettoriale utilizzato per scambiare informazioni di routing tra router.
EIGRP (Enhanced Interior Gateway Routing Protocol): Un protocollo di routing proprietario di Cisco, basato su un algoritmo ibrido, utilizzato per scambiare informazioni di routing all'interno di un sistema autonomo.
POP3 (Post Office Protocol version 3): Un protocollo utilizzato dai client di posta elettronica per scaricare le email da un server, rimuovendole solitamente dal server dopo il download.
IMAP (Internet Message Access Protocol): Un protocollo utilizzato dai client di posta elettronica per accedere e gestire le email direttamente sul server, mantenendo le email sincronizzate tra più dispositivi.
HTTP/2: Una revisione maggiore del protocollo HTTP che migliora le prestazioni introducendo funzionalità come il multiplexing delle richieste, la compressione degli header e il server push.
HTTP/3: La terza versione maggiore del protocollo HTTP, che utilizza UDP (User Datagram Protocol) invece di TCP (Transmission Control Protocol) per ridurre la latenza e migliorare le prestazioni su reti inaffidabili.
I meccanismi per identificare i dispositivi in rete e determinare i percorsi per i dati.
Subnetting: La suddivisione di una rete IP più grande in sottoreti più piccole, migliorando l'organizzazione e l'efficienza dell'indirizzamento.
Routing Table: Una tabella memorizzata in un router o in un host che contiene informazioni sui percorsi disponibili per raggiungere le destinazioni di rete e le metriche associate.
NAT (Network Address Translation): Una tecnica utilizzata per mappare più indirizzi IP privati in una rete locale a un singolo indirizzo IP pubblico per l'accesso a Internet, conservando gli indirizzi IP pubblici.
Subnet mask: Un numero utilizzato in combinazione con un indirizzo IP per determinare quale parte dell'indirizzo identifica la rete e quale parte identifica l'host all'interno di quella rete.
Gateway predefinito: L'indirizzo IP del router o del dispositivo che funge da punto di uscita predefinito per il traffico destinato a reti esterne.
Protocolli di routing (OSPF, BGP): Protocolli utilizzati dai router per scambiare informazioni sulle rotte e determinare i percorsi migliori per inoltrare i pacchetti; OSPF (Open Shortest Path First) è un protocollo di routing interno, mentre BGP (Border Gateway Protocol) è un protocollo di routing esterno utilizzato tra sistemi autonomi su Internet.
Misure per proteggere le reti e tecnologie per la connessione dei dispositivi.
VPN (Virtual Private Network): Una rete privata che utilizza una rete pubblica (come Internet) per creare una connessione sicura e crittografata, consentendo agli utenti di accedere alle risorse come se fossero direttamente collegati alla rete privata.
Crittografia Simmetrica (AES): Un metodo di crittografia in cui la stessa chiave segreta viene utilizzata sia per cifrare che per decifrare i dati; AES (Advanced Encryption Standard) è un algoritmo di crittografia simmetrica ampiamente utilizzato.
Crittografia Asimmetrica (RSA): Un metodo di crittografia che utilizza una coppia di chiavi: una chiave pubblica per cifrare i dati e una chiave privata corrispondente per decifrarli; RSA è un algoritmo di crittografia asimmetrica comune.
Certificato Digitale: Un documento elettronico che verifica la proprietà di una chiave pubblica e l'identità del suo proprietario, utilizzato per stabilire connessioni sicure (es. in HTTPS).
SSL/TLS (Secure Sockets Layer/Transport Layer Security): Protocolli crittografici che forniscono sicurezza per le comunicazioni su Internet, garantendo l'autenticazione, l'integrità dei dati e la riservatezza. TLS è la versione successiva e più sicura di SSL.
Intrusion Detection System (IDS): Un sistema che monitora il traffico di rete e i sistemi per attività sospette o dannose, generando avvisi in caso di potenziale intrusione.
Intrusion Prevention System (IPS): Un sistema che non solo rileva le intrusioni, ma tenta anche di bloccarle attivamente.
Wireless Fidelity (Wi-Fi): Una tecnologia di rete locale wireless che consente ai dispositivi di connettersi a una rete e a Internet tramite onde radio.
Bluetooth: Una tecnologia wireless a corto raggio utilizzata per collegare dispositivi tra loro (es. smartphone e auricolari, computer e periferiche).
Bandwidth: La capacità di trasmissione di un canale di comunicazione o di una rete, misurata in bit al secondo, che indica la quantità massima di dati che possono essere trasferiti in un dato tempo.
Packet Switching: Una tecnica di trasmissione dati in cui i messaggi vengono suddivisi in pacchetti, ognuno dei quali viene instradato individualmente attraverso la rete fino alla destinazione, dove i pacchetti vengono riassemblati.
VLAN (Virtual Local Area Network): Una rete logica creata all'interno di una rete fisica (spesso su switch gestiti), che consente di segmentare il traffico e raggruppare i dispositivi indipendentemente dalla loro posizione fisica.
QoS (Quality of Service): Un insieme di tecnologie e tecniche utilizzate per gestire il traffico di rete e garantire un certo livello di prestazioni per applicazioni specifiche (es. voce o video), dando priorità a determinati tipi di traffico.
Sicurezza delle reti wireless (WPA3): Protocolli di sicurezza utilizzati per proteggere le reti Wi-Fi da accessi non autorizzati, crittografando i dati trasmessi in modalità wireless; WPA3 (Wi-Fi Protected Access 3) è lo standard di sicurezza più recente e robusto.
IPSec (Internet Protocol Security) (Aggiuntivo): Una suite di protocolli che fornisce sicurezza a livello di rete, autenticando e crittografando i pacchetti IP.
Concetti di rete applicati all'ambiente del cloud computing.
VPC (Virtual Private Cloud): Una rete virtuale isolata all'interno di un cloud pubblico, che consente agli utenti di definire la propria topologia di rete, gli indirizzi IP e le configurazioni di sicurezza.
Subnet (già presente, ma rilevante nel contesto cloud): Una sottorete all'interno di un VPC, che rappresenta un intervallo di indirizzi IP all'interno della rete virtuale.
Security Groups: Un firewall virtuale che controlla il traffico in entrata e in uscita per le istanze (macchine virtuali) all'interno di un VPC, consentendo di definire regole di accesso in base a protocollo, porta e indirizzo IP.
Load Balancing (Aggiuntivo): La distribuzione del traffico di rete in entrata su più server o risorse per migliorare le prestazioni, la disponibilità e la scalabilità delle applicazioni.
Questa macro categoria si concentra sulla protezione dei sistemi informatici, delle reti e dei dati da minacce, attacchi e accessi non autorizzati.
Concetti e principi di base della sicurezza informatica.
Sicurezza Informatica: L'insieme delle misure e delle pratiche volte a proteggere i sistemi informatici, le reti e i dati da accessi non autorizzati, furto, danno o interruzione.
Crittografia: L'arte e la scienza di trasformare le informazioni (testo in chiaro) in un formato illeggibile (testo cifrato) in modo che solo le persone autorizzate possano decifrarle e leggerle.
Threat (Minaccia): Una potenziale causa di un incidente indesiderato, che potrebbe danneggiare un sistema o un'organizzazione.
Vulnerability (Vulnerabilità): Una debolezza in un sistema, in una procedura o in un controllo di sicurezza che potrebbe essere sfruttata da una minaccia.
Exploit: Un software, un pezzo di dati o una sequenza di comandi che sfrutta una vulnerabilità in un sistema informatico per causare un comportamento imprevisto o dannoso.
Attack (Attacco): Un tentativo deliberato di sfruttare le vulnerabilità in un sistema o in una rete per comprometterne la sicurezza.
Payload: La parte dannosa di un attacco informatico, ovvero il codice o l'azione che l'attaccante intende eseguire sul sistema target.
Malware (Software Maligno): Software progettato per danneggiare, compromettere o ottenere l'accesso non autorizzato a sistemi informatici (es. virus, worm, trojan).
Phishing: Un tipo di attacco di ingegneria sociale in cui gli attaccanti tentano di indurre le vittime a fornire informazioni sensibili (es. credenziali di accesso) fingendosi entità legittime (es. banche, aziende).
Social Engineering (Ingegneria Sociale): L'uso di tecniche psicologiche per manipolare le persone al fine di ottenere informazioni o accesso a sistemi.
Confidentiality (Riservatezza): La proprietà di garantire che le informazioni siano accessibili solo alle persone autorizzate.
Integrity (Integrità): La proprietà di garantire che i dati siano accurati, completi e non siano stati modificati in modo non autorizzato.
Availability (Disponibilità): La proprietà di garantire che i sistemi e i dati siano accessibili e utilizzabili quando necessario da parte degli utenti autorizzati.
Authentication (Autenticazione): Il processo di verificare l'identità di un utente o di un dispositivo.
Authorization (Autorizzazione): Il processo di determinare quali azioni o risorse un utente autenticato è autorizzato ad accedere.
Cryptography (Crittografia): Lo studio e l'applicazione di tecniche matematiche per proteggere le comunicazioni e i dati.
Encryption (Cifratura): Il processo di trasformare i dati in chiaro in testo cifrato utilizzando un algoritmo e una chiave.
Decryption (Decifrazione): Il processo di trasformare il testo cifrato nuovamente in dati in chiaro utilizzando la chiave appropriata.
Classificazioni del software dannoso in base al suo comportamento e alla sua diffusione.
Virus: Un tipo di malware che si auto-replica inserendo copie di sé in altri programmi o file, richiedendo l'intervento umano (es. l'esecuzione di un file infetto) per diffondersi.
Worm: Un tipo di malware che si auto-replica e si diffonde automaticamente attraverso una rete, sfruttando le vulnerabilità dei sistemi, senza richiedere l'intervento umano.
Trojan: Un tipo di malware che si maschera da software legittimo per ingannare gli utenti e indurli a scaricarlo ed eseguirlo; una volta eseguito, il trojan può eseguire azioni dannose.
Ransomware: Un tipo di malware che cifra i file o blocca l'accesso a un sistema e richiede un riscatto per ripristinare l'accesso.
Spyware: Un tipo di malware che raccoglie informazioni sull'attività dell'utente senza il suo consenso (es. navigazione web, sequenze di tasti) e le invia a terzi.
Adware: Software che visualizza annunci pubblicitari indesiderati, spesso in modo aggressivo, sul computer dell'utente.
Rootkit: Un tipo di malware progettato per nascondere la propria presenza e quella di altri software dannosi su un sistema, spesso modificando i processi del sistema operativo.
Keylogger: Un tipo di software o hardware che registra tutte le sequenze di tasti digitate dall'utente, potenzialmente intercettando password e altre informazioni sensibili.
Fileless Malware: Malware che opera direttamente nella memoria del computer senza installare file sul disco rigido, rendendone più difficile il rilevamento da parte degli antivirus tradizionali.
Logic Bomb (Aggiuntivo): Un tipo di malware che rimane inattivo finché non si verifica una condizione specifica (es. una data o un'azione dell'utente), dopodiché esegue la sua azione dannosa.
Diverse strategie e tecniche utilizzate dagli aggressori per compromettere i sistemi.
DDoS (Distributed Denial of Service): Un attacco in cui un gran numero di sistemi compromessi (botnet) inondano un server o un servizio con una quantità eccessiva di traffico, rendendolo non disponibile per gli utenti legittimi.
Man-in-the-Middle (MitM): Un attacco in cui un aggressore intercetta e potenzialmente altera le comunicazioni tra due parti senza che queste se ne accorgano.
SQL Injection: Una tecnica di attacco in cui l'aggressore inserisce codice SQL dannoso nei campi di input di un'applicazione web per manipolare il database sottostante.
Cross-Site Scripting (XSS): Una vulnerabilità di sicurezza web che consente agli attaccanti di iniettare script dannosi nelle pagine web visualizzate da altri utenti.
Zero-Day Exploit: Uno sfruttamento di una vulnerabilità di sicurezza che è sconosciuta agli sviluppatori del software o al pubblico, e per la quale non esiste ancora una patch.
Advanced Persistent Threat (APT): Un attacco informatico sofisticato e prolungato in cui un intruso ottiene accesso a una rete e vi rimane per un lungo periodo senza essere rilevato, solitamente con l'obiettivo di rubare dati sensibili.
Side-Channel Attack: Un attacco che si basa sulle informazioni ottenute dall'implementazione fisica di un sistema informatico piuttosto che sfruttare le debolezze nell'algoritmo stesso (es. analizzando il consumo di energia, i tempi di esecuzione o le emissioni elettromagnetiche).
Supply Chain Attack: Un attacco che prende di mira un'organizzazione compromettendo i suoi fornitori o le sue partnership, infiltrandosi nella catena di fornitura del software o dell'hardware.
Watering Hole Attack: Un attacco in cui l'aggressore identifica i siti web frequently visitati dal suo target e li infetta con malware, aspettando che il target visiti il sito compromesso.
Typosquatting (o URL Hijacking): La registrazione di nomi di dominio simili a nomi di siti web popolari (con piccoli errori di battitura) per intercettare gli utenti che sbagliano a digitare l'indirizzo.
Domain Generation Algorithm (DGA): Un algoritmo utilizzato dal malware per generare un gran numero di nomi di dominio, rendendo difficile per le difese bloccare le comunicazioni del malware con i suoi server di comando e controllo.
Kernel Exploit: Uno sfruttamento di una vulnerabilità nel kernel (il nucleo) di un sistema operativo, che può concedere all'attaccante privilegi elevati.
Privilege Escalation: Il processo con cui un attaccante ottiene un livello di accesso più elevato di quello inizialmente ottenuto su un sistema.
Data Exfiltration: Il trasferimento non autorizzato di dati sensibili da un sistema o da una rete.
Spear Phishing: Una versione più mirata del phishing, in cui gli attacchi sono personalizzati per specifiche vittime o gruppi, aumentando la probabilità di successo.
Whaling: Un tipo di spear phishing che prende di mira specificamente figure di alto profilo all'interno di un'organizzazione (es. CEO).
Session Hijacking: Un attacco in cui l'aggressore prende il controllo della sessione di un utente legittimo dopo che questi si è autenticato in un sistema o in un'applicazione web.
Clickjacking (o UI Redress Attack): Una tecnica in cui l'aggressore sovrappone elementi trasparenti o opachi a una pagina web legittima per ingannare l'utente e indurlo a cliccare su elementi diversi da quelli che vede.
Cryptojacking: L'uso non autorizzato delle risorse di un computer o di una rete per minare criptovalute.
Deepfake: Contenuti multimediali (video, audio) creati o modificati utilizzando l'intelligenza artificiale per rappresentare in modo convincente persone che dicono o fanno cose che in realtà non hanno detto o fatto.
Denial-of-service (DoS): Un attacco che impedisce agli utenti legittimi di accedere a un servizio o a una risorsa, sovraccaricando il sistema o sfruttando vulnerabilità che ne causano il crash.
Attacchi Web Aggiuntivi (Aggiuntivo): Ulteriori tipologie di attacchi mirati alle applicazioni web.
CSRF (Cross-Site Request Forgery): Un attacco che costringe l'utente finale autenticato a eseguire azioni indesiderate su un'applicazione web in cui è attualmente autenticato.
SSRF (Server-Side Request Forgery): Un attacco in cui un aggressore induce un server web a effettuare richieste HTTP a una destinazione arbitraria, spesso interna alla rete del server.
Attacchi di Deserializzazione (Deserialization Attacks): Attacchi che sfruttano le vulnerabilità nel processo di deserializzazione dei dati, consentendo agli aggressori di eseguire codice dannoso.
Attacchi XML External Entity (XXE): Vulnerabilità che si verificano quando un parser XML elabora input XML contenente riferimenti a entità esterne, consentendo agli aggressori di accedere a file locali o effettuare richieste di rete.
Attacchi basati su Credenziali (Aggiuntivo): Attacchi mirati all'ottenimento o all'utilizzo non autorizzato di credenziali di accesso.
Credential Stuffing: L'uso di coppie di nome utente e password ottenute da una violazione di dati su un sito per tentare di accedere ad account su altri siti, sfruttando la tendenza degli utenti a riutilizzare le password.
Brute Force: Un attacco che tenta sistematicamente tutte le possibili combinazioni di password o chiavi di crittografia fino a trovare quella corretta.
Rainbow Table attacks: Un attacco che utilizza tabelle pre-calcolate (rainbow tables) contenenti hash di password comuni per invertire le funzioni hash e scoprire le password originali, spesso utilizzato contro password non "saltate".
Le tecnologie, le pratiche e le strategie per proteggere i sistemi e i dati.
Firewall (stateful, next-generation, WAF - Web Application Firewall): Sistemi che controllano il traffico di rete; Stateful firewalls monitorano lo stato delle connessioni attive, Next-generation firewalls (NGFW) includono funzionalità avanzate come l'ispezione approfondita dei pacchetti e la prevenzione delle intrusioni, WAF sono specificamente progettati per proteggere le applicazioni web da attacchi.
IDS (Intrusion Detection System): Un sistema che monitora il traffico di rete e i sistemi per attività sospette e genera avvisi.
IPS (Intrusion Prevention System): Un sistema che rileva e cerca attivamente di bloccare le intrusioni.
SIEM (Security Information and Event Management): Un sistema software che aggrega e analizza i log e gli eventi di sicurezza da diverse fonti per fornire visibilità e supportare la risposta agli incidenti.
Endpoint Security: La protezione dei singoli dispositivi finali (endpoint) come computer, smartphone e tablet da minacce informatiche.
Antivirus: Software progettato per rilevare, prevenire e rimuovere virus e altri tipi di malware.
Anti-malware: Software più ampio che include funzionalità per rilevare e rimuovere una vasta gamma di malware, non solo virus.
VPN (Virtual Private Network): Utilizzata per creare connessioni sicure e crittografate su reti pubbliche.
Multi-Factor Authentication (MFA): Un metodo di autenticazione che richiede all'utente di fornire due o più fattori di verifica diversi per dimostrare la propria identità (es. password, codice inviato al telefono, impronta digitale).
Patch Management: Il processo di gestione e applicazione degli aggiornamenti (patch) del software per correggere vulnerabilità di sicurezza.
Risk Assessment (Valutazione del Rischio): Il processo di identificazione, analisi e valutazione dei rischi per la sicurezza informatica.
Incident Response: L'insieme di procedure e piani per gestire e rispondere agli incidenti di sicurezza informatica.
Penetration Testing (Pentesting): Un test di sicurezza attivo in cui professionisti autorizzati simulano attacchi per identificare le vulnerabilità di un sistema o di una rete.
Security Awareness Training: La formazione degli utenti sui rischi per la sicurezza informatica e sulle migliori pratiche per evitarli.
Threat Intelligence: Informazioni raccolte e analizzate sulle minacce attuali e potenziali per la sicurezza informatica, utilizzate per informare le decisioni di difesa.
Zero Trust: Un modello di sicurezza che si basa sul principio di "non fidarsi mai, verificare sempre", richiedendo l'autenticazione e l'autorizzazione rigorose per ogni accesso alle risorse, indipendentemente dalla posizione o dalla rete.
Honeypot/Honeynet: Sistemi o reti esca progettati per attrarre gli attaccanti e monitorare le loro attività, al fine di raccogliere informazioni sulle tecniche di attacco.
Deception Technology: Tecnologie che utilizzano l'inganno per rilevare, ingaggiare e analizzare gli attaccanti.
Threat Hunting: Un processo proattivo e iterativo di ricerca di minacce sconosciute o non rilevate all'interno di una rete.
Security Orchestration, Automation and Response (SOAR): Piattaforme che consentono di raccogliere dati da diverse fonti di sicurezza, automatizzare le attività ripetitive e orchestrare i flussi di lavoro di risposta agli incidenti.
User and Entity Behavior Analytics (UEBA): Strumenti che analizzano il comportamento degli utenti e delle entità (es. dispositivi, applicazioni) per rilevare attività anomale che potrebbero indicare una minaccia.
Data Loss Prevention (DLP): Tecnologie e processi progettati per impedire che dati sensibili escano da un'organizzazione.
Next-Generation Firewall (NGFW): Firewall con funzionalità avanzate oltre il semplice filtraggio dei pacchetti, come l'ispezione approfondita delle applicazioni, il sistema di prevenzione delle intrusioni (IPS) e la consapevolezza contestuale.
Endpoint Detection and Response (EDR): Soluzioni di sicurezza che monitorano e raccolgono dati dagli endpoint, fornendo capacità di rilevamento, analisi e risposta agli incidenti.
Security Information Management (SIM): La gestione delle informazioni di sicurezza raccolte dai log e dagli eventi.
Security Analytics: L'applicazione di tecniche analitiche ai dati di sicurezza per identificare pattern, anomalie e potenziali minacce.
Microsegmentation: La suddivisione di una rete in segmenti piccoli e isolati, consentendo l'applicazione di politiche di sicurezza granulari per limitare il movimento laterale degli attaccanti all'interno della rete.
Network Segmentation: La divisione di una rete in sottoreti più grandi e isolate per scopi di sicurezza e gestione.
Crittografia end-to-end: Un metodo di crittografia in cui i dati vengono cifrati nel punto di origine e rimangono cifrati finché non raggiungono il destinatario finale, garantendo che solo il mittente e il destinatario possano accedere ai dati in chiaro.
Principio del minimo privilegio: Un principio di sicurezza che raccomanda di concedere agli utenti, ai processi e ai programmi solo le autorizzazioni minime necessarie per svolgere il loro compito, riducendo il potenziale impatto di una compromissione.
Vulnerability assessment: Il processo di identificazione e classificazione delle vulnerabilità presenti in un sistema o in una rete.
Disaster recovery: Un piano e un insieme di procedure per ripristinare le operazioni di un'organizzazione dopo un evento catastrofico (es. interruzione di corrente su vasta scala, disastro naturale).
Backup e ripristino: La creazione di copie dei dati (backup) e la possibilità di recuperarli in caso di perdita o danneggiamento.
BYOD (Bring Your Own Device) security: Le politiche e le misure di sicurezza per gestire i rischi associati all'utilizzo di dispositivi personali (smartphone, tablet, laptop) per scopi lavorativi.
Ethical hacking: L'uso delle stesse tecniche e strumenti degli hacker malevoli, ma in modo autorizzato e con l'obiettivo di identificare e segnalare le vulnerabilità per migliorare la sicurezza.
Attività di Difesa Aggiuntive (Aggiuntivo): Altre pratiche e ruoli nella sicurezza informatica.
Vulnerability Scanning: L'uso di strumenti automatizzati per identificare le vulnerabilità note nei sistemi e nelle reti.
Red Teaming: Un gruppo di specialisti di sicurezza che simulano attacchi avanzati per testare le difese di un'organizzazione da una prospettiva di attaccante.
Blue Teaming: Il gruppo responsabile della difesa di un'organizzazione, che lavora per rilevare e rispondere agli attacchi (spesso simulati dal Red Team).
Purple Teaming: Un approccio collaborativo tra Red Team e Blue Team per migliorare sia le capacità offensive che quelle difensive.
Security Auditing: Un'analisi sistematica della sicurezza di un sistema o di un'organizzazione per identificare le debolezze e garantire la conformità alle politiche e alle normative.
Digital Forensics: La raccolta, l'analisi e la conservazione delle prove digitali in modo forense per indagini su incidenti di sicurezza o attività criminali.
Concetti di Sicurezza Aggiuntivi (Aggiuntivo): Ulteriori idee e principi fondamentali della sicurezza.
Defense in Depth: Un approccio alla sicurezza che utilizza più livelli di difesa per proteggere i sistemi e i dati, in modo che la compromissione di un livello non comprometta l'intero sistema.
Business Continuity Planning: La pianificazione di come un'organizzazione continuerà a operare durante o dopo un'interruzione significativa, inclusi gli aspetti di sicurezza.
Security Policies: Regole e linee guida formali che definiscono come gli utenti e i sistemi devono comportarsi per garantire la sicurezza.
Modelli di Controllo Accessi (RBAC, ABAC): Metodi per determinare chi può accedere a quali risorse; RBAC (Role-Based Access Control) assegna i permessi in base ai ruoli degli utenti, mentre ABAC (Attribute-Based Access Control) utilizza attributi per definire regole di accesso più granulari.
Algoritmi Crittografici Aggiuntivi (Aggiuntivo): Ulteriori algoritmi utilizzati in crittografia.
Hashing: Un processo che trasforma i dati di qualsiasi dimensione in una stringa di dimensione fissa (hash value), utilizzata per verificare l'integrità dei dati.
SHA (Secure Hash Algorithm): Una famiglia di funzioni hash crittografiche ampiamente utilizzate (es. SHA-256) per creare firme digitali e verificare l'integrità dei dati.
Questa macro categoria unisce lo sviluppo software (Dev) e le operazioni IT (Ops) per migliorare la collaborazione, l'automazione e l'efficienza nel ciclo di vita del software.
Principi chiave e obiettivi della metodologia DevOps.
DevOps: Una metodologia che enfatizza la comunicazione, la collaborazione, l'integrazione e l'automazione tra gli sviluppatori software e i professionisti IT, con l'obiettivo di accelerare la consegna del software e migliorare l'affidabilità.
Continuous Integration (CI): Una pratica di sviluppo software in cui gli sviluppatori integrano frequentemente il loro codice in un repository condiviso, e ogni integrazione viene automaticamente verificata da build e test automatici.
Continuous Delivery (CD): Un'estensione della CI in cui le modifiche al codice vengono automaticamente preparate per il rilascio in produzione in qualsiasi momento.
Automazione: L'uso di strumenti e script per eseguire attività ripetitive nel ciclo di vita dello sviluppo software, come build, test, deployment e monitoraggio.
Infrastruttura come codice: La gestione e il provisioning dell'infrastruttura (reti, server, storage) utilizzando file di configurazione e codice, anziché processi manuali.
Monitoraggio: La raccolta e l'analisi continua di dati sul funzionamento dei sistemi e delle applicazioni per identificare problemi, misurare le prestazioni e ottenere insight.
Infrastructure as Code (IaC): La gestione dell'infrastruttura IT attraverso file di configurazione, consentendo l'automazione e la ripetibilità del provisioning (sinonimo di "Infrastruttura come codice").
Continuous Monitoring: Il monitoraggio costante e in tempo reale delle prestazioni, della disponibilità e della sicurezza dei sistemi e delle applicazioni.
Observability: La capacità di comprendere lo stato interno di un sistema complesso esaminando i dati esterni (log, metriche, tracce) che produce.
GitOps: Una metodologia operativa che utilizza Git come "source of truth" per definire lo stato desiderato dell'infrastruttura e delle applicazioni, e automatizza il deployment per raggiungere tale stato.
SRE (Site Reliability Engineering): Una disciplina che applica i principi dell'ingegneria del software alle operazioni IT, con l'obiettivo di creare sistemi software scalabili e altamente affidabili.
SLO (Service Level Objective): Un obiettivo misurabile che definisce un livello target di servizio fornito da un sistema (es. tempo di risposta medio, tasso di errore).
SLI (Service Level Indicator): Una metrica quantitativa che misura un aspetto del livello di servizio fornito da un sistema (es. latenza, throughput, tasso di errore).
Error Budget: La quantità di tempo in cui un sistema può non essere pienamente conforme ai suoi SLO senza incorrere in penalità; incoraggia un equilibrio tra affidabilità e innovazione.
Configuration as Code (Aggiuntivo): La gestione delle configurazioni dei sistemi e delle applicazioni utilizzando file di codice o script, consentendo l'automazione e la standardizzazione.
Pipeline as Code (Aggiuntivo): La definizione e la gestione delle pipeline CI/CD utilizzando file di codice, rendendole versionabili e automatizzabili.
DevSecOps (Aggiuntivo): L'integrazione delle pratiche di sicurezza (Sec) in ogni fase del ciclo di vita dello sviluppo DevOps.
Software e pratiche specifiche utilizzate nell'implementazione di DevOps.
Jenkins: Un server di automazione open source ampiamente utilizzato per la costruzione, il testing e il deployment automatizzati del software (CI/CD).
Ansible: Uno strumento open source per l'automazione dell'IT, utilizzato per la gestione della configurazione, il provisioning e il deployment delle applicazioni.
Chef: Uno strumento di automazione basato su Ruby, utilizzato per la gestione della configurazione e il deployment dell'infrastruttura.
Terraform: Uno strumento open source per l'Infrastructure as Code, che consente di definire e gestire l'infrastruttura cloud e on-premise utilizzando un linguaggio di configurazione dichiarativo.
Docker Compose: Uno strumento per definire ed eseguire applicazioni multi-container Docker; si utilizza un file YAML per configurare i servizi dell'applicazione.
Kubernetes Helm: Un gestore di pacchetti per Kubernetes, che semplifica il deployment e la gestione delle applicazioni containerizzate definendole come "chart".
Monitoraggio (Prometheus, Grafana): Strumenti utilizzati per raccogliere metriche dai sistemi e dalle applicazioni (Prometheus) e visualizzarle in dashboard interattive (Grafana) per il monitoraggio e l'analisi delle prestazioni.
Logging (ELK stack): Una suite di strumenti open source (Elasticsearch, Logstash, Kibana) utilizzati per la raccolta centralizzata, l'elaborazione, l'indicizzazione e la visualizzazione dei log generati dalle applicazioni e dai sistemi.
Service Mesh (es. Istio, Linkerd): Uno strato di infrastruttura dedicato che gestisce la comunicazione tra i servizi in un'architettura di microservizi, fornendo funzionalità come il routing del traffico, la sicurezza, il monitoraggio e la resilienza.
Canary Deployment: Una strategia di deployment in cui una nuova versione di un'applicazione viene rilasciata a un piccolo sottoinsieme di utenti prima di estenderla a tutti, riducendo il rischio di impatto negativo su vasta scala.
Blue/Green Deployment: Una strategia di deployment in cui due ambienti identici (Blue e Green) vengono mantenuti; la nuova versione viene rilasciata nell'ambiente Green mentre l'ambiente Blue continua a gestire il traffico, poi il traffico viene reindirizzato gradualmente o istantaneamente al Green.
Chaos Engineering: La disciplina di sperimentare attivamente l'introduzione di guasti in un sistema distribuito per testarne la resilienza e identificare i punti deboli prima che si verifichino problemi reali.
Immutable Infrastructure: Un approccio in cui i server e i componenti dell'infrastruttura non vengono modificati dopo essere stati creati; qualsiasi aggiornamento o modifica richiede la creazione di una nuova istanza e la sostituzione di quella vecchia.
Infrastructure as Code Scanning: L'analisi automatizzata dei file di Infrastructure as Code (come quelli di Terraform o CloudFormation) per identificare potenziali vulnerabilità di sicurezza o configurazioni errate prima del deployment.
Strumenti di Configuration Management Aggiuntivi (Aggiuntivo): Altri software per la gestione automatizzata delle configurazioni dei sistemi.
Puppet: Uno strumento di gestione della configurazione basato su Ruby, utilizzato per definire lo stato desiderato dei sistemi e automatizzare l'applicazione delle configurazioni.
SaltStack: Uno strumento di automazione e gestione della configurazione basato su Python.
Strumenti CI/CD Aggiuntivi (Aggiuntivo): Altre piattaforme per l'automazione delle pipeline di integrazione continua e continuous delivery.
GitLab CI: Un servizio di Continuous Integration e Continuous Delivery integrato nella piattaforma GitLab.
CircleCI: Una piattaforma cloud-based per CI/CD che supporta vari linguaggi e framework.
Travis CI: Un servizio di CI/CD ospitato, spesso utilizzato per progetti open source.
GitHub Actions: Un servizio di CI/CD integrato in GitHub che consente di automatizzare flussi di lavoro in risposta agli eventi del repository.
Strumenti di Containerizzazione (Aggiuntivo): Tecnologie per l'impacchettamento e l'esecuzione di applicazioni in ambienti isolati (container).
Docker: Una piattaforma popolare per la creazione, il deployment e la gestione di applicazioni containerizzate (include Docker Compose).
Strumenti di Orchestrazione Aggiuntivi (Aggiuntivo): Sistemi per la gestione automatizzata del deployment, della scalabilità e del funzionamento dei container.
Kubernetes: Un sistema open source per l'automazione del deployment, lo scaling e la gestione di applicazioni containerizzate (include concetti come Pod, Service, Deployment e usa Helm per la gestione dei pacchetti).
Docker Swarm: Uno strumento di orchestrazione di container nativo di Docker.
Nomad: Uno scheduler e orchestratore di workload semplice e flessibile, sviluppato da HashiCorp.
Strumenti di Monitoraggio Aggiuntivi (Aggiuntivo): Ulteriori sistemi per la supervisione delle prestazioni e della salute dei sistemi.
Nagios: Uno strumento di monitoraggio open source per sistemi, reti e infrastrutture.
Zabbix: Un software di monitoraggio di livello enterprise per reti e applicazioni.
Strumenti di Logging Aggiuntivi (Aggiuntivo): Altri software per la raccolta e l'analisi dei log.
Splunk: Una piattaforma software per la ricerca, il monitoraggio e l'analisi dei dati generati da macchine (inclusi i log).
Logstash (parte di ELK): Uno strumento di pipeline di elaborazione dati open source che raccoglie, trasforma e invia i log a destinazioni come Elasticsearch.
Questa macro categoria esplora i concetti, le tecniche e gli algoritmi alla base della capacità dei computer di imparare dai dati e prendere decisioni intelligenti.
Le idee fondamentali che definiscono l'intelligenza artificiale e l'apprendimento automatico.
Intelligenza Artificiale (AI): La simulazione dei processi di intelligenza umana da parte delle macchine, in particolare dei sistemi informatici; include l'apprendimento, la risoluzione dei problemi, il riconoscimento di pattern e la comprensione del linguaggio naturale.
Machine Learning (ML): Un sottoinsieme dell'AI che consente ai sistemi di imparare dai dati, identificare pattern e prendere decisioni con un intervento umano minimo.
Deep Learning: Un sottoinsieme del Machine Learning che utilizza reti neurali artificiali con molti strati (reti neurali profonde) per analizzare e imparare da grandi volumi di dati, particolarmente efficace per immagini, audio e testo.
Rete Neurale: Un modello computazionale ispirato alla struttura e al funzionamento del cervello umano, composto da nodi (neuroni) interconnessi organizzati in strati, che elaborano e trasmettono informazioni.
Tipi di AI (Aggiuntivo): Classificazioni dell'intelligenza artificiale in base alle sue capacità.
AI Ristretta (Narrow AI): AI progettata per svolgere un compito specifico (es. riconoscimento facciale, assistenti virtuali).
AI Generale (General AI): AI con la capacità di comprendere, imparare e applicare l'intelligenza a qualsiasi problema, in modo simile a un essere umano.
Superintelligenza (Superintelligence): AI con capacità cognitive significativamente superiori a quelle degli esseri umani.
Metodi specifici utilizzati nel Machine Learning per l'analisi dei dati e la creazione di modelli.
Regressione: Un tipo di problema di Machine Learning supervisionato in cui l'obiettivo è prevedere un valore di output continuo in base a variabili di input (es. prevedere il prezzo di una casa in base alle sue caratteristiche).
Classificazione: Un tipo di problema di Machine Learning supervisionato in cui l'obiettivo è assegnare un'istanza a una delle categorie o classi predefinite (es. classificare un'email come spam o non spam).
Clustering: Un tipo di problema di Machine Learning non supervisionato in cui l'obiettivo è raggruppare punti dati simili in cluster o gruppi.
Reti neurali convoluzionali (CNN): Un tipo di rete neurale profonda particolarmente efficace per l'elaborazione di dati strutturati in griglie, come immagini, utilizzata per compiti come il riconoscimento di oggetti e la classificazione di immagini.
Reti neurali ricorrenti (RNN): Un tipo di rete neurale progettata per elaborare dati sequenziali (es. testo, serie temporali) mantenendo uno stato interno che rappresenta le informazioni elaborate in precedenza.
Reinforcement learning (Q-learning): Un tipo di Machine Learning in cui un agente impara a prendere decisioni in un ambiente per massimizzare una ricompensa cumulativa, attraverso prove ed errori; Q-learning è un algoritmo comune di reinforcement learning.
Elaborazione del linguaggio naturale (NLP): Un campo dell'AI che si concentra sull'interazione tra computer e linguaggio umano, consentendo ai computer di comprendere, interpretare e generare linguaggio umano.
Algoritmi ML Aggiuntivi (Aggiuntivo): Altri algoritmi comuni utilizzati nel Machine Learning.
Regressione Lineare (Linear Regression): Un algoritmo di regressione che modella la relazione tra una variabile dipendente continua e una o più variabili indipendenti utilizzando una linea retta.
Regressione Logistica (Logistic Regression): Un algoritmo di classificazione utilizzato per prevedere la probabilità che un'istanza appartenga a una determinata classe, spesso utilizzata per problemi di classificazione binaria.
Alberi Decisionali (Decision Trees): Un modello predittivo che utilizza una struttura ad albero per prendere decisioni basate su una serie di regole sequenziali.
Foreste Casuali (Random Forests): Un algoritmo che costruisce un insieme di alberi decisionali e combina le loro previsioni per migliorare l'accuratezza e ridurre l'overfitting.
Support Vector Machines (SVM): Un algoritmo di classificazione (e regressione) che cerca il miglior iperpiano per separare diverse classi di punti dati.
k-Nearest Neighbors (k-NN): Un semplice algoritmo di classificazione e regressione che classifica un punto dati in base alla maggioranza delle classi dei suoi 'k' vicini più prossimi nello spazio delle feature.
k-Means Clustering: Un popolare algoritmo di clustering che mira a dividere un insieme di 'n' punti dati in 'k' cluster, dove ogni punto appartiene al cluster con il centroide più vicino.
Analisi delle Componenti Principali (PCA - Principal Component Analysis): Una tecnica di riduzione della dimensionalità che trasforma un set di variabili correlate in un set di variabili non correlate chiamate componenti principali, mantenendo la maggior parte della varianza originale dei dati.
Esempi di modelli linguistici e architetture notevoli nel campo dell'AI.
BERT: Bidirectional Encoder Representations from Transformers, un modello linguistico sviluppato da Google che è pre-addestrato su un vasto corpus di testo e può essere fine-tunato per una varietà di compiti di NLP.
GPT: Generative Pre-trained Transformer, una serie di modelli linguistici sviluppati da OpenAI, noti per la loro capacità di generare testo coerente e di alta qualità (es. GPT-3, GPT-4).
Le fasi e le pratiche per costruire, distribuire e gestire modelli di Machine Learning.
MLOps (Machine Learning Operations): Un insieme di pratiche che unisce lo sviluppo di modelli ML (Dev) con le operazioni (Ops) per gestire il ciclo di vita completo dei modelli ML in produzione, dalla sperimentazione al deployment e al monitoraggio.
Feature Engineering: Il processo di selezione, trasformazione e creazione di feature (variabili di input) dai dati grezzi per migliorare le prestazioni dei modelli ML.
Model Deployment: Il processo di rendere un modello ML addestrato disponibile per l'utilizzo, integrandolo in un'applicazione o in un servizio.
Model Monitoring: La supervisione continua delle prestazioni di un modello ML in produzione per rilevare degradi, drift dei dati o altre anomalie.
Data Wrangling/Munging: Il processo di pulire, trasformare e preparare i dati grezzi in un formato utilizzabile per l'analisi o l'addestramento di modelli ML.
Feature Scaling: Tecniche utilizzate per standardizzare o normalizzare l'intervallo delle feature di input, spesso necessario per alcuni algoritmi ML.
Model Evaluation Metrics: Misure quantitative utilizzate per valutare le prestazioni di un modello ML su un set di dati di test (es. accuratezza, precisione, richiamo, F1-score per la classificazione; MAE, MSE, RMSE per la regressione).
Hyperparameter Tuning: Il processo di ottimizzare gli iperparametri di un modello ML (parametri che non vengono appresi dai dati, ma configurati prima dell'addestramento) per migliorare le sue prestazioni.
Explainable AI (XAI): Un campo dell'AI che si concentra sullo sviluppo di modelli e tecniche che possono spiegare il ragionamento alla base delle loro decisioni, rendendo i modelli più trasparenti e interpretabili.
Transfer Learning: Una tecnica in cui un modello addestrato su un compito o un set di dati viene riutilizzato come punto di partenza per un nuovo compito o set di dati correlato, riducendo la necessità di grandi quantità di dati per il nuovo compito.
Principi specifici che definiscono le reti neurali profonde.
Strati Convoluzionali (Convolutional Layers): Strati nelle CNN che applicano filtri (kernel) alle feature map di input per rilevare pattern locali (es. bordi, forme).
Strati Ricorrenti (Recurrent Layers): Strati nelle RNN che elaborano sequenze di dati mantenendo uno stato nascosto che cattura le informazioni dalle fasi precedenti della sequenza.
Funzioni di Attivazione (Activation Functions): Funzioni matematiche applicate all'output di ogni neurone in una rete neurale per introdurre non linearità, consentendo al modello di apprendere pattern complessi (es. ReLU, Sigmoid, Tanh).
Backpropagation: Un algoritmo utilizzato per addestrare le reti neurali, che calcola il gradiente della funzione di perdita rispetto ai pesi della rete e lo utilizza per aggiornare i pesi in modo da minimizzare la perdita.
Discesa del Gradiente (Gradient Descent): Un algoritmo di ottimizzazione iterativo utilizzato per trovare i minimi di una funzione (spesso la funzione di perdita nel ML) regolando i parametri nella direzione del gradiente negativo.
Funzioni di Perdita (Loss Functions): Funzioni che misurano la differenza tra l'output previsto di un modello e il valore reale, utilizzate per guidare il processo di addestramento.
Ottimizzatori (Optimizers): Algoritmi utilizzati per regolare i pesi di una rete neurale durante l'addestramento, in base ai gradienti calcolati dalla backpropagation, al fine di minimizzare la funzione di perdita (es. Adam, SGD).
Tecniche specifiche nel campo dell'NLP.
Sentiment Analysis: L'analisi computazionale delle opinioni, dei sentimenti e delle emozioni espresse in un testo.
Named Entity Recognition (NER): Il compito di identificare e classificare entità nominate (come nomi di persone, organizzazioni, località) in un testo.
Traduzione Automatica (Machine Translation): L'uso di software per tradurre automaticamente testo o parlato da una lingua a un'altra.
Tecniche specifiche nel campo della Computer Vision.
Riconoscimento di Oggetti (Object Detection): Il compito di identificare e localizzare oggetti all'interno di un'immagine o di un video, spesso disegnando bounding box attorno a essi.
Segmentazione di Immagini (Image Segmentation): Il processo di suddividere un'immagine in segmenti (pixel) che condividono determinate caratteristiche, spesso per identificare e isolare specifici oggetti o regioni di interesse.
Piattaforme software e librerie per lo sviluppo di modelli ML.
TensorFlow: Una libreria open source sviluppata da Google per il Machine Learning e il Deep Learning.
PyTorch: Una libreria open source per il Machine Learning basata sulla libreria Torch, ampiamente utilizzata per il Deep Learning.
Scikit-learn: Una libreria open source per il Machine Learning in Python che fornisce una vasta gamma di algoritmi per la classificazione, la regressione, il clustering e la riduzione della dimensionalità.
Ulteriori metriche per valutare le prestazioni dei modelli ML, in particolare per la regressione.
MAE (Mean Absolute Error): La media dei valori assoluti degli errori tra le previsioni del modello e i valori reali.
MSE (Mean Squared Error): La media dei quadrati degli errori tra le previsioni del modello e i valori reali.
Questa macro categoria riguarda la fornitura di risorse informatiche (server, storage, database, software) su Internet, su base on-demand.
Le diverse modalità con cui le risorse cloud vengono offerte.
Cloud Computing: La fornitura di servizi informatici (inclusi server, storage, database, networking, software, analytics e intelligence) su Internet ("il cloud") per offrire innovazione più veloce, risorse flessibili ed economie di scala.
SaaS (Software as a Service): Un modello in cui un fornitore di cloud ospita applicazioni e le rende disponibili agli utenti finali tramite Internet (es. Gmail, Salesforce).
PaaS (Platform as a Service): Un modello che fornisce agli sviluppatori una piattaforma per costruire, testare e distribuire applicazioni senza la necessità di gestire l'infrastruttura sottostante (es. Google App Engine, Heroku).
IaaS (Infrastructure as a Service): Un modello che fornisce risorse informatiche fondamentali su richiesta tramite Internet, inclusi server virtuali, storage e networking (es. AWS EC2, Google Compute Engine).
Serverless Computing: Un modello di esecuzione in cui il cloud provider gestisce completamente l'infrastruttura del server, eseguendo il codice solo quando necessario e scalando automaticamente; l'utente paga solo per il tempo di esecuzione effettivo del codice.
FaaS (Function as a Service): Un sottoinsieme del serverless computing in cui gli sviluppatori distribuiscono singole funzioni che vengono eseguite in risposta a eventi, senza dover gestire l'infrastruttura sottostante (es. AWS Lambda, Azure Functions).
Serverless Functions as a Backend (BaaS - Backend as a Service): Un modello che fornisce servizi back-end pre-costruiti e gestiti dal cloud provider (es. autenticazione, database, storage) consentendo agli sviluppatori di concentrarsi sul front-end (sinonimo di FaaS in alcuni contesti, o un modello più ampio che include FaaS).
CaaS (Container as a Service) (Aggiuntivo): Un modello cloud che consente agli utenti di caricare, eseguire e gestire container, fornendo l'infrastruttura necessaria senza dover gestire i sistemi operativi sottostanti.
DBaaS (Database as a Service) (Aggiuntivo): Un modello in cui il cloud provider offre l'accesso a un database che viene gestito e mantenuto dal provider stesso (es. AWS RDS, Google Cloud SQL).
DaaS (Desktop as a Service) (Aggiuntivo): Un modello che fornisce desktop virtuali ospitati nel cloud agli utenti finali, accessibili da qualsiasi dispositivo.
Alcuni dei principali attori nel mercato del cloud computing e i loro servizi correlati.
Cloud Provider (AWS, Azure, GCP): Le aziende che offrono servizi di cloud computing su vasta scala; AWS (Amazon Web Services), Azure (Microsoft Azure) e GCP (Google Cloud Platform) sono tra i maggiori fornitori.
Database gestiti (AWS RDS, Azure SQL): Servizi cloud che offrono database relazionali o NoSQL completamente gestiti dal cloud provider, semplificando l'amministrazione del database. AWS RDS (Relational Database Service) e Azure SQL Database sono esempi.
Storage (AWS S3, Azure Blob Storage): Servizi cloud per l'archiviazione di dati su larga scala, accessibili tramite Internet; AWS S3 (Simple Storage Service) e Azure Blob Storage sono esempi di storage a oggetti.
Funzioni serverless (AWS Lambda, Azure Functions): Servizi FaaS forniti dai principali cloud provider per l'esecuzione di codice in risposta a eventi senza gestire server.
Message queues (AWS SQS, Azure Service Bus): Servizi cloud gestiti per la gestione di code di messaggi asincrone. AWS SQS (Simple Queue Service) e Azure Service Bus sono esempi.
Tecnologie e concetti che si intersecano con il cloud computing.
CNCF (Cloud Native Computing Foundation): Una fondazione che promuove e gestisce progetti open source per rendere le applicazioni più agili e resilienti nel cloud (es. Kubernetes, Prometheus).
Kubernetes Operators: Estensioni software per Kubernetes che utilizzano conoscenza specifica del dominio per automatizzare la gestione di applicazioni complesse.
Helm: Un gestore di pacchetti per Kubernetes utilizzato per definire, installare e aggiornare applicazioni complesse.
Edge Computing: L'elaborazione dei dati più vicino alla fonte della loro generazione (ai margini della rete) anziché in un data center centralizzato, riducendo la latenza e il consumo di bandwidth.
Multi-Cloud: L'utilizzo di servizi cloud da più di un cloud provider per sfruttare i punti di forza specifici di ciascuno o per evitare la dipendenza da un singolo fornitore.
Hybrid Cloud: Una combinazione di un cloud privato con uno o più cloud pubblici, consentendo ai dati e alle applicazioni di muoversi tra gli ambienti.
Principi fondamentali del cloud computing.
Elasticità (Elasticity): La capacità di un sistema cloud di scalare automaticamente le risorse (aumentandole o diminuendole) in risposta alle variazioni della domanda, in modo rapido e senza intervento umano.
Alta Disponibilità (High Availability): La capacità di un sistema di rimanere operativo e accessibile per un'alta percentuale del tempo, anche in caso di guasti parziali, spesso ottenuta tramite ridondanza e failover.
Tolleranza ai Guasti (Fault Tolerance): La capacità di un sistema di continuare a funzionare correttamente anche in presenza di guasti di uno o più dei suoi componenti.
Auto Scaling: Una funzionalità che consente di regolare automaticamente il numero di istanze di calcolo o altre risorse in base al carico di lavoro o a metriche predefinite.
Cloud Migration: Il processo di spostamento di applicazioni, dati e carichi di lavoro da data center on-premise o da un cloud a un altro.
Cloud Security (già presente come sottocategoria in Cybersecurity, ma rilevante qui): Le misure e le pratiche per proteggere i dati, le applicazioni e l'infrastruttura nel cloud.
Questa macro categoria espande i concetti di sviluppo software con ulteriori principi di progettazione e stili architetturali.
Linee guida per scrivere codice pulito, efficiente e manutenibile.
Design Pattern: Soluzioni generali e riutilizzabili a problemi comuni che si verificano durante la progettazione del software.
Anti-pattern: Schemi di progettazione comuni che sono inefficaci o controproducenti.
SOLID Principles: Cinque principi di progettazione orientata agli oggetti per creare software flessibile e manutenibile.
DRY (Don't Repeat Yourself): Un principio che raccomanda di evitare la duplicazione del codice o delle informazioni, rendendo il sistema più facile da aggiornare e manutenere.
KISS (Keep It Simple, Stupid): Un principio di progettazione che suggerisce di mantenere i sistemi e il codice il più semplici possibile.
YAGNI (You Aren't Gonna Need It): Un principio che suggerisce di non aggiungere funzionalità se non sono strettamente necessarie al momento, per evitare complessità inutili.
Technical Debt: Il costo aggiuntivo di rielaborazione necessario in futuro a causa di scelte di progettazione o implementazione rapide e non ottimali nel presente.
Code Smells: Indicatori nel codice sorgente che suggeriscono la presenza di problemi di progettazione o di implementazione che potrebbero richiedere refactoring.
Refactoring Patterns: Tecniche e modelli specifici per ristrutturare il codice esistente in modo sicuro ed efficace.
Modelli strutturali per organizzare le componenti di un sistema software.
Domain-Driven Design (DDD): Un approccio allo sviluppo software che si concentra sulla modellazione del dominio di business per creare software che rifletta accuratamente la realtà del business.
Microservices Chassis: Un framework o una libreria che fornisce un insieme di funzionalità comuni (es. logging, configurazione, metriche) per semplificare lo sviluppo di microservizi individuali.
Service Discovery: Il processo per cui i servizi in un'architettura distribuita trovano e comunicano tra loro in modo dinamico.
Circuit Breaker: Un pattern di progettazione utilizzato in architetture distribuite per prevenire che un servizio fallimentare causi cascate di guasti in altri servizi.
Stili Architetturali Aggiuntivi (Aggiuntivo): Altri approcci per strutturare i sistemi software.
Microservizi: Un'architettura in cui un'applicazione è strutturata come una collezione di servizi piccoli, autonomi e distribuiti, ognuno dei quali esegue un processo specifico (implica termini correlati già presenti come API, Service Discovery, Circuit Breaker).
Monolita (Monolith): Un'architettura in cui l'intera applicazione è costruita come un'unica unità indivisibile, con tutti i componenti interconnessi e in esecuzione come un unico processo.
Architettura Orientata ai Servizi (SOA - Service-Oriented Architecture): Un approccio architetturale in cui l'applicazione è costruita come un insieme di servizi discreti e interoperabili che comunicano tra loro.
Event-Driven Architecture (già presente, ma ribadito nel contesto): Un pattern architetturale in cui i componenti del sistema comunicano tramite l'emissione, il rilevamento e la reazione agli eventi.
Ulteriori termini rilevanti nel contesto dello sviluppo software.
Idempotency: La proprietà di un'operazione o di una richiesta HTTP che produce lo stesso risultato sia che venga eseguita una sola volta sia che venga eseguita più volte.
API Rate Limiting: Una tecnica utilizzata per controllare la frequenza con cui un client può effettuare richieste a un'API in un determinato periodo di tempo, per prevenire abusi e garantire la disponibilità del servizio.
API Versioning: Il processo di gestione delle modifiche a un'API nel tempo, garantendo che le versioni precedenti continuino a funzionare per i client esistenti mentre vengono introdotte nuove funzionalità o modifiche.
Questa macro categoria si concentra sulle metodologie e gli strumenti che facilitano il lavoro di squadra e la comunicazione nei progetti software.
Approcci e pratiche per migliorare la collaborazione tra i membri di un team.
Pair Programming: Una pratica di sviluppo agile in cui due sviluppatori lavorano insieme su una singola postazione di lavoro, con uno che scrive il codice e l'altro che lo rivede e fornisce suggerimenti in tempo reale.
Code Review: Il processo di far esaminare il codice scritto da uno sviluppatore da parte di altri membri del team per identificare bug, migliorare la qualità del codice e condividere conoscenze.
Mob Programming: Un approccio in cui l'intero team di sviluppo lavora insieme, contemporaneamente, sullo stesso pezzo di codice e sullo stesso problema, su una singola postazione di lavoro.
Retrospective: Una riunione periodica in cui un team esamina il proprio lavoro recente per identificare cosa ha funzionato bene, cosa non ha funzionato e cosa può essere migliorato per il futuro.
Stand-up Meeting (o Daily Scrum): Una breve riunione giornaliera in cui i membri del team condividono lo stato del loro lavoro, cosa hanno fatto il giorno precedente, cosa faranno oggi e se ci sono impedimenti.
Pair Review: Una forma di code review in cui due sviluppatori rivedono insieme il codice.
Metodologie Agile (Aggiuntivo): Approcci iterativi e incrementali allo sviluppo software che enfatizzano la collaborazione, la flessibilità e la risposta al cambiamento.
Agile: Un approccio generale allo sviluppo software che si basa sui valori e sui principi del Manifesto Agile.
Scrum: Un framework Agile popolare per la gestione di progetti complessi, che utilizza cicli di lavoro brevi (Sprint) e ruoli e cerimonie specifiche.
Kanban: Una metodologia Agile che si concentra sulla visualizzazione del flusso di lavoro, la limitazione del lavoro in corso (WIP) e il miglioramento continuo.
Lean: Un insieme di principi e pratiche originariamente dal manifatturiero, applicati allo sviluppo software per massimizzare il valore e minimizzare gli sprechi.
Extreme Programming (XP): Una metodologia Agile che enfatizza le pratiche tecniche come il pair programming, il test-driven development (TDD) e l'integrazione continua.
Software e pratiche che supportano le metodologie collaborative.
Branching Strategies (es. Gitflow): Modelli e convenzioni per la creazione e la gestione dei branch in un sistema di controllo versione come Git, per organizzare il lavoro su diverse funzionalità o versioni. Gitflow è una strategia comune.
Pull Request Templates: Modelli predefiniti utilizzati per strutturare le pull request (richieste di integrazione del codice), facilitando il processo di code review.
Cerimonie Scrum Aggiuntive (Aggiuntivo): Ulteriori riunioni definite nel framework Scrum.
Sprint Planning: Una riunione all'inizio di uno Sprint per pianificare il lavoro da svolgere.
Sprint Review: Una riunione alla fine di uno Sprint per ispezionare il lavoro completato e raccogliere feedback.
Sprint Retrospective (già presente): Una riunione alla fine di uno Sprint per identificare modi per migliorare il processo di lavoro.
Ruoli Scrum (Aggiuntivo): I ruoli definiti nel framework Scrum.
Scrum Master: Una figura che facilita il processo Scrum e rimuove gli impedimenti per il team.
Product Owner: La persona responsabile di massimizzare il valore del prodotto e di gestire il Product Backlog.
Strumenti di Collaborazione (Aggiuntivo): Software che supportano la comunicazione e la gestione dei progetti.
Strumenti di Project Management (es. Jira, Trello): Piattaforme utilizzate per pianificare, tracciare e gestire le attività e i progressi di un progetto.
Strumenti di Comunicazione (es. Slack, Microsoft Teams): Piattaforme utilizzate per facilitare la comunicazione in tempo reale, la condivisione di file e la collaborazione tra i membri del team.