A na základních školách se za mých mladých let mimo jiné vysvětlovalo, co to jsou synonyma. Kde jsou ty časy...
Tak pro absolventa základní školy by se to za synonyma považovat dalo. Ale programátor by v tom rozdílu měl mít jasno.
Pouč mne, prosím.
Já zase nechápu uchazeče o místo, kteří mají potřebu potenciálního zaměstnavatele poučovat o tom, co vlastně potřebuje a co ne a na co se jich má ptát.
Já nejsem uchazeč o místo. A zaměstnavatele nepoučuju, jenom jsem podotkl, že tenhle typ testu zpravidla zjišťuje něco jiného, než zaměstnavatel od programátora potřebuje.
Několik let jsem tuto práci vykonával, tj. rozhodoval se podle životopisů a na pohovoru, koho si do oddělení vezmeme za spolupracovníka. Ale jak tak čtu, tak jsem se měl zeptat diskutérů na rootu, aby mi poradili, na co se těch uchazečů mám vlastně ptát. Patrně to tu víte lépe než já, který jsem jim zadával práci a na něhož se obraceli, pokud narazili na nějaký problém.
Problém pramenící z neznalosti nějakého protokolu nebo nějaké knihovny či nějakého standardu mi nikdy nedělal starosti, to jsem vždycky rád vysvětlil a vyšlo to rychleji, než nechat nebožáka vrtat se v dokumentaci. Ale když někomu řeknete, aby danou věc neřešil vnořeným voláním, ale pomocí stavové proměnné, protože jinak se nevejdeme do zásobníku, a on na vás čumí jak tele na nová vrata, tak je vám jasné, že zase v práci budete muset zůstat trčet do noci, ale mzdu za to dostane to jelito. To je přesně ten důvod, proč k sobě chcete lidi, kteří se ve svém oboru orientují a když náhodou něco nevědí, tak to alespoň rychle pochopí. A nějak na to holt musíte přijít pokud možno během pohovoru.
Zaměstnavatel si ověřuje, zda uchazeč o místo programátora umí programovat - no co si to dovoluje!
Právě že tak to není. „Umět programovat“ může znamenat spoustu různých věcí, a ve většině případů to není „umět z paměti napsat quicksort“.
O žádný quicksort mi nikdy nešlo a neznám nikoho, kdo by u pohovoru někoho zkoušel z quicksortu. Ale co mě zajímalo je např. to, zda tuší, co je backtracking, co je dynamické programování, jaký je rozdíl mezi prohledáváním do šířky a do hloubky, jestli tuší, jak se dají organizovat data a jaké má která organizace výhody a nevýhody, zda tuší, že existují algoritmy časově náročnější a méně náročné a že nejjednodušší řešení nemusí být to nejefektivnější apod. Ne teoreticky, ale na základě příkladu, který měl vyřešit. Ale spoustu uchazečů to vůbec netrklo, nač ten který příklad míří. Mimochodem, příklad na prohledávání do šířky a příklad na dynamické programování jsem dával spíš jako hozenou rukavici, zda se někdo třeba chytne, ale za ty 4 roky, kdy jsem ty pohovory dělal, je zvládlo přesně nula uchazečů.
Zajímavé bylo, že čím větší jelito, tím větší mzdu si představovalo. Vždyť to je podobné, jako by se na zubařské oddělení hlásilo deset lidí, z nichž dva aspoň dokážou poznat kazový zub a opravit ho, další čtyři sice kaz poznají, ale nevědí, co s ním, a zbytek nezvládá ani to. Na zánět kořenových kanálků a jeho řešení se ale raději neptejte nikoho z těch deseti. Tak jestli vám to připadá normální, tak mně to teda připadá šílené!
A jak nám jako studentům říkával na škole Virius - programátor, který nezná základní třídící algoritmy, to ani není programátor.
Tak alespoň vidíš, proč musí učit. S tímhle by v reálném životě moc neuspěl.
Mě spíš děsí, když v reálném životě uspěje člověk, který plácá pamětí v ASICu a nevejde se do časování protokolu kvůli tomu, že pomocí floating pointu na železe bez FPU počítá něco, na co stačí pár bitových manipulací, kdyby o nich něco tušil.
A proto dnes taky nedává smysl zkoušet z nich nastupující programátory.
myslím, že by byl dobrý i třeba dotaz typu, jaké jsou rozdíly mezi SSD - HDD, BTRFS - FAT, GIF - JPEG - RAW, vektor - bitmapa, UTF8 - UTF16LE, cokoliv, co je poblíž budoucí práci... Mě osobně až tak úplně nezajímá, co umí (samozřejmě, že potřebné základy musí mít), ale spíš jestli uvažuje logicky a pracuje dobře s informacemi, které už má, a ví, jak se dostat k dalším... Jestli neblábolí a nebo dokonce nelže. I za upřímné "nevím" dávám bod.
Tak přesně na takové blbiny jsem se teda nikdy neptal. Zvládnutí konkrétní technologie je z časového hlediska zanedbatelnou otázkou, ale učit někoho programovat během zkušební doby, když to nezvládl za předchozí roky studia, to teda good luck.
Řekl bych, že ptát se člověka, který se dokáže vypořádat s nějakým jednoduchým grafovým problémem, na rozdíly mezi vektorem a bitmapou, je poněkud zbytečné a na pochopení rozdílu mezi BTRFS a FAT mu bude stačit pár minut studia příslušných specifikací. Takže i kdyby to mělo být hlavní náplní jeho práce, tak by mi vadilo podstatně méně, kdyby o tom neměl žádné předchozí znalosti, než kdyby mi pak výpočet pozice nějakého bloku či bajtu mastil přes FP.
Pro zajímavost, zažil jsem i člověka, který ani po upozornění na konkrétní řádek nechápal, v čem má chybu ("nulovost" doublu testoval pomocí ==) a rozčiloval se, že máme asi nějakou chybu v překladači, protože v těch proměnných jsou nějaká trochu jiná čísla, než jaká do nich přiřazuje. Ale podle zdejších diskutérů programátor přece nemusí nic vědět o tom, jak jsou v počítači reprezentována čísla. To přece od něj nikdo nemůže chtít, když jeho náplní práce nebude implementace matematických simulací. Akorát mám obavu, že kdyby v popisu pozice byla, výsledek by byl stejný.