Acum, că am atenția dvs. cu titlul postării, permiteți-mi să aprofundez punctele mele de vedere asupra programării competitive.

Ce este programarea competitivă?

Programarea competitivă este un sport. Trebuie să rezolvați o problemă cu codul care este rapid, consumă cantitatea minimă de memorie și este adesea practic de necitit.

Este foarte popular printre studenții universitari și cei care încearcă să intre în companii mari, în primul rând pentru că îi ajută să se plaseze în acele companii. Din păcate, milioane de oameni sunt angajați din cauza unor cunoștințe pe care nu le-ar folosi niciodată în slujbele lor.

Sistemul este defect

Programare competitiva Mythbusting Nu este nevoie sa o invatati

Iată un alt exemplu din Hen-Wen:

1611631207 802 Programare competitiva Mythbusting Nu este nevoie sa o invatati

Există o mulțime de exemple acolo la care mă pot gândi.

Creatorul homebrew – un manager de pachete folosit de aproape toată lumea care rulează macOS? Respins. Creatorul WhatsApp? Respins de Facebook și Twitter.

Deci, ce se întâmplă aici? Nu sunt acești oameni suficient de calificați pentru a lucra în aceste MNC-uri?

Nu, răspunsul este că acești băieți pot dezvolta instrumente utile și pot scrie programe excelente cu o calitate a codului de top, dar probabil nu reușesc să (re) inventeze un algoritm pentru a inversa un arbore binar într-o limită de timp de 30 de minute.

Unele dintre cele mai bune coduri scrise vreodată nu au fost scrise în 30 de minute. Unii dintre cei mai buni algoritmi scrise în kernel-ul Linux folosit chiar și astăzi nu au fost scrise în 30 de minute de Linus. Unele dintre cele mai bune IU precum Stripe nu au fost proiectate în 30 de minute.

Deci, cum poate o persoană HR aleatorie dintr-o companie aleatorie să vă decidă valoarea în 30 de minute?

Acesta este modul în care companiile vă judecă „fezabilitatea” – văzând dacă puteți rezolva o problemă de jucărie complet lipsită de legătură cu orice muncă pe care ați fi făcut-o în trecut sau pe care ați putea să o faceți în viitor.

Se poate remedia acest lucru?

Nu știu. Pot să mă plâng și să strig tot ce îmi doresc, dar sincer nu știu cum pot companiile să evalueze rapid și corect o persoană care solicită un loc de muncă.

Dacă doriți rapid, veți pierde o mulțime de candidați buni precum cei menționați mai sus. Dacă doriți să nu pierdeți candidați buni, interviul ar putea dura mult prea mult – mult mai mult decât își poate permite compania.

Programare competitivă! == Programare în lumea reală

Interviurile pentru companii sunt mai degrabă un examen în care trebuie să memorați și să aflați lucruri pe care nu le veți folosi după ce obțineți slujba.

Crezi că este posibil să trebuiască să înveți algoritmul lui Dijkstra pentru a lucra pe Google Maps, dar, serios, crezi că Google va preda unul dintre produsele lor de bază unei persoane noi pentru companie? Crezi că nu vei primi niciun ajutor de la colegii tăi?

Probabil că veți lucra la interfața produsului sau la sistemele distribuite, mai degrabă decât la unul dintre algoritmii cor Google. Aceasta înseamnă că toate cunoștințele dvs. despre „programare competitivă” nu sunt de nici un folos.

Nu veți găsi aproape nici un folos pentru programarea competitivă în lumea reală. Niciun algoritm care rulează pe serverele Microsoft de producție nu este scris în cod necitit, cu nume de variabile scurte și fără sens, nedocumentate și optimizate numai pentru viteză, nu pentru lizibilitate sau întreținere.

Minimizarea și îmbunătățirea performanței vin mai târziu, cu instrumente automate de multe ori. Șansele sunt, dacă sunteți un coder competitiv, ați dezvoltat obiceiul prost de a scrie cod urât.

Oricine poate scrie cod pentru mașini. Întrebarea este, puteți scrie cod pentru oameni?

Dar există speranță

Așteptați pentru interviuri de acest gen și sperăm că veți putea rezolva o întrebare de jucărie pe care ați pregătit-o timp de 3-5 luni învățând doar DSA, iar programarea competitivă este o modalitate.

Există o altă modalitate – va funcționa cu mai puține companii și oameni, dar vă veți bucura și veți învăța o mulțime de lucruri din lumea reală pe parcurs. De asemenea, veți fi mai utili decât acei oameni care învață „codificarea competitivă” doar de dragul ei.

Construiește ceva. Orice. Și apoi construiește mai multe pe deasupra. Aveți un portofoliu puternic. Aveți un set complet de competențe, care este util pentru companii. Dețineți stăpânire cu un stack tehnologic – dețineți-l. Aveți proiecte, bloguri, experiență pentru a arăta că sunteți ceea ce este în CV. Construiți conexiuni, faceți rețea cu oameni, cereți recomandările lor.

În multe locuri, codificarea competitivă nu este singura modalitate de a șterge un interviu – există tot felul de oameni care conduc tot felul de companii. O persoană care este de acord cu PoV-ul meu și care conduce o companie nu ar angaja oameni numai pe baza cunoștințelor lor „competitive”.

Munca ta te poate duce în locuri pe care nu ți le-ai imagina. Cea mai ușoară cale este să urmezi mereu mulțimea. Dar nimic bun nu vine ușor, cel puțin dacă ești suficient de ambițios. Amestecarea corectă a ambiției și a curajului poate face minuni.

Lumea are nevoie de mari programatori pentru a progresa, pentru a avansa omenirea, nu de oameni care pot fi angajați.

Nu confundați ASD cu programarea competitivă

Nu am vrut să scriu această secțiune inițial, dar știam că prea mulți oameni vor confunda acest lucru. DSA – Structuri de date și algoritmi este ceva diferit. Heap, Hărți, Matrice, Vectori, Liste legate, etc., toate acestea sunt foarte utile și în programarea din lumea reală.

Partea distractivă este că poți dezvolta această înțelegere și cu experiență. Nu am învățat niciodată în mod explicit despre „heap” folosind un curs mare de 50 de ore DSA. Și dacă înveți să programezi, nu ai nevoie de o înțelegere foarte profundă a acestui lucru.

DSA în profunzime este necesar atunci când doriți să învățați informatică, nu programarea. Înțelegeți diferența, informatica este teoria – programarea este practică.

Fi conștient a lucrurilor care există, a algoritmilor care există și a structurilor de date care există. Nu este nevoie să le învățați sau să le memorați pe toate. Mi se pare prostesc să memorez sau să învăț ceva care este rar folosit atunci când îl pot obține cu un pic de ajutor de la colegi și de la internet.

Povestea mea

Sunt nu un programator competitiv, probabil singurul student CS din universitatea mea care nu a atins niciodată codificarea competitivă colegiu.

De ce? Pentru că l-am încercat acum 4-5 ani și l-am urât. De ce? Pentru că mă vedeam petrecând 3-5 ore din zi, în fiecare zi, rezolvând probleme care nu mă aduceau nimic. Știam încă ceva sau două despre abordarea următoarei întrebări, dar a fost suficient pentru a avea un impact? A fost suficient pentru a ieși din mulțime?

La ce bun făceam? Am simțit că pierd timpul la întrebări deja rezolvate. S-ar putea să fie diferit pentru toată lumea, dar sunt fericit când văd alți oameni folosind lucrurile pe care le-am programat (am început ca dezvoltator web până atunci).

Pur și simplu nu suportam să-mi pierd timpul învățând ceva ce nu aș folosi niciodată în lumea reală. Pe vremuri participam la Code Jam de la Google și la Hacker Cup de la Facebook. Dar, curând, m-am plictisit și m-am frustrat, pentru lipsa unui cuvânt mai bun, și nu m-am mai întors cu adevărat. Obținerea unui loc de muncă sau a unui stagiu nu m-a preocupat, nu a făcut-o niciodată.

Am stat la interviuri cu Google o dată în campus. Au avut o rundă de selectare a CV-urilor ca prima rundă, spre deosebire de toate celelalte companii în care a fost prima rundă, așteptați-o, rundă de codare competitivă. Ei bine, au trecut cei 7 ani de dezvoltare web și experiența sistemelor pe canal.

Oricum, pentru Google, am fost singura persoană care a fost selectată cu un GPA de 7,5 (cel mai mare GPA este 10 în India). Restul celor 10-15 persoane au fost peste 8,5 sau 9.

Nu am trecut din nou runda competitivă, dar asta m-a învățat că era posibil să intru în prima rundă a unei companii precum Google doar cu CV-ul tău. Prin urmare, este important să lucrăm la asta.

Concluzie

TL; DR – Nu trebuie să înveți coduri competitive pentru a reuși în viață. Trebuie să înveți ceva care îți place atât de mult încât să îl stăpânești și să fii imbatabil în domeniul tău. Asta e tot.

Aveți opinii și opinii? Conectează-te cu mine pe Stare de nervozitate și Instagram și să vorbim!