Salta al contenuto principale

Framework cognitivo: come pensare da developer senza laurea CS

Cosa ne pensi di questo articolo?

Framework cognitivo: come pensare da developer senza laurea CS
Non-CS Developer Trackfedericocalo.dev
TL;DR: Non esiste un "cervello da developer" innato. Esiste un framework cognitivo che si costruisce - e che chiunque, indipendentemente dal background, può sviluppare con metodo. Questo articolo sintetizza i principi di Cal Newport ("Career Capital") e James Clear ("Atomic Habits") applicati alla transizione non-CS verso il mondo tech, e offre un modello pratico in 4 livelli per costruire il pensiero da developer partendo da zero.

Background di partenza

Il mito più diffuso sulla transizione tech è che ci voglia un tipo specifico di mente - logica, analitica, "da STEM". Questo mito è pericoloso perché è parzialmente vero: esistono pattern cognitivi più utili di altri nella programmazione. Ma la parte vera è spesso interpretata in modo errato: quei pattern non sono innati. Sono costruiti.

Cal Newport, professore di informatica alla Georgetown University, ha sviluppato la "Career Capital Theory" - l'idea che le competenze rare e preziose si costruiscono attraverso la pratica deliberata, non attraverso la scoperta di una passione preesistente. Newport in So Good They Can't Ignore You (2012, ISBN 978-1591843000) demolisce il mito "segui la tua passione" e lo sostituisce con un modello più robusto: costruisci competenze difficili da replicare, e il lavoro interessante seguirà.

James Clear, nel bestseller Atomic Habits (2018, ISBN 978-0735211292), aggiunge il livello operativo: i cambiamenti cognitivi profondi non avvengono per forza di volontà episodica, ma per sistemi di abitudini che si compongono nel tempo. Un sistema di studio mal progettato produce risultati minimi indipendentemente dalla motivazione. Un sistema ben progettato produce risultati anche quando la motivazione è bassa.

Applicati alla transizione non-CS, questi due framework producono un modello pratico che risponde a una domanda precisa: non "come imparare a programmare" (ci sono migliaia di risorse per questo) ma "come pensare come un developer" - e farlo in modo costruttivo, partendo da qualunque background.

Perché il framework cognitivo è diverso dalle competenze tecniche

La distinzione tra competenze tecniche e framework cognitivo è fondamentale. Le competenze tecniche sono acquisibili in modo relativamente diretto: segui un corso, scrivi codice, riproduci esempi, fai esercizi. Il framework cognitivo è più sottile: è il modo in cui si affronta un problema sconosciuto, come si decompone un sistema complesso, come si gestisce l'incertezza tecnica, come si recupera dall'errore.

Un developer con un framework cognitivo solido può apprendere un nuovo linguaggio in settimane. Un developer con competenze tecniche accumulate ma senza framework cognitivo fa fatica ad adattarsi quando cambia il dominio. La differenza è evidente nei team che assumono developer da background non-CS: chi ha costruito il framework cognitivo correttamente si integra più velocemente, indipendentemente dal background di partenza.

Il contesto della ricerca cognitiva applicata alla programmazione

Nel thread HN "Ask HN: Non-CS developers - how do you approach algorithmic thinking?" del 2021 (oltre 340 commenti), emerge un pattern coerente tra chi ha fatto la transizione con successo: la struttura del pensiero è più importante dei contenuti. Chi veniva da discipline che richiedono decomposizione del problema - diritto, medicina, architettura, filosofia - ha trovato la transizione più fluida non perché conoscesse già gli algoritmi, ma perché aveva già abitudini cognitive di analisi strutturata.

Questo dato è coerente con la ricerca sulla expertise in cognitive science: gli esperti non pensano "più velocemente" degli inesperti nel loro dominio - pensano in modo qualitativamente diverso, usando chunking (raggruppamento di pattern) e modelli mentali che riducono il carico cognitivo. Il framework cognitivo da developer è il sistema di chunking e modelli mentali che permettono di operare efficacemente in un sistema tecnico.

Difficoltà tipiche

Chi avvia la transizione tech da background non-CS incontra difficoltà cognitive specifiche - non di intelligenza, ma di framework. Comprenderle in modo preciso è il primo passo per superarle.

Il problema della frammentazione dell'apprendimento

Il pattern di studio più comune per chi transita al tech è: corsi brevi, YouTube, documentazione sparsa, tutorial "15-minute project". Ognuno di questi elementi è valido in isolamento. Il problema è l'assenza di struttura connettiva - ogni skill acquisita è un'isola, non connessa a un modello mentale coerente del sistema. Il risultato è che si può completare 30 tutorial e non saper risolvere un problema reale mai visto prima.

Newport chiama questo fenomeno "shallow work" applicato all'apprendimento: attività che producono la sensazione di progresso senza costruire career capital effettivo. Il contrario - la "deliberate practice" - richiede di operare deliberatamente ai margini della propria competenza attuale, con feedback immediato sull'errore.

L'ansia da "non sono abbastanza tecnico"

Il background non-CS produce spesso una forma di ansia specifica: la sensazione di essere "in ritardo" rispetto ai colleghi CS, o di non poter mai recuperare il gap di formazione accademica. Questa ansia è cognitivamente costosa - occupa banda mentale che potrebbe essere usata per apprendere - e spesso infondata: la maggior parte dei developer CS ha dimenticato il 70% di ciò che ha studiato in università entro 3 anni dall'assunzione.

Trappola del "non sono pronto": La sensazione di non essere pronti è permanente nei developer di ogni livello - la differenza tra il developer senior e quello junior non è l'assenza di questa sensazione, ma la capacità di agire nonostante essa. Se aspetti di sentirti pronto per applicare al primo job, non applicherai mai. Il segnale che sei pronto è che hai completato progetti autonomi verificabili, non che la sensazione di incertezza sia scomparsa.

La difficoltà di passare dall'astrazione all'implementazione

I background umanistici e sociali abituano a ragionare ad alto livello di astrazione - concetti, relazioni tra idee, implicazioni sistemiche. La programmazione richiede di passare continuamente dall'astrazione all'implementazione concreta: non basta "capire" il concetto di ricorsione, bisogna scrivere una funzione ricorsiva che produce output corretto. Questo salto - dall'idea al codice funzionante - è spesso il punto di blocco principale.

Il problema del feedback loop ritardato

Nel background formativo non-CS, il feedback su un lavoro arriva tipicamente in tempi lunghi: settimane per un paper universitario, giorni per un report professionale. Il feedback del codice è immediato - il programma funziona o genera un errore, e lo sa in millisecondi. Questa differenza nel ritmo del feedback richiede un adattamento: imparare a leggere gli errori come informazione utile, non come giudizio negativo sul proprio valore come developer.

Cosa ha funzionato (ricerca su career-changers tech di successo)

Analizzando il corpus di testimonianze documentate da career-changers non-CS - thread HN, freeCodeCamp community, nocsdegree.com, DEV.to career-change tag - emergono 5 pattern cognitivi ricorrenti in chi ha effettuato la transizione con successo.

1. Costruire modelli mentali, non memorizzare sintassi

Il pattern più importante: i developer non-CS di successo hanno smesso di memorizzare sintassi e hanno iniziato a costruire modelli mentali. Un modello mentale di un sistema software è una rappresentazione interna di come le parti si connettono e si influenzano - è quello che permette di fare previsioni corrette sul comportamento del codice prima di eseguirlo.

Newport descrive questo processo come "costruzione di career capital cognitivo": non sapere tutte le API di Python, ma capire come Python gestisce la memoria, come funziona l'import system, perché certi pattern sono preferiti ad altri. Questo livello di comprensione non viene dai tutorial ma dall'esposizione deliberata a codice reale, dalla lettura di codebase aperte, dall'analisi di scelte architetturali.

2. Il sistema di abitudini di Clear applicato allo studio tecnico

James Clear in Atomic Habits descrive la legge del 1%: piccoli miglioramenti composti nel tempo producono risultati radicalmente diversi da quelli intuitivamente attesi. Applicata allo studio tecnico, questa legge suggerisce di costruire un sistema di abitudini di studio invece di sessioni di studio intensive sporadiche.

Il sistema concreto che emerge dai career-changer di successo: 25-45 minuti di studio tecnico deliberato ogni giorno (non "quando ho tempo"), su un unico problema specifico (non "faccio un po' di Python e poi un po' di database"), con output verificabile (codice scritto o problema risolto, non "ho guardato 3 video"). La consistenza a bassa intensità supera l'intensità episodica in termini di ritenzione e costruzione di modelli mentali.

3. L'impostazione problema → decomposizione → implementazione

Il framework cognitivo da developer non è lineare ma circolare: si parte dalla comprensione del problema, si decompone in sotto-problemi, si implementa ogni sotto-problema, si verifica il comportamento dell'implementazione, si aggiorna il modello mentale in base all'output osservato. I developer non-CS che hanno interiorizzato questo ciclo lo applicano automaticamente a ogni problema nuovo.

I career-changer che non hanno interiorizzato questo ciclo tendono invece a procedere linearmente: cercano subito la soluzione (Stack Overflow, ChatGPT) senza la fase di decomposizione. Questo produce soluzioni che funzionano ma non competenze che si trasferiscono al problema successivo.

4. L'uso degli errori come dati

Il frame cognitivo più utile da sviluppare è quello che tratta ogni errore come dato informativo invece che come fallimento. Un errore di compilazione dice qualcosa di preciso - manca un tipo, manca una variabile, c'è un problema di scope. Un test che fallisce dice qualcosa di preciso - il comportamento reale differisce dal comportamento atteso in modo misurabile.

I developer non-CS di successo riportano costantemente di aver imparato a "leggere gli errori" come prima competenza fondamentale - prima ancora della sintassi del linguaggio. Questa competenza è indipendente dal linguaggio e dal dominio: è un frame cognitivo che si trasferisce.

5. Il contributo deliberato del background non-CS

Newport nella sua ricerca sulla career capital evidenzia che le competenze rare e preziose non si costruiscono solo nella specializzazione ma anche nell'integrazione di domini diversi. Il background non-CS - che sia diritto, economia, filosofia, design - è una competenza rara nel tech: pochissimi developer CS hanno sviluppato quella formazione.

I career-changer che hanno costruito la loro career capital in modo efficace hanno smesso di vedere il background non-CS come un deficit da compensare, e hanno iniziato a usarlo come differenziatore attivo: il developer con background giuridico che capisce di compliance, il developer con background economico che capisce di product analytics, il developer con background design che capisce di UX engineering. Queste integrazioni sono deliberatamente ricercate da team che cercano profili T-shaped.

Framework cognitivo

Il modello sintetico che emerge dalla ricerca applicata - Newport + Clear + corpus career-changer - è un framework cognitivo in 4 livelli, progettato specificamente per chi parte da background non-CS.

Livello 1: Modelli mentali fondamentali (settimane 1-8)

Obiettivo: costruire la struttura concettuale che permette di comprendere qualunque codice, non uno specifico linguaggio. I 5 modelli mentali fondamentali: (1) variabile come contenitore di valore con un tipo, (2) funzione come trasformazione di input in output, (3) struttura dati come modo di organizzare informazioni per accesso efficiente, (4) ciclo come ripetizione condizionale, (5) condizionale come biforcazione del flusso di esecuzione.

Ognuno di questi modelli mentali può essere insegnato in un'ora. Costruire l'automatismo cognitivo - applicarli senza sforzo a problemi nuovi - richiede mesi di pratica deliberata. Il programma di Clear: esposizione quotidiana a problemi che richiedono questi modelli, con feedback immediato sul risultato.

Livello 2: Pattern di decomposizione (settimane 9-16)

Obiettivo: internalizare il processo di decomposizione del problema. Ogni problema complesso può essere decomposto in problemi più semplici. La decomposizione è una competenza che si apprende per esposizione ripetuta, non per spiegazione teorica.

Pratica deliberata: prendere un problema reale (costruire una lista della spesa, calcolare la rata di un mutuo, filtrare una lista di articoli per data) e decomporlo esplicitamente in sotto-problemi su carta prima di scrivere una riga di codice. Newport chiama questo "deliberate practice at the edges of your competence" - la decomposizione deve essere deliberata, non automatica.

Livello 3: Costruzione del feedback loop (settimane 17-24)

Obiettivo: imparare a usare il feedback dell'ambiente (compilatore, test, output del programma) per aggiornare il modello mentale. Il feedback loop è il motore dell'apprendimento tecnico: senza un feedback loop funzionante, si possono completare tutorial per anni senza costruire career capital reale.

Il sistema concreto: ogni sessione di studio produce un artefatto verificabile (un programma che funziona, un test che passa, un bug che viene trovato e risolto). L'artefatto non è il fine - è il segnale che il feedback loop è attivo.

Livello 4: Integrazione del background (mese 6+)

Obiettivo: identificare e articolare il contributo unico del proprio background non-CS alle competenze tecniche. Newport chiama questo "career capital rare and valuable" - la combinazione di competenze tecniche + background specifico che pochi altri developer possono replicare.

In pratica: cercare deliberatamente progetti o problemi dove il background non-CS è un vantaggio - un developer ex-giurista che contribuisce a un progetto legal-tech, un developer ex-economista che contribuisce a una feature di analytics finanziaria. Questi contributi costruiscono una reputazione professionale che è più difficile da replicare della sola competenza tecnica.

Approfondimento: il modello a 4 livelli in pratica

Il modello a 4 livelli descritto nella sezione precedente non è una progressione lineare - è un sistema a cicli sovrapposti. Mentre si è al Livello 2 (decomposizione dei problemi), si continua a raffinare i modelli mentali del Livello 1. Mentre si costruisce il feedback loop del Livello 3, si inizia già a identificare le aree di integrazione del Livello 4. La progressione è spiraliforme, non sequenziale.

Come applicare il Livello 1 in modo deliberato

La pratica deliberata dei modelli mentali fondamentali richiede di esporli esplicitamente - non di applicarli in modo inconsapevole. Un esercizio concreto: ogni volta che si scrive una funzione, descrivere ad alta voce o per iscritto qual è l'input, qual è l'output, e qual è la trasformazione che avviene nel mezzo. Questa pratica di esplicitazione forzata accelera la costruzione del modello mentale in modo significativo rispetto alla scrittura passiva del codice.

Un'altra pratica documentata tra i career-changer efficaci: rileggere codice scritto 3-4 settimane prima e spiegare a voce cosa fa ogni parte. Se ci sono parti che non si riesce a spiegare - non che si riconosce visivamente, ma che si riesce a descrivere in parole proprie - quelle sono le aree dove il modello mentale è ancora superficiale e va approfondito.

Come applicare il Livello 2 fuori dal coding

La decomposizione del problema non è una competenza specifica del coding - è una competenza trasversale che si applica a qualunque sistema complesso. Chi viene da giurisprudenza la chiama "analisi del caso". Chi viene da economia la chiama "analisi costi-benefici". Chi viene da filosofia la chiama "analisi argomentativa". Sono tutti nomi diversi dello stesso pattern cognitivo: scomporre un problema complesso in sotto-problemi gestibili.

Il vantaggio del developer non-CS è che questa competenza è già stata costruita nel proprio dominio di provenienza. Il lavoro da fare è il transfer: applicare consciamente lo stesso framework a problemi tecnici, riconoscendo che la struttura del processo è la stessa anche se il dominio è diverso.

Come accelerare il Livello 3 (feedback loop)

Il feedback loop si accelera aumentando la frequenza dei cicli, non la loro intensità. 30 minuti di coding deliberato ogni giorno, con un problema specifico e un output verificabile, costruisce più career capital di 4 ore di coding intensivo il sabato. La consistenza bassa-frequenza-alta batte l'intensità alta-frequenza-bassa in termini di costruzione di modelli mentali permanenti - questo è il dato convergente tra la ricerca di Newport e quella di Clear.

In pratica: identificare un problema specifico all'inizio di ogni sessione di studio. Non "studio Python oggi" - "costruisco una funzione che prende una lista di numeri e restituisce i 3 più grandi, senza usare sort()". Il problema specifico crea il feedback immediato: o la funzione funziona, o genera un errore che dice esattamente dove si è sbagliati.

Misurare il progresso del Livello 4 (integrazione background)

Il progresso del Livello 4 è più difficile da misurare perché è qualitativo. Un proxy utile: quante volte nella settimana hai usato il tuo background non-CS per contribuire a una decisione tecnica o di prodotto in modo che un collega CS puro non avrebbe fatto? Se la risposta è zero - o se non noti mai queste opportunità - significa che il Livello 4 non è ancora attivo. Non è un problema di competenza: è un problema di attenzione.

Praticare la consapevolezza attiva del contributo del background: tener traccia, anche solo mentalmente, delle volte in cui la prospettiva non-CS ha prodotto un insight utile. Questa tracciatura trasforma il contributo implicito in contributo esplicito - e rende più facile articolarlo in un colloquio o in una conversazione con il manager.

Letture e risorse

Le due risorse fondamentali di questo articolo - Newport e Clear - sono entrambe disponibili in formato cartaceo, ebook e audiobook:

  • Cal Newport, "So Good They Can't Ignore You" (2012): disponibile su Amazon. Capitoli 3-5 sono i più rilevanti per la career capital theory applicata alla transizione.
  • James Clear, "Atomic Habits" (2018): disponibile su Amazon. Capitoli 1-3 e 8-10 sono i più rilevanti per la costruzione del sistema di studio.
  • Cal Newport, "The Career Capital Theory of Great Work" (post blog, 2012): disponibile gratuitamente. Sintesi in 1000 parole del framework.
  • HN thread "Non-CS developers - how do you approach algorithmic thinking?" (2021): 340+ commenti. Corpus primario di testimonianze di career-changer.

Per una selezione più ampia di risorse annotate per career-changer non-CS - inclusi corsi, podcast, e strumenti di pratica deliberata - scarica la Reading List curata: disponibile nella cornerstone della serie.

Errori frequenti nell'approccio al framework cognitivo

Anche avendo capito la teoria, ci sono pattern di errore ricorrenti nell'applicazione del framework cognitivo che vale la pena nominare esplicitamente.

Errore 1: Confondere la comprensione con la padronanza

Il momento in cui si capisce un concetto - si legge la spiegazione, si annuisce, si dice "ah, capisco" - è molto distante dal momento in cui si è in grado di applicare quel concetto in autonomia a un problema nuovo mai visto prima. La distanza tra questi due momenti è la distanza tra la comprensione superficiale e la padronanza reale.

Newport chiama questo gap "the difference between reading about deliberate practice and actually doing deliberate practice". Leggere di decomposizione del problema non è fare deliberate practice di decomposizione del problema. Guardare un tutorial su come scrivere una funzione ricorsiva non è scrivere una funzione ricorsiva da zero davanti a un problema che non si è mai visto.

Il test semplice della padronanza: riesci a risolvere il problema in modo autonomo, senza guardare esempi, senza consultare documentazione, senza suggerimenti esterni? Se la risposta è no - hai la comprensione, non la padronanza. Entrambe sono valide, ma è importante sapere a quale livello si è.

Errore 2: Isolare le competenze invece di integrarle

Un pattern comune nel percorso di autoapprendimento: studiare competenze in silos separati - "questo mese faccio solo Python", "questo mese faccio solo SQL", "questo mese faccio solo algoritmi". Questo approccio produce competenze isolate difficili da integrare quando si arriva a un problema reale che richiede Python + SQL + ragionamento algoritmico nello stesso momento.

L'approccio alternativo - costruire progetti che richiedono l'integrazione di più competenze contemporaneamente fin dalla fase iniziale - è più difficile ma produce un framework cognitivo più robusto. Il progetto autonomo è il principale strumento di integrazione: richiede di prendere decisioni su quale tecnologia usare per quale parte del problema, e questo processo decisionale è quello che costruisce la comprensione delle relazioni tra le competenze.

Errore 3: Non tracciare il progresso

Il progresso nel percorso di apprendimento tecnico è spesso invisibile nel breve periodo - si impara lentamente e continuamente, non in salti bruschi. Questo rende difficile valutare se il percorso sta funzionando o se si sta perdendo tempo in un tutorial loop senza risultati.

La soluzione di Clear è semplice: tracciare ogni sessione di pratica deliberata. Non il contenuto - il fatto che è avvenuta. Un habit tracker che registra "ho scritto codice oggi: sì/no" produce, in 3 mesi, una rappresentazione visiva del pattern di pratica che è impossibile avere senza tracciatura. E questo dato è molto più utile della sensazione soggettiva di "sto imparando abbastanza" o "non sto imparando abbastanza".

Errore 4: Aspettare la motivazione per studiare

La motivazione è un output del sistema, non un input. Clear dimostra in modo rigoroso che l'identità si costruisce attraverso le azioni, non viceversa: non si diventa "la persona che studia ogni giorno" perché si è molto motivati - si diventa "la persona che studia ogni giorno" perché si studia ogni giorno, e col tempo questa azione forma l'identità. L'attesa della motivazione è l'errore di chi ha invertito la causalità.

In pratica: il sistema di studio deve funzionare indipendentemente dalla motivazione del momento. Sessioni brevi (25 minuti) con output verificabile sono più efficaci di sessioni lunghe condizionate alla presenza di motivazione alta. Un developer che studia 25 minuti ogni giorno per 6 mesi - anche i giorni in cui ha zero voglia - supera consistentemente un developer che studia 3 ore solo quando si sente motivato.

Prossimo passo nella serie

Questo articolo ha costruito il framework cognitivo teorico. Il prossimo step è vedere come si manifesta in pratica quando il background non-CS diventa un vantaggio competitivo diretto - con un caso reale che dimostra come la domain expertise non-tech produce carriere tech più solide di quelle costruite solo su competenze tecniche.

Leggi: Quando il background non-tech diventa superpotere (domain expertise) - il prossimo articolo della serie, disponibile martedì prossimo.

Vedi anche nella serie:

Cosa ho imparato scrivendo questo

Scrivere questo articolo mi ha costretto a distinguere due cose che spesso vengono confuse: le competenze tecniche (sintassi, API, framework) e il framework cognitivo (i pattern di ragionamento che permettono di usare quelle competenze in modo flessibile). La distinzione non è accademica - ha conseguenze dirette su come si studia e quanto velocemente si migliora.

Il contributo di Newport alla letteratura sul lavoro è spesso ridotto al suo consiglio più famoso ("sii così bravo che non possano ignorarti") e perso il framework sottostante - che è molto più utile per chi fa transizioni di carriera. La career capital theory dice qualcosa di preciso: le competenze si costruiscono attraverso la pratica deliberata ai margini della competenza attuale, non attraverso la ripetizione di ciò che si sa già fare. Per chi transita al tech, questo significa che completare il quinto tutorial sullo stesso argomento non costruisce career capital. Lavorare su un problema che è al limite di ciò che si sa fare, sì.

Clear aggiunge il livello operativo che Newport lascia implicito: il sistema di abitudini. La motivazione è instabile. Il sistema di studio è ciò che produce risultati quando la motivazione è bassa - che è la maggior parte del tempo.

Se stai costruendo il tuo framework cognitivo da developer e vuoi condividere cosa ha funzionato e cosa no nel tuo percorso specifico, scrivimi a federico@federicocalo.dev. Mi interessa particolarmente sapere quali competenze del tuo background non-CS hai trovato più trasferibili - e quali più ostili alla transizione.

Ti rispondo. Sempre.

Se stai iniziando ad usare strumenti come Claude Code per compensare il gap di formazione formale, ho raccolto in una serie dedicata il workflow agentico che uso quotidianamente sul portfolio: Claude Code Workflow: Superpowers + GSD framework. È il sistema che mi permette di gestire 19 fasi parallele senza un team di sviluppo dietro.

Domande frequenti

Perché il framework cognitivo è diverso dalle competenze tecniche?

Le competenze tecniche sono acquisibili in modo relativamente diretto, mentre il framework cognitivo è più sottile e richiede la costruzione di modelli mentali per affrontare problemi sconosciuti.

Qual è il problema della frammentazione dell'apprendimento?

Il problema consiste nell'assenza di struttura connettiva tra le competenze acquisite, che possono essere isolate e non connessa a un modello mentale coerente del sistema.

Come si può superare l'ansia da "non sono abbastanza tecnico"?

È importante riconoscere che questa ansia è spesso infondata e occupa banda mentale preziosa per l'apprendimento. È necessario costruire un modello mentale coerente del sistema e concentrarsi sulla pratica deliberata.

Quali sono i 5 pattern cognitivi ricorrenti in chi ha effettuato la transizione con successo?

I 5 pattern sono: costruire modelli mentali, non memorizzare sintassi; applicare il sistema di abitudini di Clear allo studio tecnico; impostare problema → decomposizione → implementazione; utilizzare gli errori come dati informativi; contribuire deliberatamente del background non-CS.

Commenti

Caricamento commenti...

Accedi per commentare

Discuti questo articolo nella community

Unisciti al gruppo Telegram per discutere con altri sviluppatori, fare domande e condividere le tue esperienze.

Ti è piaciuto questo articolo?

Esplora altri contenuti sul blog o scopri i miei progetti