ACID
ACID sta per Atomicity, Consistency, Isolation e Durability - le quattro garanzie offerte da una transazione di database relazionale. L'atomicità rende la transazione tutto-o-niente; la consistenza mantiene il database valido; l'isolamento nasconde tra loro le transazioni concorrenti; la durabilità persiste i dati committati anche dopo i crash.
BASE
BASE sta per Basically Available, Soft state, Eventually consistent - una filosofia di consistenza comune ai sistemi NoSQL e distribuiti, che baratta le garanzie rigide di ACID con disponibilità e scala. Accetta inconsistenza temporanea in cambio di tolleranza alle partizioni e throughput.
Teorema CAP
Il teorema CAP (teorema di Brewer) afferma che un data store distribuito può fornire al massimo due fra Consistency, Availability e Partition tolerance contemporaneamente. Poiché le partizioni di rete sono inevitabili, i sistemi reali scelgono di fatto tra consistenza e disponibilità quando si verifica una partizione.
CRUD
CRUD sta per Create, Read, Update, Delete - le quattro operazioni di base dello storage persistente. È spesso usato per descrivere lo scope di un servizio data-centrico o di una risorsa REST. Molti framework generano endpoint CRUD automaticamente.
CQRS (Command Query Responsibility Segregation)
CQRS separa il modello usato per scrivere i dati (command) da quello usato per leggerli (query), permettendo di ottimizzarli in modo indipendente. È spesso abbinato all'event sourcing e a proiezioni lato lettura. Aggiunge complessità ed è giustificato solo quando i carichi di lettura e scrittura divergono in modo significativo.
DTO (Data Transfer Object)
Un DTO è un oggetto semplice usato per trasportare dati attraverso una frontiera, ad esempio tra il service layer e un client API, senza comportamento né logica di dominio. I DTO disaccoppiano il contratto esterno dal modello di dominio interno. In Java sono comunemente implementati come record.
DI (Dependency Injection)
La DI è la pratica di fornire le dipendenze di un componente dall'esterno invece di costruirle internamente. È l'implementazione più diffusa dell'Inversion of Control. Spring, Guice e Dagger sono container DI popolari.
DDD (Domain-Driven Design)
Il DDD è una filosofia di design che modella il software attorno al dominio di business usando un linguaggio ubiquo condiviso, con pattern strategici per i confini del sistema e pattern tattici per il modello stesso. Mira ad allineare la struttura del codice al modello mentale degli esperti di dominio.
E2E (Test End-to-End)
Un test E2E esercita un flusso utente completo attraverso il sistema interamente integrato, spesso pilotando un browser o un client reale. Offre la massima confidenza ma è il tipo di test più lento e fragile. La piramide dei test raccomanda pochi test E2E rispetto ai test unitari.
ETL (Extract, Transform, Load)
ETL descrive una pipeline di dati che estrae dati dalle sorgenti, li trasforma nella forma di destinazione e li carica in una destinazione come un data warehouse. Una variante, ELT, carica prima i dati grezzi e li trasforma sul posto. ETL è fondamentale per i sistemi di analytics e reporting.
gRPC
gRPC è un framework di chiamata a procedura remota ad alte prestazioni che usa HTTP/2 per il trasporto e i Protocol Buffer per la definizione dell'interfaccia e la serializzazione binaria. Supporta lo streaming e contratti fortemente tipizzati, il che lo rende popolare per la comunicazione interna fra servizi.
IoC (Inversion of Control)
L'IoC è un principio di design in cui il controllo sulla costruzione degli oggetti e sul flusso del programma è delegato a un framework o container invece di essere cablato nella logica applicativa. La Dependency Injection è la sua realizzazione più comune.
JWT (JSON Web Token)
Un JWT è un formato di token compatto e URL-safe che codifica claim come payload JSON firmato (e opzionalmente cifrato), comunemente usato per l'autenticazione stateless. È composto da header, payload e firma separati da punti. Poiché il payload è solo codificato in Base64, non deve mai contenere segreti in chiaro.
KISS (Keep It Simple, Stupid)
KISS è una massima di design che afferma che i sistemi funzionano meglio se mantenuti semplici invece di resi inutilmente complessi. Privilegia la soluzione più diretta che soddisfa il requisito. Complementa YAGNI e DRY.
LSP (Liskov Substitution Principle)
LSP è la "L" di SOLID: i sottotipi devono essere sostituibili ai loro tipi base senza rompere le aspettative dei client. Governa l'uso corretto di ereditarietà e sottotipizzazione.
MVC (Model-View-Controller)
MVC è un pattern architetturale che separa un'applicazione in modello (dati e regole), vista (presentazione) e controller (gestione degli input e coordinamento). Promuove la separazione delle responsabilità nelle applicazioni rivolte all'utente ed è alla base di molti framework web.
MVP (Minimum Viable Product)
Un MVP è la versione più piccola di un prodotto che fornisce abbastanza valore da imparare dagli utenti reali con il minimo sforzo. Il termine è centrale nella metodologia Lean Startup. In ingegneria implica costruire una fetta verticale sottile ma completa.
Problema N+1
Il problema N+1 è un anti-pattern di performance in cui un ORM emette una query per caricare una lista di N entità, poi una query aggiuntiva per ogni entità per caricare un campo correlato, producendo N+1 query invece di una. Si risolve con l'eager fetching, le join fetch o il batch loading.
OCP (Open/Closed Principle)
OCP è la "O" di SOLID: le entità software dovrebbero essere aperte all'estensione ma chiuse alla modifica. Il nuovo comportamento si aggiunge tramite nuovo codice invece di modificare codice esistente e già testato.
OOP (Object-Oriented Programming)
L'OOP è un paradigma di programmazione che struttura il software attorno a oggetti che raggruppano stato e comportamento, con meccanismi come incapsulamento, ereditarietà e polimorfismo. Si contrappone ai paradigmi procedurale e funzionale, che molti linguaggi moderni mescolano.
ORM (Object-Relational Mapping)
L'ORM è una tecnica che mappa i modelli di dominio a oggetti su tabelle relazionali, generando SQL automaticamente. Migliora la produttività al prezzo di nascondere il costo delle query. JPA è la specifica ORM standard in Java, con Hibernate come implementazione di riferimento.
REST (Representational State Transfer)
REST è uno stile architetturale per sistemi ipermediali distribuiti, che definisce vincoli come statelessness, interfaccia uniforme e indirizzamento basato su risorse su HTTP. Le API RESTful sono lo stile dominante per i servizi web pubblici.
SLA / SLO / SLI
Un SLI (Service Level Indicator) è una quantità misurata come la latenza delle richieste; un SLO (Service Level Objective) è un obiettivo per quell'indicatore come "il 99% delle richieste sotto i 200 ms"; un SLA (Service Level Agreement) è un impegno contrattuale con conseguenze. Insieme formano la base dell'ingegneria dell'affidabilità.
SOLID
SOLID è un mnemonico per cinque principi di design a oggetti - Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation e Dependency Inversion - che promuovono codice manutenibile e flessibile.
SRP (Single Responsibility Principle)
SRP è la "S" di SOLID: un modulo dovrebbe avere una sola ragione per cambiare, servendo un singolo attore o preoccupazione. Le violazioni portano a codice fragile in cui cambiamenti non correlati interferiscono.
TDD (Test-Driven Development)
Il TDD è un flusso di sviluppo che scrive i test prima del codice di produzione, ciclando tra red (test fallito), green (codice che passa) e refactor. Guida il design e produce come sottoprodotto una rete di sicurezza contro le regressioni.
TTL (Time To Live)
Il TTL è una durata dopo la quale un valore in cache, un record DNS o un messaggio è considerato scaduto e viene rimosso o aggiornato. È la strategia di invalidazione della cache più semplice, che baratta la freschezza con la semplicità implementativa.
YAGNI (You Aren't Gonna Need It)
YAGNI è un principio dell'Extreme Programming secondo cui la funzionalità va aggiunta solo quando effettivamente necessaria, non quando è soltanto anticipata. Frena l'over-engineering speculativo.
WAL (Write-Ahead Log)
Un WAL è una tecnica di durabilità in cui le modifiche vengono accodate a un log sequenziale prima di essere applicate allo store principale, così che il sistema possa recuperare riproducendo il log dopo un crash. È alla base della garanzia di Durability nei database relazionali e in molti sistemi distribuiti.
CI/CD
CI/CD combina la Continuous Integration (build e test automatici a ogni integrazione) con la Continuous Delivery o Deployment (promozione automatica delle build validate verso la produzione). La pipeline accorcia i cicli di feedback e riduce il rischio di rilascio.
SSR (Server-Side Rendering)
L'SSR è una strategia di rendering web in cui l'HTML è generato sul server per ogni richiesta (o prerenderizzato in fase di build) invece di essere costruito interamente nel browser. Migliora le prestazioni del first-paint e la SEO al costo di lavoro lato server.