Od té doby co jsem uveřejnil článek Jak se stát hackerem mi píší lidé, kteří ho četli (100+ emailů). Někdy mi nenapíší celé měsíce, jindy mi po několik týdnů chodí dvě, tři zprávy denně. Někdo chce poděkovat, ale většina lidí chce rady. Rady jak se stát hackerem (na ty neodpovídám), rady s pythonem (na ty odpovídám, pokud nejsou vyloženě dementní) a nejčastěji jak se stát programátorem, jak s tím vlastně začít.

Po nějaké době odpovídání mi došlo, že se pořád opakuji, proto jsem se rozhodl sepsat tento text, který uveřejním a další tazatele na něj budu odkazovat.

Pokud máte pocit, že se místy poněkud opakuji a popisuji věci, které jsem již uvedl v článku Jak se stát hackerem, tak je to správný pocit a dělám to naprosto záměrně. Vzpomínáte si co jsem tam tolik zdůrazňoval? Musíte se naučit programovat, a o tom je tenhle text.

Filosofická část

Proč umět programovat

Lidská rasa není připravená na informační revoluci. Ano, co se týče zpracování informací, jsme lepší než jakýkoliv jiný existující druh, jenže to nestačí. Jsme pomalí. Zapomínáme. Jsme závislí na emocích, neumíme udržet neustálou pozornost, bezchybně opakovat. Náš čas je drahý, náklady vysoké, šance omylu jistotou.

V minulém století se naše rasa až příliš často střetávala s nutností relativně inteligentně řídit děje, které nás obklopují a zpracovávat obrovské množství matematických problémů. To vše v rychlostech a množství, které v té době přestali zvládat jak jednotlivci, tak celé skupiny lidí. Proto jsme stvořili pomocníky - počítače.

Ze začátku to byly jen čím dál složitější mechanické nástroje. Pak přišla elektronická revoluce, která je zrychlila na do té doby nepředstavitelné rychlosti, rozšířila jejich kapacitu a umožnila určovat jejich účel nikoliv mechanickými změnami, ale čistě pomocí nehmotné magie programu.

Poté přišly softwarové revoluce a bylo jich spousta. V roce 2013, kdy je psán tento text, stále probíhají.

Nyní pravděpodobně sedíte před počítačem s grafickým rozhraním, který vám umožňuje provádět miliardy matematických operací za vteřinu. Můžete díky němu přistupovat k internetu, komunikovat s kýmkoliv na světě, vytvářet a zpracovávat texty, editovat obrázky, poslouchat hudbu, koukat na video s vysokým rozlišením, procházet komplexní virtuální světy, nebo dělat tisíce činností, které si ani neumím představit.

Internet a počítače lidstvu otevřely svět existujících nehmotných ideí. Je to svět, kterého se nelze přímo dotknout, svět se kterým lidé mohou interagovat jen nepřímo. Svaly zde nic neznamenají. Stojíte u bran světa živoucích informací. Světa, jenž až do nedávné doby neexistoval.

Vaše schopnost zpracovávat informace je stále stejná jako u lidí v minulém století. Díky nástrojům, které máte k dispozici, jste schopní provádět komplexnější úkoly; dostali jste do ruky kladivo, šroubovák a kleště. Textový editor, kancelářský balík, photoshop. Pár programů, které vám umožnily být efektivnější. Většina lidí však neumí využít ani zlomek toho, co počítače mohou nabídnout. Stále si hrají s kladivem, šroubovákem a kleštěmi a myslí si, že jsou „počítačově gramotní“. Neberte mě špatně, rozhodně jsou na tom lépe, než bez nich, jenže to nestačí.

Pokud chcete být opravdu efektivní při práci s nehmotným světem informací, musíte se posunout na vyšší úroveň. Na úroveň, kde již nepoužíváte počítač jako nástroj, ale jako rozšíření mysli. Úroveň, kde cokoliv co chcete, či potřebujete přestává být problém, protože si umíte vytvořit softwarové ruce, kterými se nehmotných ideálů dotknete, ohnete je a použijete tak, jak budete chtít. Musíte se stát programátorem.

Co je vlastně programování?

Většina začátečníků má naprosto zkreslené představy o tom, co vlastně programování je a co činnost programátora obnáší. Často si představují tlustého maníka, který sedí před obrazovkou počítače a zběsile buší do klávesnice. Před ním se objevují stovky řádků nesrozumitelného textu, který z něj doslova proudí. Občas vykřikne „mám to“ a na obrazovce se objeví něco efektivního.

Zapomeňte na to.

Tyhle věci vidíte v televizi, protože se dají jednoduše zobrazit. Skutečná činnost programátora se nedá nakreslit, ani zfilmovat. Programátor interaguje s nezobrazitelnými věcmi pomocí kódu, který může vypadat nudně, ale to je jen omyl toho, kdo se v něm nevyzná.

Stejně jako psaní knihy není o psaní jednotlivých písmenek, programování není o psaní kódu. Je to o vymýšlení myšlenkových chapadel, kterými hýbete daty a dotýkáte se nehmotných programových rozhraní. Je to o řešení problémů. Zápis zdrojového kódu je jen vedlejší záležitost, stejně jako je pro architekta vedlejší záležitost kreslení plánů domu, nebo pro autora zápis knihy.

Programovací jazyky

S programovacími jazyky je to těžké. Na jednu stranu jsou velmi důležité, na druhou stranu nejsou podstatné.

Je to jako když si budoucí autor knihy vymyslí příběh a poté vybírá způsob zápisu; Měl by psát ručně pomocí propisky, nebo snad na psacím stroji? Nebo na počítači? Měl by zapsat příběh česky, nebo anglicky? Nebo snad španělsky? Čeština má sedm pádů, to je víc než v angličtině. Angličtina a španělština má předpřítomný čas. Někteří autoři knih umí jen jeden jazyk. Jiní umí jeden lépe a další trochu hůře.

Programátoři jsou na tom podobně. Důležitější než samotný programovací jazyk je příběh, který se jím snažíte zapsat a to, jak ho umíte podat. V podstatě je jedno co použijete za jazyk, pokud ho ovládáte dostatečně dobře a jste schopni v něm zapsat váš příběh tak, aby netrpěl na kvalitě. Jazyk je jen nástroj.

Některé nástroje jsou pro určité činnosti vhodnější než jiné, ale to neznamená, že nemůžete používat co chcete. Pokud dosáhnete mistrovství v práci s šroubovákem, nic vám nebrání vytesat sochu šroubovákem, i když by to obecně šlo lépe dlátem. Někteří lidé povolují šrouby kapesním nožem, i když je k tomu určený šroubovák.

To co se tu snažím říct je, že výběr programovacího jazyka je silně subjektivní a záleží na preferencích a schopnostech programátora. Každý programovací jazyk je vhodnější pro něco jiného a pro někoho jiného. To však neznamená, že s ním nejde udělat to, k čemu by byl vhodnější jiný jazyk, jen že to může být méně pohodlné a budete toho muset napsat víc.

Profesionální programátoři často ovládají mnoho programovacích jazyků, stejně jako profesionální technici ovládají mnoho různých nástrojů o různých velikostech a tvarech, které používají podle toho, který z nich se lépe hodí. Amatéři mají doma jen základní sadu nástrojů a umí jen jeden programovací jazyk, který používají na všechno.

První programovací jazyk

Váš první jazyk, kterým jste se učili mluvit jste si vybrat nemohli. Dostali jste ho do vínku od lidí, kteří vás ho prostě naučili, bez ohledu na to jaké byly jeho výhody a nevýhody.

U vašeho prvního programovacího jazyka toto platit nemusí, pokud ho do vás nenahustí ve škole. Máte na výběr z desítek a stovek programovacích jazyků, jejichž zastánci zpívají jako Sirény, které se vás snaží nalákat k ostrovům, kde si pochutnávají na duších nezkušených nováčků.

V podstatě máte na výběr z těchto jazyků:

C

C je v současnosti stále jeden z nejvíce používaných programovacích jazyků. Traduje se, že pokud chcete být dobrým programátorem, měli by jste se naučit C.

Problém je, že C toho samo o sobě moc neumí a jeho abstrakce je velmi malá. Často se přirovnává k univerzálnímu assembleru.

Pokud bych to měl srovnat s lidskými jazyky, představte si ho jako Qwghlmštinu, která používá pouze 10% slov, které jsou v češtině. Když zapisujete svůj příběh a chcete napsat „židle“, nemůžete prostě použít slovo „židle“, protože v qwghlmštině neexistuje. Musíte napsat „fhhwchm wra asijf fkoo albhaan'ka wra asjef rafha fek“, což volně přeloženo znamená něco jako „sedět nad [placka] nad [čtyři tyč]“. Slova jsou v hranatých závorkách naschvál, protože Qwghlmština nepodporuje skloňování.

Samozřejmě, jedná se o zjednodušenou analogii. V Qwghlmštině si můžete na začátku stránky nadefinovat termíny, kde si vymyslíte nové slovo a pak popíšete co znamená. V C to můžete udělat taky, stejně jako v ostatních programovacích jazycích. Opruz je v tom, že si to musíte pamatovat dokud stránku čtete a stejný termín na jiné stránce může znamenat něco jiného. V Qwghlmštině jsou i další nepříjemné věci, jako nedostatek skloňování, který znamená, že budete muset některé věci krapet víc rozepisovat, protože nechcete, aby nedošlo k záměně smyslu věty.

Psát programy v C je podobné, jako psát knihy v Qwghlmštině: je to poněkud zbytečně náročné a zdlouhavé kvůli chudosti jazyka. Program, který by měl v pythonu sto řádek může mít v C tisíc a víc.

Pro začátečníky je C dost nevhodné, i když jím určitě začít jde. Jen to bude stát víc námahy a veškeré práce v něm zaberou víc času, než v jiných jazycích.

C++

C++ je C, do kterého byly naroubovány objekty. Co to přesně znamená nechám na někdy jindy. Je to jako Qwghlmština se skloňováním - lepší, ale stále dost divoké.

C++ a C vyžaduje docela velké pochopení toho, jak počítač funguje. To není samo o sobě nic špatného, problém je v tom, že tohle pochopení vám většinou nikdo neposkytne, takže končíte v jazyce, kde nechápete proč jsou věci udělány tak jak jsou, i když třeba zrovna náhodou mají nějaký vnitřní smysl, který nevidíte díky vlastní nezkušenosti.

Pro začátečníky C++ není moc vhodné a poměr lidí kteří ho z běžného středoškolského/vysokoškolského výkladu pochopí je tak 1:10. Tedy jeden chápající na 10 beznadějně ztracených.

Pascal

Nemrtvé zlo z hlubin věků. Nepoužívat.

Pokud vás ho budou chtít učit ve škole jako hlavní programovací jazyk, jedná se o příznak špatné školy s učiteli, kteří jsou dvacet let pozadu za čímkoliv dnes použitelným a používaným.

Java

Java je jako esperanto. Na rozdíl od C, které vzniklo víceméně živelně byla Java opatrně navržena tak, aby vyhovovala co nejvíce lidem a fungovala všude.

Java není úplně špatná do začátku, rozhodně je jednodušší než C/C++. Na druhou stranu, Java jako platforma (plugin do prohlížeče, JRE, JME) není mezi běžnými lidmi moc populární. Ve firemní sféře je to přesně naopak a poptávka po java programátorech je dost velká.

Často je slyšet, že Java učí programátory špatnému návrhu programů. Je to do jisté míry pravda, i když chyba není ani tak v Javě, jako spíš v učitelích.

C#

C# je něco taková Java od Microsoftu. Jedná se o překvapivě pohodlný a dle mého názoru dobře navržený jazyk, ve kterém jsem dělal radši než v Javě.

C# je silně spjat s Microsoftí .NET platformou a není moc populární u programátorů pracujících pod jinými operačními systémy, než je Microsoft Windows.

Pro začátečníky nemusí být špatnou volbou, na což může mít velký vliv učitel a použité nástroje (Visual Studio). Na linuxu je to docela utrpení.

PHP

PHP je krásná ukázka živelně vzniklého jazyka. Plné nesmyslů, vnitřně nekonzistentní, s API které vypadá tak jak vypadá protože proto. Postupem času se to s novými verzemi zlepšuje, ale stále se jedná o jazyk, kterému se pokud možno vyhýbám.

PHP je silně webově orientované - chcete psát webové stránky? Fajn, PHP je nejpoužívanější jazyk pro psaní webu. Chcete psát něco jiného? Dost pravděpodobně tvrdě narazíte. Ne že by to nešlo, ale podpora je malá a ostatním budete často pro smích.

PHP je něco jako obrovské minové pole generující programátory-mrzáky. Znám spoustu lidí, kteří na něm začínali jako samouci a jejich kód je sbírka hororových ukázek toho, jak se to nemá dělat.

PHP pro začátečníky silně nedoporučuji. Je sice lehké, takže se ho naučíte docela snadno, ale svádí k prasárnám a způsobu uvažování, který není tak úplně nejzdravější. Je jako ředidlo, kterým se ředí barvy. Dobrý nástroj, pokud víte co a jak chcete udělat. Špatný pán, pokud to s ním přeženete, načicháte se ho a s odstupem času zjistíte, že váš zdroják je plný zfetovaných nesmyslů a navíc je v něm nablito.

Ruby

Ruby mohu doporučit do začátku. Je co do vlastností dost podobné pythonu. Programátoři v něm jsou velmi produktivní.

Moc toho o něm nevím, ale kromě ošklivé syntaxe (způsob zápisu) mi přijde jako velmi dobrý programovací jazyk.

Python

Python je mocný programovací jazyk. Je vhodný pro začátečníky, protože je jednoduchý na naučení a existuje velká podpora komunity, která vám pomůže, pokud si nevíte rady.

Osobně používám python velmi často od verze 2.4.x. Mám s ním v podstatě jen samé dobré zkušenosti, což neznamená, že by neměl nevýhody - má je, ale po většinu času na ně nenarazíte.

Python je jako elfština. Skvělý jazyk, se kterým se dá dělat magie. Dobře navržený, s obrovským množstvím knihoven, které můžete okamžitě začít používat.

Pokud si nejste jisti, jaký jazyk si do začátku vybrat, doporučuji python.

Ostatní jazyky

Na světě existuje obrovské množství programovacích jazyků. Možná se ptáte, proč zde chybí javascript, lisp, erlang, ada, objective-c, (visual) basic, perl, haskell, smalltalk, D, forth, tcl, scala, prolog, fortran, nebo třeba cobol.

Je to proto, že je nepovažuji za (pro začátečníky) tak dobré a v Čechách tolik podporované, jako výše uvedené jazyky. Nic vám nebrání se je naučit jako druhý programovací jazyk, až získáte trochu víc moudrosti.

Co obecně potřebuji k programování

Veškeré body, které zde píšu jsou čistě orientační. Jsou to obecné vlastnosti, které jsem vypozoroval, nikoliv nutné podmínky. Mějte to prosím na paměti.

Motivaci

To hlavní co potřebujete (nejen v programování) je motivace to dotáhnout někam dál. Nebudu vám lhát. Programování vyžaduje spoustu let práce, než budete co k čemu. První úspěchy se sice dostaví po několika měsících, ale to vám teprve dojde, jak moc se toho ještě musíte naučit.

Pokud chcete programovat, doporučuji vám ujasnit si, jestli jste opravdu ochotní se tomu věnovat. Musíte se učit spoustu věcí a to chce čas a námahu. Opravdu je to to, co chcete, nebo se jedná jen o chvilkové pobláznění?

Představivost

Programování vyžaduje podle mého názoru docela velkou dávku představivosti. Většina věcí, které budete dělat nemá žádný ekvivalent v reálném světe. Nejsou moc složité, jen to chce dobrého učitele, který je umí žákovi vysvětlit, nebo dobrého studenta, který si je umí představit na základě popisu.

Schopnost samostatně myslet a pracovat

Programování, minimálně v začátcích není zrovna kolektivní činnost. Existuje jen docela malá pravděpodobnost, že budete mít to štěstí pracovat ve skupině a učit se od ostatních. Proto si nutně budete muset umět poradit sami.

Ve své podstatě je programování podobné řešení rébusů a hádanek, na rozdíl od nich to však není jen tréning mozku. Výsledkem jsou často užitečné programy.

Časem zjistíte, že si s sebou nosíte vaše programovací projekty v hlavě. Budete nad nimi přemýšlet při jízdě dopravními prostředky, před spaním, ve chvílích, kdy se budete nudit.

Inteligenci

Programátoři jsou obecně velmi inteligentní lidé. Jednak proto, že řešení problémů inteligentní lidi přitahuje, druhak proto, že blbci prostě nejsou schopní ovládnout programovací jazyky a koncepty s tím spojené.

Obdržel jsem již několik emailů, kde po mě bylo vyžadováno posouzení, zda na to konkrétní lidé mají, nebo ne. Odpovídal jsem vždy stejně; zkus to a uvidíš.

K programování potřebujete inteligenci, nikoliv dobré známky ze školy, nebo dobré výsledky IQ testu (i když podivuhodný počet lidí co znám se pohybuje okolo 130), nebo pověst největšího chytráka.

Jste schopni řešit problémy? Rádi si představujete věci? Umíte se učit ze svých chyb? Pak na to možná máte. Zkuste to a uvidíte. Hlavně se na to už neptejte, proboha.

Angličtinu

Bez angličtiny to nepůjde, berte to prostě jako fakt.

Pokud neumíte anglicky už teď, budete se muset učit průběžně. České zdroje od jisté úrovně znalostí naprosto vyschnou a vám nezbude nic jiného, než se podívat do světa, kde je většina dokumentace psaná anglicky.

Rozdíl v objemu „počítačových“ knih vycházejících česky a anglicky je obrovský. Pokud to chcete pochopit, podívejte se do příslušné sekce na amazonu. Najdete tam desítky tisíc knih, které se věnují všemožným okrajovým tématům, o kterých v Čechách nikdo nebude psát ani za padesát let, protože je zde prostě moc malé publikum a ekonomicky by se to nevyplatilo.

Co skutečně potřebuji k programování

Ruce

Zdá se to tak zřejmé, že to skoro vypadá jako blbost, že?

Chci tím říct, že se hodí umět psát na klávesnici i jinak, než jen vyťukáváním dvěma prsty. Taky je dobré vědět, jak bez přemýšlení najít nestandardní znaky jako jsou:

~ ^ & | = - + * ! ( ) [ ] < > : " ' \ /

V podstatě v libovolném programovacím jazyce jich budete jich psát stovky a tisíce, tak se na to připravte. Myslím to vážně, otevřete si textový editor a zkuste si je napsat! Možná s překvapením zjistíte, že to není tak snadné, jak se zdá.

Počítač

Počítač musí být univerzální. Je v podstatě jedno, o jaký stroj se jedná, důležité je to slovíčko univerzální. Tablet, mobil a herní konzole je vám s vysokou pravděpodobností k ničemu.

Spousta z nás začínala na naprosto trapných strojích a ze svého pozorování musím říct, že čím slabší máte stroj oproti svým vrstevníkům, tím větší šance, že z vás bude programátor. Máte pak méně pokušení s nimi splynout a větší šanci se vydat netradičními cestami.

Ve FAQ části tohoto článku je to ještě trochu rozepsané.

Interpreter či kompilátor

Podle toho co si vyberete za programovací jazyk budete potřebovat nějaký ten software.

V případě pythonu je to interpreter, který má asi 12 megabajtů a dá se stáhnout ze stránek python.org. Pokud používáte linux, pravděpodobně ho již máte nainstalovaný.

V případě že budete programovat v kompilovaném jazyce, tak nutně budete potřebovat kompilátor. Pro každý programovací jazyk typicky existuje několik kompilátorů, takže máte velkou možnost výběru. Nejrozumnější je řídit se tím, který doporučuje autor vaší programovací příručky či knihy, nebo váš učitel.

Ačkoliv jsem přidal i kapitolu o rozdílu mezi kompilátorem a interpreterem, stejně to zde v krátkosti shrnu pro ty, co se leknou trochu delšího textu:

Interpreter je program, který bude řádku za řádkou vykonávat váš zdrojový kód.

Kompilátor je program, který pomocí kopy různých triků udělá z vašeho zdrojového kódu instrukce přímo pro procesor, takže ho nebude vykonávat on, ale procesor.

V prvním případě tedy leze váš program do interpreteru a ten leze do procesoru. Ve druhém je váš zdrojový kód jednou přeložen na spustitelný kód (.exe třeba) a ten pak přímo leze do procesoru. Rozdíl je v rychlosti (tu mají obecně větší kompilované jazyky) a pohodlnosti (tu zas mají větší interpretované).

Editor

Připravte se na to, že budete potřebovat speciální, programátorský editor. Není to vyloženě nutnost, ale věřte mi - tolik vám to usnadní život a ušetří spousty práce, že ho prostě používat chcete, i když o tom třeba ani zatím nevíte.

Jelikož je problematika editorů krapet složitější, sepsal jsem na tohle téma samostatný článek.

Čas

Počítejte s tím, že potřebujete spoustu času, a to hned na dvou úrovních:

Z dlouhodobého hlediska - stát se programátorem trvá dlouhé roky.

Z krátkodobého hlediska - každý den to chce alespoň pár hodin věnovat sebevzdělávání.

Spousta lidí které znám tím tráví prakticky veškerý volný čas. Stává se z toho forma závislosti, kde přijdete ze školy či práce domu, sednete před počítač a začnete pracovat na rozdělaném projektu. Najednou je hluboká noc a vám dojde, že jste zase o jeden den starší.

Klid

Na programování potřebujete klid. Není nic horšího, než když vás někdo vyrušuje a trhá vám myšlenky ve chvíli, kdy jste konečně do hlavy nacpali problém, na kterém zrovna pracujete. Je to jako kdyby vám v hlavě rozbil komplikovanou porcelánovou sochu a vy jí poté museli pečlivě skládat z úlomků, které se rozlítly kolem. Skoro to fyzicky bolí.

Pokud nemáte klid, hudba do sluchátek většinou pomáhá. Nevím jak u vás, ale já většinou nesnáším hudbu, ve které se zpívá, takže doporučuji něco beze slov, co bude dostatečně hlasité, ale zároveň vás to nebude rušit v myšlení.

Pár ukázek k inspiraci:

  • http://www.youtube.com/watch?v=3xqYAFEYL_o
  • http://www.youtube.com/watch?v=1vWMSi6Z9mw
  • http://www.youtube.com/watch?v=1Jzh9y_6K-g
  • http://www.youtube.com/watch?v=iqQX4ftA5as
  • http://www.youtube.com/watch?v=BwO0KNA6fG8
  • http://www.youtube.com/watch?v=GR7AsouSEoU
  • http://www.youtube.com/watch?v=8fcU4k7nM9U
  • http://www.youtube.com/watch?v=9jUAUhv_p1k
  • http://www.youtube.com/watch?v=0RErj2fR-cw
  • http://www.youtube.com/watch?v=7RHCQ5rPH1g
  • http://www.youtube.com/watch?v=n-zZjNJj8GQ
  • http://www.youtube.com/watch?v=2UvzD4gZnw4
  • http://www.youtube.com/watch?v=j_9QyxB4mcs
  • http://www.youtube.com/watch?v=-0nSp3n0pp0
  • Styl je nepodstatný. Důležité je, aby vás ta hudba dokázala dostat Tam. Kam? Do toho místa, či stavu ve vaší hlavě, kde nevnímáte okolí a nacházíte se v prostoru mysli a práce vám jde sama od ruky.

    Jak se učit

    Český školský systém mě toho naučil mnoho, jednu konkrétní věc však zcela opomněl: nikdo mě nenaučil, jak se učit. Musel jsem na to přijít sám.

    Může se to zdát jako pitomost, ale faktem je, že i kdyby jste se dostali na školu, kde se učí programování, je velká pravděpodobnost, že učitel stejně nebude stát za moc a bez sebevzdělání budete patřit mezi propadající zbytek třídy.

    Pište si poznámky

    Budete je potřebovat. Musíte vstřebat obrovské množství informací, které si prostě nemůžete všechny pamatovat. Občas se budete muset vrátit z říše mysli k něčemu pevnému a v té době uvítáte vlastní poznámky.

    Pište, ale nepřepisujte tutoriály. Často jsou vidět začátečníci, kteří začnou psát seriál o programování a přepisují to, co se právě naučili. Nemá smysl psát novou knihu na stejné téma jako již existující, když nemáte hodnotu, kterou můžete přidat a ještě k tomu ve skutečnosti problematice pořádně nerozumíte.

    Chápu, kde se ta motivace bere, ale prostě to nedělejte. Není to pěkné. Pište si poznámky pro sebe, ne pro ostatní.

    Zkoušejte

    Zkoušejte. Neustále. Všechno.

    Hrajte si. Tak se toho naučíte víc než jakkoliv jinak. Chcete vědět jestli jde v pythonu sčítat či násobit string a číslo? Neptejte se na to učitele, nehledejte to na google, prostě to zkuste! Co to udělalo? Co to udělá, když změním tohle..

    Protip: Jednotlivé testy si ukládejte do souborů ve speciální složce. Osobně to tak dělám a usnadňuje mi to dost času - když si nemůžu na něco vzpomenout, tak vím kam sáhnout.

    Jak se stát programátorem?

    Zdůrazňuji to tady už poněkolikáté a ještě několikrát budu; jedině praxí se z vás stanou programátoři.

    Neexistuje žádná lehká cesta, žádná zkratka. Chce to prostě programovat, vršit na sebe zkušenosti, dokud nebudete skutečně dobří.

    Každý během té doby udělá stovky a tisíce chyb, napíše hnusné kódy a různé jiné zrůdnosti. To je v pořádku. Praxí se učíte a zlepšujete. Každá chyba vás posouvá o kus dál.

    Pokud si přečtete v knize popis zajímavého algoritmu, datové struktury, či modulu, tak ve skutečnosti stále nic neumíte. Jsou to jen mrtvá data ve vaší hlavě. Teprve ve chvíli, kdy ho vyzkoušíte a trochu si ho oťukáte, tak přichází skutečné pochopení. Učí vás praxe, ne teorie.

    Samouci a ptaní se

    To, co teď budu psát, se týká převážně samouků, kteří se budou učit bez učitele. Pokud máte učitele, je ptaní do jisté velké míry vitální a žádané a tuhle kapitolu můžete ignorovat.

    Praxí se člověk učí

    Řiďte se jednoduchou strategií - neptat se, zkoušet! Udělejte z toho své motto.

    Každou chvíli mi někdo napíše, že by rád věděl tohle a tamto. Chovají se jako děti, které dostali nejúžasnější hračku na světě a místo aby si k ní sedli a hráli si s ní, tak radši jdou za kamarádem a ptají se ho, jestli si lze hrát tak, nebo onak.

    Tak to nejde!

    V určitou chvíli je verbální a textové předávání informací k ničemu, pokud tedy nejste génius. Jenže to nejste. Géniové mi zásadně nepíšou, protože mě nepotřebují.

    Ptát se můžete, ale..

    Představte si, že vás každá otázka bude stát 5% všeho, co máte. Když se na něco zeptáte, přiletí magický skřítek a sebere vám 5% výplaty, kapesného, nebo věcí, které jste v životě nashromáždili. Pokud se jen tak zeptáte na 20 věcí, skončíte s holým zadkem.

    Realita takhle do jisté míry skutečně funguje, jen s tím rozdílem, že nevsázíte váš majetek, ale vaší pověst. Čím větší jí máte, tím větší je šance, že se vám někdo bude věnovat. Čím častěji a otravněji se ptáte, tím víc se snižuje a zhoršuje.

    Není nic špatného na tom se zeptat, pokud si již nevíte rady a jste v koncích, nebo pokud se vám prostě vyplatí obětovat 5% majetku, protože tupé mlácení hlavou do zdi přináší větší frustraci než vědomí toho, že musíte vydělat o 5% víc.

    Někdy to prostě jinak nejde. Většinou to je však jen váš pocit a problém s přístupem k věci.

    Když už se ptáte..

    Zeptat se na něco není tak jednoduché, jak by se to na první pohled mohlo zdát. Je to věda, které bylo věnováno nemálo článků.

    Ve skutečnosti vás otázky a odpovědi nestojí 5% všeho, je to ještě mnohem horší - stojí vás životní čas, který ukrajujete sobě a ostatním. Ti většinou jasně cítí, že odpověď na vaší otázku je stojí čas a námahu a pokud za to otázka nestojí, to nejlepší s čím můžete počítat je, že odpověď nedostanete.

    Existuje spousta způsobů jak zvýšit atraktivitu vašeho dotazu a zvýšit tak pravděpodobnost, že dostanete odpověď:

  • Před tím než se zeptáte vždy věnujte čas hledání odpovědi.
  • Tohle platí hlavně, ale nejenom pro začátečníky v něčem: Internet je rozsáhlé místo plné lidí, kteří jsou jako vy. Lidí, kteří kráčeli stejnou cestou jako vy a kteří se již ptali na otázky jako vy a dostali správné odpovědi. I když vám to může narušit vaší iluzi nenahraditelnosti a jedinečnosti, věřte tomu. Je to tak.

    Když vidím dotaz, na který se dá najít odpověď jeho přepsáním do google, tazatel u mě ztrácí veškerý respekt. Vytáhnu deníček, nakreslím si tam obrázek slintajícího kreténa. Pod něj napíši nick tazetele a obrázek vytrhnu a přilepím na zeď, na nástěnku s velkým nápisem „RETARDI k ignoraci“. Alespoň v představách.

  • Váš dotaz by měl být malý, uctivě psaný příběh. Měl by obsahovat zápletku, kde popíšete váš problém, gradaci děje, kde se věnujete tomu, jak jste ho zkoušeli řešit a proč to nešlo, a pointu, kde ještě jednou v jedné větě jasně zformulujete o co vám vlastně jde. Často zjistíte, že si uprostřed popisování uvědomíte odpověď, protože jste si tím uspořádali myšlenky.
  • Při psaní buďte slušní. Tohle je někdy opravdu těžké, když je člověk netrpělivý, frustrovaný a celkově ve špatné náladě z toho, že se mu nedaří, ale je to nutnost. Pokud se budete chovat jako naštvané dítě, ostatní s vámi budou jednat jako s naštvaným dítětem - místo odpovědi dostanete pár virtuálních facek.
  • Nerozkazujte. Pokud píšete dotaz, nikdy nepište věci jako „pomoc!“. Pokud už nutně musíte použít vykřičníky, použijte jeden. Lidi kteří jich použijí více, nebo je používají moc často jdou automaticky na pomyslnou nástěnku k dalším retardům, kde na sebe můžou křičet a hýkat, zatímco ostatní je budou vesele ignorovat.
  • Používejte názvy, ze kterých je hned vidět o co jde. V případě emailu se jedná o předmět, v případě webfóra o titulek. Správný název vypadá jako „C++ - problém s memory leaky u garbage collectoru“. Špatný pak „Rychle pomozte!!“.
  • Špatně

    Nefunguje mi GTA!!!! když jdu k tonimu, tak to nejde! poraďte!

    Správně

    [zápletka] Narazil jsem na chybu, se kterou si nevím rady. Mám nainstalováno GTA s patchem 1.3 a pokud přijdu do lokace tunelu u Smradlavého Tonnyho ze severu, je tam neviditelná zeď, skrz kterou se nemůžu dostat (viz přílohy, pro jistotu přikládám fotky obrazovky).

    [gradace]

    Zkoušel jsem už všechno možné, dokonce jsem si před ní naskládal auta a zkoušel jsem je použít jako skokánek, abych tu zeď přeskočil, ale nic. Zeď je nejspíš nezničitelná a nepřišel jsem na to, kudy jí obejít.

    Googlil jsem, ale zdá se, že je to jen záležitost nového patche 1.3, který ještě moc lidí nemá a nikdo zatím neví jak na to.

    [shrnutí co vlastně chcete] Tušíte někdo co bych měl udělat, abych se přes tu zeď mohl dostat? Dá se to někudy obejít? Nebo existuje nějaký způsob, jak tenhle bug opravit?

    Hledání odpovědí

    Pokud něco hledáte, nezadávejte do google dotaz, ale odpověď.

    Google je indexovací nástroj, není to umělá inteligence. Funguje jen jako sofistikovanější vyhledávání, které máte třeba v textovém editoru, a nerozumí vašim dotazům.

    Dejme tomu, že narazíte na již uvedený virtuální problém s neviditelnou zdí v oblíbené hře - GTA. Co napíšete do google?

    Nezkušený člověk tam napíše nejspíš cosi jako „u toniho mi nejde jít dál“. Pokud už někdo napsal podobnou větu někde na internetu, google to pravděpodobně najde. Pokud ne, máte smůlu.

    Jak tedy na to, aby jste našli co hledáte?

    K tomu je nutné vyextrahovat z problému klíčová slova a vynechat omáčku. U tohoto dotazu to bude „gta tonny zeď“. Pokud tohle zadáte do google, dojde k vyhledání výsledků, které obsahují uvedená klíčová slova a můžete se klidně vsadit, že jich bude víc, než když tam zadáte první větu, která vás napadne.

    Dobrý nápad je také zadat cosi jako „řešení problému se zdí“, kde je větší šance, že najdete odpověď a ne otázku.

    FAQ

    Upozorňuji, že se jedná o odpovědi na opravdové, naprosto reálné otázky, které mi lidi posílají do emailu. Možná vám některé z nich budou připadat divné, ale všechno je to založeno na skutečných dotazech.

    Programování a matematika

    Oblíbený strach, který jsem slyšel tolikrát, až mě to otravuje, je strach z matematiky. Potřebuji k programování matematiku?

    Programování a matematika jsou dvě strany jedné mince. Když se na ní díváte zepředu, má na sobě nápis „matematika“, když zezadu, tak „algoritmy“.

    Jedni vám budou tvrdit, že na té minci jsou napsány „algoritmy“ a s matematikou to nemá co dělat a nikdy jí při programování nepoužili. Druzí budou tvrdit, že ta mince je čistě o matematice. Moudrý člověk se na ní podívá z obou stran a zjistí, že podstata je stejná, liší se jen přístup který k tomu mají lidé z jednotlivých stran.

    Matematika je více abstraktní a teoretická než programování. Programování je více praktické, v podstatě aplikovaná matematika.

    Oboje, jak matematika, tak programování pracuje s neviditelnými věcmi, kterých se nedá dotknout a které se tvarují čistě pomocí myšlenek.

    Jaký je nejlepší věk, abych mohl začít programovat?

    Jaký je nejlepší věk pro to začít myslet, skákat s padákem, tancovat, mluvit na lidi, sázet kytky, pozorovat oblohu?

    Potřebujete k tomu snad povolení z Ministerstva pro podporu znuděných občanů? Nic jako nejlepší věk neexistuje.

    Jsem na to dost chytrý?

    Myslím že nemá smysl řešit, jaké máte IQ, stejně je to jen přibližná hodnota. Prostě se do toho pusťte a uvidíte, jestli na to máte, nebo ne.

    Pokud vám na tom přesto záleží, dobré testy má prý mensa, ale jsou zpoplatněné. Na internetu se dají porůznu najít všelijaké IQ testy, ale nutno hledat ty zdarma, jinak by vás mohla po dokončení nehezky překvapit žádost o peníze.

    Jako je mi 13. A IQ mám něco okolo 98 jestli myslíte že na to mám nebo ne.?

    (Jedná se o přesnou citaci jednoho dotazu.)

    Neexistuje způsob, jak bych mohl něco takového dopředu spolehlivě vyvěštit na základě těch pár vět, co mi kdo napíše.

    Navrhuji praktický pokus - prostě to zkuste a pokud selžete, tak na to nemáte. Furt je to lepší, než přenášet zodpovědnost na mě.

    Mám na to, abych mohl začít programovat?

    Netroufám si říkat na co kdo má, nebo nemá ani u lidí, které znám celý život, natožpak u někoho, koho vůbec neznám.

    Prostě to zkuste a uvidíte.. Co můžeš ztratit, kromě času, mládí a rozumu? ;)

    Co když to nezvládnu?

    Jakmile se o tom doslechne první programátor, vyběhne na věž kostela a začne zvonit zvonem. To uslyší ve vedlejší obci další programátoři, takže také začnou zvonit a pak se k vám všichni seběhnou a začnou se smát. A budou se smát do té doby, dokud se v zemi neotevře díra, která vás sežere.

    Co sakra vlastně chcete za odpověď? Prostě to nezvládnete a můžete jít čumět na televizi, nebo se začít zajímat o pěstování kaktusů. Život není soutěž, která by se dala vyhrát.

    Píšeš o podmínce X. Platí u mě podmínka X?

    Jak jste asi mohli vypozorovat, opakuje se nám tady určitý vzorec. Já popíšu určité pozorování, někdo si ho přečte a zeptá se, jestli fakt platí, případně jestli platí na něj. Já maskuji své otrávení odpovědí ať to prostě zkusí a uvidí.

    Ukázka

    Napíšu „Lidi chodí po nohou a docela jim to jde“.

    Někdo mi na to zcela zákonitě odpoví, jestli fakt musí chodit po nohou, jestli třeba nemůže chodit po rukou a nebo po čtyřech, nebo se plazit jako had, či píďalit jako píďala nebo vrhat kotouly.

    Jak bych na to asi měl odpovědět jinak než jako „Nemá smysl to dál pitvat, prostě to zkus a časem uvidíš. Když ne, tak jsi alespoň nějak sofistikovaně zabíjel čas.“

    Poučení

    Chápete ten princip? Pokud nutně musíte položit otázky na věci, které jsem už zodpověděl, odpovězte si na ně sami. Nejsem orákulum, svět je složité místo, kde jde skoro všechno, včetně chození po rukou a já vám nebudu nic vyvracet.

    Až se budete chtít zeptat, myslete na to.

    Mám jen velmi starý počítač, můžu na něm začít programovat?

    Obecně platí, že čím větší monitor a silnější stroj, tím větší pohodlí. Vždy se hodí spousta RAM paměti a více jader, protože toho často budete mít otevřeno spoustu najednou.

    Mezi dobrým počítačem a programováním však není přímá úměra! Nesouvisí to spolu ve smyslu, že čím lepší stroj, tím lepší je z vás programátor. Chudý s trapným počítačem je zde rovný bohatému s výkonnou mašinou, protože bohatý sice má větší pohodlí, ale to z něj nedělá lepšího programátora. Naopak, velice jednoduše ho to může svést někam jinam, jako je čumění na youtube, facebook, filmy, či k hraní her.

    Stejně jako z vás psací stroj neudělá lepšího, nebo horšího spisovatele, tak z vás dobrý počítač neudělá lepšího nebo horšího programátora. To podstatné se odehrává ve vašem mozku. S programováním může začít každý, kdo opravdu chce.

    Už mám dva monitory, můžu konečně začít programovat?

    Co vás doteď drželo?!

    Nespadněte do sběratelské pasti - neříkejte si, že začnete programovat, až budete mít nadupaný počítač, dva monitory, značkovou klávesnici a kopu knih, protože nezačnete. Ve skutečnosti jen hledáte důvody, proč to nejde, místo aby jste hledali způsoby, jak na to.

    Pokud již doma nějaký stroj máte, můžete začít, i kdyby to byla třeba stará 486, nebo osmibitové atari.

    Jakým programovacím jazykem začít?

    Python. Důvody jsem již uvedl tolikrát, že to prostě berte jako axiom, o kterém nebudu diskutovat.

    Hledám informace o pythonu

    Skvělý zdroj informací k pythonu jsou české stránky http://py.cz, kde najdete i spoustu výukových materiálů, jako jsou knihy a ebooky. Dále by vás mohly zajímat komunitní stránky http://python.cz/.

    Hledám online kurzy programování

    Doporučuji neučit se jen z informací na internetu, ale investovat i do knih. Programovací kurzy na internetu jsou často nekompletní, nebo jsou psány lidmi, kteří chtějí mít novou zkušenost do životopisu a vůbec jim nejde o to, aby vás něco naučili.

    Ucházející informace se dají najít zde:

  • http://python.cz/
  • http://linuxsoft.cz/
  • http://programujte.com/
  • http://sallyx.org/sally/c/
  • https://abclinuxu.cz/serialy/
  • http://www.freenetpages.co.uk/hp/alan.gauld/czech/
  • http://jaksenaucitprogramovat.py.cz/
  • Pokud chcete něco přidat, napište mi do emailu.

    Doporuč mi učebnice pythonu

    Ponořme se do pythonu 3 ujde, dá se koupit na http://knihy.nic.cz/, elektronickou verzi je možné zdarma stáhnout ve formě pdf, nebo prohlížet na webu.

    Python od Davida M. Beazleyho. Je to dost zastaralá referenční příručka (nikoliv učebnice!) pythonu 2.3. Obsahuje skvělý popis API, jehož velká část se dodnes nezměnila, takže se pořád hodí a je to levná knížka, která se dá ve výprodeji koupit za pár desetikorun.

    Pokud někdo nechápete co je to referenční příručka - jedná se o knihu, která popisuje co všechno je v pythonu (tahle konkrétně v pythohnu 2.3). Nenaučíte se z ní programovat, ale když už budete umět nějaké ty základy, tak to funguje jako mapa, která vás provede světem pythonu a ukáže vám, co všechno do něj tvůrci zabudovali.

    Létající cirkus je klasika, na které jsem začínal. Dnes ale bude docela zastaralý.

    Nic vás samozřejmě nenutí jít právě do těchto knih. Popravdě řečeno, doporučuji vám zajít do knihovny, půjčit si vše co tam o pythonu mají a není to starší jak 5 let. Díky tomu zjistíte které knihy vám vyhovují, před tím, než za ně dáte peníze.

    Pokud umíte anglicky, tak s touhle kapitolkou ani neztrácejte čas, nemá vám co nabídnout. V angličtině vyšly desítky suprových knih o pythonu, které poskytují skutečné studnice moudrosti.

    Chtěl bych začít s C++, poraď mi

    Proboha, jen to ne. Nezačínejte prosím s C++. Pokud už vás k tomu nějaké perverzní choutky vedou, tak mi nepište s žádostmi o radu. Pokud napíšete, tak nepište zpáteční adresu. Když napíšete, tak se nedivte.

    C++ je pro začátečníky asi stejně dobré jako druhá světová válka pro čerstvé brance bez jakéhokoliv tréningu. Přežije to tak jeden z deseti a existuje slušná šance, že z něj bude odborník na slovo vzatý. Z těch ostatních zbudou cáry masa někde na bitevním poli.

    Naučte se C++ za 21 dní

    Pokud vás předchozí řádky neodradily od C++, tak doufám, že nenarazíte na tuhle knihu. Pokud ano, jste navěky ztraceni a budete bloudit světem nemrtvých duší naivních nováčků, které se ve své zmučené agónii potulují skrz internet a způsobují výpadky packetů a chybovost na lince nám obyčejným smrtelníkům.

    Dobře to ilustruje tento komix:

    Potřebuji příkazovou řádku?

    Příkazová řádka, neboli konzole, je pro programátora jeden ze základních nástrojů, který vám umožňuje jednoduše dělat některé jinak složité věci.

    Napsat program, který bude používat grafiku není moc náročné, ale dochází tím ke komplikacím ve vnitřní struktuře. Často chcete rychle odvést nějakou práci a to poslední, s čím by jste se zrovna v tu chvíli chtěli zabývat, je vytváření a návrh grafického rozhraní.

    V takovýchto případech je pro vás konzole přesně tím, po čem sáhnete. Ačkoliv se začátečníkům může jevit jako něco složitého, pravý opak je pravdou - jedná se o maximálně jednoduché rozhraní zajišťující pouze naprosto základní formu komunikace. Když chcete dát uživateli o něčem vědět, jednoduše mu to vypíšete v podobě textu. Pokud potřebuje uživatel o něčem dát vědět vám, napíše to do konzole. Jednoduché, ne?

    Samozřejmě, tak jako každá věc vymyšlená člověkem je i toto při detailnějším pohledu trochu složitější (streamy, parametry programu, návratové hodnoty, stdin/stdout/stderr, env proměnné, režimy terminálu, barvičky, interaktivní režim ala curses atd..), ale základ je skutečně tak triviální, jak jsem ho popsal.

    Potřebuji k programování Linux?

    Ne, nepotřebujete. Programovat se dá v podstatě kdekoliv - od DOSu po Windows, přes unixy, Linux, až po obskurní operační systémy, jako je Plan9, či staré počítače, které žádné operační systémy neměly, jako je třeba Atari 800XE, nebo Commodore 64.

    Vtip je v tom, že některé systémy vám budou házet klacky pod nohy více a některé méně. Linux patří do té druhé skupiny.

    Mám si pořídit Linux?

    Ne.

    Pokud se takhle ptáte, tak Linux není nic pro vás.

    V tomhle ohledu jsem zastáncem přístupu každému co jeho jest. Teprve ve chvíli, kdy budete vlastními slovy schopní netriviálně odpovědět na otázku „proč chceš linux?“, teprve tehdy bude na čase, aby jste ho začali používat.

    Další informace můžete najít v článku Linux není Windows.

    O mě a o tomto textu

    Lidé kteří čtou mé články často dělají jednu chybu - domýšlejí se z nich informace o mě a čtou mezi řádky věci, které jsem tam nenapsal. Poté mi napíší email a strašně se diví, když jejich předpoklady, které si o mě udělali neodpovídají realitě.

    Nechápejte mě špatně, vždy mě dokáže potěšit, když mi někdo napíše. Pěkný email je moje jediná ‚odměna‘ za dlouhé hodiny strávené psaním článku. Jen prosím v nepokládejte nic za jasně dané, pokud to vysloveně nenapíšu.

    Jen pro cvik:

  • Nezáleží mi na vás.
  • Vaše problémy nejsou moje problémy. To, že jsem sepsal článek který některé z nich řeší neznamená, že je chci řešit, ale že mě baví psát.
  • Rád pomůžu, pokud si pomoc zasloužíte. Pro vás to znamená, že nemá cenu mi vyhrožovat a nadávat. Naopak, zkuste mě přesvědčit, že si můj čas zasloužíte.
  • Nejsem autorita.
  • Nedělejte ze mě něco, co nejsem a neodvolávejte se na mě stylem Bystroushaak to řekl, tak je to pravda.
  • Nebudu vás učit hackovat, ani programovat.
  • Nebudu za vás řešit vaše spory, ani určovat co je dobré a špatné.
  • Tento text nevznikl protože bych chtěl kázat, či poučovat, ale jako odpověď na reálné dotazy, které se válí u mě v mailboxu.
  • Nejsem nejlepší programátor široko daleko a ani nikdy nebudu.
  • Pokud máte nějaké smysluplnné dotazy, máte povolení mi napsat na:

  • bystrousak[zavináč]kitakitsune.org
  • Přídavky

    Jelikož mi článek oproti původním předpokladům poněkud nakynul, rozhodl jsem se ho rozdělit. Pokud vás čtení bavilo, můžete se pustit do přídavků:

  • Editor
  • Ještě jednou o motivaci
  • Scriptovací vs kompilované jazyky
  • Neučte se do začátku plejádu jazyků
  • Jak se stát programátorem
  • Externí přídavky

  • Jak se stát dobrým programátorem
  • Začněte skutečně využívat počítač. Programujte ho
  • Teach Yourself Programming in Ten Years
  • How to be a programmer
  • PS: na externí přídavky jsem narazil až po dopsání článku. To že jsou do jisté míry podobné není dáno tím, že bych je zkopíroval, ale tím že máme pravdu.

    RSS

    Pro sledování novinek, například o přidání nového článku je možné používat RSS:

  • atom.xml