Ach jo. Ale co už, čekám, než zabere kofein a mám pauzu na oběd, tak teda;
Nauč se Python.
Proč?
Jednak je to fajn jazyk a prostředí. Dělám v něm a dělal jsem i v javě a dalších, takže to vím.
Co je ale podstatnější, tak ho většina VŠ na rozdíl od Javy, C# a dalších neučí a trh je masivně hladový. Nebudeš muset bojovat s celou generací právě vyšlých studentů.
Momentálně dělám jednoho ze tří programátorů ve firmě a snažíme se nabrat další, takže jsem docela často u rozhodovacího procesu a u pohovorů. V minulé práci jsem měl taky několikrát tuhle příležitost, takže trochu vím, o čem to je.
Programování není jen o jazyku. To je naprostý základ, stejně jako psaní knih není jen o češtině. Tak jako se autor knih musí naučit vyprávět příběh, vytvářet zápletky a předkládat před čtenáře děj, tak se musíš naučit složitost algoritmů, členění programu do strukturovaných kusů (jeden by nevěřil, kolik se nám hlásí lidí, co dají jako ukázku jednu nablitou 500 řádkovou funkci), standardní knihovnu, hledání a používání knihoven ostatních lidí. Základy linuxu, instalaci závislostí z package managerů a vytváření ucelených kusů kódu (=třeba vlastní balíčky).
Další důležité věci, které naprostá většina vysokoškoláků nedává je psaní dokumentace (myšleno docstringů tříd/metod/funkcí), práce s gitem (víc než jen "tohle je první commit") a unittesting. Přitom to jsou tři reálné věci, které v libovolné práci budou dělat od rána do večera. Je to pro ně to samé, co pila a malá sekerka pro dřevorubce - sice to není hlavní pracovní nástroj (=jazyk), ale používá se to každou chvíli.
Další věc, kterou vysokoškoláci naprosto postrádají, i když by jim to měla vysoká škola dodat, je rozhled. Prostě nemají vůbec tušení kde jsou, co je jejich kontext, jak má vypadat jejich práce, co jsou „sousední“ technologie a jak zapadají do světa, co generuje zisk a tak podobně. Málokdo z nich umí anglicky na přijatelné úrovni.
Dokázal by mi s tím někdo pomoct?
Pomáhat ti nikdo s ničím nebude, protože reálně nikoho nezajímáš. Zvykej si.
Všechno co budeš potřebovat se musíš naučit sám. Stejně tak každá práce, kterou kdy budeš dělat bude tak z 50% o tom co znáš a ten zbytek se musíš naučit během chvíle dynamicky, jinak jsi k ničemu a tohle není obor, který bys měl dělat.
Nauč se anglicky, sleduj programátorské komunity, ale ne jen pasivně, taky se zapoj.
/r/programming je dobrý výchozí bod. Čti všechno co tam vyjde (hodí se RSS čtečka), orientuj se v tom, zjišťuj si co co znamená a jak to zapadá do kontextu s ostatním.
Pokud chceš úplně nejužitečnější radu: dělej vlastní projekty. Prvních 50-100 tisíc řádků, které napíšeš budou sračka. S tím se prostě nedá vůbec nic dělat, kromě toho se vypsat. Když vidím vlastní zdrojáky třeba jen tři/čtyři roky zpět, tak mám pocit, že bych se nafackoval a to programuju už 10 let.
Na začátku zapomeň na nějakou monetizaci. Prostě si piš vlastní projekty, dělej věci, které ti přijdou zajímavé a jsou pro tebe výzva. Vyzkoušej si programování grafických aplikací, práci s internetem, parsování HTML/XML, IRC bota, email klienta a tak. Naimplementuj si pár RFC, abys věděl jaký to je pocit. Zapoj se do nějakého existujícího opensource projektu a udělej tam třeba 100-200 commitů.
Neexistuje žádná zkratka. Kdokoliv, kdo ti bude tvrdit opak je lhář a chce tě jen zmanipulovat, aby sis koupil nějakou jeho knížku, nebo kurz, nebo nějakou takovou debilovinu.
Některé z těch vlastních projektů zahoď, ale ty povedenější dej na github. Dotáhni komentáře, dokumentaci, balíček, unittesty, vlastní styl, „python way“ dělání věcí.
Vlastní portfolio na githubu je strašně moc důležité. U nás ve firmě, kdo nemá něco na githubu, ten ani nemá šanci dostat se k pohovoru.
Reálná zkušenost z života: Poslední 4 práce mi získal github.
Slyšel jsi o takových těch pracovních pohovorech, kde po tobě chtějí fizzbuzz, dávají ti dělat projekty, psát algoritmy a tak? Kde se tě ptají na kraviny, jako jaká je tvoje oblíbená barva a jak by ses charakterizoval v pěti slovech? Situace, kde tě schválně na pohovoru stresují, aby viděli, jak si poradíš s řešením úlohy?
Nic z tohohle se tě netýká, když máš github plný projektů a pár tisíc commitů v commit logu.
Přijdeš jako Paša, chvíli se bavíš s budoucími kolegy o nějakém svém projektu, proč jsi udělal tohle, jaký používáš styl, proč používáš napoleon doc misto numpy stylu, a pytest místo unittest knihovny přímo v pythonu. Zcela přátelsky si pokecáte o různých dalších projektech, o NoSQL databázi, co jsi použil minule, o výhodách a nevýhodách bottle.py web frameworku, tvém oblíbeném ORM a co se zrovna učíš za toy jazyk (smalltalk, lisp, erlang, haskell a tak).
Pak si domluvíte nástupní plat a kdy chceš nastoupit a to je všechno. Možná se ještě z pohovoru i něco nového a zajímavého dozvíš, protože se to přesune z pozice „jsem zkoušen“ do pozice „s budoucími kolegy řeším mé projekty a novinky, abych ukázal rozhled“.
To si necucám z prstu, jsou to reálné zkušenosti a přesně takhle to probíhalo.
Pracuje někdo na zakázky? Jak to probíhá?
Během minulého roku jsem dělal několik zakázek. Funguje to tak, že někde začneš pracovat a děláš programátora třeba rok / dva, než se to naučíš. Jakmile se roznese, že jsi co k čemu, tak tě lidi začnou oslovovat se svými problémy. Celé to funguje naprosto sociálně a neformálně, takže se vyplatí nebýt autistou a mít i nějaké známé.
Příklad: Jdeš na oběd se sestrou a ta vezme i kamarádku. Kamarádky rodina má malou vinárnu a když se zmíníš, že jsi programátor, tak si vzpomene, že by potřebovali software na evidenci vína. Něco, co když půjde babka do sklepa a vezme tři láhve, tak aby si na tabletu odškrtla ty tři lahve tak, aby se je potom nesnažil otec prodat, tzn musí to mít i webové rozhraní. Rozpočet sto tisíc.
Příklad: Přijde kolega z jiného oddělení a v rámci socializace jdete na jídlo. V průběhu se jen tak zmíní, že mají pracovníky, kteří dělají některé poměrně složité věci a analýzy manuálně a jak je život nahovno, protože to nestíhají a potřebovali by nabrat tak 20 dalších lidí. Ty řekneš, že to je přesně práce programátora, tyhle věci jim usnadňovat a zefektivňovat a že by si měli někoho najmout, kdo by jim udělal custom software, který tu práce zautomatizuje. Za měsíc se ti ozve, že to prohnal přes vedení a že pro tebe má zakázku, rozpočet je 90 tísíc.
Příklad: Jdeš s bráchou do cider baru a chlastáte do noci, než se to rozhodnete zabalit. Cestou na bus narazíte na mix kavárny a hospody, před kterým stojí nějaký váš známý, který trvá na tom, aby jste zachlastali spolu. U stolu jsi v rychlosti představený asi 7 náhodným lidem, z nihž jeden dělá tatéra, další navrhuje mrazáky a další pracuje někde v helpdesku. Když řekneš že jsi programátor, jeden z nich se hned začne zmiňovat o nějaké zakázce na psaní webu.
Příklad: Tvůj kolega z jiného oddělené byl spokojený s odvedenou prací, takže tě pochválí u dalších kolegů. Jeden z nich je šéf oddělění, kterého už nebaví si objednávat validátory dat u externích firem, kde každý balíček stojí dva miliony, nemají k tomu zdrojové kódy a firma se chová jak zadek. Takže se ti ozve, že by pro tebe měl zakázku za 350 tisíc, tady jsou specifikace, věděl bys jak na to? Časový rozpočet tři měsíce.
Tohle jsou zcela reálné zážitky. Něco z toho jsem přijal, jiné věci jsem odmítl, většinou čistě z důvodu, že jsem něměl čas, protože už jsem dělal o víkendech a po včerech něco jiného.
Pokud chceš dělat tenhle druh práce, mám k tomu několik poznámek:
1. Je to psychicky náročné. Počítej s tím, že ti to žere čas, pokud to neděláš na fulltime, ale taky musíš sám sebe donutit pokračovat. Když narazíš na problém, tak ho musíš překonat. A pak znova a znova a do toho plnit deadline a psát dokumentaci a unittesty a starat se o nasazení a dvacet dalších věcí. Někdy máš zásek třeba týden / dva a strašně moc se ti do toho nechce, ale musíš, nebo udeří smluvní pokuty.
2. Pokud děláš na IČO, stát tě obere na daních docela hodně. Kdybys vzal třeba tu zakázku za 350 tisíc, tak bys z toho reálně měl něco pod 270 (daně, sociální, zdravotní a další sračky). To zní pořád super, ale jak dlouho to budeš dělat? Kolik u toho budeš mít stresu? Fakt zvládneš všechno, nebo si na něco budeš muset najmout dalšího člověka? Co když to projedeš časově? Chce se ti platit 2 tisíce pokuty za každý den zpoždění? Jsi připravený řešit reklamace?
3. Chce to vizitku, kterou dáváš lidem, kteří projeví náznaky zájmu. Sice se to může zdát v dnešní době facebooků a mobilů docela k ničemu, ale vizitka cestuje světem sama o sobě, je předávána z člověka na člověka a často se dostane někam, kde bys to vůbec nečekal.
4. Potřebuješ ukázky práce, kterou jsi udělal.
5. Občas se stane, že lidi nezaplatí. Zatím jsem měl štěstí, ale brácha už se soudil. Najednou musíš řešit právníky, vyhrožovat si a tak a je to rychle ošklivé.
---
No nic, domluvil jsem. Chtěl jsi informace, tak jsi je dostal. Jak si je přebereš je jen na tobě.