Mítoszromboló versenyképes programozás - nem kell megtanulnia

Most, hogy felhívtam a figyelmét a bejegyzés címére, engedje meg, hogy elmélyüljön a versenyképes programozásról alkotott véleményem.

Mi a versenyképes programozás?

A versenyképes programozás egy sport. Meg kell oldania a problémát olyan kóddal, amely gyors, elfogyasztja a minimális memóriát és gyakran gyakorlatilag nem olvasható.

Rendkívül népszerű az egyetemisták és a nagyvállalatokba próbálkozók körében, elsősorban azért, mert segít nekik elhelyezkedni ezekben a cégekben. Sajnos emberek millióit veszik fel olyan ismeretek miatt, amelyeket soha nem használnának fel a munkájuk során.

A rendszer megszakadt

Íme egy másik példa Hen-Wentől:

Rengeteg példa van, amire gondolni tudok.

A homebrew készítője - egy csomagkezelő, amelyet szinte mindenki használ a macOS rendszeren? Elutasítva. A WhatsApp készítője? A Facebook és a Twitter elutasította.

Tehát mi történik itt? Ezek az emberek nincsenek megfelelően képzettek ahhoz, hogy ezekben az MNC-kben dolgozhassanak?

Nem, a válasz az, hogy ezek a srácok hasznos eszközöket fejleszthetnek és remek szoftvereket írhatnak kiváló minőségű kódokkal, de valószínűleg nem sikerül (újra) kitalálniuk egy bináris fa invertálására szolgáló algoritmust 30 perces határidő alatt.

A valaha írt legjobb kódok közül néhányat nem írtak 30 perc alatt. A ma is használt legjobb Linux-kernelben írt algoritmusok egy részét Linus nem írta 30 perc alatt. A legjobb felhasználói felületeket, mint például a Stripe, nem tervezték 30 perc alatt.

Tehát hogyan tudja egy véletlenszerű HR-es ember véletlenszerűen eldönteni 30 perc alatt az értékét?

A vállalatok így ítélik meg az Ön "megvalósíthatóságát" - annak megítélésével, hogy meg tud-e oldani egy játék problémát, amely nem kapcsolódik semmilyen olyan munkához, amelyet korábban végzett, vagy a jövőben végezhet.

Meg lehet ezt javítani?

Nem tudom. Panaszkodhatok és kiabálhatok, amit csak akarok, de őszintén szólva nem tudom, hogy a vállalatok hogyan tudják gyorsan és helyesen értékelni az állásra pályázó embert.

Ha gyorsan akarsz, sok jó jelöltet veszítesz, mint a fentiek. Ha nem akar elveszíteni jó jelölteket, az interjú túl sokáig tarthat - sokkal tovább, mint amennyit a vállalat megengedhet magának.

Versenyképes programozás! == Valós világ programozása

A vállalatok számára készített interjúk inkább egy vizsga, ahol meg kell jegyeznie és meg kell tanulnia azokat a dolgokat, amelyeket nem fog használni a munka megszerzése után.

Úgy gondolja, hogy meg kell tanulnia a Dijkstra algoritmusát, hogy működjön a Google Térképen, de komolyan gondolja, hogy szerinted a Google átadja egyik alaptermékét valakinek, aki új a cég számára? Gondolod, hogy semmilyen segítséget nem kapsz társaidtól?

Valószínűleg a termék vagy az elosztott rendszerek felületén fog dolgozni, nem pedig a Google egyik cor algoritmusán. Ez azt jelenti, hogy az összes "versenyképes programozási" tudásod haszontalan.

A valós világban szinte semmi hasznát nem veszi a versenyképes programozásnak. Nincs olyan algoritmus, amely a Microsoft szerverein fut, olvashatatlan kóddal, rövid és értelmetlen változónevekkel, dokumentálatlanul és csak a sebességre optimalizálva, nem pedig az olvashatóság vagy karbantartás szempontjából.

A csökkentés és a teljesítmény javítása később következik be, sokszor automatizált eszközökkel. Valószínű, hogy ha versenyképes kódoló vagy, akkor rossz szokásod volt rút kódot írni.

Bárki írhat kódot gépekhez. A kérdés az, hogy tud-e kódot írni az emberek számára?

De van remény

Az ilyen interjúkra ülve, és remélve, hogy megoldhat egy játékkérdést, amelyet 3-5 hónapig készített, csak a DSA-t tanulja, és a versenyképes programozás az egyik módja.

Van egy másik út is - kevesebb céggel és emberrel fog működni, de élvezni fogja, és sok valós dolgot megtudhat útközben. Ugyancsak hasznosabb leszel, mint azok az emberek, akik csak ennek érdekében tanulják meg a "versenyképes kódolást".

Építs valamit. Bármi. És akkor építsen még rá. Erős portfólióval rendelkezik. Rendeljen teljes készségeket, amelyek hasznosak a vállalatok számára. Mestere legyen egy technikai verem mellett - birtokolja azt. Legyen projektje, blogja, tapasztalata, amely megmutatja, hogy Ön az, ami szerepel az önéletrajzában. Építsen kapcsolatokat, hálózzon össze emberekkel, kérje ajánlásaikat.

Sok helyen a versenyképes kódolás nem az egyetlen módja az interjú tisztításának - mindenféle ember vezet mindenféle társaságot. Az a személy, aki egyetért a PoV-vel, és céget vezet, nem csak "versenyképes" tudása alapján alkalmazna embereket.

Munkájával olyan helyekre juthat, amelyeket el sem tudott képzelni. A legegyszerűbb módszer mindig követni a tömeget. De semmi jó nem jön könnyen, legalábbis ha elég ambiciózus vagy. A megfelelő ambíció és bátorság keverése csodákra képes.

A világnak nagyszerű programozókra van szüksége a fejlődéshez, az emberiség előremozdításához, nem pedig olyan emberekhez, akik felvehetők.

Ne tévessze össze a DSA-t a versenyképes programozással

Kezdetben nem akartam ezt a részt írni, de tudtam, hogy túl sokan fogják ezt összetéveszteni. DSA - Az adatszerkezetek és algoritmusok valami más. Halom, Térképek, Tömbök, Vektorok, Összekapcsolt listák, stb., Ezek mind nagyon hasznosak a valós programozásban is.

A szórakozás az, hogy ezt a megértést tapasztalatokkal is fejlesztheti. Soha nem tanultam kifejezetten a "kupacról" valamilyen nagy 50 órás DSA tanfolyamot. És ha programozni tanul, akkor ennek sem kell nagyon mély megértése.

A részletes DSA-ra akkor van szükség, ha informatikát szeretne tanulni, nem pedig programozást. Értsd meg a különbséget, a számítástechnika az elmélet - a programozás praktikus.

Legyen tisztában a létező dolgokkal, a létező algoritmusokkal és a létező adatstruktúrákkal. Nem kell mindet megtanulnia vagy megjegyeznie. Őrülten hülyén hangzik számomra, ha megjegyezek vagy megtanulok valamit, amit ritkán használnak, amikor a kollégák és az internet egy kis segítségével megkaphatom.

A történetem

Én nem versenyképes kóder, talán az egyetlen CS Undergrad az én egyetemi akik soha nem érintette versenyképes kódolás főiskolán .

Miért? Mert 4-5 évvel ezelőtt kipróbáltam és utáltam. Miért? Mert láthattam, hogy naponta 3-5 órát töltök minden nap olyan problémák megoldásával, amelyek semmit sem eredményeztek. Tudtam még egy-két dolgot a következő kérdés megközelítéséről, de ez elegendő volt-e a hatás eléréséhez? Ennyi elég volt ahhoz, hogy kitűnjön a tömegből?

Mire jó? Olyan érzés volt, mintha időt vesztegetnék a már megoldott kérdésekre. Lehet, hogy ez mindenkinek más lesz, de örülök, amikor látom, hogy más emberek használják az általam programozott dolgokat (akkor már webfejlesztőként kezdtem).

Egyszerűen nem bírtam azzal vesztegetni az időmet, hogy megtanuljak valamit, amit soha nem használnék a való világban. A nap folyamán részt vettem a Google Code Jam-ben és a Facebook Hacker Cup-ján. De hamarosan untam és frusztráltam, egy jobb szó híján, és soha nem tértem hozzá. Munka vagy szakmai gyakorlat megszerzése nem foglalkoztatott, soha nem.

Egyszer a Google-interjúkhoz ültem az egyetemen. Első körként folytatták a rövid listázási fordulót, ellentétben az összes többi céggel, ahol az első forduló volt, várjon rá, versenyképes kódolási körre. Nos, a 7 éves webfejlesztés és a rendszerek tapasztalata ment a csatornába.

Egyébként a Google számára én voltam az egyetlen, akit bekerültem 7,5-ös GPA-val (a legmagasabb GPA 10 Indiában). A 10-15 ember többi része 8,5 vagy 9 felett volt.

Nem jutottam túl a versenykörön, de ez megtanított arra, hogy csak önéletrajzával be lehet törni egy olyan cég első körébe, mint a Google. Ezért fontos ezen dolgozni.

Következtetés

TL; DR - Az életben való sikerhez nem kell megtanulnia a versenyképes kódolást. Meg kell tanulnod valamit, ami annyira tetszik, hogy elsajátítsd, és verhetetlen vagy a szakterületeden. Ez minden.

Van véleménye és véleménye? Lépj kapcsolatba velem a Twitteren és az Instagramon, és beszéljünk!