Mitų griovimas - konkurencingas programavimas - to nereikia mokytis

Dabar, kai atkreipsiu jūsų dėmesį į įrašo pavadinimą, leiskite man išsamiai išnagrinėti savo požiūrį į konkurencingą programavimą.

Kas yra konkurencingas programavimas?

Konkurencinis programavimas yra sportas. Turite išspręsti greitojo kodo, sunaudojančio mažiausią atminties kiekį ir dažnai praktiškai neįskaitomo, kodą .

Tai itin populiaru tarp universiteto studentų ir tų, kurie bando patekti į dideles įmones, visų pirma todėl, kad tai padeda jiems įsitraukti į tas įmones. Deja, milijonai žmonių yra įdarbinami dėl tam tikrų žinių, kurių jie niekada nenaudotų savo darbe.

Sistema sugedusi

Štai dar vienas Hen-Weno pavyzdys:

Yra daugybė pavyzdžių, kuriuos galiu sugalvoti.

„Homebrew“ kūrėjas - paketų tvarkyklė, kuria naudojasi beveik visi „MacOS“ kompiuteriai? Atstumtas. „WhatsApp“ kūrėjas? Atmetė „Facebook“ ir „Twitter“.

Taigi, kas čia vyksta? Ar šie žmonės nėra pakankamai kvalifikuoti, kad galėtų dirbti šiose tarptautinėse įmonėse?

Ne, atsakymas yra tas, kad šie vaikinai gali sukurti naudingus įrankius ir parašyti puikią programinę įrangą, pasižyminčią aukščiausios kokybės kodo kokybe, tačiau jiems tikriausiai nepavyksta (per) sugalvoti algoritmo, kaip perversti dvejetainį medį per 30 minučių.

Vieni geriausių kada nors parašytų kodų nebuvo parašyti per 30 minučių. Kai kurie geriausi algoritmai, parašyti „Linux“ branduolyje, naudojami ir šiandien, Linus nebuvo parašyti per 30 minučių. Kai kurie geriausi UI, pvz., „Stripe“, nebuvo sukurti per 30 minučių.

Taigi, kaip atsitiktinis žmogiškasis asmuo kokioje nors atsitiktinėje kompanijoje gali nuspręsti jūsų vertę per 30 minučių?

Štai kaip įmonės vertina jūsų „įgyvendinamumą“ - sužinodamos, ar galite išspręsti žaislų problemą, visiškai nesusijusią su darbu, kurį galbūt atlikote anksčiau, ar galėtumėte atlikti ateityje.

Ar tai galima ištaisyti?

Nežinau. Aš galiu skųstis ir šaukti viską, ko noriu, bet, tiesą sakant, nežinau, kaip įmonės gali greitai ir teisingai įvertinti besikreipiantį į darbą.

Jei norite greitai, prarasite daug gerų kandidatų, tokių kaip aukščiau paminėti. Jei nenorite prarasti gerų kandidatų, pokalbis gali trukti per ilgai - daug ilgiau, nei įmonė gali sau leisti.

Konkurencingas programavimas! == Realiojo pasaulio programavimas

Interviu įmonėms yra daugiau egzaminas, kai jūs turite įsiminti ir sužinoti apie dalykus, kurių nenaudosite įsidarbinę.

Manote, kad jums gali tekti išmokti „Dijkstra“ algoritmą, kad jis veiktų „Google“ žemėlapiuose, bet jei rimtai, ar manote, ar „Google“ perduos vieną iš pagrindinių savo produktų naujai įmonei? Ar manote, kad negausite jokios pagalbos iš savo bendraamžių?

Jūs tikriausiai dirbsite su produkto sąsaja arba paskirstytosiomis sistemomis, o ne dirbsite su vienu iš „Google“ pagrindinių algoritmų. Tai reiškia, kad visos jūsų „konkurencingo programavimo“ žinios nenaudingos.

Realiame pasaulyje beveik nenaudosite konkurencingo programavimo. Joks algoritmas, veikiantis gamybiniuose „Microsoft“ serveriuose, nėra parašytas neįskaitomu kodu, trumpais ir beprasmiais kintamųjų pavadinimais, be dokumentų ir optimizuotas tik greičiui, o ne skaitomumui ar priežiūrai.

Sumažėjimas ir našumas pagerėja vėliau, naudojant automatinius įrankius daug laiko. Didelė tikimybė, kad jei esate konkurencingas koduotojas, atsirado blogas įprotis rašyti negražų kodą.

Kiekvienas gali parašyti mašinų kodą. Kyla klausimas, ar galite parašyti kodą žmonėms?

Bet yra vilties

Sėdėdamas į tokius interviu ir tikėdamasis, kad išspręsite žaislų klausimą, kurį paruošėte 3–5 mėnesius, mokykitės tik DSA ir konkurencingas programavimas yra vienas iš būdų.

Yra ir kitas būdas - jis dirbs su mažiau įmonių ir žmonių, bet jums patiks ir išmoksite daugybę realaus pasaulio dalykų. Jūs taip pat būsite naudingesni už tuos žmones, kurie tik dėl to mokosi „konkurencinio kodavimo“.

Pastatyk ką nors. Viskas. Ir tada pastatykite dar daugiau. Turėkite tvirtą portfelį. Turėkite visą įgūdžių rinkinį, kuris yra naudingas įmonėms. Turėkite meistriškumą naudodamiesi technologijų kaminu - turėkite jį. Turėkite projektų, tinklaraščių ir patirties, kad parodytumėte, jog esate tai, kas yra jūsų gyvenimo aprašyme. Užmegzkite ryšius, užmegzkite ryšius su žmonėmis, paprašykite jų rekomendacijų.

Daug kur konkurencinis kodavimas nėra vienintelis būdas išsiaiškinti interviu - yra visokių žmonių, kurie vadovauja visoms įmonėms. Asmuo, sutinkantis su mano POV ir vadovaujantis įmonei, nesamdytų žmonių vien dėl jų „konkurencingų“ žinių.

Jūsų darbas gali patekti į vietas, kurių neįsivaizdavote. Lengviausias būdas visada sekti minią. Bet nieko gero nėra lengva, bent jau tuo atveju, jei esate pakankamai ambicingas. Sumaišius tik reikiamą užmojų ir drąsos kiekį, galima padaryti stebuklus.

Pasauliui reikalingi puikūs programuotojai, kad jie galėtų progresuoti, judėti į priekį žmonija, o ne žmonės, kurie galėtų įdarbinti.

Nepainiokite DSA su konkurenciniu programavimu

Iš pradžių nenorėjau rašyti šios dalies, bet žinojau, kad per daug žmonių tai supainios. DSA - duomenų struktūros ir algoritmai yra kažkas kito. Krūva, žemėlapiai, masyvai, vektoriai, susieti sąrašai, .etc, visa tai yra labai naudinga programuojant realiame pasaulyje.

Smagiausia yra tai, kad jūs taip pat galite ugdyti tą supratimą. Niekada aiškiai nesužinojau apie „krūvą“ naudodamas kokį nors 50 valandų trukmės DSA kursą. Ir jei jūs mokotės programuoti, jums taip pat nereikia labai gilaus supratimo.

Išsami DSA reikalinga, kai norite mokytis informatikos, o ne programavimo. Suprask skirtumą, informatika yra teorija - programavimas yra praktiškas.

Žinokite apie egzistuojančius dalykus, egzistuojančius algoritmus ir egzistuojančias duomenų struktūras. Nereikia jų visų išmokti ar įsiminti. Man beprotiškai kvaila man įsiminti ar išmokti tai, kas retai naudojama, kai galiu tai gauti šiek tiek padedama kolegų ir interneto.

Mano istorija

ne konkurencinga programuotojas, turbūt vienintelė AP undergrad mano universiteto, kuris niekada palietė konkurencinga kodavimo kolegijoje .

Kodėl? Nes išbandžiau prieš 4-5 metus ir nekenčiau. Kodėl? Nes matydavau, kaip kasdien praleidžiu 3-5 valandas savo dienos, spręsdama problemas, dėl kurių man nieko nebuvo. Žinojau dar ar du dalykus apie artėjimą prie kito klausimo, bet ar to pakako, kad padarytume įtaką? Ar to pakako išsiskirti iš minios?

Ką aš dariau? Toks jausmas, kad eikvoju laiką jau išspręstiems klausimams. Visiems gali būti skirtingai, bet aš džiaugiuosi, kai matau, kad kiti žmonės naudoja mano užprogramuotus dalykus (aš tada pradėjau dirbti kaip interneto kūrėjas).

Negalėjau pakęsti laiko gaišimo mokydamasi to, ko niekada nenaudosčiau realiame pasaulyje. Anksčiau dalyvavau „Google Code Code“ ir „Facebook“ hakerių taurėje. Tačiau netrukus nusibodo ir nusivyliau dėl geresnio žodžio trūkumo ir niekada prie jo nebegrįžau. Darbo ar praktikos gavimas manęs nerūpėjo, niekada nebuvo.

Kartą universitete sėdėjau „Google“ interviu. Jie turėjo atnaujinti pirmojo etapo sąrašą, skirtingai nei visos kitos bendrovės, kuriose vyko pirmasis turas, laukite jo, konkurencinio kodavimo etapo. Na, praėjo 7 metų interneto svetainių kūrimas ir sistemų patirtis.

Šiaip ar taip, „Google“ buvau vienintelis asmuo, patekęs į 7,5 GPA (aukščiausias GPA yra 10 Indijoje). Likę 10-15 žmonių buvo vyresni nei 8,5 ar 9.

Aš dar kartą neperėjau konkurencinio turo, bet tai mane išmokė, kad buvo įmanoma įsilieti į pirmą tokios įmonės kaip „Google“ etapą tik su savo gyvenimo aprašymu. Todėl svarbu tai dirbti.

Išvada

TL; DR - norint pasisekti gyvenime, nereikia mokytis konkurencingo kodavimo. Turite išmokti tai, kas jums taip patinka, kad tai išmoktumėte, ir esate nepralenkiamas savo srityje. Tai viskas.

Ar turite nuomonių ir nuomonių? Susisiekite su manimi „Twitter“ ir „Instagram“ ir pakalbėkime!