Come ho vinto 3 medaglie d'oro su 4 alle Computing Olympiad

Come ho vinto 3 medaglie d'oro su 4 alle Computing Olympiad

Mi stavo preparando per le finali del campionato mondiale Google HashCode 2017. Questa è la più grande competizione con problemi algoritmici organizzata da Google.

Ho iniziato a imparare il C++ da zero in prima media. Non sapevo nulla di programmazione, algoritmi o strutture dati. Ad un certo punto ho scritto la mia prima riga di codice. Sette mesi dopo, la competizione sulla programmazione si profilava all’orizzonte. Volevo vedere quanto funzionava il mio stile di apprendimento della programmazione. Era l'occasione perfetta.

Dopo due giorni di gara sono arrivati ​​i risultati: ho vinto la medaglia d'oro.

Ero scioccato. Ero avanti rispetto ai concorrenti con 5 anni di esperienza. Sapevo di aver lavorato duro, ma questo risultato ha superato tutte le mie aspettative. Ho capito che la programmazione sportiva era il mio argomento e mi sono buttato a capofitto.

So cosa mi ha portato al successo e voglio condividerlo con voi.

Come ho vinto 3 medaglie d'oro su 4 alle Computing Olympiad

L'articolo è stato tradotto con il supporto di EDISON Software, che si prende cura della salute dei programmatori e della loro colazionee sviluppa software personalizzato.

Quale linguaggio di programmazione scegliere

  • C++: lo consiglio vivamente! È molto veloce. L'implementazione degli algoritmi richiede poco tempo grazie a STL. Il C++ è accettato in tutte le competizioni. Ho scritto la mia prima riga di codice in C++.
  • C - Impara il C++ grazie a STL. Se conosci il C, puoi programmare anche in C++.
  • Java è un linguaggio di programmazione lento. Ha una classe Big Integer, ma non ti aiuterà molto. Se una competizione ha un limite di tempo, con Java sicuramente lo supererai. Java non è accettato in tutte le competizioni.

Dove puoi esercitarti

Vi consiglio Giudice online di sfera (SPOJ). È una risorsa efficace in termini di quantità e qualità. Editor e soluzioni sono disponibili online se rimani bloccato nel processo di risoluzione dei problemi. Oltre a questo sito lo consiglio Kit di strumenti SPOJ и classificatore di problemi per SPOJ.pl.

Per prima cosa devi affinare le tue conoscenze di base

Una volta abituati alla sintassi della lingua, ci sono alcuni problemi da superare. Inizia con problemi semplici che richiedono pratica. In questa fase, la cosa principale è determinare il tuo stile di programmazione. Forse ti piace scrivere codice con molti spazi bianchi, forse no. Potresti inserire le parentesi sulla stessa riga del "se" oppure su righe separate.

Devi trovare il tuo stile di programmazione perché è il TUO stile.

Quando lo cerchi, ricorda due principi fondamentali:

  • Il tuo codice dovrebbe essere facile da implementare. Dovresti sentirti a tuo agio nell'implementare la soluzione che ti viene in mente. Perché? Perché durante una competizione l'ultima cosa che vuoi è perderti nel tuo codice. È sempre meglio dedicare 5 minuti in più a pensare a come semplificare l'implementazione del codice piuttosto che dedicare 10 minuti a cercare di capirlo.
  • Il tuo codice dovrebbe essere facile da leggere. Quando il codice è facile da leggere, è facile eseguire il debug. Ammettiamolo: i bug si verificano continuamente. Hai presente quella sensazione quando ti restano 10 minuti e non riesci a trovare il dannato errore? Certo che lo fai. Per evitare questa situazione, scrivere un codice leggibile. Una volta avviato il debug, il codice sembrerà naturale e facile da capire.

Ecco un mio esempio stile di programmazione.

Come migliorare le tue capacità di sviluppo

Pratica, pratica e ancora pratica. Ti consiglio di affrontare i primi 250 problemi più risolvibili Spoj. Risolvili in ordine. Trascorri almeno un'ora a pensare alla soluzione di ciascuno di essi.

Non dire: "Questo problema è troppo difficile per me, cercherò di risolvere il prossimo". Ecco come pensano i perdenti.

Prendi un pezzo di carta e una matita. Pensaci. Forse puoi trovare una soluzione, forse no. Come minimo, svilupperai il pensiero algoritmico. Se non riesci a trovare una soluzione entro un'ora, cerca una soluzione già pronta sul forum o negli articoli.

Cosa otterrai con questo approccio? Impara a implementare rapidamente le tue idee utilizzando il codice. E studia problemi e algoritmi classici.

In secondo luogo, devi padroneggiare algoritmi e strutture dati

Seguire un approccio gerarchico. Hai iniziato a correre senza sapere come camminare? NO. Si può costruire un grattacielo senza fondamenta solide? Non di nuovo.

Non puoi ignorare i passaggi lungo il percorso di apprendimento. Se li ignori, rimarrai con lacune di conoscenza. Con il passare del tempo non faranno altro che peggiorare.

Inizia con algoritmi fondamentali e strutture dati

È difficile iniziare. Forse perché non sai cosa studiare prima. Ecco perché Ho realizzato un video corso “Algoritmi e Strutture Dati”. Quando ho creato questo corso, l'ho basato su come vorrei che mi venisse insegnato. La reazione è stata incredibile! Nel primo mese si sono iscritti al corso più di 3000 studenti provenienti da oltre 100 paesi.

Se lavori per risolvere problemi facili, non migliorerai mai.

Il modo più efficace per capire ciò che non sai è sperimentarlo nella pratica. È così che ho imparato. Ho imparato molte nuove tecniche di cui non avevo mai sentito parlare prima scegliendo un compito impegnativo.

Ogni terzo problema su cui lavori dovrebbe insegnarti qualcosa di nuovo. Fai più attenzione quando scegli i problemi. Scegli problemi più difficili!

Una volta completati questi 250 problemi di SPOJ, avrai una conoscenza di base degli argomenti principali della programmazione sportiva. Con una profonda comprensione della logica alla base degli algoritmi di base, gli algoritmi di alto livello sembreranno meno complessi. In questo modo potrai sfruttare al meglio le tue conoscenze.

Approfondisci ciascuno dei temi principali

Ecco una risorsa preziosa con molte informazioni. Lì troverai i primi 10 algoritmi e strutture dati per ciascun argomento. Dopo 250 problemi da SPOJ, saprai molto da questo elenco. Ma ti imbatterai anche in molte cose di cui non hai mai sentito parlare prima. Quindi inizia a studiare questi argomenti in ordine crescente.

Se non rafforzi le tue conoscenze dopo aver imparato qualcosa di nuovo, dimenticherai rapidamente tutto.
Dopo aver appreso un nuovo algoritmo, ti consiglio di usarlo nella pratica. Esegui 2-3 attività. Cerca il tag dell'algoritmo in SPOJ. Lì troverai i problemi che necessitano di questo algoritmo per essere risolti. Affronta prima questi problemi.

Padroneggia la programmazione dinamica perché ti porterà alla vittoria
Dalla mia esperienza, ogni competizione ha almeno un problema programmazione dinamica. A molte persone viene il mal di testa quando sentono la frase “programmazione dinamica” perché non la capiscono affatto.

E questo è positivo. Perché se capisci la programmazione dinamica, vincerai.

Mi piace la programmazione dinamica, è il mio argomento preferito. Il segreto della programmazione dinamica è fare scelte ottimali a livello globale, non solo locale. È necessario scomporre il problema in sottoproblemi più semplici. Risolvi ciascuno di questi sottoproblemi una sola volta. Quindi crea una soluzione che combini i sottoproblemi risolti. Algoritmo goloso - l'opposto della programmazione dinamica. Richiede di effettuare scelte ottimali a livello locale in ogni fase. E una scelta ottimale a livello locale può portare a una cattiva soluzione globale.

Mentre impari nuovi concetti, dai un'occhiata Tutorial di TopCoder. Sono molto dettagliati e comprensibili. Grazie a loro ho potuto capire alberi indicizzati binari.

Lavorare duramente

Hai mai sentito parlare di atleti che vincono le Olimpiadi senza anni di pratica? Io no.

Ogni anno, i preparativi per le Olimpiadi del computer iniziavano a settembre e terminavano ad aprile.

Ogni giorno per questi 8 mesi ho praticato per 5 ore.

E sì, ho passato queste 5 ore solo a risolvere problemi algoritmici. Ricordo i giorni in cui mi esercitavo per 8 e anche 10 ore. Perché? Perché mi è piaciuto. Ogni giorno, quando tornavo a casa da scuola, andavo direttamente in camera da letto, mi sedevo al computer e cominciavo ad analizzare un nuovo problema. Oppure stavo imparando un nuovo algoritmo che dovevo conoscere per risolvere questo problema.

Se vuoi vincere, devi fare lo stesso. Scegli un problema e attieniti ad esso. Pensateci mentre andate al supermercato o mentre guidate.

Come ho vinto 3 medaglie d'oro su 4 alle Computing Olympiad

Sapevi che quando dormi il tuo cervello deframmenta le informazioni raccolte quel giorno? Sembra che stia impilando libri in ordine alfabetico su uno scaffale. In sostanza, il tuo cervello pensa ai vari problemi che stai affrontando.

Questo può essere usato abilmente. Prima di andare a letto, leggi un problema difficile e ricorda cosa serve per risolverlo. In questa fase, non è necessario cercare la soluzione stessa. Vai a letto. Il tuo cervello inizierà a elaborare questo problema. Quando ti svegli, sarai sorpreso di realizzare che hai trovato la soluzione mentre dormivi.

Prova tu stesso. È come una magia.

Ho creato un videoblog

Come ho vinto 3 medaglie d'oro su 4 alle Computing Olympiad

Questo breve paragrafo non è legato alla programmazione sportiva. Se hai vent'anni e ti stai chiedendo come vedo il mondo, potresti dare un'occhiata il mio video blog su Youtube. Parlo del mondo, della vita e dell'informatica in esso.

Lavoro intelligente

Questo è il segreto del successo. Hai bisogno di obiettivi.

Siamo persone e ci piace procrastinare. Vogliamo sempre rimandare ciò che deve essere fatto in questo momento. Guardare Netflix è sempre più divertente che affrontare problemi di programmazione dinamica. Lo sai e devi risolverlo.

Come sconfiggere la procrastinazione

Stabilisci degli obiettivi. Troverai sempre problemi interessanti da cui potrai imparare qualcosa di nuovo (controlla le risorse che ho menzionato sopra). Ma questi problemi devono essere risolti, non solo informati.

Quindi ecco come ho superato la procrastinazione. Ho iniziato a creare un calendario cartaceo e ho riempito ogni giorno di problemi che volevo risolvere. Ho sempre compilato i problemi con due giorni di anticipo. Quindi ho saputo come gestire il mio tempo nei giorni successivi.

Come ho vinto 3 medaglie d'oro su 4 alle Computing Olympiad

Quindi ero sempre motivato. Avevo bisogno di risolvere alcuni problemi e trovarne di nuovi per riempire i prossimi giorni sul calendario. Cancellare i problemi risolti è fantastico. So che piace anche a te.

Ottieni il tuo calendario cartaceo. Non creare un'altra lista di cose da fare sul tuo telefono di cui ti dimenticherai domani.

Come eseguire il debug in modo efficace

Vuoi diventare un professionista? Se sì, allora devi “debuggarlo nella tua mente”.
Questa è di gran lunga la tecnica di debug più efficiente che conosco perché non richiede affatto un debugger. Il tuo cervello esamina più rami di codice contemporaneamente e ti offre una panoramica molto più ampia del codice rispetto a debugger classico.

Puoi paragonarti a un grande maestro che gioca a scacchi e pensa 3 mosse in anticipo.

Utilizzo questa tecnica esclusivamente come linea di difesa iniziale. Quindi utilizzo un vero debugger.

Per imparare a eseguire il debug nella tua testa, devi esercitarti. Quando convalidi una soluzione a un problema e ottieni una "risposta sbagliata", non andare direttamente al pulsante del debugger. Rileggi il codice e pensa: "Cosa sta succedendo in questa riga?", "In che modo il "se" qui influenza il programma?", "Quando usciamo dal ciclo, qual è il valore dell'iteratore?"

In questo modo pensi con la tua testa. Col tempo imparerai a scrivere codice ed eseguirne il debug al volo.

Chi l'Autore

Come ho vinto 3 medaglie d'oro su 4 alle Computing Olympiad
Andrei Margeloiu è un appassionato programmatore con un interesse per l'imprenditorialità, le startup e la vita all'aria aperta. Puoi contattarlo su LinkedIn.

Traduzione: Diana Sheremyeva

Fonte: habr.com

Aggiungi un commento