Cumu aghju vintu 3 medaglie d'oru di 4 à l'Olimpiadi di Informatica

Cumu aghju vintu 3 medaglie d'oru di 4 à l'Olimpiadi di Informatica

Mi preparava per u Google HashCode World Championship Finals 2017. Questa hè a più grande cumpetizione di sfida algoritmica organizata da Google.

Aghju cuminciatu à amparà C ++ da zero in a novena scola. Ùn sapia nunda di prugrammazione, algoritmi o strutture di dati. À un certu puntu aghju scrittu a mo prima linea di codice. Sette mesi dopu, a cumpetizione di prugrammazione s'immergeva à l'orizzonte. Vuliu vede quantu bè u mo stilu di prugrammazione di apprendimentu hà travagliatu. Era l'occasione perfetta.

Dopu dui ghjorni di cuncurrenza, i risultati sò vinuti : aghju vintu a medaglia d'oru.

Eru scandalizatu. Eru davanti à i cuncurrenti cù 5 anni di sperienza. Sapia chì avia travagliatu duru, ma questu successu hà superatu tutte e mo aspettative. Aghju realizatu chì a prugrammazione sportiva era u mo tema è si stende in capu.

Sò ciò chì m'hà purtatu à u successu è vogliu sparte cun voi.

Cumu aghju vintu 3 medaglie d'oru di 4 à l'Olimpiadi di Informatica

L'articulu hè statu traduttu cù u sustegnu di EDISON Software, chì cura di a salute di i programatori è u so colazione, cum'è ancu sviluppa software persunalizata.

Quale lingua di prugrammazione à sceglie

  • C ++ - altamente cunsigliatu! Hè assai veloce. L'implementazione di l'algoritmi piglia pocu tempu per via di STL. C++ hè accettatu in tutti i cuncorsi. Aghju scrittu a mo prima linea di codice in C++.
  • C - Amparate C++ per via di u STL. Se sapete C, pudete ancu programà in C++.
  • Java hè una lingua di prugrammazione lenta. Havi una classa Big Integer, ma ùn vi aiuterà micca assai. Se una cumpetizione hà un limitu di tempu, cù Java certamenti l'avete superatu. Java ùn hè micca accettatu in tutte e competizioni.

Induve pudete praticà

Vi cunsigliu Sphere Online Judge (SPOJ). Hè una risorsa efficace in quantu à quantità è qualità. L'editori è e suluzioni sò dispunibuli in ligna s'è vo avete stuck in u prucessu di risolve i prublemi. In più di stu situ vi cunsigliu Toolkit di SPJ и classificatore di prublemi per SPOJ.pl.

Prima, avete bisognu di affinà a vostra cunniscenza di i principii

Una volta chì avete abituatu à a sintassi di a lingua, ci sò qualchi prublemi per superà. Cumincià cù prublemi simplici chì necessitanu pratica. In questu stadiu, a cosa principal hè di determinà u vostru stile di prugrammazione. Forsi ti piace à scrive codice cù assai spazii bianchi, forsi ùn avete micca. Forse si mette i parentesi nantu à a listessa linea cum'è u "se", o forse li mette nantu à linii separati.

Avete da truvà u vostru stile di prugrammazione perchè hè u vostru stile.

Quandu cercate, ricordate dui principii basi:

  • U vostru codice deve esse faciule da implementà. Duvete sentu còmpiu implementendu a suluzione chì vene cun. Perchè? Perchè durante una cumpetizione, l'ultimu cosa chì vulete hè persu in u vostru codice. Hè sempre megliu di passà 5 minuti extra pensendu à cumu simplificà l'implementazione di u codice chì di passà 10 minuti per pruvà à capisce.
  • U vostru codice deve esse faciule da leghje. Quandu u codice hè faciule di leghje, hè faciule di debug. Facemu a faccia - i bug succede sempre. Sapete chì sintimu quandu avete 10 minuti è ùn pudete truvà micca u dannatu sbagliu? Certu chì fate. Per evitari sta situazione, scrive un codice leggibile. Una volta vi principiatu debugging, u codice vi pare naturali è facili à capisce.

Eccu un esempiu di u mio stile di prugrammazione.

Cumu migliurà e vostre cumpetenze di sviluppu

Pratica, pratica è più pratica. Ti ricumandemu di travaglià cù i primi 250 prublemi più risolvibili SPOJ. Risolvili in ordine. Passate almenu una ora à pensà à a suluzione per ognunu di elli.

Ùn dite micca: "Stu prublema hè troppu difficiule per mè, pruvaraghju di risolve u prossimu". Hè cusì chì i perdenti pensanu.

Pigliate un pezzu di carta è un lapis. Pensate à questu. Forse pudete truvà una suluzione, forse micca. À u minimu, svilupparete u pensamentu algoritmicu. Se ùn pudete micca avè una suluzione in una ora, cercate una suluzione pronta nantu à u foru o in l'articuli.

Chì avete da ottene cù questu approcciu? Amparate à implementà rapidamente e vostre idee usendu codice. È studià i prublemi classici è l'algoritmi.

Siconda, duvete maestri l'algoritmi è e strutture di dati

Segui un approcciu gerarchicu. Avete cuminciatu à curriri senza sapè marchjà ? Innò. Pudete custruisce un grattacieli senza una basa solida? Micca di novu.

Ùn pudete micca ignurà i passi longu u percorsu di apprendimentu. Se li ignorate, sarete lasciati cun lacune di cunniscenza. Au fil du temps, ils ne feront qu'aggraver.

Cumincià cù algoritmi fundamentali è strutture di dati

Hè difficiule di principià. Forse perchè ùn sapete micca ciò chì studià prima. Hè perchè Aghju creatu un video-cursu "Algoritmi è Strutture di Dati". Quandu creanu stu cursu, aghju basatu nantu à cumu mi piacerebbe esse insignatu. A reazione hè stata incredibile! Più di 3000 studienti di più di 100 paesi si sò firmati per u cursu in u primu mese.

Se travagliate per risolve i prublemi faciuli, ùn avete mai migliurà.

U modu più efficace per capisce ciò chì ùn cunnosci micca hè di sperienze in pratica. Hè cusì chì aghju amparatu. Aghju amparatu assai tecniche novi chì ùn aghju mai intesu parlà prima, scegliendu un compitu sfida.

Ogni terzu prublema chì travagliate deve insignà qualcosa di novu. Avè più attentu quandu sceglite i prublemi. Sceglite i prublemi più difficili!

Una volta cumpletu questi 250 prublemi da SPOJ, avarete una cunniscenza basica di i temi principali di a prugrammazione sportiva. Cù una cunniscenza prufonda di a logica daretu à l'algoritmi basi, l'algoritmi d'altu livellu pareranu menu cumplessi. In questu modu pudete sfruttà u vostru sapè fà.

Scava più in profondità in ognunu di i temi principali

Eccu una risorsa preziosa cù assai infurmazione. Quì truverete i primi 10 algoritmi è strutture di dati per ogni tema. Dopu à 250 prublemi da SPOJ, sapete assai di sta lista. Ma vi stumpà ancu in parechje cose chì ùn avete mai intesu parlà prima. Allora cuminciate à studià questi temi in ordine crescente.

Se ùn rinfurzà micca a vostra cunniscenza dopu avè amparatu qualcosa di novu, vi scurdate rapidamente di tuttu.
Vi ricumandemu chì dopu avè amparatu un novu algoritmu, l'utilizate in pratica. U travagliu cù 2-3 travaglii. Cercate l'algoritmu tag in SPOJ. Ci truverete prublemi chì anu bisognu di stu algoritmu per risolve. Affronta sti prublemi prima.

Maestru Programmazione Dinamica Perchè Vi Conducerà à a Vittoria
Da a mo sperienza, ogni cumpetizione hà almenu un prublema prugrammazione dinamica. Parechje persone piglianu un mal di testa quandu sentenu a frasa "programmazione dinamica" perchè ùn capiscenu micca.

È questu hè bonu. Perchè si capisce a prugrammazione dinamica, allora vincerete.

Mi piace a prugrammazione dinamica, hè u mo tema preferitu. U sicretu di a prugrammazione dinamica hè di fà scelte ottimali globalmente, micca solu lucali. Duvete sparghje u prublema in sub-prublemi più simplici. Risolve ognuna di sti subproblemi solu una volta. Allora crea una suluzione chì combina i subproblemi risolti. Algoritmu greedy - u cuntrariu di a prugrammazione dinamica. Hè bisognu di fà scelte lucale ottimali à ogni passu. È una scelta ottima localmente pò purtà à una mala suluzione globale.

Mentre amparate novi cuncetti, verificate Tutorial TopCoder. Sò assai detallati è capiscenu. Grazie à elli aghju pussutu capisce arburi indici binari.

Travaglia dura

Avete mai intesu parlà di atleti chì vincenu l'Olimpiadi senza anni di pratica ? Ùn mè micca.

Ogni annu, a preparazione per l'Olimpiadi di l'informatica principia in settembre è finisce in aprile.

Ogni ghjornu per questi 8 mesi aghju praticatu per 5 ore.

È iè, aghju passatu queste ore 5 solu solu per risolve i prublemi algoritmichi. Mi ricordu di i ghjorni chì aghju praticatu per 8 è ancu 10 ore. Perchè? Perchè mi piaceva. Ogni ghjornu, quandu aghju vultatu in casa da a scola, aghju andatu direttamente à a camara, si pusò à l'urdinatore è hà cuminciatu à analizà un novu prublema. O aghju amparatu un novu algoritmu chì avia bisognu di sapè per risolve stu prublema.

Se vulete vince, avete da fà u listessu. Sceglite un prublema è stà cun ellu. Pensate à questu mentre andate à u supermercatu o mentre conduce.

Cumu aghju vintu 3 medaglie d'oru di 4 à l'Olimpiadi di Informatica

Sapete chì quandu dorme, u vostru cervellu defragmenta l'infurmazioni raccolte quellu ghjornu? Sembra chì sta accatastava libri in ordine alfabeticu nantu à una libreria. Essenzialmente, u vostru cervellu pensa à i diversi prublemi chì avete affruntatu.

Questu pò ièssiri usatu abilmente. Prima di andà in lettu, leghjite un prublema difficiule è ricurdate ciò chì ci vole à risolve. À questu stadiu, ùn avete micca bisognu di circà a suluzione stessu. Vai ti ne in lettu. U vostru cervellu hà da cumincià à trattà stu prublema. Quandu vi svegliate, sarete sorpresu di capisce chì avete trovu a suluzione mentre dorme.

Pruvate sè stessu. Hè cum'è a magia.

Aghju creatu un blog di video

Cumu aghju vintu 3 medaglie d'oru di 4 à l'Olimpiadi di Informatica

Stu breve paràgrafu ùn hè micca ligatu à a prugrammazione di sport. Sè avete vint'anni è vi dumandate cumu vecu u mondu, pudete vulete verificà u mo video blog in Youtube. Parlu di u mondu, a vita è l'informatica in questu.

U travagliu intelligente

Questu hè u sicretu di successu. Avete bisognu di scopi.

Semu persone è ci piace procrastinà. Vulemu sempre rimette ciò chì deve esse fattu avà. Fighjendu Netflix hè sempre più piacevule chè trattà cù prublemi di prugrammazione dinamica. Sapete questu è avete bisognu di riparà.

Cumu batte a procrastinazione

Pone te scopi. Truverete sempre prublemi interessanti da quale pudete amparà qualcosa di novu (verificate e risorse ch'e aghju citatu sopra). Ma questi prublemi anu da esse risolti, micca solu leghje.

Allora eccu cumu aghju superatu a procrastinazione. Aghju cuminciatu un calendariu di carta è pienu ogni ghjornu di prublemi chì vulia risolve. Aghju sempre cumpletu i prublemi dui ghjorni in anticipu. Allora sapia cumu gestisce u mo tempu in i ghjorni dopu.

Cumu aghju vintu 3 medaglie d'oru di 4 à l'Olimpiadi di Informatica

Allora eru sempre motivatu. Aviu bisognu di risolve alcuni prublemi è truvà novi per riempie i ghjorni dopu nantu à u calendariu. L'eliminazione di i prublemi risolti hè grande. Sò chì ti piace ancu.

Ottene u vostru propiu calendariu di carta. Ùn crea micca una altra lista di cose in u vostru telefunu chì vi scurdate di dumane.

Cumu debug in modu efficace

Vulete diventà un prufessiunale? Se sì, allora avete bisognu di "debug in a vostra mente".
Questu hè di granu a tecnica di debugging più efficaci chì cunnoscu perchè ùn hà micca bisognu di un debugger. U vostru cervellu esamina più rami di codice à una volta è vi dà una visione più larga di u codice cumparatu cù debugger classicu.

Pudete paragunà sè stessu à un grandmaestru chì ghjoca à scacchi è pensa 3 movimenti avanti.

Aduprà sta tecnica solu cum'è a mo linea iniziale di difesa. Allora aghju utilizatu un veru debugger.

Per amparà à debug in a vostra testa, avete bisognu di praticà. Quandu validate una suluzione à un prublema è uttene una "risposta sbagliata", ùn andate micca direttamente à u buttone di debugger. Rileghje u codice è pensate: "Chì succede in questa linea?", "Cumu "se" quì affetta u prugramma?", "Quandu esce da u ciclu, quale hè u valore di l'iteratore?"

Questu modu pensate per sè stessu. À u tempu, vi amparà à scrive codice è debug lu in a mosca.

Doppu l'autore

Cumu aghju vintu 3 medaglie d'oru di 4 à l'Olimpiadi di Informatica
Andrei Margeloiu hè un avid programatore cun un interessu in l'imprenditorialità, startups, è l'aria aperta. Pudete cuntattate cù ellu nantu à LinkedIn.

Traduzzione: Diana Sheremyeva

Source: www.habr.com

Add a comment