Jak se naučit profesionálně programovat?
Po napsání článku o mých zkušenostech s programováním jsem emailem, či na ICQ, dostal již desítky dotazů na to, jak vlastně začít.
Vzhledem k tomu, že vůči těm klukům, co se začínají učit programovat dnes, mám více než dvojnásobný věkový rozdíl (je mi 31 let), a tím i obrovské zkušenosti navíc, cítím se cosi jako radící otec, ale.. budiž :)
Takže, pokud chcete vědět, jak se naučit poněkud více než následující příkládek, čtěte dál!
#include <iostream> using namespace std; int main(int argc, char *argv[]) { string jmeno; cout << "Napis sve jmeno : "; cin >> jmeno; cout << "Jmenujes se " << jmeno; system("PAUSE"); return 0; }
Takže, jak vlastně začít?
- Musíte na sobě pracovat, pracovat a pracovat. Nikdo za Vás nic neudělá. Pokud počítač a překladač C++ není Vaše jednovaječné dvojče, zapomeňte na kariéru špičkového programátora.
- Musíte se učit programovat alespoň několik hodin denně. Každý den. Neustále poznávat nové věci. Pokud se neučíte 3 měsíce zakrníte. Pokud se neučíte 1 rok, jako programátor zahynete.
- Učte se angličtinu. Člověk co nezná angličtinu nebude nikdy dobrým programátorem.
- Nezapomeňte ani na pohyb. Sednout občas na kolo a ujet 10-20 km, či si jít zaběhat, osvěží mozek. A pak znovu práce!
- Pracujte na skutečných projektech. Nedělejte jen nějaké triviální příklady z učebnice, skutečně programovat se naučíte, když si dáte nějaký cíl. První cíl může být třeba napsat si v C++ jednoduchou konzolovou hru. Nikoliv "Hello World" program. To je k ničemu. Druhý cíl bude složitější. Dělejte něco praktického, třeba si napište vlastní program na učení se slovíček do angličtiny. V takovém projektu se naučíte vytvořit vlastní databázi, třídit slovíčka, vyhledávat je, hodnotit, i zpracovat nějaké to GUI. A navíc vytříbíte angličtinu. Jako třetí projekt si začněte vytvářet znovupoužitelné objektové třídy, které Vám umožní vytvářet další vlastní programy jednodušeji.
- Není důležité, zda první projekty budou výdělečné. Nebudou. Nikomu je neprodáte. Udělejte si klidně jednoduchý prográmek na výuky matematiky pro svoji mladší sestru. Hlavně, pracujte, pořád, a dělejte něco, co má praktický smysl, ne to "Hello World". Tím, že budete dělat něco užitečného pro sebe, nebo pro ostatní, Vaše motivace poroste. Budete se moci svým výtvorem pochlubit, a on dozná ocenění u té Vaší sestry, kamarádů, či rodičů, a tím poroste Vaše chuť na sobě pracovat!
- Programování znamená nejen kódování, ale zejména studium manuálů. I když jsem přečetl hodně odborných knih, neosvědčilo se mi takzvané "systematické studium programování". Mnohem efektivnější je referenční příručka jazyka, do které se podíváte, pokud nevíte, jak co řešit. Případně si ji, tento "slovník", pročítáte po večerech. Jen tak. Aby jste věděl, jaké funkce by jste mohl použít. Ty funkce, metody, třídy, Vám utkví v paměti, a až je budete potřebovat, jen se podíváte na jejich kompletní syntax.
- Učit se jen tak, pro učení se samotné, nemá smysl. Učte se to, co právě teď potřebujete pro praktické řešení Vašeho projektu. Jinak to zapomenete. To, aby jste zkoumal teoretické metody a zásady, na to budete mít čas mnohem později.
Prostředí aneb Jak zdarma na programovací jazyky
Jednoduchá možnost:
- Použijte nějakou distribuci Linuxu, třeba Mandrake Linux 10 (MDK 10). Pokud máte doma jen jeden počítač, a ten patří rodičům, jsou na něm většinou Windows. Nebojte se. MDK 10 se dá instalovat i na tento stroj, a oba systémy budou v klidu koexistovat vedle sebe.
- V Mandrake Linux 10 se potom učte především C++ (se skvělým KDevelop), Python, a PostgreSQL. Proč zrovna toto? Dostanu se k tomu později...
Windows možnost:
- Pod Windows je situace trošku složitější, v základu žádné C++, Python či databáze není.
- Dobrým začátkem je stáhnout si CygWin (což je Unix-prostředí pro Windows), včetně Pythonu, gcc-g++, PosgreSQL, a mraků užitečných utilit (bash, grep, ...).
- Slušné Open Source IDE pro C++ pro Windows (gcc) je Dev-C++. Umí vytvářet DLL knihovny, nativní Windows aplikace, i konzolové aplikace.
Proč C++, Python a PostgreSQL?
- C++ je kompilovaný jazyk, který disponuje velice silnými prostředky. Po všech stránkách. Pokud se jej naučíte, profesionální zvládnutí čehokoliv jiného (ať už je to Java, triviální PHP, či třeba i Perl) bude záležitostí pár dnů, maximálně týdnů.
- Python je interpretovaný jazyk, který je skoro v každé Unixové instalaci. Já jej mám i na Windows. CygWin, v kombinaci s Pythonem znamená skvělé možnosti pro psaní skriptů, aniž bych musel dělat na MDK 10 (ten mi běží jen na serveru; na stanici preferuji Windows XP). I když, fakt je ten, že nejčastěji používám Python jako inteligentní kalkulačku ale občas i pro některé složitější výpočty, cykly, atd. Naučte se Python, zvýší produktivitu Vaší práce.
- PostgreSQL je nejlepší Open Source databáze. Můžete si sice pro domácí použití stáhnout i Personal Oracle, nicméně, nemá to zpočátku smysl. A zapomeňte na MySQL. To není databáze. PostreSQL umí triggery, uložené procedury, PL/SQL. Většina složitějších, rozsáhlejších věcí používá databáze nejen jako skladiště dat, ale díky PL/SQL i na aplikační zpracování těchto dat. Naučte se PL/SQL!
Z čeho se učit?
Už jsem to zde probíral. Každý produkt má u sebe dokumentaci. V Linuxu, nebo i pod CygWinem je příkaz man. ;) Máme tu internet a google.com. Hlavní je ale praxe. Nová knížka za 1.200 Kč z Vás programátora neudělá!!! Prostě začněte programovat, a řešte problémy tak, jak přicházejí. Občas se dostanete (zpočátku hodně často) do slepých uliček, ale i tam něco poznáte. Poučíte se. A postupně, praxí a prací, budete získávat cit pro programování. Už nebudete tápat, ale budete tušit, že na Vaši potřebu bude existovat nějaké metoda, a později budete tušit i její název a přesnou syntax, a to i u programovacího jazyku, který "znáte" 10 minut.
Jediné co budete v každém začátku potřebovat je referenční příručka a moře trpělivosti při počátečních nezdarech :) Žádat po rodičích 10.000 Kč na "literaturu" je pitomost. To je "konzumace" a výmluva a ne vzdělávání se a práce.
Dobré je online připojení k internetu. Postačí za 650,- Kč / měsíčně GPRS od T-Mobile nebo Eurotelu. To Vám rodiče jistě dopřejí a Vy budete mít přístup k hromadě materiálů online.
Závěr?
Nic Vás nepotěší tak, jako když po 3 hodinách práce odladíte svůj první, 30-ti řádkový program. Že dnes já napíšu za 3 hodiny těch řádků 500? Otestovaných? Jasně. Ale bez toho počátečního "utrpení", té agónie, ale i radosti ze znovuobjevení kola bych se tam nikdy nedostal... :)
mimochodem můj tim s trošku jiným přístupem a cílem. Já nechci být nikdy profesionální programátor, moje síla je v sale&manage, ovšem právě proto potřebuji občas nějaký nástroj či výpočty, které se standardními nástroji v excell/access neužiju. Výborná pomůcka, která se mi osvědčila (ačkoliv se asi budete smát) je macro recorder v excelu a jedna základní knížka o makrech kde jsem poznal proč jsou ty příklady takhle za sebou a mají mezi sebou tečku atd. Takhle jsem zkusil udělat nějakou akci a kouknul se co to udělalo za kód a protože je Basic opravdu "základ" a v podstatě angličtina čtená od konce, tak bylo velmi jednoduché pochopit co co znamená a proč to dělá. Takže když jsem pak potřeboval třeba najednou zamknout všechny listy sešitu a spustil makro a zamknul jeden, tak se napsalo
Sub Makro1()
'
' Makro1 Makro
' Makro zaznamenané 11.6.2004, Noname
'
'
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Já pochopil, že to co začíná středníkem je poznámka a všimnul jsem si, že to za Protect nemusím zadat, protože je to default a knížka mi poradila, že activesheet je současný list a sheet(n) je n-tý list a že se dá dělat cyklus s for-next a že sheets.count je funkce pro spočítání listů a velmi intuitivně jsem tak poznal že mám napsat
for n = 1 to sheets.count
sheet(n).protect
next n
a takto postupně složitější a složitější úlohy. Vždycky nahrát makro a snažit se přijít na to co co dělá a snažit se minimalizovat kód a vyhazovat nepotřebnosti. A velmi rychle jsem se naučil velmi dobře basic. Časem když jsem pak potřeboval něco co excel neumí a je to vlastnost systému (třeba změna jazykové sady) jsem zjistil že se to dá přes nějaké API a altavista (či jak se jmenoval tehdy ten rozšířený vyhledavač) pomohla najít nějaké nápovědy se kterými to bylo také velmi snadné. A pak byl u něčeho přibalen velký VB (nějaká starší verze omezená snad pro studenty) tak jsem to zkusil i v něm velmi rychle jsem se zorientoval i tam.
A protože ostatní jazyky jsou svoji strukturou velmi podobné, jenom tam jsou jiné deklarace a příkazy (nebít mě, jasně občas se objeví nějaký výraznější rozdíl), tak bylo relativně snadné vyznat se i v jiných kódech, u některých (třeba Java) to je v podstatě o napsání toho samého co v basicu pouze občas když to na vás hodí že nezná nějaké "slovíčko" zapátráte v knize či v manuálu jak že to vlastně je. U céčka se pak ztratila ta "lehkost" psaní nativní angličtinou, takže bylo nutné hledat v počátku ekvivalenty pro každý příkaz, ale logiku člověk pochopil v podstatě hned.
Další důležitá věc - programátor potřebuje velmi znát databáze, slušný program bez nějaké databáze v podstatě neexistuje a tak kromě toho to chce hrát si s access a pochopit logiku, to byl pro mě největší problém.
P.S.: mimochodem - nepřítomnost VBA v office-like programech byla mým skoro jediným argumentem proč používat stále office. Už je nějaký "office" který má něco takového včetně možnosti "macro record"?
P.S.: ještě jedna připomínka o důležitosti knih - knihy byly užitečné v jedné věci, která se v online nápovědách moc neobjevuje - ty lepší z nich věnují velkou část tomu jak psát "srozumitelně", takže pak výstup z textového políčka Jméno nenazvete jmeno ale txtJmeno a podobně a tahle znalost se při vyšším a vyšším programování hodí stále více a více, i když to není nějaká nutnost.
Mno, to učení slovíček si asi udělám -- budu to potřebovat ;) Pořád se nechávat někým zkoušet není ono ... ;)
Tak nevim, ale tvrdit, ze pokud neumim jazyk C++ tak nejsem spickovy programator je trochu silne kafe. Znam spickove vyvojare, kteri umi JAVU, Delphi nebo C# a o C++ toho nevedi takrka nic :)
"Učit se jen tak, pro učení se samotné, nemá smysl. Učte se to, co právě teď potřebujete pro praktické řešení Vašeho projektu."
Kdyz neznam alternativy, jak pak muzu vedet ze existuji, a ze nevymyslim(v lepsim pripade) kolo?
S Vasim pristupem nenavrhuji dopredu, ale prirustkove bastlim a tvorim mrchy.
Chapu dobre, ze berete C++ jako nejlepsi zpusob k pochopeni architektury pocitace? Jinak vyberu tohohle jazyka pro zacatecnika nerozumim... Taky tvrzeni, ze prechod C++ -> jiny jazyk date za par dni neverim. Znalost jazyka != jen znalost syntaxe, ale take technologii a knihoven, ktere s nim souvisi, jinak opet tvorim mrchy.
Ke studiu z manu: tam vetsinou nenaleznete best practices, ktere v dobrych knihach zmineny jsou. Takze rozhodne bych radeji sahl po dobre knize nez se potit s manualem a opet plodit nevedomky mrchy. I kdyz souhlasim, ze nekdy literatura chybi ci nedosahuje potrebnych kvalit.
Jinak ocenuji, ze se snazite pomoci zacatecnikum. Restekp! :)
[1] VBA asi budete hledat těžko, ale takový OpenOffice.org Basic syntakticky odpovídá Visual Basicu, akorát má jiný knihovny. V OOo je i vývojové prostředí podobné tomu z MSO, dokonce i s klikacím editorem dialogů.
Jako největší nevýhodu OOo Basicu ale vidím dokumentaci, která je sice obsáhlá, ale ne česky, což většímu rozšíření u nás asi nepomůže.
Jo a záznam makra je možný také.
-----
ad článek:
Ještě bych doplnil tohle: když už se rozhodnete koupit nějakou příručku, pozor na slogany typu "pro začátečníky". Jistě existuje spousta kvalitních knih pro začátečníky, ale podle mých zkušeností to na nich málokdy bývá napsané. Často to značí spíše to, že sám autor je jenom stupínek nad označením začátečník, takže se často dočtete spoustu smyšlenek, polopravd a mýtů.
Před koupí knihy z nějakého oboru prohledat diskuze apod., která kniha připadá nejlepší ostatním.
Ja len ze co sy tyka c++, rozhodne by som doporucil knizku S. Prata: Mistrovstvi v C++, je skvela!
Přeji Ti, aby se Ti všechno v životě povedlo tak, jako v programování. Je to totiž dost těžké zvládnout to všechno dokonale..
ahoj tak clanek je hezkej ale neni to pro zacatecniky protoze se nedozvy co ptrebujou ktomu aby mohly zacit vubec neco delat a ten slovnicek se mi liby ale ze jsem zacatecnik uplny tak si ho asi neudelam protoze nevim co ktomu potrebuju jakej soft a jak se to vlastne dela.Jestli tu je nekdo kdo by mi chtel pomoci budu moc rad chtel bych zacit programovat a nevim jak a co potrebuju moc dekuji za jakou koliv odpoved Tankvej
[6] No spíš bych sáhl po knice od Bruce Eckela - Thinking in C++, je ke stažení legálně zdarma a jsou jí dva díly. Od tohoto sámého autora je ke stažení java a enterprise java. Dobrá učebnice a dost "základních fíglů". K tomu přibrat fóra a konfery...
Že bych to znovu zkusil? Je mi sedmnáct let, jsem rok před maturitou, má to ještě cenu? Na jakou bych měl jít vejšku? Začínal jsem už v deseti letech, hrál jsem si s quickbasicem, pak jsem se k tomu hodněkrát vracel, zkoušel jsem i C a C++ hodně mě to bavilo, ale vždycky jsem s tím, nevím ani proč, ze dne na den seknul:( Pak jsem to zkusil znovu, zase mě to bavilo a zase jsem se na to vykašlal:(
V kolika jste začínal vy?
[10] Hm, to vypadá, že jsi na tom dost podobně jako já... Já jsem o tom hodně přemýšlel, náturu co se týče programování máme hodně podobnou, dle tvého popisu alespoň, já strávil dva roky na ČVUT FEL, vůbec nic mi to nedalo, kromě toho, že jsem zjistil, že programováním se asi živit nechci :(