Naučte se programovat během deseti let

Znáte ty knížky jako "Naučte se MySQL za 21 dní"?

Dovolil bych si pár citací, asociací a komentářů k článku Petera Norviga Teach Yourself programming in Ten Years.

"Naučte se Pascal za tři dny" je opravdu nesmysl. Pokud chcete něco opravdu umět, taktěch deset let je zhruba ona "magická" hranice. Mozart sice skládal hudbu už ve čtyřech letech, ale opravdu dobré skladby psal až v sedmnácti. Beatles hráli od roku 1957 a první úspěch u kritiků zaznamenali v roce 1967 se Seržantem Pepřem.

Norvigův recept na úspěšného programátora:

- Zajímejte se o programování a programujte pro zábavu. A ujistěte se, že to bude zábavný i po deseti letech.

Byl jsem před časem požádán kolegyní, jestli bych mohl doporučit nějaký postup pro jejího bratra, který "furt sedí u počítače", tak jestli by třeba nemohl být programátor. Říkal jsem, že hlavní věc, kterou musí mít, je "posedlost". Musí mít v sobě něco, co ho nutí přicházet věcem na kloub a vymýšlet, jak je sestavit. Když tuhle posedlost nemá, bude z něj akorát tak průměrný kodér.

- Hovořte s ostatními programátory, čtěte si programy; to je důležitější než knihy či kursy.

Hodina laborování a "hraní si" s Visual Basicem dá víc než pět hodin četby knih o teorii programování, o tom snad není sporu. S tím souvisí i další rada:

- Programujte!

Jasně, nějaké základy budete potřebovat. Ale teoreticky vzdělaný programátor je bez praxe vhodný tak akorát jako učitel programování. Bez ironie.

- Jestli chcete, tak jděte na VŠ. To vám otevře přístup k zaměstnání, kde budou chtít vidět diplom, a ponoříte se víc do hloubky, ale pokud vás škola nebaví, tak můžete velmi podobnou zkušenost získat i v práci. "Vzdělání v IT udělá z člověka špičkového programátora asi tak, jako studium štětců a barev udělá z člověka špičkového malíře," říká Eric Raymond.

Myslím, že příkladů může každý v oboru vidět co hrdlo ráčí. Kdysi jsem jedné takové slečně říkal: "Chcete programátora? Prosím, tady jsem. Jestli chcete ale někoho s papírama, vemte naši čubu, ta papíry má!"

- Dělejte na projektech s dalšími programátory, ať už jako ti nejlepší z týmu, nebo jako ti nejslabší. Když jste ten nejlepší, můžete si ověřit svou schopnost inspirovat a vést, když jste nejslabší, máte příležitost naučit se od lepších.

- Dělejte na programech po jiných lidech. Když se budete snažit přijít na to, jak to napsali oni, a pochopit to, tak budete přemýšlet nad vlastním psaním a budete automaticky psát tak, že usnadníte práci těm, co přijdou po vás.

- Naučte se aspoň půl tuctu programovacích jazyků. Což není samoúčelné, ani to není ono pověstné devatero řemesel. Je to velmi užitečná znalost, protože každý jazyk řeší trochu jinou problematiku trochu jiným způsobem na odlišné úrovni abstrakce, takže s každým vám přejdou do krve jiné návyky, techniky a postupy. Ten, co se "naučil" ve škole Javu, může být dobrý kodér. Pokud umí Javu a C++, může být slušný programátor a v některých firmách bude za guru. V jiných bude guru ten, co k tomu zná ještě SQL, PHP a HTML. ;) Ale opravdu špičkový programátor by měl mít zkušenosti i s jazyky z jiných oblastí: Assembler, FORTH, Lisp, Prolog, Scheme, ... Žádný jazyk není dost kuriozní na to, aby nepřinesl něco nového. Naučit se nový jazyk, či alespoň jeho základy, znamená rozšířit své schopnosti programátorského myšlení o další úhel pohledu. Z druhé strany vzato: Řemeslník, co se naučí zacházet jen s kladivem, bude každý problém řešit zatloukáním. ;)

- Nezapomeňte, že ve výrazu "computer science" je ten "computer". Měli byste vědět, jak dlouho trvá počítači, než zpracuje jednu instrukci, než vyzvedne číslo z paměti (a jak se v tom projeví cache), jakým způsobem čte data z disku a jak dlouho mu to trvá.

To je věc, co spousta lidí, kteří si říkají "programátoři", podceňuje. Zeptejte se průměrného "UmímPHPCSSHTMLSQL" na tyhle záležitosti...

Tohle všechno dohromady dělá z kodéra programátora. Já vím, že VY programujete už čtyři roky, ale věřte: Furt málo! ;)

A na závěr dovolte pár citátů o programování:

Návrh programovacích jazyků je jako procházka parkem. Konkrétně Jurským parkem. (Larry Wall)

Měly by indexy polí začínat nulou nebo jedničkou? Můj kompromisní návrh, aby začínaly indexem 0.5, byl zamítnut, dle mého názoru, bez patřičného zvážení. (Stan Kelly-Bootle)

Pokud nepřemýšlíte pečlivě, můžete dospět k názoru, že programování spočívá v psaní příkazů programovacího jazyka. (Ward Cunningham)

Pokud chceme počítat řádky výsledného kódu, neměli bychom je označovat jako "vyprodukované řádky", ale jako "vynaložené řádky". (Edgar Dijkstra)

A na závěr jedna poučka z objektového programování: Třídy bojují, některé vítězí, jiné jsou odstraněny! (Mao Ce-Tung)

Dne 31.03.2008

Twittni

Přidej do: asdf.sk StumbleUpon Toolbar Stumble It!

Komentáře

[1] (mike ) 31.03.2008, 23:26:51 [X] [D]
Posedlost je dulezita, ale sama o sobe nestaci. Dobry programator musi mit jeste specificky zpusob mysleni; rikam tomu strukturovany. A neco, co bych nazval smyslem nebo citem pro spravnost. To prvni se da naucit, ale stejne je lepsi, kdyz uz to ma clovek v sobe. To druhe moc ne. A je to zakladni predpoklad pro programatora, ktery dokaze navrhovat dlouhodobe funkcni, udrzovatelna a rozsirovatelna reseni.

[2] (Arthur Dent [openID] - Mail - WWW) 31.03.2008, 23:30:29 [X] [D]
[1] "Podmínka nutná, nikoli však postačující". ;)

[3] (mike ) 31.03.2008, 23:35:55 [X] [D]
Mimochodem, na programovacim jazyce podle mne temer nezalezi. Je to jen nastroj a dulezite je pouzit ten spravny, ktery se hodi na konkretni problem. Nekdy si clovek ani nemuze vybirat, protoze jine nastroje proste nejsou k dispozici.

Dobry programator programuje stejne v libovolnem jazyce. Objektove, kdyz pouziju to zprofanovane slovo. Jde to i v jazycich, ktere na to nemaji vlastni prostredky resp. to nevynucuji. Treba v assembleru nebo v C. Jazyk neni dulezity, dulezity je zpusob mysleni. Zacatecniky ovsem muze spravne vybrany jazyk k takovemu zpusobu mysleni donutit :)

[4] (mike ) 31.03.2008, 23:37:45 [X] [D]
[2] Presne tak jsem to myslel a skoro i napsal :) Kdyz ja tahleta uslovi hrozne nerad pouzivam :)

[5] (zlosyn ) 31.03.2008, 23:40:53 [X] [D]
Copak o to, naučit se syntaxi lze skutečně za pár dní, ale ten zbytek už ne. Ona ta VŠ má smysl - už jenom proto, že k některým materiálům se samouk (bohužel) jinak nedostane, sic je to už dnes asi lepší, ale stále potkáte mistry světa, kteří neznají různé sorty natožpak stromy, teorii okolo databází atd...

[6] (Arthur Dent [openID] - Mail - WWW) 31.03.2008, 23:43:02 [X] [D]
[3] Myslím že myšlenka, vyjádřená v článku, je jiná. Nejde o to JAKÝ jazyk znát či použít, jde o to vědět, že (a jaké) jsou alternativy. Je dobré podívat se "k sousedům", jak to řeší tam, a dobré nápady použít ve své práci. Nešlo o to, jestli "objektově" programovat i v neobjektových jazycích. Jde o to znát i jiné techniky a být jim otevřený.

[7] (mike ) 31.03.2008, 23:46:19 [X] [D]
[5] VS rozhodne smysl ma. Kdy jindy ma clovek v zivote tolik casu, aby se mohl naucit programovat? ;-)

Jasne, ze ma. Ale jak ktera. Nakonec, tu teorii grafu si clovek muze koupit sam. Jen musi vedet, ze neco takoveho vubec existuje. A k tomu je prave VS dobra, k ziskani vseobecneho prehledu a rozhledu.

[8] (Tonda - Mail - WWW) 31.03.2008, 23:50:21 [X] [D]
Každopádně když člověk programuje v nějakým jazyku, měl by dobře znát i všechno o úroveň níž (to do čeho se námi používaný jazyk překládá apod.), pak teprve může ten jazyk efektivně používat.

"Měli byste vědět, jak dlouho trvá počítači, než zpracuje jednu instrukci,..." Ale jdi, to už se mi zdá trošku zbytečný. Jak dlouho trvá, než se zpracuje MUL? Po minimalizaci nebo před? Když píšeš něco v nějakým vyšším jazyce, tak ti to těžko pomůže. Kdyby člověk psal programy v Assembleru, tak už tak by byla rychlost programu několika-násobně větší (a rychlost napsání programu několika-několika-několika-násobně pomalejší). Ale tobě to nestačí, ne ... ty prostě chceš, abysme si rovnou psali vlastní instrukční sadu. :D

[9] (mike ) 31.03.2008, 23:51:54 [X] [D]
[6] Urcite ano, cim vetsi rozhled, tim lip. Myslel jsem to spis jako doplneni. S clankem nepolemizuju, v podstate nemam moc s cim :)

[10] (Arthur Dent [openID] - Mail - WWW) 31.03.2008, 23:51:32 [X] [D]
[5] Znám člověka, který tu teorii databází nejen perfektně ovládal, ale dokonce ji i učil. Pak napsal aplikaci a velmi se divil, že funguje liknavě a neochotně. Holt, jsou chvíle, kdy teoreticky krásný program narazí na škaredou praxi a je nutno zvolit postupy méně vzdělané, zato funkční. ;)

Ale uznávám, to byl unikát...

A teď upřímně: Je samosebou dobré znát teorii, vědět jak fungují stromy, jak QuickSort a jak BubbleSort, vědět jak implementovat rychlé hledání podřetězce, ale po pravdě si už nevybavuju, kdy jsem to naposledy OPRAVDU potřeboval. A tím myslím kdy jsem potřeboval napsat implementaci tohodle něčeho.

[11] (Miloš - Mail ) 31.03.2008, 23:56:45 [X] [D]
„Měly by indexy polí začínat nulou nebo jedničkou?“
Móóóóc hezká myšlenka; velmi potěšila a obveselila.
Nedosti však theorie – do praxe tuto ideu dotáhl Hugo Chávez zavedením vlastního časového pásma GMT -4,5 hodiny.

[12] (@Teo von Chucpe - WWW) 31.03.2008, 23:56:53 [X] [D]
No jo, ale čím se živěj programátoři těch 9 let, než dozrajou?! ;)

[13] (Arthur Dent [openID] - Mail - WWW) 31.03.2008, 23:58:00 [X] [D]
[8] Já? Mně je to jedno, já si po pravdě i tu instrukční sadu a procesor navrhnu, když na to přijde. ;) Jen jsem ocitoval myšlenku autora původního článku.

Člověk nemusí nutně vědět, kolik taktů trvá IMUL, ale když má zhruba představu o tom, jak je která operace "drahá", tak mu to rozhodně neuškodí. Doporučuju se kouknout do odkazovaného článku, jak to bylo myšleno.

[14] (Arthur Dent [openID] - Mail - WWW) 31.03.2008, 23:59:38 [X] [D]
[12] Píšou účetní a kancelářské programy.

[15] (zlosyn ) 01.04.2008, 00:05:14 [X] [D]
[10] Třeba implementace menu s nekonečně úrovněmi by u programátora samouka mohla dopadnout všelijak :) Ono se najde víc příkladů...ale spíš jde o ten samotný návrh aplikace a algoritmů, to o čem nikde moc nepíšou a v manuálech k jazyku to taky nenajdeš.

[16] (mike ) 01.04.2008, 00:10:24 [X] [D]
[14] A ti, co se programovat nenauci, u toho zustanou ;-)

[17] (Arthur Dent [openID] - Mail - WWW) 01.04.2008, 00:14:52 [X] [D]
[15] Jojo, noční můra mnoha "jižrokPHPCSSHTMLSQL programátorů": V databázi mám položky, mají ID a PARENT_ID. Vypiš je v HTML jako vnořené seznamy. ;)

[18] (Radek Hulán - Mail - WWW) 01.04.2008, 00:35:57 [X] [D]
"jak QuickSort a jak BubbleSort, vědět jak implementovat rychlé hledání podřetězce" -- toto jsem psal naposledy "od píky" někdy kolem roku 1990. Od té doby člověk používá frameworky a podobnýma blbinama znovuvynalézajícími kolo neztrácí čas...

[19] (Arthur Dent [openID] - Mail - WWW) 01.04.2008, 00:40:37 [X] [D]
[18] Jest tak. Na druhou stranu je dobré vědět nejen že "to" existuje, ale mít i představu o tom, jak to "uvnitř" běhá... ;)

[20] (Radek Hulán - Mail - WWW) 01.04.2008, 00:50:23 [X] [D]
[19] to určitě, ale dnešní "programátoři" hlavně neznají základy fungování PC. Už zde není ta doba, kdy (protože) nebyla česká klávesnice, tak jsi napsal driver pro KBD i VESA kartu, kdy se assembler poznával i tak, že jsi určité instrukce prostě zkoušel, co to udělá a neustále resetoval PC (protože v půjčené odrbané knížce chybělo pár listů a internet ještě neexistoval), a kdy jsi prostě rozuměl "vnitřnostem" toho, na čem děláš.

Dnes to nikdo neřeší, přijde k .NET a používá hromadu knihoven, které jen tak nějak poskládá do sebe a má z toho aplikaci. A když to je pomalé, neladí se to jako na 486DX CPU, ale prostě se koupí více RAM a vícejádrový CPU...

Nemusí se už nakonec učit ani optimalizovat, v případě, databáze SQL, má na to LINQ... Existují knihovny, které optimalizují za něj. Programování na určité úrovni je dnes pro cvičené opice, jen tvůrci knihoven ještě stále musí umět slušně programovat. A to je mizivá část...

[21] (dejv ) 01.04.2008, 01:08:14 [X] [D]
[20] Já bych řekl, že těch lidí, kteří chtějí těmto věcem rozumět je pořád stejné (absolutní) množství, jen je více těch lidí, kteří to prostě neřeší. Ono i dřív bylo hodně lidí, kteří si doma něco bastlili v Basicu/Pascalu a drivery neřešili.

Hold dnešní doba žádá množství kodérů a tak je programátorem kde kdo.

[22] (http://xmppid.net/otaznik@otaznik.net - WWW) 01.04.2008, 01:13:18 [X] [D]
Computer science má s počítači asi tolik společného jako Atrologie s dalekohledy (tohle vymyslel někdo jiný, bohužel nepamatuji si kdo =/ nám to řekl doktor Nentvich)...(je možné, že jsem si to nezapamatoval přesně =/ ale myslím že ne).

[15] implementace nekonečna na počítači? Na té krabici, co má vlastně všechno omezené?. Na jiné? Implementace na neimplementovaném?
Jinak máte pochopitelně pravdu, praxe se jinak než praxí těžko získá. A její význam,...programátor bez všeobecných znalostí může být velmi dobrým překladatelem, a programátor bez praxe je...možná matematikem? možná ani to ne.

[23] (Pavel Šindelka - Mail - WWW) 01.04.2008, 08:01:41 [X] [D]
No ono je to trochu složitější s těmi diplomy. Musíte si uvědomit, že napřiklad na přijímacím pohovoru máte velice omezené možnosti, jak zjistit dostatek informacím o kandidátovi do vašeho týmu, který sedí před vámi. Dokončená vysoká škola typu FEL je pro mě poměrně slušnou indicií, která napovídá, že její absolvent bude mít právě ten všeobecný přehled. Že se setká s Oraclem, assemblerem, teorií a praxí v C, C++, Javě nebo Smalltalku.

Jasně že platí, že je důležitější vědět než na to mít papír. Jen je občas složité se to dovědět (co všechno si lidé do životopisů píšou s "uroveň znalostí expert"!) :)

[24] (danaketh - Mail - WWW) 01.04.2008, 10:35:14 [X] [D]
Takže mám naději... Programuju (jestli to tak můžu nazvat) už od 14 let, nedávno mi bylo 24... I ta posedlost by byla, jazyků si nakládám víc a víc... Ani snad ne proto, že bych chtěl dělat machra s tím, že "umím X jazyků" ale jen proto, že mě to prostě baví :)

[25] (Petr Staníček - Mail ) 01.04.2008, 10:47:02 [X] [D]
Schopnost programovat = algoritmické myšlení. Programovací jazyk je jen sekundární nadstavba, která se dá naučit (podle složitosti konkrétního jazyka) za hodinu až měsíc. Nejvíc jsem toho v životě naprogramoval tužkou na papíře v nějakém (často zrovna vymyšleném) metajazyku.

[26] (obda [openID] - Mail ) 01.04.2008, 11:33:51 [X] [D]
[22] Jeden z "otcu zakladatelu" E. Dijkstra: “Computer science is no more about computers than astronomy is about telescopes.”

[27] (danaketh - Mail - WWW) 01.04.2008, 12:08:56 [X] [D]
[25] tužka a papír... Neexistuje snad lepší pomůcka :) Dodnes jsem například nedokázal nahradit papír a tužku jakýmkoliv nástrojem na modelování schémata databáze nebo aplikace. Na papíře si to dovedu načmárat mnohem lépe (- pro mě srozumitelněji) než to umí kterýkoliv software. Asi i proto, že mé myšlenkové pochody jsou často značně složité a tak se občas stane, že se mezi návrhem databáze objeví obrázek prasátka nebo i jiné, méně slušné výtvory. To podle toho, na koho si zrovna během práce vzpomenu :)

[28] (Arthur Dent [openID] - Mail - WWW) 01.04.2008, 12:52:12 [X] [D]
[27] Mindmaps...

[29] (@Teo von Chucpe - WWW) 01.04.2008, 13:26:42 [X] [D]
Měl bych taky heslo: Naučte se programovat všemi deseti! :)

[30] (danaketh - Mail - WWW) 01.04.2008, 14:19:54 [X] [D]
[28] Jééé, nějak podobně vypadají moje čmáranice :)

[31] (Tonda - Mail - WWW) 01.04.2008, 15:34:15 [X] [D]
[20] Nestrkej nás všechny do jednoho pytle. Koho popisuješ v druhých dvou odstavcích? Naprosto jasně programátory na tebou neustále propagovaným Windows.

Je to jeden z důvodů, proč bych velice nerad někdy programoval v nějakým .NETu tedy lépe řečeno v nějakým majkrosoftím vizual studiu. Microsoft se těmahle svýma produktama snaží odnaučit programátory myslet, chce aby programovali myší tak, že si tu aplikaci defakto naklikaji. Každej kdo programuje v tom jejich studiu je jenom cvičenou opicí Microsoftu. Na letní škole programování se mi to jenom potvrdilo: http://blog.antonindanek.cz...2007/

[32] (danaketh - Mail - WWW) 01.04.2008, 16:04:58 [X] [D]
[31] MS prostě razí nějakou cestu vývoje aplikací na Windows. Velkou vinu na nestabilitě systému nesou cizí aplikace. Aplikace dělaná ve Visual Studiu znamená, že vývojář sám přidává jen minimum vlastního (a tudíž potencionálně špatného) kódu. Omezuje se riziko, že aplikace shodí systém.

Neviděl bych to jako problém. Ať si pod Windows všichni programují jak chtějí. Vás to přece na Linuxu trápit nemusí. Nechápu nad čím se rozčilujete.

[33] (Radek Hulán - Mail - WWW) 01.04.2008, 19:25:46 [X] [D]
[31] ono je to ale dobře.. Fakt je ten, že pokud nejsi 100% zaměřený specialista na danou oblast, tak poté excelentní framework typu .NET 3.0 ti výrazně ZLEPŠÍ tvůj kód. Stejně tak LINQ, pokud nejsi špičkový optimalizátor na SQL, tak LINQ to udělá v 95% za tebe lépe.. Na tom prostě dělají top odborníci, a optimalizují tu svoji část. Toto je správná a dobrá cesta vývoje. Není důvod aby si 10.000 aplikací psalo svůj QuickSort a mělo tam svoje chyby...

[34] (mike ) 01.04.2008, 19:51:37 [X] [D]
[25] Programovaci jazyk neni nadstavba, ale nastroj. Ktery je potreba ovladat virtuozne, jinak clovek ztraci cas premyslenim, jak neco napsat a ne co napsat. Na to jsou potreba leta praxe a tisice (spis desitky tisic) radku kodu; stejne jako spisovatel se musi programator vypsat.

Tuzkou na papire uz davno neprogramuju. S tuzkou, ale spis fixem a tabuli, resim jen vysokourovnovou architekturu (tedy krabicky a sipky :). Vlastni programovani, cimz myslim hlavne strukturu dat a kodu, algoritmy atd. probiha primo v danem jazyce. Premyslim a resim problem a vysledky primo zapisuju. Automaticky, jako kdyz mluvim nebo pisu beznou reci, tam taky nepremyslim jaka slova pouzit nebo jak je poskladat do vet, ale nad tim, co chci rict. Nad jazykem, ktery bezne nepouzivam, premyslet musim, a strasne to zdrzuje. Jinymi slovy, programator by v sobe mel mit i dobreho kodera, ktery ovsem bezi v rezimu autopilota a programatora nevyrusuje :)

Naprostou vetsinu zapeklitych programatorskych problemu jsem vyresil v metru nebo autobuse cestou z prace. Zbytek doma ve vane :)

[35] (Mordae ) 03.04.2008, 19:14:12 [X] [D]
[34] Tak ted mi mluvis z duse. Nic tolik nestimuluje mysl programatora jako cesta domu z prace.

[36] (tibiz - Mail - WWW) 08.04.2008, 00:59:20 [X] [D]
Clanok je velmi "k veci", mam skusenosti, ze chalani, ktori sa ucia programovat doma z vasne su ovela sikovnejsi ako VS absolventi, ktori vlastne nemali cas sa venovat programovaniu profesionalne najma kvoli vytazenosti VS pracami, ktore mozno s buducnostou daneho cloveka ani nesuvisia.

[37] (~ ) 05.07.2008, 01:27:53 [X] [D]
Samouky nepodcenovat ! Ti nejlepsi se dokazali naucit i nejslozitejsi matematicke vzorce, prestoze je k nicemu nepotrebovali, vedci v NASA je uzivaji pro vypocet obezne drahy planet, urceni mista dopadu meteoritu, urceni doby vyhasnuti hvezd a podobne. Popisi u toho nekolikrat celou tabuli, pracuji na tom v teamech a jeden takovy vypocet trva tymu i dele, nez tyden. Zatimco odiplomovana opice nema o nic noveho zajem a mysli si, ze vsechno vi, vsechno umi, ...