🥇Servisna mreža: što svaki Software Engineer treba znati o najpopularnijoj tehnologiji | ProHoster

🥇Servisna mreža: što svaki Software Engineer treba znati o najpopularnijoj tehnologiji | ProHoster

Zar ne smatraš čudnim to da kada se pripremaš promijeniti radno mjesto i nastane potreba za prolazom na intervjuu, prvo što pomisliš je "moram se pripremiti za intervju". Rješavati zadatke na HackerRanku, pročitati Crack the Coding Interview, memorirati kako je strukturiran ArrayList i čime se razlikuje od LinkedList. Ah da, moglo bi te pitati i za sortiranja, i bilo bi očito neprofesionalno reći da je quick sort vjerojatno najbolji izbor.
Ali, pričekaj, ti programiraš 8 sati dnevno, rješavaš zanimljive i komplicirane zadatke, a na novom radnom mjestu ćeš raditi otprilike isto. Ipak, kako bi prošao intervju, moraš se dodatno pripremati, čak i ne usavršavati svoje svakodnevne vještine, nego naučiti ono što ti nije bilo potrebno ni na trenutnom radnom mjestu, niti će ti vjerojatno biti potrebno na sljedećem. Na tvoje prigovore o tome da je računalna znanost u našoj krvi, i da nas probudiš usred noći, mi smo dužni napisati pretragu stabla u širinu čak i s zatvorenim očima, odgovaram da ako se zapošljavam u cirkusu, i moj glavni trik bi bio to — onda se slažem. Taj vještina treba osigurati.

Ali zašto provjeravati irrelevantne trenutnoj poslu vještine? Samo zato što je to postalo moderno? Zato što Google tako radi? Ili zato što je tvom budućem tim lideru bilo potrebno naučiti sve metode sortiranja prije nego što prođe intervju i sada smatra da "svaki dobar programer treba znati napamet implementaciju pronalaženja palindrome u stringu".

Dakle, ti nisi Google (c). Ono što si Google može priuštiti, obične kompanije ne mogu. Google, analiziravši podatke svojih zaposlenika, došao je do zaključka da konkretno inženjeri s olimpijskom prošlošću dobro rade njegove konkretne zadatke. Štoviše, gradeći proces selekcije, mogu si priuštiti rizik da možda neće zaposliti nekoliko dobrih inženjera jer ne znaju lako rješavati matematičke zadatke. Ali za njih to nije problem, željnih raditi u Googleu ima mnogo, pozicija će se zatvoriti.
Sada zavirite kroz prozor, a ako ispred vašeg ureda inženjeri koji žele raditi za vas nisu postavili šator, a vaši programeri češće traže u stackoverflow koju novu Spring anotezaciju treba primijeniti nego detalje algoritama rangiranja, očito je da je vrijeme da razmislite o tome isplati li se kopirati Google.

Dobro, što učiniti ako vas je Google ovaj put razočarao i nije dao odgovore? Provjeriti upravo ono što će programer raditi na poslu. Što cijenite kod programera?
Definirajte kriterije koje želite za zapošljavanje i razvijte testove koji provjeravaju te vještine.

ThoughtWorks

A kakve veze ima ThoughtWorks? Upravo ovdje sam pronašao primjer uzornog intervjua. Tko su ThoughtWorks? Ukratko, to je vrhunska konzultantska tvrtka s uredima širom svijeta, od Kine i Singapura do američkog kontinenta, koja se bavi savjetovanjem u području razvoja već 25 godina, ima svoj znanstveni odjel vođen Martinom Fowlerom. Ako potražite popis od 10 knjiga koje su obavezne za čitanje za Software Engineer, vjerojatno će 2-3 od njih biti napisane od strane ljudi iz ThoughtWorks, poput Refactoringa Martina Fowlera i Building Microservices: Designing Fine-Grained Systems od Sama Newmana ili Building Evolutionary Architectures.
od Patricka Kue, Rebeccae Parsons, Neala Forda.

Poslovanje tvrtke temelji se na pružanju prilično skupih usluga, ali klijent plaća za fenomenalnu kvalitetu koja se sastoji od stručnosti, internih standarda i, naravno, ljudi. Stoga je ovdje ključno zaposliti prave ljude.
Koji su to pravi ljudi? Naravno, za svakoga su to drugačiji ljudi. ThoughtWorks je odredio da su za njihov poslovni model najvažniji kriteriji za programere:

  • Sposobnost za rad u paru. To je sposobnost, a ne iskustvo ili vještina. Nitko ne očekuje da dođu ljudi koji već 5 godina prakticiraju Pair programming. Ali biti otvoren za tuđe mišljenje, umjeti slušati — to je potrebna vještina.
  • Sposobnost pisanja testova, a idealno je prakticirati TDD.
  • Razumjeti SOLID i OOP i znati ih primijeniti.
  • Prezentirati svoje mišljenje. Konsultant često radi s programerima klijenta, s drugim konzultantima, i nije od velike koristi ako osoba nešto dobro radi, ali potpuno nije sposobna prenijeti to ostalim članovima tima.

Sada je važno procijeniti upravo te vještine kod kandidata. Ovdje želim podijeliti svoje iskustvo sudjelovanja u intervjuu u ThoughtWorks-u. Odmah ću reći da sam prošao intervju u Singapuru, ali proces regrutacije je standardiziran i neće se značajno razlikovati od zemlje do zemlje.

Faza 0. HR

Kao što to obično biva, 20-minutni intervju s HR-om. Neću se previše zadržavati na tome, samo ću reći da nikada prije nisam sreo HR stručnjaka koji može 15 minuta pričati o kulturi razvoja u tvrtki, zašto koriste TDD i zašto parno programiranje. Obično kod ovog pitanja HR stručnjaci posustaju i govore da je njihov proces uobičajen: programeri razvijaju, testeri testiraju, menadžeri upravljaju.

Faza 1. Koliko si dobar u OOP-u, TDD-u?

1,5 sata prije početka intervjua, poslali su mi zadatak da napravim simulator Mars Rover-a.

Zadatak Mars roverEkipa robotskih rover-a treba biti sletjena od strane NASA-e na plateau na Marsu. Ovaj plateau, koji je zanimljivo pravokutnog oblika, moraju navigirati roveri tako da njihovi ugrađeni kamere mogu dobiti potpunu sliku okolnog terena kako bi to poslali nazad na Zemlju. Pozicija i lokacija rover-a predstavljaju se kombinacijom x i y koordinata i slova koje predstavlja jednu od četiri osnovne smjernice. Plateau je podijeljen u mrežu radi pojednostavljenja navigacije. Primjer pozicije može biti 0, 0, S, što znači da je rover u donjem lijevom kutu i gleda prema Sjeveru. Kako bi kontrolirala rover, NASA šalje jednostavni niz slova. Moguća slova su 'L', 'R' i 'M'. 'L' i 'R' okreću rover lijevo ili desno za 90 stupnjeva, bez pomicanja s trenutne pozicije. 'M' znači pomak naprijed za jednu točku mreže i zadržavanje istog smjera.
Pretpostavite da je kvadrat izravno sjeverno od (x, y) (x, y+1).
ULAZ:
Prvi redak ulaza su gornje desne koordinate plateua, donje lijeve koordinate se pretpostavljaju kao 0,0.
Ostatak ulaza sadrži informacije o roverima koji su raspoređeni. Svaki rover ima dva retka ulaza. Prvi redak daje poziciju rover-a, a drugi redak je niz uputa koje govore roveru kako istraživati plateau. Pozicija se sastoji od dva cijela broja i slova odvojena razmacima, koja odgovaraju x i y koordinatama i orijentaciji rover-a.
Svaki rover će završiti redoslijedom, što znači da drugi rover neće početi s pomakom sve dok prvi ne završi.
IZLAZ:
Izlaz za svaki rover trebao bi biti njegove krajnje koordinate i smjer.
NAPOMENE:
Jednostavno implementirajte navedene zahtjeve i dokažite da usisavač radi pisanjem jediničnih testova za njega.
Kreiranje bilo kakvog oblika korisničkog sučelja nije u opsegu.
Rješavanje problema slijedeći TDD (Test Driven Development) pristup bit će poželjno.
U kratkom vremenu koje imamo, više nam je stalo do kvalitete nego do potpunosti.
*Ne mogu podijeliti zadatak koji su mi poslali, to je stari zadatak koji se davao prije nekoliko godina. Ali vjerujte da je principijelno sve ostalo isto.

Posebno želim skrenuti pažnju na kriterije ocjenjivanja. Koliko ste puta naišli na situaciju kada su važne stavke za kandidata potpuno nevažne prilikom provjere i obrnuto. Nisu svi spremni razmišljati kao vi, ali mnogi mogu prihvatiti vaše vrijednosti i slijediti ih ako ih jasno definirate. Dakle, iz kriterija ocjenjivanja odmah je jasno da su najvažnije vještine u ovoj fazi

  • TDD;
  • Sposobnost korištenja OOP-a i pisanje održivog koda;
  • sposobnosti za programiranje u paru

Dakle, upozoreni su me da provedem ovih 1.5 sati razmišljajući o tome kako planiram izvesti zadatak, a ne o pisanju koda. Kod ćemo pisati zajedno.

Kada smo se čuli, ekipa mi je ukratko ispričala tko su i čime se bave te predložila da započnemo razvoj.

Tijekom cijelog intervjua nikada nisam imao dojam da se nalazim na razgovoru za posao. Imate osjećaj da kod razvijate u timu. Ako zapnete negdje — oni pomažu, savjetuju, raspravljaju, čak i polemiziraju kako najbolje to učiniti. Na intervjuu sam zaboravio kako u JUnit 5 provjeriti da metoda baca Exception — oni su predložili da nastavimo pisati test dok je jedan od njih tražio kako to učiniti.

Doslovno nekoliko sati nakon intervjua primio sam konstruktivnu povratnu informaciju — što se svidjelo i što nije. U mom slučaju pohvalili su me za korištenje Sealed klasa kao alternative objektu null; za to što sam prije pisanja koda napisao pseudokodom kako bih želio upravljati roverom, i tako dobio skicu klasa, barem onih koji su uključeni u API robota.

Faza 2. Ispričaj nam

Tjedan dana prije intervjua zamoljeni su me da pripremim prezentaciju na bilo koju temu koja me zanima. Format je jednostavan i poznat: 15 minuta prezentacija, 15 minuta pitanja i odgovora.
Odabrao sam Clean Architecture autora Uncle Boba. I ponovno su me intervjuirala dvojica ljudi. Ovo je bilo moje prvo iskustvo prezentacije na engleskom, i, vjerojatno, da sam bio u stresnoj situaciji — ne bih se snašao. No, opet, nikada nisam imao osjećaj da sam na razgovoru za posao. Sve je bilo kao i obično — pričam, oni pažljivo slušaju. Čak ni tradicionalna sesija pitanja i odgovora nije ličila na intervju; bilo je očito da pitanja postavljaju ne da 'potone', već ona koja su ih stvarno zanimala u mojoj prezentaciji.

Nakon nekoliko sati od razgovora za posao, dobio sam povratne informacije — prezentacija je bila vrlo korisna i uživali su slušajući.

Faza 3. Kod kvalitete za proizvodnju

Upozorivši da je ovo posljednja faza tehničkih razgovora, zamolili su me da kod dovršim do stanja spremnog za proizvodnju kod kuće, nakon čega ću poslati kod na reviziju i zakazati razgovor, gdje će se zahtjevi za zadatak promijeniti i kod će zahtijevati modifikacije. Iako skraćujem, mogu reći da se revizija koda provodi slijepo; revizori ne znaju ni za koju poziciju kandidat konkurira, niti vide njegov životopis, čak niti ne vide njegovo ime.

Poziv, i opet su tu neki momci s druge strane monitora. Sve kao na prvom razgovoru za posao: najvažnije je ne zaboraviti na TDD, pričati o tome što radiš i zašto. Ako do sad nisi prakticirao TDD, preporučujem da odmah počneš, ne zato što je to nužno u tvrtkama, već zato što značajno olakšava tvoj život, smanjuje stres, ako želiš. Sjećaš se kako si očajnički tražio grešku debagerom koja se pojavila samo u pregledniku, a testovima je nije mogao reproducirati? Sada zamisli da moraš pronaći takvu grešku tijekom razgovora za posao — nekoliko sijedih dlaka ti je zajamčeno. Što nam TDD omogućuje? Promijenio si kod i iznenada shvatio da su ti testovi crveni, a ne znaš u čemu je greška? U redu, kažemo intervjuera “Ups”, pritisnemo Ctrl-Z i počinjemo ići malim koracima naprijed. I da, vještina razvoja uz TDD se mora razvijati, sposobnost ciljati na to da ti testovi budu stalno zeleni, a ne crveni pola dana, jer “imaš veliki refaktoring”. To je jednaka vještina kao i sposobnost pisanja održivog koda ili performansnog koda.

Dakle, koliko dobro tvoj kod podnosi promjene ovisi o dizajnu koji si prvotno postavio, koliko je jednostavan i koliko su dobri tvoji testovi.

Nakon razgovora za posao dobio sam povratne informacije nakon nekoliko sati. U ovoj fazi sam shvatio da sam praktički prošao i ostalo je jako malo do “susreta s Fowlerom”.

Faza 4. Finale. Dovoljno tehničkih pitanja. Želimo znati tko si!

Iskreno rečeno, ovakvo postavljanje pitanja me pomalo zbunjuje. Kako je moguće shvatiti tko sam ja u samo jednom satu razgovora? A, još više, kako to možeš shvatiti kada razgovaram na jeziku koji nije moj maternji, i, iskreno govoreći, veoma loše i nespretno. Na prethodnim intervjuima bilo mi je lakše pričati nego odgovarati na pitanja, a tome je kriv naglasak. U najmanju ruku jedan od intervjuera bio je Azijac — a njihov naglasak je, recimo to tako, prilično specifičan za europsko uho. Zato sam odlučio primijeniti proaktivan pristup — pripremiti prezentaciju o sebi i na početku intervjua ponuditi da pričam o sebi uz tu prezentaciju. Ako pristanu — barem će biti manje pitanja za mene, ako odbiju ponudu — pa dobro, 3 sata mog života potrošenih na prezentaciju nije toliko visoka cijena. Ali što napisati u prezentaciji? Biografiju — Rođen tamo i tada, išao u školu, završio fakultet — tko se to uopće zanima?

Ako malo potražite o kulturi Thoughtworks, možete pronaći članak Martina Fowlersa [https://martinfowler.com/bliki/ThreePillars.html], u kojem su opisani 3 stupa: Održivo poslovanje, Izvrsnost softvera i Društvena pravda.

Pretpostavimo da su već provjerili Izvrsnost softvera. Ostaje mi da pokažem Održivo poslovanje i Društvenu pravdu.

Pri tome sam odlučio staviti naglasak na posljednje.

Za početak sam ispričao zašto je ThoughtWorks važan - još na fakultetu sam čitao blog Martina Fowlersa, odatle i ljubav prema Clean code.

Projekte također možete predstaviti iz različitih perspektiva. Razvijao sam softver za medicinu koji je olakšao život pacijentima, a prema glasinama, čak je spasio jedan život. Razvijao sam i softver za banke, također svojevrsno pojednostavljenje života građanima. Osobito ako tom bankom koristi oko 70% stanovništva zemlje. Ne govorim o Sberbanku niti o Rusiji.

Želite znati više o meni? Ok. Moje hobi je fotografija, na ovaj ili onaj način, drži fotoaparat u rukama već 10 godina, imam fotografije koje se ne sramim pokazati. Također, jedno vrijeme sam pomagao azilu za mačke: fotografirao sam mačke koje trebaju stalni dom. A s dobrim fotografijama, pronaći dom za mačku je mnogo lakše. Vjerojatno sam snimio stotinjak mačaka 🙂

Na kraju, 80% prezentacije bilo je ispunjeno mačkama.

Odmah nakon prezentacije mi je HR javio da još ne zna rezultate razgovora, ali da su svi u uredu impresionirani mačkama.

Na kraju, čekao sam povratnu informaciju — zadovoljio sam sve kao osoba.

Ali mi je HR za vrijeme završnog razgovora taktično rekao da je socijalna pravda vrlo važna i potrebna, ali ne uklapaju se svi projekti. I pitao me nije li me to zastrašilo. Uglavnom, malo sam pretjerao s socijalnom pravdom, događa se 🙂

Zaključak

Kao rezultat, već nekoliko mjeseci radim u Singapuru u Thoughtworksu, primjećujem da mnoge tvrtke ovdje preuzimaju 'najbolje prakse zapošljavanja' iz Googlea, koristeći papiriće i Whiteboard za kodiranje, iako znanja izvan Springa, Symfonyja, RubyOnRails (potrebno je naglasiti) nisu potrebna za rad. Inženjeri uzimaju tjedan dana odmora prije razgovora kako bi se 'pripremili'.

U Thoughtworksu, osim razboritih zahtjeva prema kandidatima, naglašavaju se sljedeći principi:
Radost razgovora. I to za obje strane. Doista, ako želite dobiti najbolje kadrove (a tko ne želi?), onda je razgovor - to nije tržište na kojem birate robove, već audicija, gdje i poslodavac i kandidat ocjenjuju jedni druge. A ako kandidat povezuje ugodne emocije s tvrtkom, vrlo je vjerojatno da će odabrati baš tu tvrtku.

Više ispitanika kako bi se smanjila pristranost. U Thoughtworksu je parno programiranje de facto standard. A ako se ova praksa može primijeniti u drugim područjima, TW nastoji to učiniti. Na svakoj fazi razgovora provode 2 osobe. Tako minimalno 8 ljudi ocjenjuje svakog kandidata, a TW nastoji odabrati intervjue s raznolikim pozadinama, različitih smjerova (ne samo tehničkih) i spolova.

Na kraju, odluka o zapošljavanju bit će donesena na temelju mišljenja najmanje 8 osoba, i nitko nema pravo odlučujućeg glasa.

Zapošljavanje na temelju atributa Umjesto da donosite odluku na temelju "sviđa li se ili ne" kandidatu, za svaku poziciju i za svaki korak razvijena je forma koja uključuje ocijenjene atribute. Pri tome se savjetuje da se ne ocjenjuje iskustvo u određenoj vještini, već sposobnost primjene iste. Tako, ako kandidatu nije bilo moguće primijeniti određene vještine, kao što je TDD, ali se i dalje trudi primijeniti ih i sluša savjete o pravoj upotrebi — ima sve šanse proći intervju.

Certifikati obrazovanja nisu potrebni TW ne zahtijeva od kandidata obavezne certifikate ili obrazovanje u računalnim znanostima. Ocjenjuju se samo vještine.

Ovo je prvi intervju koji sam imao s inozemnim tvrtkama, za koji se nisam morao pripremati. Nakon svakog koraka, nisam se osjećao iscijeđeno kao limun, već naprotiv, bio sam sretan što mogu primijeniti najbolje prakse, što ljudi s druge strane monitora cijene i također primjenjuju svaki dan.

Nakon nekoliko mjeseci, mogu reći da su očekivanja u potpunosti ispunjena. Što razlikuje ThoughtWorks od obične tvrtke? U običnoj tvrtki možete pronaći dobrih developera i ugodnih ljudi, ali u TW je njihova koncentracija nevjerojatna.

Ako želite pridružiti ThoughtWorksu, otvorene pozicije možete pogledati ovdje
Također preporučujem da obratite pažnju na zanimljive ponude:
Voditelj softverskog inženjeringa: Njemačka, London, Madrid, Singapur
Viši softverski inženjer: Sydney, Njemačka, Manchester, Bangkok
Softverski inženjer: Sydney, Barcelona, Milano
Viši data inženjer: Milano
Analitičar kvalitete: Njemačka Kina
Infrastruktura: Njemačka, London, Čile
(Želim iskreno upozoriti da je link referentni, ako prođete u TW, dobit ću finu nagradu). Izaberite ured koji vam odgovara, nije potrebno ograničiti se samo na Europu, na kraju krajeva, TW će biti sretan prebaciti vas u drugu zemlju svaka 2 godine, jer je to dio politike ThoughtWorksa, tako se kultura širi i homogenizira.

Ne ustručavajte se postavljati pitanja u komentarima ili tražiti da vas preporučim.
Ako vam se tema čini zanimljivom, napisat ću o tome kako je raditi u ThoughtWorksu i kako je živjeti u Singapuru.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster