Le migliori sfide di programmazione per principianti: esercizi di programmazione da facili a difficili

Le migliori sfide di programmazione per principianti: esercizi di programmazione da facili a difficili

Ecco una cosa di cui nessuno ti avverte. Puoi guardare tutorial per un mese intero, annuire a ogni video, e poi aprire un file vuoto e non avere la minima idea di cosa scrivere. Ci sono passato anch'io. È successo alla maggior parte delle persone che imparano a programmare.

La soluzione è semplice ma efficace: risolvere i piccoli problemi da soli, anche se all'inizio non è perfetto. Questa guida è quindi divisa in due parti. La prima è una selezione accurata delle migliori sfide di programmazione per principianti (dieci, di difficoltà variabile). La seconda elenca i siti dove ne troverete migliaia di altre dopo aver esplorato la mia.

Qualsiasi linguaggio di programmazione va bene. I miei esempi usano Python e qualche frammento di JavaScript, dato che è da lì che la maggior parte delle persone inizia. Se possibile, seguite l'ordine indicato. Ogni problema introduce un nuovo concetto.

Perché le sfide di programmazione sviluppano vere competenze di programmazione

Cosa si intende per sfida? Qualcosa di piccolo con una risposta ovvia e corretta. "Prendi una parola e sputala al contrario." "Ecco un elenco di numeri, qual è il più grande?" Non devi installare nulla né scegliere un framework. Scrivi magari dieci righe.

Guardare un tutorial significa seguire il processo di pensiero di qualcun altro. Le sfide di programmazione ribaltano questa prospettiva, e la cosa è scomoda ma in modo utile. Si procede per tentativi, qualcosa non funziona, si cerca di individuare un errore, si riprova. Fatelo per qualche settimana e alcune cose diventeranno silenziosamente più facili:

  • Padronanza della sintassi. Basta cercare su Google per la quinta volta come scrivere un ciclo for.
  • Capacità di risoluzione dei problemi. Inizi a scomporre un compito poco chiaro in passaggi prima ancora di toccare la tastiera.
  • Pensiero logico. Una lista vuota, un numero intero negativo, una parola di una sola lettera. Inizi ad aspettarteli.
  • Debugging. Il testo di errore rosso non sembra più un insulto.
  • Fiducia in se stessi. Ogni problema risolto è la prova che si è in grado di scrivere un programma in autonomia.

Qualcuno una volta mi ha detto che la programmazione ha la sua regola dell'80/20, e per i problemi da principiante è piuttosto azzeccata. La maggior parte di essi si basa sulle stesse cinque mosse: cicli, istruzioni if/else, manipolazione di stringhe, conteggio di elementi in un dizionario e attraversamento di un array. Una volta imparate queste basi, molti problemi "nuovi" si rivelano essere vecchi problemi con una veste diversa.

Le migliori sfide di programmazione per principianti

10 semplici sfide di programmazione per principianti da risolvere per prime

Nessuno di questi esempi è originale, ed è proprio questo il punto. Compaiono in quasi tutti i corsi per principianti perché funzionano. I primi cinque richiedono solo cicli, condizioni e un po' di gestione di stringhe o liste, mentre gli ultimi cinque ti costringono a pensare a quale struttura dati utilizzare prima di scrivere qualsiasi cosa. In ogni caso, cerca di non cercare su Google per almeno venti minuti, anche quando ti sembra inutile.

Sfida 1: FizzBuzz

Il compito è stampare i numeri da 1 a 100, ma ogni multiplo di tre viene visualizzato come "Fizz", ogni multiplo di cinque come "Buzz", e i numeri che sono multipli di entrambi vengono visualizzati come "FizzBuzz".

Ricordo di aver pensato che fosse quasi offensivo quanto sembrasse semplice. Non è poi così semplice, però, ed è per questo che ai selezionatori è piaciuto così a lungo. Le persone che hanno letto molto sulla programmazione ma hanno scritto molto poco di solito inciampano sull'ordine dei controlli. La mia versione in Python è questa:

python per n in range(1, 101): se n % 15 == 0: print("FizzBuzz") elif n % 3 == 0: print("Fizz") elif n % 5 == 0: print("Buzz") else: print(n)

Una volta che il tuo funziona, trascina la riga % 15 verso il basso, eseguilo e vedi quanti FizzBuzze sopravvivono. Spoiler: nessuno.

Sfida 2: Invertire una stringa

"ciao" entra, "olleh" esce.

Esiste una scorciatoia praticamente in ogni linguaggio, come s[::-1] in Python o split("").reverse().join("") in JavaScript, ed è giusto scriverla una volta per vedere come funziona. Dopodiché, onestamente, la cancellerei e userei la versione più noiosa con un ciclo che aggiunge un carattere alla volta. È qui che si nota che nella maggior parte dei linguaggi una stringa non può essere modificata sul posto, cosa che confonde molte persone in seguito se non lo imparano qui.

Sfida 3: Verificatore di palindromi

Una parola palindroma è una parola come "racecar" o "noon" che si legge allo stesso modo in entrambe le direzioni, quindi la tua funzione dovrebbe rispondere sì a queste e no a "hello".

Quando funziona, è un buon momento per migliorare le tue capacità di programmazione inserendo nel codice "A man, a plan, a canal: Panama", che viene elaborato solo dopo aver convertito il testo in minuscolo ed eliminato spazi e punteggiatura. Puoi riutilizzare il codice per invertire le stringhe della sfida precedente, il che è una bella soddisfazione.

Sfida 4: Sequenza di Fibonacci

Probabilmente hai già visto questa sequenza: 0, 1, 1, 2, 3, 5, 8, 13, dove ogni numero è la somma dei due che lo precedono. La tua funzione dovrebbe restituire i primi n numeri di questa sequenza.

Due variabili e un ciclo sono sufficienti. Il divertimento inizia quando lo si riscrive con la ricorsione, in modo che la funzione chiami se stessa e poi chieda n = 35. Sulla maggior parte dei portatili si dovrà aspettare un po', e capire perché succede è un primo approccio graduale alla programmazione dinamica. È uno di quei piccoli momenti "ah, ecco perché" che rimangono impressi.

Sfida 5: Ruotare un array

Prendi un array e un numero k, poi sposta ogni elemento di k posizioni a destra, con quelli alla fine che tornano all'inizio. Con [1, 2, 3, 4, 5] e k = 2 dovresti ottenere [4, 5, 1, 2, 3].

La maggior parte dei primi tentativi fallisce quando k è maggiore della lista. Ruotare cinque elementi di 7 significa in realtà ruotarli di 2, cosa che è ovvia una volta che la si nota, ma invisibile fino ad allora.

Se siete riusciti a superare questi cinque senza troppa difficoltà, ottimo lavoro. I prossimi vi chiederanno un po' di più.

Sfida 6: Trova il numero intero più grande in un array

Trovare il numero più grande è facile se è consentito usare il metodo max(), cosa che non è possibile. È meglio usare un ciclo e poi trovare anche il secondo numero più grande senza scorrere due volte la lista. Ora devi tenere traccia di due valori e fare attenzione a quale aggiorni per primo.

I duplicati e i numeri negativi sono ottimi elementi da testare, poiché molte delle prime soluzioni falliscono silenziosamente in presenza di questi elementi.

Sfida 7: Conta le vocali in una frase

Contare le vocali è il riscaldamento. L'esercizio vero e proprio consiste nel contare ogni vocale singolarmente e restituire qualcosa come {"a": 3, "e": 5, "i": 1, "o": 2, "u": 0}.

Per molti principianti, questo è il momento in cui i dizionari (o gli oggetti in JavaScript) finalmente acquistano un senso, e questo è importante, perché probabilmente è la struttura dati su cui faranno più affidamento per tutto l'anno a venire.

Sfida 8: Verificatore di anagrammi

Gli anagrammi utilizzano esattamente le stesse lettere in un ordine diverso, come "listen" e "silent", quindi stai scrivendo una funzione che stabilisce se due stringhe sono idonee.

Conosco due metodi validi. Puoi ordinare entrambe le stringhe e confrontare i risultati, oppure puoi contare quante volte compare ogni lettera e confrontare i conteggi. Scrivere entrambe le stringhe e poi chiedersi quale richieda meno lavoro è sostanzialmente il primo passo per iniziare a pensare all'efficienza.

Sfida 9: Due somme

Con una lista come [2, 7, 11, 15] e un obiettivo di 9, si restituiscono le posizioni dei due numeri la cui somma è uguale all'obiettivo, che in questo caso è [0, 1].

Molti iniziano con due cicli annidati che provano ogni coppia, e questo va bene per liste brevi, ma diventa presto lento. L'approccio più veloce memorizza i numeri già visti in un dizionario, in modo da poterli consultare istantaneamente. Non è un caso che LeetCode abbia messo questo per primo, poiché mostra chiaramente quanto sia importante la giusta struttura dati.

Sfida 10: Gioco di indovinelli numerici

Qui il computer sceglie un numero segreto tra 1 e 100, tu continui a provare e lui ti dice "troppo alto" o "troppo basso" finché non indovini, indicando anche quanti tentativi ci sono voluti.

Non si tratta tanto di un semplice rompicapo di programmazione, quanto piuttosto di una piccola applicazione con input dell'utente, un ciclo while e numeri casuali. Prima o poi qualcuno digiterà "banana" invece di un numero, quindi dovrete anche fare i conti con input errati. E a differenza degli altri, questo è un gioco che potete effettivamente dare a un amico per giocarci.

I migliori siti web per sfide di programmazione online

Dopo che i miei dieci saranno finiti, vorrai una scorta illimitata con controllo automatico. Tutti questi siti per sfide di programmazione online offrono questa possibilità. Semplicemente, l'esperienza d'uso è molto diversa.

Piattaforma Ideale per Formato Costo
Edabit Principianti assoluti Sfide di programmazione in formato ridotto direttamente nel browser. Livello gratuito
Codewars pratica gamificata Classificazione dei "kata" con soluzioni di comunità Gratuito
Esercizio fisico Imparare le buone abitudini Percorsi linguistici con tutor umano facoltativo Gratuito
freeCodeCamp Apprendimento strutturato Programma di studi con esercizi e certificazioni integrati. Gratuito
HackerRank Percorsi di specializzazione e preparazione al lavoro Problemi basati su argomenti con etichette di difficoltà Gratuito per gli studenti
LeetCode Preparazione al colloquio Problemi algoritmici classificati come Facile/Medio/Difficile Livello gratuito
CodeChef Avvicinandosi alle competizioni Percorsi di allenamento e gare regolari Livello gratuito
Progetto Euler Amanti della matematica Enigmi matematici complessi, è richiesto solo l'invio della risposta. Gratuito
L'avvento del codice Divertimento stagionale Ogni dicembre, enigmi quotidiani a tema narrativo. Gratuito

Edabit

Se un amico mi chiedesse da dove iniziare, gli consiglierei Edabit. Gli esercizi sono brevi, tutto funziona nel browser e si accumulano punti esperienza. Sono trattati Python, JavaScript, Java, C++ e altri linguaggi, e l'etichetta "molto facile" significa davvero molto facile.

Codewars

Codewars chiama i suoi problemi kata (un termine delle arti marziali che indica gli esercizi). Sono classificati da 8 kyu, il più facile, fino a 1 kyu. La magia avviene dopo aver inviato la soluzione. Puoi vedere le risposte di tutti gli altri e confrontare le tue dieci righe goffe con la brillante risposta di qualcun altro ti insegna più di quanto possano fare la maggior parte dei tutorial.

Esercizio fisico

Exercism è un'organizzazione senza scopo di lucro ed è completamente gratuita. Offre percorsi di apprendimento per oltre 80 linguaggi di programmazione e, su richiesta, i tutor volontari sono disponibili a dare un'occhiata al tuo codice. Puoi continuare a usare il browser oppure scaricare gli esercizi sul tuo computer. Ti consiglierei la seconda opzione, perché ti permette di familiarizzare con Visual Studio Code e il terminale.

freeCodeCamp

Non si tratta propriamente di un sito di sfide. È un intero programma di studi, ma è strutturato in centinaia di piccoli esercizi di programmazione, quindi rientra in questa categoria. Ottimo se ti piace la struttura: JavaScript, Python, responsive web design e altro ancora, con progetti di certificazione alla fine di ogni percorso.

HackerRank

HackerRank suddivide i problemi in base alle competenze (Python, SQL, strutture dati, algoritmi) e indica il livello di difficoltà di ciascuno e il numero di persone che lo hanno risolto. Molte aziende lo utilizzano per selezionare i candidati. Familiarizzare con l'interfaccia ora vi risparmierà stress in seguito.

LeetCode

Questo è il mondo della preparazione ai colloqui. I problemi sono classificati come Facili, Medi e Difficili, e persino la categoria "Facile" presuppone che tu conosca le basi. Considera le sfide di programmazione come un punto di partenza, non come una meta da raggiungere. Torna quando i miei dieci problemi ti sembreranno una routine.

CodeChef

CodeChef è nato come sito di programmazione competitiva. Oggi offre anche percorsi di pratica per principianti accanto alle competizioni tradizionali, quindi se le gare a tempo ti sembrano divertenti, è il posto ideale per provarne una.

Progetto Euler

Problemi di matematica che richiedono la programmazione per essere risolti. Nessun editor sul sito. Scrivi il programma dove preferisci e inserisci semplicemente il risultato finale. Gli esperti di matematica lo adorano. Tutti gli altri tendono a non apprezzarlo.

L'avvento del codice

Ogni dicembre viene proposto un puzzle in due parti al giorno, legate da una storia divertente. Recentemente la durata del concorso è stata ridotta da 25 a 12 giorni e la classifica globale è stata eliminata, quindi ora si tratta principalmente di classifiche private con amici o colleghi. I puzzle più vecchi rimangono disponibili tutto l'anno e l'archivio è un'ottima risorsa per esercitarsi.

Sentirai parlare anche di Coderbyte, che unisce sfide e corsi di preparazione ai colloqui di lavoro, e di Topcoder, pensato per sviluppatori esperti.

Un avvertimento. Molti elenchi datati rimandano ancora a Google Code Jam e Kickstart. Google li ha chiusi entrambi nel 2023 e ora ne rimangono solo gli archivi dei problemi.

Le migliori sfide di programmazione per principianti

Come esercitarsi con le sfide di programmazione senza esaurirsi

Aggiungere dieci siti ai segnalibri non ti rende migliore. L'abitudine sì. Ecco più o meno cosa farei io:

  1. Scegli un linguaggio di programmazione e attieniti a quello. Python è la scelta più comune perché il suo codice è quasi identico all'inglese. JavaScript è più indicato se vuoi sviluppare siti web.
  2. Configura un vero editor di codice. Gli editor del browser vanno bene per la prima settimana. Installare Visual Studio Code fin da subito ti insegnerà a eseguire i file, leggere gli errori in un terminale e sperimentare con un debugger.
  3. Risolvi da uno a tre problemi al giorno. Esercitarsi quotidianamente con la programmazione, a piccole dosi, è molto meglio di una sessione di studio intensivo di sei ore la domenica. Gli schemi si consolidano tra una sessione e l'altra, ed è difficile saltare un piccolo obiettivo.
  4. Dopo aver finito, leggi anche altre soluzioni. Su Codewars o Exercism, dai un'occhiata ad altre due o tre risposte. Imparerai le migliori pratiche e alcuni trucchi davvero ingegnosi che vale la pena copiare.
  5. Riprendi in mano vecchi problemi. Una settimana dopo, risolvine uno a memoria. Se non ci riesci, significa che l'hai memorizzato invece di comprenderlo.
  6. Passa a progetti di piccole dimensioni. Quando hai a disposizione dai 30 ai 50 problemi, costruisci qualcosa: una lista di cose da fare, un'app meteo con un'API gratuita, un'avventura testuale. È qui che le diverse competenze iniziano a collaborare.

Cosa fare quando ci si blocca su una sfida di programmazione

Ti capiterà di rimanere bloccato. Anche gli sviluppatori senior si bloccano prima di pranzo. Quello che hanno è una routine per sbloccarsi, quindi prendine spunto:

  • Riformula il problema con parole tue. Un numero sorprendente di volte in cui pensi "Non riesco a risolvere questo problema" in realtà significa "Ho interpretato male la situazione".
  • Svolgi un esempio a mano. Bastano pochi dati, carta e penna, e annota ogni passaggio. Congratulazioni, questo è il tuo algoritmo.
  • Scrivi prima lo pseudocodice. "Per ogni numero, se è maggiore del mio massimo attuale, mantienilo." È più facile correggere un testo semplice che un codice.
  • Stampa tutto. La maggior parte dei bug consiste in una variabile che contiene un valore diverso da quello che ti aspettavi. Stampalo e scoprilo.
  • Spiegalo a voce alta. Analizza il tuo codice riga per riga, parlando con una persona o con una paperella di gomma. Il bug del software spesso si manifesta a metà di una frase.
  • Utilizza i suggerimenti passo passo. Molte piattaforme offrono un suggerimento prima della risposta completa. Cogli il suggerimento, poi riprova.

Qualunque cosa tu faccia, non copiare una soluzione, non limitarti a guardarla e poi passare oltre. L'ho fatto per un po' e non mi ha portato da nessuna parte. Se leggi una risposta, chiudi la scheda, aspetta un'ora e poi ricostruiscila da zero.

Sfide di programmazione a tema crittografico per principianti di blockchain

Forse i pagamenti in criptovalute o la blockchain sono il motivo per cui hai voluto imparare a programmare. In tal caso, esercitati con problemi relativi a questi ambiti. I principi fondamentali sono gli stessi (stringhe, numeri interi, API), ma i compiti assomigliano molto di più al lavoro tecnico reale. Non è necessario comprendere gli algoritmi di consenso per nessuno di questi esercizi.

  • Ottieni il prezzo di una criptovaluta in tempo reale. Accedi a un'API pubblica gratuita per i prezzi delle criptovalute, visualizza il prezzo attuale del Bitcoin e aggiornalo ogni minuto. Ciao, richieste HTTP e JSON.
  • Convalida il formato di un indirizzo di portafoglio. Verifica se una stringa ha l'aspetto di un indirizzo plausibile: lunghezza corretta, prefisso corretto, solo caratteri consentiti. Un ottimo esercizio sulle stringhe e una semplice introduzione alle espressioni regolari.
  • Crea un convertitore di unità. Da satoshi a BTC (1 BTC = 100.000.000 satoshi), da wei a ETH (1 ETH = 10¹⁸ wei). Scoprirai presto perché i numeri in virgola mobile e il denaro non vanno d'accordo e perché gli sviluppatori preferiscono rappresentare gli importi come numeri interi.
  • Esegui l'hashing di una stringa con SHA-256. Esegui l'hashing di una frase con il tuo algoritmo di hashing standard, cambia una lettera e ripeti l'hashing. Il risultato sarà completamente diverso. Questa proprietà è un elemento fondamentale che rende le blockchain così affidabili.
  • Crea una semplice pagina di checkout. Una pagina prodotto con un pulsante "Paga con criptovalute" che crea una fattura di prova tramite l'API di un gateway di pagamento.

Quest'ultimo elemento collega tutti gli altri: un modulo, una chiamata API, la gestione degli errori e la visualizzazione del risultato a un utente reale. Gateway come Plisio pubblicano un'API e la documentazione che è possibile integrare in un negozio di prova, il che rende un esercizio per principianti molto simile a una vera e propria integrazione di e-commerce.

Inizia oggi stesso la tua pratica di programmazione con un semplice problema.

Ripensando a cosa mi ha effettivamente aiutato a sbloccarmi da principiante, non si trattava di qualche problema leggendario e difficilissimo. Le migliori sfide di programmazione per i principianti si sono rivelate essere quelle piccole e noiose che sono riuscito a portare a termine, di solito a tarda notte con una tazza di tè freddo accanto al portatile.

Quindi, stasera apri un editor e fai funzionare FizzBuzz, codice brutto compreso. Continua a seguire la mia lista finché ti diverti ancora, e quando smetterà di essere divertente, passa al sito che ti è sembrato più amichevole tra quelli elencati. Mantieni l'abitudine così piccola che saltarla ti sembrerebbe quasi ridicolo. Tra un mese alcune di queste cose ti sembreranno quasi noiose, e quella noia è più o meno la sensazione che si prova ad avere vere competenze di programmazione.

Qualsiasi domanda?

Onestamente? FizzBuzz, come quasi tutti. Richiede solo un ciclo e un paio di istruzioni if, e si può spiegare in un fiato, eppure molte persone sbagliano ancora l’ordine dei controlli al primo tentativo. Invertire una stringa è un ottimo secondo passaggio.

Edabit è quello che consiglierei a un principiante assoluto, soprattutto perché i problemi sono brevi e non è necessario installare nulla. Più avanti, Codewars diventa avvincente grazie al suo sistema di classifiche e alla possibilità di leggere le soluzioni di tutti. Exercism offre tutor gratuiti, cosa rara. freeCodeCamp è adatto a chi preferisce un percorso prestabilito. LeetCode può aspettare, dato che anche i problemi più semplici richiedono una conoscenza di base.

Direi Python per la maggior parte delle persone, in parte perché la sintassi non intralcia e permette di concentrarsi sulla logica anziché su parentesi e punti e virgola. Se sai già di voler creare siti web, JavaScript è altrettanto valido, dato che è supportato da tutti i browser. Entrambi i linguaggi vanno bene per le sfide di programmazione e, onestamente, la cosa più importante è rimanere fedeli alla propria scelta.

Da uno a tre, e intendo questo come un limite massimo, non come un obiettivo, soprattutto all’inizio. Due problemi al giorno per un mese ti insegneranno più di trenta affrontati in un solo fine settimana. Sfrutta il tempo rimanente per comprendere a fondo ogni soluzione e per analizzare come altri l’hanno affrontata.

Stranamente, sì, anche se i problemi in sé non diventano mai più semplici. Ciò che cambia è che si inizia a notare con quanta frequenza si ripresentano gli stessi schemi, cose come cicli, istruzioni condizionali, gestione delle stringhe, conteggio con i dizionari e attraversamento degli array. Intorno al quarantesimo problema, ti ritroverai a pensare "oh, è di nuovo uno di questi", ed è lì che avviene il cambiamento.

Inizia riscrivendo il problema con parole tue, perché, per esperienza, circa la metà dei momenti di "blocco" sono in realtà dovuti a un’errata interpretazione. Anche la carta aiuta. Risolvi un piccolo esempio a mano, scrivi cosa hai fatto e quell’elenco diventerà il tuo pseudocodice. Le istruzioni print ti mostreranno cosa contengono realmente le tue variabili. E se passano venti o trenta minuti senza risultati, un suggerimento va bene, ma di solito la soluzione completa non lo è.

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.