Náborování

Poslední dobou je tak trochu IN vyjadřovat se k náborům a pohovorům. Protože jsem se v posledních letech také zůčastnil pár náborových pohovorů, protože jsem byl adresátem několika pracovních nabídek a protože jsem znám pocit hladu po kvalitních lidech na projekt, cítím se být fundován přihodit na tu hromadu odpadků vlastní lopatku smetí. A sestavím ji tak, že se zmíním o několika článcích s touto tematikou, které mi přišly podnětné.

Jeff Atwood: How to Hire a Programmer

Skvělý článek spoluzakladatele Stack Overflow blogujícího na Coding Horror. Text jsem poprvé nalezl v knize Effective Programming: More Than Writing Code, kterou mám právě to potěšení číst.

Stať pojednává o oťukávání adepta na vývojářskou pozici. Popisovaný proces se vůbec nepodobá klasickému schématu, že si jdu na hodinu sednout s HR specialistkou a člověkem, o kterém vím jenom to, co jsem se dočetl v jeho životopise den nebo hodinu předem.

Přibližovací jednání má podle Jeffa Atwooda několik fází. Cílem je ztratit co nejméně času, nemá-li vztah budoucnost, a vědět o kandidátovi co nejvíce, jestliže vztah budoucnost má. Jeff doporučuje požádat uchazeče, bez ohledu na jeho senioritu, hned na začátku řízení o vyřešení nějaké banální úlohy typu vypsání sudých čísel od jedné do sta. Argumentuje statistikou, kolik potenciálních seniorních vývojářů není schopno takové problémy řešit.

Zajímavá je myšlenka nechat kandidáta vytvořit v nějakém krátkém, byť rozumném termínu nějaký vlastní malý projekt podle zadání. Ať se pak při osobním setkání máme nad čím plácat po ramenou. Tohle mi přijde jako zajímavá alternativa k požadavku přinést nějaký vlastní stávající kód, který většina kandidátů prohlásí za nerealizovatelný z několika seriózních důvodů.

Poslední fází je osobní setkání, při kterém bychom si měli být téměř jisti, že kandidáta chceme vzít. Je chvílí pro soft skills. Odprezentování dosavadních úspěchů a vychválení svého technického backgroundu. A tak.

No, stejně si to přečtěte.

Vit Kotačka: Jak dělám Java pohovor

S Víťou jsem měl tu čest krátce si zaspolupracovat v létě 2012 a musím říct, že to pro mě byla spolupráce velmi inspirativní.

Víťův článek se věnuje tomu, čemu slibuje ve svém nadpisu. Zajímavá mi přišla zvláště debata nad kódem, který uchazeč nezná, s cílem prověřit, jak se v něm dokáže zorientovat, na co se bude soustředit a co ho napadne. Ještě před tím se ovšem diskutuje nad kandidátovým vlastním kódem, takže i v této stati se doporučuje vyžádat si vlastní kód. A samozřejmě předem; projít si ho, udělat TODO, připravit otázky.

Podnětný je výčet relevancí, které autor přikládá jednotlivým položkám v CV uchazeče.

Riki FridrichAko korporácie lákajú zamestnancov (a prečo im to nejde)

Článek, který jednu dobu koloval po sociálních sítích, je reakcí na dělostřeleckou palbu head-hunterů, kteří vesměs nabízejí nadstandardně honorovanou práci na velice zajímavém projektu na nejmodernějších technologiích pro nadnárodního zaměstnavatele světového věhlasu v neformálním prostředí a mladém kolektivu. Podpořeno nesmírně grandiózními benefity. Což je věru neodolatelně lákavá nabídka.

No a příklad takového inzerátu, ze kterého je hned každému jasné, jestli ten job pro něj je nebo není, je inzerát z produkce již zmiňovaného Víti Kotačky.

Spamy

Nemůžu si pomoct, ale štve mě spam. Ne že bych ho dostával nějaká nezvladatelná kvanta, ale spíš tak nějak ze zásady. Prostě nejsem rád otravován. Žil jsem v domnění, že odesílatel reklamních sdělení musí mít dopředu můj explicitní souhlas se zasíláním. Laickým přezkumem příslušného zákona jsem však nabyl dojmu, že tomu tak bohužel není. Odesílatel je pouze povinen umožnit příjemci odmítnutí dalšího zasílání. Ještě před tím, než jsem učinil tento objev, jsem dokonce v jednom případě podal podnět Úřadu na ochranu osobních údajů. Přibližně po půl roce jsem obdržel informaci, že šetření bylo uzavřeno s tím, že odesílatel se nedopustil překročení čehokoli.

Možná by stálo za to shrnout, v čem spatřuji, kromě zmíněného otravování, škodlivost nevyžádaných reklamních sdělení. Stojím si za tím, že jejich produkce znamená pro příjemce zvýšení nákladů. Plýtvají časem. Zabírají místo. Vynucují různé aktivity, konfiguraci. Odesílatel reklamních sdělení nemá morální právo příjemcům takové náklady generovat. Jsou v pozici prudilů, kteří ruinují oběť zasíláním halířových poboček na její bankovní účet v podmínkách zpoplatnění příchozích plateb.

Dokázal bych samozřejmě nějakou dobu básnit o tom, jak by se dala ochrana před nevyžádanými reklamními sděleními zdokonalit. Jsem přesvědčen o tom, že souhlas by měl být explicitní. Odesílatel souhlasu nemaje nesměl by odesílat. Souhlas by neměl být postupitelný. Dost spamu, který dostávám, obsahuje informaci, že jsem souhlas poskytl jim nebo některému z jejich partnerů (Což je stejně lež, takové souhlasy zásadně neuděluji). A teď to hlavní. Souhlas, vázaný na konkrétního šířitele obchodních sdělení a mailovou adresu oběti, by byl registrován nějakým certifikovatelným subjektem a každé reklamní sdělení by obsahovalo identifikátor takového souhlasu. Geniální.

Zpátky na zem. Odesílatelé reklamních sdělení žijí v přesvědčení, že na jejich maily alespoň část příjemců zareaguje pozitivně a sníží jim obrat. Ostatní budou jejich sdělení ignorovat. No a já se přesunu na druhou stranu této hranice. Budu bojkotovat společnosti, v jejichž zájmu je kampaň vedena. Nic si u nich nekoupím, nebudu používat žádné její služby a budu od jakékoli interakce s nimi odrazovat své přátele.

A vytvořím si zde seznam společností, které mě tímto způsobem pijí krev.

Společnost Odesílatel Datum Prohlášení
ZUmail, DameJidlo.cz mailing@zumail.cz 30.8.2013 Tento email je zaslán na základě vaší registrace na webu ZUmail.cz, nebo poskytnuté licence třetí stranou a je odeslán se souhlasem uživatele. 
rychlapoptavka.com *.luxeprnews.com 21.8., 23.8., 30.8.2013 Tento email je součástí marketingové kampaně.

Testy z Javy – oblíbený příklad

Nemám rád takové ty testové otázky, které se skládají z výpisu kódu přibližně o dvaceti řádcích následovaného otázkou, co program po spuštění vypíše na konzoli, s možnostmi odpovědí, z nichž ty první v pořadí jsou kompilační chyba, chyba za běhu a nic se nestane. O respondentovi se dozvíte nejspíše jenom to, jak si dokáže všímat detailů. Což se může hodit, ale není to všechno. Navíc například mě osobně takové testy urážejí, protože si s nimi někdo nedal žádnou práci, prostě je opsal z příkladů k certifikaci, a opravování si chce také maximálně ulehčit.

Já mám raději příklady, ze kterých jsem schopen odhadnout, kolik toho má ten člověk za sebou. Jeden z mých oblíbených spočívá v tom, že chci implementovat následující metodu:


/**

* Removes from collection all items that contain given text.

* Supposes  parameters are not null and  the collection doesn't contain null.

*/

public void filter(Collection<String> collection, String text) {

// TODO: implement

}

Když se ti, kteří neumějí procházet kolekce, odebéřou zjišťovat, jak udělají z kolekce pole, které si pak proběhnou přes indexy, dostaneme první skupinu, která napíše toto:


for (String item : collection) {

  if (item.contains(text)) {

    collection.remove(item);

  }

}

Což skončí výjimkou ConcurrentModificationException. Autor kódu tedy něco o Javě ví, ale moc toho nenaprogramoval. Zkušenější, ale stále ještě junior, si zkusí poradit nějak takto:


Collection<String> toBeRemoved = new ArrayList<>();

for (String item : collection) {

  if (item.contains(text)) {

    toBeRemoved .add(item);

  }

}

collection.removeAll(toBeRemoved);

Což už výjimky generovat nebude. Autor má něco za sebou, ale spokojí se s prvním řešením, které ho napadlo nebo ho někde opsal. Kód, který chci vidět, vypadá takto:


for (Iterator<String> iterator = collection.iterator(); iterator.hasNext();) {

  String item = iterator.next();

  if (item.contains(text)) {

    iterator.remove();

  }

}

A je to. Iterátor umí použít kdekdo. Ale dost lidí zná dvě metody toho rozhraní. Tu třetí ignoruje.

Edit: Obdržel jsem rozumnou připomínku, že mé nejlepší řešení nemusí fungovat pro všechny typy kolekcí, ano, z metody může vyletět UnsupportedOperationException. Ale myslím si, že se dá považovat za zodpovědnost volajícího, že chce modifikovat kolekci, která modifikaci umožní.

ODS s Klausem? Tak to se mnou nepočítejte

ODS pro mě byla celá devadesátá léta i na začátku tisíciletí nevolitelná z několika důvodů. Vedle protievropské, velkoropácké a papalášské politiky byl tím nejzásadnějším důvodem Václav Klaus. S jeho odchodem z vedení ODS se pro mne tato strana přesunula z přihrádky NIKDY do přihrádky MOŽNÁ. Od té doby jsem ji volil do městského zastupitelstva jednou v Hradci Králové a jednou v Mladé Boleslavi, kde jsem navíc v posledních senátních volbách v obou kolech volil jejího kandidáta. Neúspěšně, ale za to já už nemůžu.

V ODS se i po Klausově prásknutí dveřmi na viditelných pozicích vyskytovaly a dodnes vyskytují persony, s jejichž názory jsem v zásadním konfliktu, jako například Jan Zahradil, persony, jimiž pohrdám, jako byl například Mirek Topolánek, Pavel Bém nebo David Vodrážka, mám-li jít ještě více do minulosti, vzpomenu v této souvislosti například na první vlny senátorů za ODS, jmenovitě pány Jana Koukala či Milana Kondra. Spousta z nich zmizela ve zkaženém žaludku dějin a s nimi mnohé manýry, jejichž byli ti pánové vrcholovými reprezentanty. Dodnes mi hodně vadí vliv paralelních struktur na praktickou politiku té strany. Programově však, až na tu Evropskou Unii, nenacházím zásadnější záminku pro rozhodný nesouhlas. Možná tedy přijde chvíle, kdy začnu ODS volit opakovaně.

Poslední dobou však z ODS zaznívají hlasy volající zpět Václava Klause, tentokrát v roli spasitele. Chápu, že má ODS, stejně jako celý český národ, jistý konkrétní personální problém, jímž je nedostatek autorit, myšleno v kladném slova smyslu. Avšak v případě, že budou tyto bezradné a ufňukané hlasy budou, stane se pro mě ODS opět nevolitelnou. A protože jsem se opakovaně přesvědčil, že mé názory a postoje nejsou tak originální, jak jsem si myslel, doufám, že si ODS uvědomuje, že Václav Klaus představuje nepřekonatelný problém pro nezanedbatelnou část jejích potenciálních voličů.

Michal Hašek na funkcích lpící

Michal Hašek je nade vší pochybnost člověk pronikavé inteligence, jasných vizí, vysokých morálních kvalit, pevných zásad, nezměrných životních zkušeností z různých oborů lidské činnosti, přímého charakteru… No dobře, tak asi není. Přesto ho voliči vybrali jako svého zástupce v dolní sněmovně parlamentu. Dokonce ho preferenčními hlasy posunuli z nevolitelného místa, kde se ocitl na vlastní žádost, aby sice svou vzácnou přítomností okrášlil volební lístek své strany, ale do parlamentu se nedostal. Býti poslancem se totiž neslučuje s hejtmanováním, jemuž se v tu dobu na plné kotle věnoval. To, že se neslučuje, ho ještě předtím vedlo ke složení poslaneckého mandátu poté, co se hejtmanem stal. Ostatně tento krok sám Michal Hašek uvádí jako skutek hodný vysokého ocenění.

Takže tenhle Michal Hašek byl proti své vůli donucen svými milovanými a milujícími voliči ocitnout se opět jak ve funkci hejtmana tak ve funkci poslance. Tentokrát ale asi přišel na to, jak to všechno zvládnout najednou, takže už nemusel na nic rezignovat.

Časem začali někteří šťouralové poukazovat na to, že Michal Hašek v té poslanecké sněmovně víc není, než je. Ukazovali všelijaké statistiky, kolika hlasování se učastnilo kolik poslanců a kteří chyběli. No a z těch, co nebyli zavření, skoro nejčastěji chyběl právě Michal Hašek. Takže to asi s tím zvládnutím těch několika funkcí zas asi není taková legrace. Ony totiž, jen tak na okraj, nejsou ty funkce dvě, on jich má Michal Hašek spoustu. No a obviněn z toho, že své poslancování Michal Hašek tak trochu fláká, použil obhajobu, která rozhodně přepokládá alespoň polovinu charakteristik, jež jsem uvedl na začátku své stati. Nikdo totiž nemůže chtít po poslanci Michalu Haškovi, aby se věnoval funkci poslance, jestliže tento, jak sám prohlašuje, odevzdává svůj poslanecký příjem na dobročinné účely. Paráda.

Takže se zvedneme od svých obrazovek a přesuneme se na nějakou blízkou stavbu, k libovolné vznikající jámě. A představíme si, jak některý z těch opálených svalovců s lopatou či krumpáčem v ruce ustojí debatu o tom, že za poslední měsíc přišel do práce sotva pětkrát, argumentuje, že on dává svůj plat na dobročinné účely. Asi blbost.

Vzpomínám si na sklonek bolševické éry. Jedním z termínů, kterým se častoval tehdejší režim  pro jeho absurditu a amorálnost, bylo sousloví kumulace funkcí. Mělo se to tehdá za něco eklhaft, když ti legrační uslintaní senilní strejdové oplývali hromadou fukcí, jako dnes oplývá Michal Hašek.

@MZemanOficialni

Miloš Zeman používá Twitter. Jeho profil se nazývá MZemanOficialni. Pochybuji, že člověk, jehož primárním zdrojem informaci je teletext, ví, co jsou to sociální sítě, ale to není ten důvod, proč mi jeho twitterování přijde vtipné. Při pohledu na název jeho účtu totiž nemohu nevzpomenou na postavu z knihy Noční hlídka Terryho Pratchetta, která se jmenuje První Legitimní. Jak je tomu v mnoha případech zeměplošského autora, i k tomuto neobvyklému jménu se váže zajímavý příběh. Literární matka pana Prvního Legitimního pojmenovala totiž svého synka plna nadšení, že se po několika pokusech konečně jedná o dítě manželské, a jeho jméno tedy navždy připomíná tuto radostnou událost.

O relevantních návratových hodnotách

Jednou ze šikovných byť trochu nefér pastí programátorských testů je dotaz, co vypíše do konzole následující kód:

String text = "Ahoj, Honzo!";
text.replaceAll("Ahoj", "Styď se");
System.out.println(text);

Podraz je v tom, že metoda replaceAll nemodifikuje objekt, na němž je zavolána, ale namísto toho vrací nový řetězec. V případě třídy java.lang.String se tak chovají všechny metody, protože tato třída je immutable. Takže spousta respondentů odpoví, že na konzoli se vypíše řetězec „Styď se, Honzo!“ Což je sice odvážné, ale je to špatně.

Přibližně před rokem a půl jsem itenzivně řešil problém s komponentou, která měla nějakým způsobem filtrovat url požadavku, a nechtěla se to naučit. Chyba nakonec byla právě v zahození návatové hodnoty metody třídy String.

Ten problém by šel zobecnit. Máme metodu, jejíž volání je irelevantní, jestliže nepřiřadíme její výsledek. Metoda nic nemodifikuje a nemá ani žádné vedlejší účinky. Napadlo mne, že by se nebezpečí dalo odvrátit, kdyby byla k dispozici anotace, která by překladač informovala o tom, že návratová hodnota nesmí být ignorována. Překladač by pak druhý řádek mého příkladu považoval za chybu a odmítl třídu přeložit.

@MustAssign
public <T> T createCopy(T original) {
...

Možná by někoho napadlo automaticky tuto anotaci používat například u getterů, ale nemyslím si, že zrovna to by byl šťastný nápad. Vezměme si například toto:

Person person = entityManager.find(Person.class, id);
person.getChildren();
return person;

Volání metody getChildren() může vypadat jako chyba a metoda sama se může stát kandidátem pro naši novou skvělou anotaci. Ale spíš to vypadá jako zajištění inicializace fetch-type lazy atributu před odpojením entity.

Neuvážené plýtvání anotací by mohlo přinést i komplikace, ale jsem toho názoru, že bychom našli spoustu příkladů, kde by přínosy převážily. Jak jsem naznačil, mohlo by tomu tak být v případě metod immutable třít nebo v případě utility metod, které nemodifikují parametry.
Takže jestli znáte u oráklů někoho, kdo tam dělá víc než kafe, zkuste mu, prosím, navrhout, ať to prosadí do devítky Javy.

Popelníček, Drtinová

Po učebnicové ukázce vrcholového rektálního alpinismu ředitele České televize po žádosti, těžko se mi to píše, prezidenta Miloše Zemana o popelníček v budově televize, kde je kouření zakázáno, je velmi nepravděpodobné, že by tentýž ředitel uměl odolat požadavku odvolání moderátorky Daniely Drtinové z pořadu Události, komentáře.

Tak ústava už je asi také idiotská

Vratislav Mynář: „Je škoda, že vláda pana Rusnoka žádá o důvěru v Poslanecké sněmovně, a ne třeba cestou občanského referenda. Kdyby to bylo na lidech, bylo by to velmi markantní vítězství pro Rusnokovu vládu. Máme tady ale parlamentní demokracii.“
Citát je uveden v článku Další úřednická vláda? Podle Mynáře reálná alternativa  na webu ČT24.

Takže takhle to je. Nejdříve zatočíme se zvyklostmi a pak i s Ústavou samotnou. Také bych uměl říct, co je škoda. Je škoda, že máme přímou volbu prezidenta, je škoda, že je Miloš Zeman prezidentem. Je ale dobře, že ani Miloš Zeman ani Vratislav Mynář nemohou měnit Ústavu. Zaplaťbůh to není možné ani cestou občanského referenda.