Přejít k navigační liště

Zdroják » JavaScript » Bude JavaScript dnešním BASICem?

Bude JavaScript dnešním BASICem?

Články JavaScript, Různé

Nástup domácích počítačů v 80. letech doprovázel BASIC. Tento jazyk, zatracovaný a proklínaný generacemi učitelů a teoretiků, měl na rozšíření počítačů do domácností lví podíl a setkal se s ním snad každý, kdo se v té době ke klávesnici posadil. Ať se nám to líbí nebo ne, byl tehdy symbolem prvního kontaktu s programováním.

BASIC má za sebou téměř padesát let existence – první návrh vznikl už v roce 1963. Vycházel z jazyků FORTRAN a ALGOL a záměrem jeho tvůrců bylo nabídnout jednoduchý vysokoúrovňový programovací jazyk. Měl být použitelný pro různé druhy aplikací, měl být interaktivní, jednoduchý, ale přitom s poměrně silnými možnostmi pro pokročilé uživatele, a měl odstínit člověka od hardware a operačního systému (nezapomínejme, že byla doba velkých sálových počítačů). Všechno tohle BASIC splňoval.

Samotný interpret jednoduchého dialektu BASICu se vešel doslova do pár kilobajtů, proto byl jazykem první volby, po kterém sáhli tvůrci osobních počítačů, když hledali vhodný jazyk pro své stroje, postavené na prvních osmibitových mikroprocesorech. BASIC byl naprogramován pro stroj Altair 8800 v roce 1975 (mimochodem není bez zajímavosti, že Altair Basic napsali dva mladíci, Gates a Allen, a vydali ho pod svou značkou Micro-Soft; další příběh je už historie). BASIC byl v prvních počítačích TRS, byl v Commodore PET, byl v Apple II, Sinclair ho použil ve svých strojích řady ZX, byl v počítačích Atari, Acorn jej použil v počítači BBC… Dalo by se říct, že pokud jste si koupili domácí počítač v té době, měli jste téměř jistotu, že v něm bude BASIC (pomíjím „klon“ ZX81 s názvem Jupiter ACE – ten měl zabudovaný jazyk FORTH). A také jste měli jistotu, že váš BASIC bude nekompatibilní s jakýmkoli jiným BASICem na jakékoli jiné značce počítačů. Zkrátka co BASIC, to unikát, i když základní rysy zůstávaly stejné.   

BASIC byl sice jazyk vyšší úrovně, ale měl GOTO, a GOTO je, jak vám vysvětlí každý programátorský teoretik, ztělesněné zlo. GOTO totiž svádí k programátorskému přístupu, zvanému „sem prostě fláknu GOTO a bude to!“ Takový dobře prorostlý program plný skoků kamsi, který vytvořil nadšený začátečník, je odstrašující příklad, u něhož se snad nelze odvolat ani na princip „no a co, hlavně že to funguje!“

Jazyk BASIC tak v osmdesátých letech asistoval u prvních krůčků většiny programátorů. Minimálně LOAD, RUN a POKE poznali snad všichni. I ti, kterým počítač koupili rodiče, protože „to bylo lepší než kdyby se kluk chytnul party“ a měli k němu jen kazety plné her, čichnuli k programování, a pokud k tomu měli chuť a vlohy, stačilo napsat PRINT 1+1 – a stroj odpověděl tak, jak mladý budoucí programátor čekal. Začít programovat bylo v té době tak snadné… Je tedy pravda, že spousta lidí brzy poznala, že si s LOAD a RUN vystačí, že nepotřebují programovat. Ale ti, co si chtěli programování zkusit, měli velmi jednoduchý způsob, jak na to.

BASIC je špatný

Ano, je špatný v mnoha ohledech. Jeho verze ze 70. let nejsou rozhodně příkladem jazyka, který by se měli učit budoucí programátoři a v němž by měli získávat své návyky. Pamatuji se na intenzivní boje zastánců Pascalu s pragmatiky, co se oháněli BASICem. A i když verze vznikající od poloviny 80. let už připomínaly moderní jazyky (měly funkce, procedury, cykly WHILE a UNTIL, složitější větvení, nemusely mít číslované řádky, měly lokální proměnné, zkrátka všechno to, co je dnes samozřejmostí a co podporuje správně strukturované programování – za mnohé jmenuji alespoň BetaBASIC ), stigma GOTO se s nimi táhlo dál.

Na PC byl BASIC zpočátku také jazykem číslo 1 (a stopy po něm najdete dodnes ve voláních BIOSu), s DOSem se dodával až do jeho posledních verzí, ale byl na pokraji zájmu, protože nastoupily překladače Pascalu a C. BASIC se tak pomalu dostával do pozadí a ztrácel se, až se téměř vytratil. Microsoft stále, věrný své tradici, BASIC nabízí – strukturovaný, objektový a vůbec poměrně přijatelný. Stejně tak existují komerční verze překladačů BASICu – True BASIC, RealBasic, uživatelům Linuxu bude povědomý např. Gambas či FreeBasic. BASIC tedy žije dál, i když na okraji zájmu, a už rozhodně není to první, co člověk uvidí na obrazovce.


Zdroj: Wikimedia Commons

Vážně…?

Spolu s BASICem odešlo do ústraní i programování. Tedy abych to upřesnil – ne že by se neprogramovalo, ne že by programovat nešlo, ale programovací jazyk není už to první, co na počítači uvidíte. Ani to druhé. Jsou skryty kdesi v útrobách a „chtít si zkusit programovat“ dnes vyžaduje mnohem větší úsilí. Nejlépe jsou na tom zase uživatelé Linuxu, kterým stačí spustit konzoli a tam už nějaký ten Python, Perl či alespoň shell najdou…

Proč o tom píšu: Před nedávnem jsme se bavili se svým známým Tomášem, taky spectristou, o tom, že by chtěl svému, tuším osmiletému, synovi ukázat programování a zkusit, jestli ho to chytne. Ne ho zatěžovat teorií, jen zkusit, jestli by ho vůbec bavilo ovládat přímo počítač namísto postavy ve hře. „Jako byl za nás BASIC,“ povídal. „Víš, to bylo geniálně jednoduché. Sednul sis k tomu, během odpoledne sis napsal program na počítání objemu a povrchu kvádru, nadšeně jsi to ukázal rodičům, a pak se vidělo. Buď sis řekl Hm a nahrál hru, nebo jsi šel spát s tím, že zítra tam ještě doděláš výpočet objemu koule. A na tom se poznalo, jestli tě to chytlo, jestli máš programátorského ducha, jestli to je pro tebe výzva, nebo jestli to jde mimo tebe.“ A tím se dostal k tomu, že hledal v počítači BASIC, ale nenašel ho. „Nevíš, jestli tam je něco podobného, něco, v čem by si mohl napsat jednoduchý výpočet a druhý den nakreslit domeček z čar a třetí den zahrát melodii z BEEPů?“

No, upřímně, nevím o ničem. Rozumím co hledá: Hledá jednoduchý jazyk, který by byl interaktivní, snadno pochopitelný, s jednoduchou syntaxí a s jasnými chybovými hláškami. Zamítli jsme C („Missing semicolon on line 123“), zamítli jsme Pascal („Na Hello world potřebuješ půl stránky kódu“), Perl („jediný jazyk, kde zašifrovaný zdroják vypadá stejně jako nezašifrovaný“), zamítli jsme i „výukové“ jazyky Karel („A když se naučí Karla, kde to reálně použije?“) a Logo („pokus, jak pod průhlednou záminkou malování s želvou naučit děti LISP“). Snad Python…

S BASICem odešel snadný nástroj pro začátečníky, co „je všude“

Při té příležitosti jsem si uvědomil, že na webu máme jazyk, co je ve velmi podobné pozici jako tehdy BASIC. Je všude, je poměrně snadno pochopitelný – nebo si to mírně pokročilí alespoň myslí – má několik dialektů, někteří teoretici ho nesnáší, je hned „jednu úroveň pod stránkou“ (a dostat se k němu je stejné jako udělat BREAK a LIST)… Ne, není interaktivní, ale je alespoň snadno po ruce – v prohlížeči na dvě kliknutí myši. Pokud má být prohlížeč novým operačním systémem, novou aplikační platformou, pak je jeho BASICem JavaScript.

A já si při pohledu na něj říkám: Buďme rádi, mohlo to být horší. Nezačínáme s čísly řádků a není tam GOTO. 

Ale věřím, že Tomáš svůj „jazyk pro děti“ brzo najde; že je zkrátka potřeba, a proto vzniká. Ale nebude to v počítači, v operačním systému, ale spíš na webu. Třeba Processing – jednoduchý jazyk pro vizualizaci. Dokáže to kreslit, psát, reagovat na klávesy i pohyby myši. Syntaxe je jednoduchá, vychází z C a Javy, a přitom nezatížená spoustou balastu. A může to být napsané i v JavaScriptu. Nebo to může být samotný JavaScript s funkcemi pro Canvas, aby se malovalo. Nebo klidně i ten BASIC. A kruh se uzavře.

Bonusová otázka: Myslíte si, že ty vášně, které se vedou kolem operačních systémů, kdy se jednotlivé skupiny navzájem označují slovy vyjadřujícími hluboké pohrdání, časem změní ve vášně, s nimiž se budou rubat zastánci Firefoxu, Chrome, Opery, Safari a MSIE?

PS (dopsáno v 7:30): Díky všem za tipy na jazyky pro začátečníky a děti, co píšete do diskuse. Pokud znáte další, podělte se! Díky.

Komentáře

Subscribe
Upozornit na
guest
192 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
kem

Taky jsem kdysi měl podobný problém a hledal něco pro kluka, ale pod Linuxem jsem nic vhodného nenašel. Jako nejlepší jsem vyhodnotil MS Small Basic (http://en.wikipedia.org/wiki/Microsoft_Small_Basic). Hezké IDE, intellisence, proceduralní i objektové programování, výpočty i kreslení, spoustu příkladů které lze nahrát z repozitory, … Ale už je to nějaký čas – možná už existuje něco lepšího.

Tisnovsky

Pro ne-uplne zacatecniky taky neni spatna Lua (http://www.lua.org/, http://www.root.cz/serialy/programovaci-jazyk-lua/).

Ma rozumnou syntaxi, tak trosku Pascalackou (ale zase nebuzeruje s chybejicim strednikem), primo v jazyku hesovaci (asociativni) pole, dynamickou alokaci pameti, dynamicke typovani, snadne napojeni na grafiku atd.

atarist

Jako mínus byl možná viděl absenci pořádného interaktivního režimu, ten ale schází o mnoha dalším dnešním skriptovacím jazykům. Takže možná Python + IPython?

Bambus

„zamítli jsme Pascal („Na Hello world potřebuješ půl stránky kódu“)“ – ale no tak… co to je za kec ?

program HelloWorld(output);
begin
WriteLn(‚Hello, World!‘);
end.

Podle mne je PASCAL pro zacatek slusny, ale nedoporucuji u neho zustat moc dlouho.Take jsem Spectrista a BASIC byl dlouuuho muj „rodny jazyk“, pak chvilku assembler (prechod ze Z80 na 80286 sel lehce), pak zase BASIC, pak DELPHI a konecne C (kvuli mikrokontrole­rum).Dodnes vsak citim, ze mne BASIC a trochu i PASCAL (delphi) naucili nekolika ZLOzvykum, kterych se tezko zbavuje.
Nicmene pro 8-mi lete dite je skutecne vhodnejsi KAREL, BALTIK, nebo „zelva“.Proc ?Protoze je to vyuka formou hry, ale pritom ho nauci to NEJDULEZITEJSI: Totiz ALGORITMIZACI !!!!Neni totiz dulezite JAKYM jazykem s pocitacem komunukujete, ale JAK (to nemam ze sebe, ale z jedne velice stare, nicmene moudre knihy).
Hezky den a hodne uspechu s prvnimy krucky at jsou v cemkoliv :o)

martin maly

mate recht, helloworld je jednoduchy, to bylo vyjadreni nadsazkou, jako ze je Pascal velmi ukecany jazyk. Baltik padl v diskusi taky, ale o nem moc nevim. Existuje jeste?

Jo a s tim zaverem souhlasim. JAK komunikujete… ale kdyz si dnes prinesete domu „bezne PC Win“, nekomunikujete s nim nijak. :) a asi nejdostupnejsi je ten textovy editor a prohlizec (omlouvam se, pisu z mobilu, neprihlaseny a bez diakritiky)

Baltik

Baltik se stale prodava (ale neni zrovna levny).
Je rozclenen do ruznych obtiznosti podle veku ditete.
Sikovne je, ze vede dite postupne k jazyku C a OOP.

Vice na: http://www.sgpsys.com/cz/Product_B3.asp

Jinak osobne ho neznam (pamatuji jen prvni verze).Myslim ze je tam docela kladen duraz na to jak si dany problem rozlozit (vlastne jako u Karla, ale je tu vic moznosti).

Pritom by to melo nenapadne vest o hratek s ikonkama az po psani v C.

Znate nekdo jeste neco podobneho ?Jinak bych to videl na Sinclaira, kazetak a BASIC !!!jeeeee…. to byly casy….

Jelzin

mnohem dokonalejsi varianta je Petr (http://www.gemtree.com). Podporuje konzoli, dialogova okna, 2D grafiku, 3D grafiku (podpora opengl a directX – tusim do verze 7). Lze si hrat s TCP/IP, ale lze volat i api funkce.

Zalozeny je take na „tahani ikonek“, stavi se v podstate vyvojovy diagram. Vtipne je ze se nekompiluje, ale „uklada jako“ cimz vznikne spustitelny exe (bez potreby nejakeho interpretu) na wiinech od 95 az po 7 :)

sice to vypada jako pro deti, ale jinak je to velmi vykonny nastroj (porovnaval jsem rychlost aplikace vytvorene v petrovi a stejne v C++ ..velmi dobre vysledky). Znam i nekolik designeru, kteri jako ne-programatori mohou delat velmi zajimave apliakce…

Elektron112

Jo, s Petrem jsem začínal… Je to super nástroj. Jen je trochu škoda, že se už moc nevyvíjí a není nativně na Linux. Nicméně pod Wine jede v pohodě a ty možnosti bohatě stačí. Docela povedená je Kóta 236 (3D lehká střílečka).

Dana

Free program, bohuzial v Aj (trochu poslovenceny) Etoys.

Tomixon

Nejspíš měl na mysli H.World v okenním provedení.
Ten bych chtěl v obyč Pascalu vidět.

Gormie

Doba přece jen od 80. let pokročila, takže už máme lepší možnosti, než jen basic a javascript. Dětem doporučuju ukázat Scratch (http://scratch.mit.edu/).

Scratch

…ze by zelvicka ?Nebylo to tu nekde v nejakem clanku ?

Tisnovsky

http://www.root.cz/serialy/letni-skola-programovaciho-jazyka-logo/

;-)

Uz to Loga postupne zapracovavam syna, jde to pomalu, ale ta „vizualni odezva“ se mu libi, IMHO lepsi nez 100x opakovane programy na vypocet faktorialu, ktery stejne nezna, protoze zatim umi scitat do dvaceti :-)

blizzboz

QBasic bol moj prvý programovácí jazyk. Prakticky v ňom som získal prvé programátorské návyky a celý jazyk som sa naučil z helpu. Druhý programovací jazyk bol Turbo Pascal pri ňom som zotrval pomerne dlho naučil som sa v ňom prečo je dôležitá silná typová kontrola a koľko roboty dokáže ušetriť, nakoniec prešiel do Windows a v Delphi som pochopil že OOP naozaj má zmysel. Z dnešných moderných jazykov sa na Basic syntaxou najviac podobá asi Ruby. Filozofiou je basicu najbližšie PHP. A potom je tu ešte Visual Basic.NET čo je vpodstate C# v inom kabáte syntax ostala filozofia jazyka je však úplne iná. Visual Basic .NET je plnohodnotný programovací jazyk so všetkým čo k tomu patrí

MIloš

Jazyk BASIC rozhodně nevycházel z Fortranu a už vůbec ne z Algolu. V podstatě stejným jazykem byl už autokód pro National Elliot z roku 1952.(Z podobných autokódů se nakonec vyvinul Fortran – nikoliv naopak). Také počítač Minsk22, používaný u nás v 60. letech, měl od Ing.Formandla velice podobný autokód. Jinými slovy – BASIC byl návratem k historii programování o nějakých 30 let zpět a proto byl také mnohými programátory nenáviděn. Po pravdě řečeno – osmibiťáky byly svojí kapacitou asi na srovnatelné úrovni a tak se sáhlo po podobných jazycích – těch, které zvládly.Teprve Pascal byl díky svému návrhu a nenáročné kompilaci prvním moderním a použitelným jazykem pro tyto stroje.

Je pravda, že BASIC se naučíte za pár hodin a krátký a jednoduchý program zvládne napsat v podstatě každý. Složitějsí program či algoritmus dá ovšem v BASICu mnohem víc práce, než třeba v Pascalu či jiném rozumném jazyce – pokud je vůbec možný. Nejhorší ovšem je, že získáte spoustu příšerných návyků.

Je fakt, že spousta programátorů s tímto jazykem kdysi začínala. Ale proto a jen proto, že jiný prostředek neměli k dispozici. Mám za to, že učit dnešní generaci BASICu je minimálně zbytečnost, ne-li zrůdnost.

Honza

Zamítli jsme C („Missing semicolon on line 123“), zamítli jsme Pascal („Na Hello world potřebuješ půl stránky kódu“).

V Turbo Pascalu šlo přeložit i

begin
end.

Nejsem si jistý, jestli autor vůbec někdy Pascal viděl. Céčku je asi pro úplné začátečníky o malinko horší, ale přece není nutné hned začít s pointry nebo (pokud říkáte C a myslíte C++) třeba přetěžováním operátorů. Spíš bych řekl, že u C (i C++ i Pascalu) místo problémů se základní syntaxí (která není tak hrozná) začátečník narazí na neexistenci nějaké dostatečně standardní a zároveň dostatečně jednoduché knihovny na nějaké to pípání a malování. Už vidím jak, 11 letému klukovi vysvětlujete gtk+, signály a sloty v Qt nebo třeba Win32 API :-) Možná, že v tomhle bude ten Pascal stále príma, já jsem na něm vyrostl, ale teď už ho (např. FreePascal) vůbec nesleduju. Se syntaxí spíš začátečník narazí s pythonem (odsadí o 4 mezery místo o jeden tab) a definitivně ho odradí shell, o perlu ani nemluvě.

Pavel S

Ač jsem hodně dělal a ještě částečně i dělám v C/C++, nevolil bych jej jako jazyk pro začátečníky. Syntaxe by se ještě možná dala akceptovat, ale IMHO největší problém je, že C je příliš nízkoúrovňové. Znakový řetězec by měl být v moderním jazyce základní typ a ne pole bytů (dokonce to není ani pole znaků, takže počet znaků v řetězci se ani pořádně nedá zjistit), u něhož je potřeba znát konkrétní reprezentaci v paměti. Bez pointerů se neobejdete skoro od začátku. IO funkce se chovají z hlediska začátečníka IMHO dost nelogicky a zmatečně (např. funkce scanf).

ondra.novacisko.cz

Beru to jako vyzvu. Az budou moje deti umet cist a psat (tak za 4 roky), tak napisu knihovnu v C++, tak aby ditko nemuselo resit pointery, znak byl znak, retezec byl reteze, pole bylo pole, a prikaz print fungoval tak, jak ma fungovat :-)

A to multiplatforme vcetne kresleni!

Satai

A budete mit na konci neco uzitecnejsiho/pou­zitelnejsiho pro vyuku nez rekneme Python nebo Ruby? Pokud vam to prijde jako zabavne cviceni, tak proc ne, ale rekl bych, ze to bude znacne samoucelna cinost.

Dan542

>Už vidím jak, 11 letému klukovi vysvětlujete gtk+, signály a sloty v Qt nebo třeba Win32 API :-)

Mě je 12 a Qt signály a sloty chápu, gtk+ se nezabývám, jsem totiž KDEčkař a Qt4 umí vypadat ve GNOME jak gtk+ aplikace, takže nevidím důvod se učit gtk+. Win32 API se trochu učím vzhledem k tomu, že Wokna mají 98% trhu.

PS: Jsem Linuxák a Wokna mám jen ve VirtualBoxu.

eL

Smekam

Petr

Javascript je stejně špatný jazyk, jako svého času basic.

Tomáš Herceg

Žádný jazyk není špatný, to ho akorát používáte na věci, na které nebyl určen.

Program

Třepa na programování :-D

Mepho

Presne tak, kazdy jazyk ma vyhody i nevyhody.

Najvacsmi zatracovany je dnes flash (ITW jzyk zvany active script 2-3).
Active skript je tiez pekny, moderny jazyk a dovod, preco sa nadava na flash je skor v absolutnom diletantstve wannabie programatorov (skor grafikov).

Proste si to otvoris, naklikas tam nejake eventy a ked to ako tak chodi mas flash aplikaciu. Hovorte si co chcete, robil som v tom, a ked na Linuxe kvoli flashu zamrzne cele Xko nenadavam na Adobe, Flash alebo AS, ale na deb**a, ktory to kodil.

Papouch

pod krycim jmenem VBA je v kazdem Excelu, Wordu, Corel Draw a buhvikde jeste

coz je taky nejjednodussi cesta jak zacit programovat

krtek

A co zkusit začít přímo Javou? BlueJ je docela hezký výukový prostředí:
http://bluej.org/about/what.html

Petr Šabata

Pro BlueJ dokonce existuje nadstavba pro maláče jménem Greenfoot (http://www.greenfoot.org/). Základní scénář obsahuje wombaty baštící listy. :)

Program

Když na něco takového narazím, často přemýšlím, proč tolik lidí říká o perlu, že programy v něm jsou nečitelné. Tenhle článek mi asi dal odpověď v podobě BASICu a GOTO (viz článek). To, že BASIC má GOTO ještě přece neznamená, že ho musím nutně používat a používat ho na každém 2. řádku. To že BASIC umožňuje skočit do druhé poloviny subrutiny, ještě neznamená že takovou prasárnu musím použít. V BASICU se dalo psát rozumně a pokud si člověk přečetl jedinou knížku o programování, tak věděl jak.

S perlem je to podobné, to je jazyk pro zkušené programátory, kteří ví, jak ty konstrukce mají vypadat a to, že umožňuje jednu věc zapsat různými způsoby ještě neznamená, že je musím kombinovat tak, aby ten program nebyl k přečtení. Já sám jsem se setkal s perlem poprvé, když jsem něco dělal pro Stanford. Měli tam verifikační systém napsaný v perlu a bylo to cca 10k řádek (možná víc) úhledného, jasného a čistého kódu. Takže jestli někdo něco napíše v perlu a pak to po sobě nepřečte, tak je to proto, že je lama a ne proto, že je perl špatný.

Kamil

Naprosto souhlasím.

Navíc dodám, že Perl umožňuje velmi snadno psát triviální začátečnické programy, které ale klidně mohou rovnou dělat něco užitečného. Je bez problémů přenositelný a je snad na všech platformách.

Přitom nebrání člověku v růstu, naopak, má hodně pokročilých vlastností a bohatou kulturní tradici..

IMHO shánět dnes nějaký specializovaný jazyk na výuku (čti naprosto nepoužitelný v praxi) nemá smysl.

Satai

Pri vsi ucte, jazyk (obzvlaste) pro zacatecnika by mel vzniknout tak, ze ho nekdo navrhne, ne tak, ze nekdo nahrne vlastnosti na hromadu. Magie je nezadouci.

Kamil

Magie je nežádoucí, souhlasím. Ale nic nebrání začátečníkovi, aby používal jen část Perlu a své programy psal naprosto jednoduchou a jasnou syntaxí. A myslím že máloco povzbudí začátečníka tak jako program, který opravdu něco užitečného dělá.

Co se týká „návrhu“ Perlu, lze mít jistě některé oprávněné výhrady, i když ten jazyk je navržen mnohem lépe a logičtěji, než jakou má v některých kruzích pověst. Perl se také postupně vyvíjí (jako všechny jazyky, které se opravdu k něčemu používají) a dnes se v něm programuje přecejen trochu jinak (a líp) než před 10 lety..

Ale netvrdím že je potřeba začínat zrovna na Perlu..

Pavel S

Skoro v každém jazyce jde „Hello World“ napsat celkem jednoduše, ale Perl bych také pro začátečníka moc nedoporučoval. Na pokročilejší vlastnosti jazyka většinou člověk narazí poměrně záhy, když jej přestane bavit psát programy typu převodní tabulka z Celsia na Farenheita. Už jen, když člověk začne používat pole a dostane se ke skalárnímu kontextu, tak začátečník, který si zrovna nelibuje v logických rébusech, nejspíš zkolabuje. A takových věcí je tam víc (implicitní proměnné apod.). Pokud se chce začátečník později zabývat OOP, tak z objektových prostředků Perlu vyloženě čiší, že jsou dobastleny do neobjektového jazyka (alespoň u verze 5, se kterou jsem dělal naposled).

Kamil

Na skalárním kontextu pole nevidím nic složitého. (Ale uznávám že se najdou situace, kdy to může při nepozornosti splést.) To jak Perl pracuje s kontexty naopak IMHO začátečníkovi některé věci zjednoduší.

Použití implicitních proměnných je na libovůli programátora. Když nechce, uvede konkrétní proměnnou místo implicitní. (Výjimkou jsou snad jen parametry fce, ale tam je to ustálená rutina).

OOP v dnešním Perlu je Moose. Je to pořád Perl 5. Kdo si potrpí na syntaxi, může použít MooseX::Declare.

bar

Mam o neco starsiho syna a tohle ho docela chytlo:

http://smallbasic.com/

edmund

jako učitel informatiky na střední škole rozhodně také doporučuji small basic. Podle mě je to to nejlepší pro začátečníka, co je v současné době k dispozici.
Namátkou jen zmíním pár vlastností:
– je zdarma
– má velmi jednoduchou syntaxi a ovládání.
– kromě klíčových slov jako if, for, while atd obsahuje i v základu mnoho objektů, které umožňují dětem snadno dělat zábavné věci (práce se zvukem, stahování obrázků z internetu, malování, animace)
– je to vlastně pascal, želvička žofka i karel v jednom
– je dostupná česká dokumentace a počeštění nápovědy i IDE. (viz: moje stránky http://www.gyzamb.cz/index.php?tema=studium&predmet=informatika)

edmund

ještě dodatek:
výsledné programy se dají snadno publikovat na webu a je možné je pouštět i v prohlížeči. A nakonec snad jen, že small basic není žádné ořezávátko a dají se v něm napsat věci jako třeba toto: http://www.smallbasic.com/program/?ZZD394

balki

Install microsoft silverlight. A skoncil som :(

kem

Souhlas – viz prvni prispevek. Skoda jen, ze to je jen WINDOWS only.

Ladislav Toral

Docela povedený nástroj pro začátek byl kdysi RapidQ, vypadá jako hračka, ale má to solidní IDE i podporu MySQL a tuším že i DirectX.

Vikturek

A co takhle smalltalk? Puvode byl dokonce navrzen pro deti ;)

Biktop

Přesně. V době svého vzniku pro něj nebyl potřebný HW běžně dostupný, ale dnes bych asi svoje děti posadil ke Squeaku nebo něčemu podobnému.

Pavel S

Taky už hledám něco podobného pro syna. Zatím mne nejvíce zaujalo Kojo:
http://www.kogics.net/sf:kojo

Je to interaktivní prostředí s (nejen) želví grafikou, jako jazyk je použita Scala ( http://www.scala-lang.org/ ) Scala má IMHO docela vhodnou syntaxi pro začátečníky. Je to open source, multiplatformní (JVM), akorát bych to potřeboval počeštit, což zatím nějak nestíhám.

Satai

Scaly bych se bal. Je to vytecny jazyk, ale s mnoha „tohle ti vysvetlim pozdeji“ misty. Sam bych profesionalni projekty psal ve Scale, kdykoli je to mozne, ale kdyz se ma mila rozhodla naucit programovat, tak jsem radeji sahnul po Pythonu 3. V tom bych asi psat pracovne velke projekty nechtel (cimz netvrdim, ze to nejde, jen to neni muj salek kavy), ale zatim z nej mam pro vyuku dobry pocit. Netusim ale, zda je pro nej nejaka vhodna „detska“ knihovna se zvuky, malovanim… (Btw: jako ucebnici pouzivame Head First Programming, styl mohu doporucit. Male deti ale budou mit smulu, je anglicky).

Pavel S

Nevím, mně na Scale nepřijde nic divného. Pro děti se dá vybrat nějaká jednodušší podmnožina syntaxe nebo interní DSL – např. čtverec 100×100 v tom Koju se nakreslí tímto skriptem:

clear
repeat(4) {
    forward(100)
    right
}

Nevím, zda mi jiný jazyk nabídne nějak zvlášť jednodušší syntaxi. Uznávám ale, že chybová hlášení Scala kompilátoru jsou občas… – no, člověk musí přemýšlet, co tím chtěl kompilátor říct. To může být nevýhoda.

Satai

Presne tak, trebas chyby prekladace jsou prikaldem okamziku, kdy je student konfrontovany s necim, co pujde vysvetlit az o dost pozdeji. A to zaplatpambu za versi 2.8. DSL je dobry napad, ale porad tam bude, obavam se, patrne, ze maji k dispozici maly ostruvek v rozbourenem oceanu.
(A na Scale mi nic divneho neprijde. Ale studentum by asi prislo ;) )

Kazdoapdne dekuji za tip na studium, zkusim od nich obslohnout nejake finty a priklady.

Pavel

s uvedeným souhlasím, jen je zásadní rozdíl v tom, když jsem se u basicu kdysi učil vše sám z mnohdy pochybných zdrojů, někdy i v angličtině.. a situací, kdy na mě syn může zavolat a zeptat se, přijdu, vysvětlím. Nemusí vše chápat hned, ale o tom to taky mnohdy je :)

Tisnovsky

Logo:

clear
repeat 4 [
    forward 100
    right 90
]

ale to je jen veci zvyku, Ruby je take pekne citelne…

Aleš Roubíček

se všema těma zavináčema, dvojtečkama a otazníkama? Prosím vás. :)

Tisnovsky

Pri psani zakladnich skriptu (zadne OOP, jen cista algoritmizace) se s tim snad dite doufejme nesetka :-) Az u asociativnich poli dvojtecky pravda jsou, ale BASIC mel treba suffix $ pro retezce (a nektery i % pro integery atd.) a taky jsem to jako malej fracek nejak vzal za sve ;-)

Jinak jsem chtel napsat spis neco ve stylu „docela citelne“, byla to narazka na to, ze sam autor Ruby rika, ze se tento jazyk bude libit Perlistum.

Radovan

Zrovna ten $ u řetězců mi docela vyhovoval, člověk na první mrknutí oka poznal co je řetězcová proměnná, a u funkcí to platilo zrovna tak. Dneska mi tahle drobnost občas trochu schází :-(

Karel

Na vyuku programovani (dokonce hned (ciste) objektoveho) je dobry squeak.

Pavel S

Vypadá to docela zajímavě – zvlášť to s těmi roboty. Ale syntaxe Smaltallku mi přijde pro děti trochu složitá. Možná ale jde o můj nezvyk, Smalltalk neznám. Budu se muset na to podívat podrobněji.

Biktop

LOL! Syntaxe Smalltalku právě vychází z „výzkumů na dětech“ a byla navržena v první řadě s ohledem k dětem – vždyť to mělo být součástí interaktivních učebnic pro děti na základních školách. :-) Neznám jiný jazyk s tak jednoduchou, lehce pochopitelnou a intuitivní syntaxí, jako má Smalltalk. Program ve Smalltalku se čte jak dětská knížka. Žádné zbytečné středníky, žádná záhadná zaklínadla, žádné motání hlavy s různými knihovnami…
Existuje video, kde spoluautor Smalltalku, Alan Kay, ukazuje, co všechno dítě posazené k počítači se Smalltalkem dovedlo udělat a kolik mu to zabralo času (troufám si tvrdit, že většinu z toho by většina zde přítomných dospělých nezvládla v C++ či v Javě ani pod vidinou tučné odměny).

Říct, že „syntaxe Smalltalku je trochu složitá“ – to je snad podobné, jako říct, že pochopit princip tříkolky je pro děti trochu složité. :-)

Pavel S

OK, měl jsem napsat spíš „přístup“ než „syntaxe“. Takový Brainfuck má ještě jednodušší syntaxi, ale dost bych váhal, zda ho na výuku programování použít.

Nicméně myslel jsem tím, zda pojmy „zpráva“, „nil“, „super“ nejsou příliš abstraktní. Asi bych svému pětiletému synovi vysvětlil procedurální podmínku nebo cyklus, ale u toho Smalltalku nevím…

Biktop

Jednodušší možná, ale intuitivnější a přehlednější zcela určitě ne.

No a jsme zas u toho. A proč byste měl svého syna zatěžovat pojmy jako zpráva, nil, super…? Co myslíte, co bude pro vašeho syna syna pochopitelnější? Ale hlavně to nezaměňujte s tím, co je pochopitelnější pro vás! Kdybyste se celý život věnoval třeba Fortranu 66, kdopak ví, co by to bylo…:

program cisla;
var
i:integer;
begin
for i := 1 to 10
writeln(‚řádek č. ‚, i);
end.

nebo

void main()
{
int i;
for (i = 1; i <= 10; i++)
printf(„radek c. %dn“, i);
}

nebo

1 to: 10 do: [ :i | Transcript show: ‚radek c. ‚; show: i; cr ].

?
Přičemž v posledním příkladu si nemusí lámat hlavu s tím co to je program, kde se zapisuje, kde to poběží, jak se přeloží, jak se spustí, co znamená void, proč zrovna main, proč zrovna (), co je int, co je %d, co je n…
Zkrátka výzkumy ukázaly, že ten třetí způsob (pro někoho možná „světe div se!“) je pro děti velmi stravitelný a intuitivní. Podle mě byste svému pětiletému synovi nemusel vysvětlovat vůbec nic – jen byste mu ukázal, jak se to používá, on by se velice rychle zorientoval a na další věci by postupně přišel úplně sám. Za týden by s tím uměl pracovat mnohem lépe než vy. :-) Proč byste mu měl vysvětlovat podmínku nebo cyklus? Však on by na to přišel a ani by k tomu nepotřeboval vědět, že existují nějaké zprávy. Nebo byste mu ukázal, jak se to používá. Dětský mozek se učí úplně jinak než dospělý. Dá se říci, že nic neočekává. Nemá předem daná omezení. Prostě shromažďuje informace, třídí si je a propojuje vazbami. Neřeší zatím „proč“, ale „jak“. Existuje zajímavý průzkum provedený již zmíněným A. Kayem, který zjišťoval, jak určitý algoritmus (namalování kružnice) implementuje pětileté dítě, desetileté dítě, patnáctiletý a dvacetiletý student. Krásně na tom bylo vidět, jak se okolní svět a stereotypy postupně podepisují na našem myšlení – mnohdy nežádoucím omezujícím způsobem – nejstarší studenti zhusta nebyli s danou množinou jazykových prostředků (želví grafika, cyklus) schopni tu kružnici namalovat vůbec, zatímco nejmenší děti to rozlouskly hned. Ostatně podobný efekt se dá pozorovat při rovnání Rubikovy kostky. Dokázal byste ten algoritmus vysvětlit pětiletému dítěti? Přitom je dost pravděpodobné, že by mu stačilo ukázat, jak má ta kostka vypadat srovnaná a ono by si s tím poradilo možná mnohem rychleji, než vy.

Pavel S

Možná, Smalltalk neznaje, žiju v zajetí svých dosavadních zkušeností, ale intuitivnost a míra složitosti syntaxe třetího příkladu mi přijde uplně stejná, jako když napíšu v Ruby:

1.upto(10) { |i| puts „radek c. #{i}“ }

nebo ve Scale:

1 to 10 foreach { i => println(„radek c. “ + i) }

I u toho Smalltalku by se mé děti hned začali ptát na pravidla, kdy se píšou dvojtečky, velká písmena. Zrovna ten příklad mi přijde trochu problematický, – nejsem si jistý, zda z toho jednoduše odvodí, že show je metoda poslaná objektu Transcript – zvlášť v tom druhém použití po středníku.

Kromě toho v interaktivním prostředí Ruby (irb) nebo Scaly se ten kód také spustí v podstatě na Enter.

Josef Richter

v Ruby ještě líp jako:

(1..10).each {...}

mpro

Pre vyuku deti je mozne v prostredi Squeak pouzit rozhranie Etoys, kde nie je potrebne napisat na zaciatok ani jeden riadok kodu a predsa je ho mozne pouzit na tvorbu od jednoduchych hier az po… (fantazii sa medze nekladu) — http://squeakland.org , odporucam vzhliadnut aj Squeakers DVD http://squeakland.org/resources/audioVisual/#cat547

Tisnovsky

Ahoj, se ST samozrejme souhlas :-), ale mam jinou otazku – ten pruzkum s kreslenim kruznice je nekde k dispozici? Dost by me to zajimalo.

Jinak trosku od tematu – myslim ze zrovna v CR se delal trosicku jiny pruzkum. Nekolik deti ve svem nejmladsim veku vubec nemelo pristup ke knizkam, serialum atd. kde je nakreslene „detske“ usmivajici se slunicko s paprsky (vsichni ho zname z vecernicku atd.).

Potom nekdy okolo 4-5 roku tyto deti dostali za ukol nakreslit slunicko – a vzhledem k tomu, ze jejich mozek nebyl ohnut „mainstreamovym detskym“ videnim slunicka jako usmivajiciho se obliceje s paprsky, byly pry vysledky hodne zajimave (a vzajemne odlisne).

Aleš Roubíček

Pokud váš pětiletý syn umí číst, psát, zvládá lambda kalkul a slušně anglicky, tak klobouk dolu. Ze zkušeností vím, že s tím mají problém i třicetiletí vystudovaní inženýři.

Pavel

Umět číst a psát je snad v pěti něco neobvyklého? A jazyk je spíš otázka prostředí kde žije.

Aleš Roubíček

Vzhledem k tomu, že je to nauka základní školy, kam se chodí od 6+, tak tento úkaz u pětiletého dítěte považuji opravdu za neobvyklý. To, že pětileté díte dokáže přečíst pár písmen a s pomocí rodiče namalovat nějaká písmena, neznamená, že umí číst a psát.

Pavel S

Můj syn (vlastně teď již pár dní šestiletý) tak nějak nebere na vědomí, že ještě nechodí do školy. Číst se naučil v podstatě sám – v suačasné době je tak na úrovni konce první /začátku druhé třídy. Grafomotoriku má ještě ne zcela vyvinutou, takže psaní rukou je zatím slabší, což mu ale nebrání bez problému psát na počítači. Sedí třeba u Wordpadu, něco si píše a ptá se, kde se píše tvrdé a kde měkké i.

Jednoduché programátorké věci typu cyklus, podmínku apod. chápe (alespoň mám ten pocit). Pojmy OOP (objekt, metoda, zpráva apod.) se mi na něj zdají příliš abstraktní. Ale včera jsem s ním lehce začal Scratch a zdá se mi, že by se mohl chytit. Tam je to OOP a vlastně i vícevláknové programování tak nějak „mimochodem“ – skript patří objektu (spritu) a objekt může mít i paralelní skripty.

Yarda1

Alespoň mně pod W XP.
Ale jako neprogramátor bych si potřeboval občas napsat prográmek co bude umět poslat nějaká data na LPT nebo COM, nějaká data přijmout a zobrazit na displeji nebo napsat do textového souboru pro další zpracování, například ovládání nějakého AD, DA převodníku. A hodilo by se mi, kdyby mi po dobu co takový prográmek bude fungovat se mi vo toho nepletla wokna.
A nejsem si jistý, jestli by ještě tohle nějaký BASIC co to uměl pod MS DOS zvládnul.

Tisnovsky

IMHO to zvladne jakykoli BASIC spusteny z cisteho DOSu, co pomoci IN a OUT bude ovladat LPT a COM. Urcite GW Basic i QBasic.

Cejvik

Pěkný článek. V Pascalu pro DOS toho stačilo málo. Z novinek bych si vybral asi PowerShell v XP

Pavel S

Posledních pár týdnů mé děti docela chytlo Arduino ( http://www.root.cz/clanky/arduino-vyvojovy-kit-pro-hratky-s-hardware/ ). Musím říct, že úplně neplánovaně – nehodlal jsem je na tom to programování učit. I když se programuje v takovém osekaném C++, pro začátky programování by se nejspíše také dalo použít. Je ale více než vhodné připravit potřebné objekty a metody předem, aby nebylo potřeba vysvětlovat, co je datový typ uint8 apod. Každopádně ten „physical computing“ je úžasná motivace – prostě ty RGB LEDky po naprogramování blikají jak mají (nebo také ne :-). Dá se na to šáhnout.

Ta céčkovaská syntaxe mi tady pro výuku programování vadí asi nejvíc (i když v C a C++ jsem dělal skoro celý život) – ideální by bylo pro výuku programování na Arduinu udělat něco s jednoduchou a přímočarou syntaxí – nějaký Arduino4Kids. Už jsem uvažoval, že se do něčeho pustím sám, ale nějak není čas a nejsou lidi. Není to jen ten jazyk, ale je nutné i IDE, knihovny apod.

Biktop

„ale je nutné i IDE, knihovny apod.“ – na tom je krásně vidět, jak lidi počínaje určitým věkem nejsou schopni uvažovat jinak, než v určitých zaběhlých rámcích, na něž si sami zvykli. Nikdy nepodceňujte děti – mají oproti vám jednu obrovskou výhodu: jejich mozek je zatím v podstatě nezformovaný stereotypy, je stále otevřený novým věcem a připraven pochopit snadno to, s čím vy už byste měl značné potíže. Že něco připadá komplikované vašemu mozku (kvůli různým restrikcím, jež si vytvořil během života na základě nějakých zkušeností) vůbec neznamená, že to bude připadat komplikované i mladému mozku dítěte.

Algolský jazyk, knihovny, IDE – to vše je jen jeden z možných přístupů a v žádném případě nelze říci, že optimální. Rozšířil se jen z historických důvodů, nikoli z důvodů nějaké své superiority nad ostatními přístupy k programování – pro sálové počítače byl asi nejpraktičtější a dnešní počítače to zdědily ze zvyku programátorů a inženýrů těch sálových strojů. K programování ve skutečnosti žádné IDE ani knihovny potřeba nejsou – a už vůbec ne pro „dětské“ programování.

Já bych žádné nové jazyky 4kids nevymýšlel – to, co vymysleli v minulosti lidé, kteří se na to specializovali, asi těžko někdo z nás přetrumfne, spíš bych se podíval do historie a zkusil najít něco v ní, co by se dalo aplikovat. A nejde jen o jazyky pro výuku programování: Python, Perl, Java, C# – to všechno jsou jazyky, které byly zastaralé a překonané už v okamžiku, kdy je dotyční autoři vymýšleli.

Pavel S

„K programování ve skutečnosti žádné IDE ani knihovny potřeba nejsou.“ No jistě, algoritmizace se dá naučit i s papírem, tužkou a gumou (sám jsem toho příkladem), ale přímo na počítači je to přeci jen o něco záživnější. Knihovny či API k programování nutné IMHO jsou – vytvářejí potřebnou úroveň abstrakce. Jistě, lze tisknout bez knihovny či API tak, že na LPT portu či USB rozhraní nastavuji na jednotlivých pinech LOW a HIGH úrovně, ale použít knihovnu či API je nepoměrně snazší.

Biktop

Asi takhle. Myslet si, že k programování nutně potřebuji IDE a knihovny je asi podobné, jako myslet si, že k programování nutně potřebuji děrovačku a kazetopáskovou jednotku.
Abych mohl tisknout na konsoli, potřebuji v C knihovnu. V Pascalu nikoli. Asi tak… Kdybych měl seznamovat děti s počítači, určitě bych jim nemotal hlavu s nějakými knihovnami.

Pavel S

No ano, pokud se jedná o výstup na konzolu, tak návrh jazyka může zvolit buď přímé zabudování do jazyka (writeln v Pascalu) nebo knihovnu/API (knihovna stdio v C nebo objekt Transcript ve Smalltalku). Výsledek je dost podobný. Nicméně protože jsem tohle vlákno začal o Arduinu a „physical computing“, jedná se o ovládání stovek druhů různého hardwaru. V tom případě by bylo zabudování do jazyka poměrně problematické a jedinou schůdnou cestou jsou knihovny (bavíme-li se o začátečnících). Netvrdil jsem, že knihovny jsou nezbytné pro jakoukoliv výuku programování, ale jen pokud chce někdo použít Arduino nebo něco podobného, kde je potřeba ovládat předem neurčený hardware.

Ruby

Vzhledem k tomu, že nakonec se OOP stejně dnes nikdo kdo to myslí s programováním vážně nevyhne, zkusil bych Ruby – OOP tam je všude, ale pro začátek ho není nutné pochopit (na tom by většina začátečníků ztroskotala, proto nedoporučuji třeba Javu) a lze psát „normálně“ (vznikne automaticky jeden objekt, a to co jste napsali je jeho metoda main která bude spuštěna). Pak se přidají „podprogramy“ (metody), …

Biktop

„Lepení kódu“ bych s „vážným programováním“ opravdu nezaměňoval. :-) Lepič kódu se OOP (je otázkou, kolik toho z OOP opravdu pochopil; standardem je skoro nic) fakt nevyhne, pro člověka, který se programováním chce zabývat vážně, je to jen jeden z přístupů k praktickému návrhu programu. Člověk, který to myslí s programováním vážně, se především musí naučit myslet algoritmicky – a to nemá s OOP vůbec nic společného.

Ruby

Kde se tu vzaly ty zmínky o lepení kódu? To, že je třeba se naučit algoritmizovat, je fakt se kterým asi nikdo nebude polemizovat. Ano, k tomu OOP potřeba není – však jsem taky napsal že v Ruby se dá začínat bez OOP. A za velkou výhodu Ruby považuji že je tam pak celkem bezbolestný přechod k OOP (a pak už i kamkoliv dál – Java, C#, atd.). A jak jsem už napsal – člověk, který to dnes myslí s programováním vážně, se OOP nevyhne. Takový člověk totiž dřív nebo později bude spolupracovat s jinými programátory, a pro spolupráci větších týmů je OOP dnes nejrozšířenější způsob a de facto standard (viz rozšíření Javy u doopravdy velkých projektů). Můžete sice zkoušet i jiné postupy než OOP, ale znalost OOP je dnes prostě povinnost.

blizzboz

OOP je práve jednoduchšie ako procedurálne programovanie. a aj začiatočník ho dokáže pochopiť rýchlejšie:

príklad procedurálneho kódu:

nakresli(hWnd, stvorec(Rect(2, 2), #FF0000));

oop:

var stvorec = new Stvorec();
stvorec.Farba = Farba.Cervena;
stvorec.velkost = 2;
stvorec.nakresli();

Biktop

Však netvrdím že ne. Ale není to nezbytné.

BTW – tenhle příklad zrovna výhody OOP moc neukazuje. Zato ukazuje, jak by objektový jazyk vypadat pokud možno neměl. :-)

blizzboz

>>Zato ukazuje, jak by objektový jazyk vypadat pokud možno neměl

dôvod? a ako by mal teda objektový jazyk vyzerať?

akillah.trillah

a co treba tohle ??
Ctverec new
strana: 2;
barva: Cervena;
nakresliNa: Obrazovka.

blizzboz

rozdiel je akurát v tom že z tvojho zápisu nie je jasné ku ktorému objektu tie hodnoty priraďujeme. ten prvý zápis je zrozumiteľnejší.

Jiří Knesl

Takhle je to jasnější?

c := Ctverec new.
c strana:2.
c barva:Cervena.
c nakresliNa:Obra­zovka.

blizzboz

Používať ako identifikátor premennej jedno písmeno je nesprávny programátorský návyk. A myslím že nemá zmysel vymýšlať novú sntax jazyka keď vačšina programátorov je zvyknutá buď na C – like syntax (Java, C#, C++) alebo na pascal like syntax (Delphi, Ada, Eiffel). Aký zmysel má zámena operátoru „=“ operátorom „:“ a nahradenie bodky bielym znakom space? a nahradenie stredníka bodkou? keď uvedený zápis je vpodste o tom istom.

citujem:

„Každého pseudoprogramátora jednou za čas popadne jakési zvláštní vnitřní puzení, vezme si existující formát nebo jazyk a dá se do díla. Tady jsou závorky normální, řekne si, tak tam dáme složené. Nebo dvojtečky? Jo, dvojtečy budou nejlepšejší, jsou tak půvabné. Tady jsou zas hvězdičky, tak místo nich dáme stříšky, místo uvozovek použijeme dvě nebo tři mezery, och, to bude _tak_ krásné! A „nový“ bezvýznamný jazyk nebo formát je na světě.“

Pavel Křivánek

To není žádná nová syntaxe. Pochází z poloviny sedmdesátých let, je na ní založena syntaxe řady jiných jazyků (včetně Objective-C) a od C nebo Pascalovské syntaxe se liší především v tom, že se jedná o syntaxi metajazyka (podobně jako u Lispu) a objektovým systémům sedí jako prdel na hrnec :-)

http://esug.heeg.de/whyusesmalltalktoteachoop/smalltalksyntaxonapostcard/

Dvojtečka není žádný operátor, je to jen označení, že zpráva v daném místě přijímá argument, bílé znaky místo teček a tečky místo středníků zase souvisí s tím, že se autoři snažili přiblížit angličtině.

http://www.root.cz/clanky/squeak-syntaxe-smalltalk/

blizzboz

A čo je na tej syntaxi také objavné? Veď sa len vymenili niektoré znaky a tá výmena vôbec nebola nutná. Smalltalk nepatrí do reálneho programovania, v praxi sa používa len výnimočne… jednoducho Smalltalk nikto nechce, možno aj kôli tej šialenej syntaxi, ktorá sa neprispôsobila návykom mainstreamu. objective C detto, veď proti tej syntaxi plnej hranatých zátvoriek sa búria dokonca aj samotní applisti: http://chod.sk/aqxz1

Pavel Křivánek

Podívejte se na tento graf, snad vám konečně dojde, proč Smalltalk nemá Céčkovskou mainstreamovou syntaxi:
http://www.digibarn.com/collections/posters/tongues/ComputerLanguagesChart-med.png

Šílené hranaté závorky v Objective-C není výmysl přenesený ze Smalltalku.

Jiří Knesl

Oni nic neměnili doboha. Nevíte nic o historii? C jazyky byly jen lehký obal nad assemblerem, do kterého se objektové programování dobastlovalo dodatečně. Docela slušně v Obj-C, ne moc dobře v Javě a C# a naprosto katastrofálně v C++.

Smalltalk, Self, to jsou jazyky, které byly vymyšleny od začátku čistě objektově.

Ale tak hlavní rozdíly:

1) velká výhoda je zápis názvu parametrů, takže hned vím co dělá (že je to delší nevadí, kód se mnohem častěji čte než píše (kdesi jsem četl, že to měřili pluginem v emacsu u velké skupiny vývojářů a vychází to read 90 % : write 10 %):

articleController render:list page:3 format:xml.

než:

articleContro­ller.render(ar­ticleController­.ACTION_LIST, 3, viewRenderer.FOR­MAT_XML);

2) ukončování příkazů . a tam, kde pracuji dál s objektem, použiju ; – to je syntax běžná z normálního jazyka – podobně se spojují i věty.

3) Běhové prostředí je nesmírně dynamické, je to jako byste měl možnost za běhu v linuxu vyměnit jádro, prohodit true a false, připojovat a odpojovat hardware. Vše je objekt, vše jde změnit, vše jde rozšířit. Věc, kterou ve skutečně objektovém jazyku uděláte na pár řádek (změna chování třídy), musíte v Cčkoidních jazycích řešit Decorator patternem nebo připojováním strategy. V selfu (a nebo třeba javascriptu) když se mi metoda v objektu nelíbí, tak ji prostě vyměním za běhu jinou metodou.

4) Pojmenování příkazů, konstant, tříd (true false vs. YES NO) v jazycích typu Obj-C vedou k tomu, že program daleko víc připomíná psanou angličtinu.

Co se pak naučí nový programátor rychleji? Něco, co mu připomíná jazyk, který umí (tedy angličtinu), nebo něco, co mu ostatní vnutí jako „defakto standard“, což je pro takového člověka druhořadé.

Byla chyba, že C nezůstalo u svého „high-level“ assembleru a numerických výpočtů, byla chyba, že interpret Smalltalku stál ve své době takový balík. Být tehdy překladač zdarma, dneska byste tu hájil, jak je Smalltalkovská syntax „defakto standard a C nikoho nezajímá“.

akillah.trillah

nojo, protoze sem tam nedal pre a ten k*k*t (redakcni system prejze) sezral odsazeni.

objekt
  zprava;
  keywordZprava: 's' nejakejma: 'parametrama';
  zprava;
  ...
  posledniZprava.

jednak vetsina slusnejch smalltalku autoformatuje (podle nastaveni coding conventions) pred ulozenim (a kdyz uz to umi, tak samozrejme i na vyzadani …), druhak ani kdyby to bylo vsechno na jedny radce tak to vyznam nemeni (tohle neni python, to je [rozumny] programovaci jazyk ==> odsazeni je „mozne“ (automaticky) diky syntaxi a ne naopak).

IMO smalltalk, lisp a dejme tomu haskell jsou to, okolo ceho by mel kazdy kdo si chce rikat programator alespon projit okolo. To ze umi odnekud okopirovat javovej zdrojak a vsechny potrebny XML z nikoho profesionala nedela, stejne jako to ze sedel v motokare z nikoho nedela ridice zavodaku.

Zrovna tak vsichni ubozaci co se ohani design patternama by meli tak dlouho zkoumat nove programovaci jazyky nez zjisti, ze vetsina z nich (patterns/vzoru) vznikla jenom proto ze half-assed staticky typovane jazyky s jednoduchou dedicnosti a single-dispatchem nejsou „dostatecne mocne“ aby to vyjadrili proste a jednoduse, takze holt vznikla sada recepisu „a protoze nam to jazyk neumoznuje primo, obchazime to takhle“ (visitor, factory, singleton …)

podlesh

Ach jo, nedá mi to: s těmi „vzory“ je to opačně, to nejsou nějaké „recepisy“ které kdosi vymyslel protože ho osvítil duch svatý. Je to pokus o formalizaci již používaných postupů a technik (tady chyběl termín, protože se jedná o vyšší úroveň než „algoritmus“ a „datová struktura“) v různých jazycích a prostředích.

Design patterny (obecně, nikoliv zrovna ty příklady uvedené v GoF) tedy existují v lispu, smalltalku, C++, Javě i assembleru. Samozřejmě všude vypadají jinak, někde je lze zapsat přímo v jazyce (LISP, méně již Smalltalk, někdy i C++), někde se musí trapně psát ručně (low-level jazyky bez metaprogramování: Java, C).

Pokud jsem o dva odstavce výš napsal „pokus“, je to protože se dle mého názoru jedná o naprosté selhání. Místo toho jednotné koncepce pro popis programů, která by spojila všechny programovací jazyky, zde máme jenom další cargo cult. Můžete se cítit povzneseně že tento cargo cult nevzýváte, ale to ještě neznamená že automaticky víte o co jde.

broukoid

Tohle nema s oop temer nic spolecneho.

v podstate stejne muzu mit:

Ctverec *ctverec = ctverec_new();
ctverec->barva = BARVA_CERVENA;
ctverec->velikost = 2;
ctverec_nakres­li(ctverec);

a to je ciste C,

nebo

ctverec.nakres­li(0xff0000, 2);

a to muze byt cista Java (ne ze bych javu povazoval za dobry priklad objektoveho jazyka..)

A abych nebyl OT: lehce me zarazila ta „samozrejmost“ zamitnuti jazyka „Logo“ jako snahy naucit deti lisp..

Proc by melo byt spatne ucit deti lisp? Ne opravdu, PROC?

Mam pocit ze 99% lidi co si to mysli o lispu moc nevi, maximalne s tim stravili par hodin na skole.

Vetsina lidi se mnou asi souhlasit nebude, ale ja lisp (treba scheme) naopak povazuji za extremne vhodny jazyk pro vyuku programovani.

Biktop

Já sice Lisp nepovažuji za jazyk extrémně vhodný pro výuku programování, ale zato ho považuji za extrémně vhodný pro programování. ;-)

blizzboz

pretože s javou sa môžu uplatniť na trhu práce, čo sa o exotickom Lispe povedať nedá.

logik

Hezká demagogie. Co takhle procedurální styl

nakresliCtverec(2,2,cer­vena)

u toho OOP taky nepíšete žádnej handler na okno. Nepleťte si nízko/vysokoú­rovňovost s proceruálním/ob­jektovým programováním.
Jsou to dvě naprosto rozdílné věci.

OOP má smysl od větších celků, kdy spolu začne interagovat více objektů.
To ale člověk má šanci dobře pochopit až teprv zvládne jednoduchou
interakci jednoho objektu a tam stačí procedurální programování,
popř. leightweight OOP, které je i v pascalu.

Honza

Kdo to myslí s programováním vážně, nevyhne se funkcionálnímu programování.

Ruby má strašně komplikovanou syntaxi, to je problém na kterém ztroskotá spousta začátečníků ve spoustě jazyků.

JaGa

Já můžu doporučit FreeBASIC. http://www.freebasic.net
Multiplatformní kompilátor…

Pavel S

Máte někdo zkušenosti s tímhle: http://scratch.mit.edu/ ?

Tom22

Ano – doporučuji, dětem (10 s 8 l.) se to líbilo. Mě taky ;)
Děti zvládly docela rychle napsat jednoduché hry a krátké animace.

Mintaka

Ano M.I.T. Scratch doporučuji. Používáme ho na základní škole. Jednodušší věci zvládají už i 8 leté děti.

Ty starší baví s Robocode, GameMaker, český Petr nevypadá špatně, ale u nás se neujal. Zajímavá je i Alenka http://www.alice.org/

Ale kde to jde, tak ukazuji, jak by se podobné věci daly snadno vyřešit v Pythonu + PyGame případně podstrčím kostru programu aby si ji žáci mohli upravit.

Teď třeba pár čtvrťáků (neplánovaně) zaujaly zdrojáky Barbie Seahorse http://www.pygame.org/project-Barbie+Seahorse+Adventures-406-.html

Python mi opravdu přirostl k srdci.
Vůbec bych ale nezavrhoval další jazyky a prostředí jako Javu, JavaScript, PHP, Flash, Logo, Karla, Baltíka,… podstatné je, aby to děti bavilo a aby se při tom naučili zjistit jaké možnosti jim daný jazyk/prostředí nabízí a jak počítači říci, co by chtěli aby udělal, samozřejmě také algoritmizaci, dekompozici, abstrakci …

Pavel

Se Scratchem zacal syn, kdyz mu bylo 9 – doporucuji. Krasne graficky podany, jednotlive elementy programovaciho jazyka se tam nepisi, ale skladaji graficky. A pritom i to dite pochopi konstrukce typu smycka, IF a pozdeji i udalosti – vsechno krasne objektove. A lokalizovane do cestiny.

Daji se v tom delat i minihry, ruzne animace, i zvuky, proste to, co ty deti bavi.

Zkouseli jsem i Robocode (to zas zaujalo mne;-), ale ta bariera zakladu Javy a SDKcka Robocode – ta je docela velka. Ale az jednou zacneme s javou, tak to zase obnovime.

Mr. Cidermaster

Asi tady budu za exota, ale znám nemalé množství lidí, kteří začínali s „programováním“ pomocí HyperCard – http://en.wikipedia.org/wiki/HyperCard Svého času nepřekonatelná záležitost. V Česku asi neznámá vzhledem k malému rozšíření Apple platformy. Tady v US je to ale legendární záležitost a mnoho mých kolegů na ni vzpomíná s nostalgií. Snad prý i WWW se nechal nějak inspirovat.

swosh

Ten mi příde, že pro děti, aby je to bavilo a po pár klicích měli něco, co se hýbe a mění barvy

swosh

A pak nejrychleji Javu. V dobrých ide se dělají špatně syntaktický chyby a ty nejvíc odrazují

Svoro

Naozaj mat jazyk, ktorym si decko moze nieco vyskusat na kompe je dobry napad.
Podla mna ak je tym kompom nieco s Win tak mate k dispozicii VB Script. A je tam este aj to oblubene GOTO, sice v podobe:
On Error Resume Next
‚.. do something
On Error Goto 0

pas

Po mnohaletých zkušenostech (od osmibitových Basiců, přes Pascal, C++, JavaScript, …) jsem momentálně zakotvil u Flashe a musím říct, že kupodivu i pro děti by to mohla být dobrá volba – už proto, že tam můžou začít malovat, v dalším kroku přidávat kousky kódu k namalovaným objektům, aby se to hýbalo, aby to mělo nějakou interaktivitu… v dalším kroku pak oddělit kód od grafiky (začít používat třídy)… až můžou skončit u plně nevizuálního programování se všemi správnými návyky, navíc v moderním jazyce, který je podobný Javě, na kterou pak třeba můžou snadno přejít.

Nevýhoda je, že Flash (CSx) není zdarma. Můžou sice použít open source SDK, které Adobe taky nabízí (třeba s Notepadem nebo s Eclipse), ale to by přeskočili rovnou k tomu nevizuálnímu programování, což by asi děti-začátečníky nebavilo.

Frettie

Nu, autorem obrázku určitě nebude Wikimedia Commons, spíše přímo autor a zdrojem bude Commons.

Frettie

Za Wikimedia ČR děkuji. :)

Pavel Křivánek

Pro úplný začátek doporučuji zavrženého Karla, třeba přímo webovou verzi: http://karel.oldium.net/

Pro daný účel je opravdu geniální a hodně se mi osvědčil. Ukáží se na něm a rozvinou schopnosti algoritmizace a dají se pro něj vymyslet zajímavé netriviální úlohy. Navíc je opravdu jednoduchý, takže pokud se ukáže, že je to pro dítě příliš nízká laťka, může se po pár dnech prostě přejít na něco dalšího.

JavaScript bych nezavrhoval, i když po syntaktické stránce zdědil po C hodně neduhů (oddělenost příkazů a výrazů, indexování od nuly, které je pro jazyk bez ukazatelů naprosto nesmyslné, příšerný cyklus for, poměrně složitý zápis uzávěrů atd.). Na druhou stranu má skvělou dostupnost, slušnou interaktivitu a praktický potenciál.

Pro děti je velmi důležité si moci okamžitě osahat výsledky. V tomhle je Squeak (resp. Smalltalk obecně) nedostižný. V jeho interaktivním exploratorním prostředí se naučí orientovat v obrovském množství cizího kódu a využívat ho. Na druhou stranu, pokud by byl vhodný pro malé děti, Alan Kay by se neobtěžoval s vymýšlením EToys ;-)

Josef Richter

Vypůjčím si pár příkladů z Why’s poignant guide to Ruby:

5.times { print "Hello!" }

exit unless "restaurant".in­clude? "aura"

['toast', 'cheese', 'wine'].each { |food| print food.capitalize }

Zkuste si ten kód sami nahlas přečíst a zamyslet se co asi udělá :-) Tohle je velká výhoda kódu ruby, že mu obstojně porozumí i neprogramátor. Zároveň je to dostatečně silnej nástroj, ve kterým se dají napsat prakticky jakákoliv webová aplikace.

Přijďte se poptat na irc://chat.fre­enode.net/ruby­onrails.cz (pro přístup můžete použít i http://webchat.freenode.net/)

Pár zdrojů:
Learn to Program
Humble Little Ruby Book

Biktop

A v čem je to lepší než historií prověřený a lépe navržený Smalltalk? ;-)

balki

Tiez mi to pripomenulo smalltalk.

Josef Richter

To já nevím. Smalltalk detailně neznám, ani nikde netvrdím, že Ruby je lepší. Jen píšu, že „ruby má hezkou syntaxi“ – je na tom něco špatnýho?

Biktop

To jistě ne. Já jen lehce naťukávám, jestli náhodou není lepší se učit na díle mistra samotného než na díle člověka, který se tím mistrem sám nechal inspirovat, aniž by ovšem dosahoval jeho schopností. ;-)

Josef Richter

Neumím posoudit jestli v tomto případě „učeň nedosahuje schopností mistra“. Nicméně když už se učím programovací jazyk, tak možná není špatný zaměřit se na něco prakticky využitelnýho. Ve Smalltalku a jeho frameworcích jako Seaside dneska píše naprosto zanedbatelná skupinka lidí, ve srovnání s Ruby, Python, PHP a jejich frameworky. To sice nic nevypovídá o jejich „kvalitě“, ale silně to vypovídá o jejich užitné hodnotě.

Honza

Ruby má zbytečně komplikovanou syntaxi. Koukněte o kolik srozumitelněji se to dá napsat například v Pythonu:

print 5 * "Hello!"

if "aura" not in "restaurant":
    exit()

for food in ['toast', 'cheese', 'wine']:
    print food.capitalize()
Josef Richter

co je na tomhle v ruby o tolik komplikovanější než v pythonu? ruby a python mi přijdou oba v pohodě a komplikovaný zhruba stejně. u ruby vidím výhodu v tom, že ta syntaxe se výrazně víc podobá skutečné řeči:

viz třeba věta „Exit unless ‚restaurant‘ includes ‚aura'“ je normální hovorová angličtina zatímco „If ‚aura‘ not in ‚restaurant‘ exit“ je taková pakistánská pseudoangličtina.

Honza

Proč ten první příklad:

5.times { print "Hello!" }

obsahuje nějaké speciální složené závorky, když na první pohled je zřejmé, že by to celé dávalo smysl i bez nich, jako třeba v tom druhém příkladě? Proč ten třetí příklad obsahuje složené závorky a znaky pipe? (to jsou jen řečnické otázky) Ruby strašně trpí tím, že jeho autor myslel především na to, co ten jazyk bude umět. Bohužel přitom zapomněl na lidi, kteří budou ty programy psát, a při snaze mít originální syntaxi ji splácal dohromady podle toho, na jaké klávesy zrovna narazil na klávesnici. Přitom by ten jazyk mohl být krásně přehledný a snadno čitelný i pro člověka, který netuší na co jsou všechny ty zbytečné endy, @, #, |, <<, atd., i při zachování všech možností, které nabízí.

Mimochodem věta „If ‚aura‘ is not in ‚restaurant‘ then exit.“ je v angličtině zcela běžná.

Josef Richter

to je to stejný jako ptát se proč se array píše do hranatých závorek (prakticky ve všech jazycích), ne? prostě je to nějaká zkratka, abychom nemuseli psát array foo,bar nebo něco takovýho. ty znaky cos napsal se tuším v pythonu používají taky.

ale jinak zrovna ruby a pyhon mi přijdou natolik podobný a natolik přehlednější než třeba PHP apod., že diskutovat kterej z nich je lepší je celkem zbytečný. mně se líbí oboje. Ruby mi trochu líp leze přes pysky, ale chápu, že někomu se zas víc líbí Pyhthon.

V pythonu jsem experimentoval s Django, CherryPy, BottlePy a líbily se mi, ale nakonec jsem zakotvil u Rails a Sinatra.

akillah.trillah

hmmm, a v po***nym pythonu nemusime odradkovat a odsadit ? jak je z toho na prvni pohled jasny ze to tam musi byt ?

keff

Já bych řekl, že po dětech chceme aby si vyzkoušely kód psát, ne číst – a to jde u ruby o dost hůř (nebo alespoň mě vždycky přišlo, že je optimalizovaná pro čtení, ale jinak je její syntax sugra hodně nekonzistentní a nepředvídatelný).

Josef Richter

nevím. chce to zkusit. je fakt že obvukle si nejdřív přečteš nějaký příklady a zkusíš to syntaxi trochu nasát. tady může ta „čitelnost“ trochu pomoct. pak to psaní jde asi taky trochu přirozeněji. ale netvrdím, že Ruby je perfektní. jen ho předkládám jako jednu z těch hezčích možností. proč ti přijde že je nekonzistentní a nepředvídatelný? mně to tak nepřišlo v době kdy jsem se k němu jako programátorská lama dostal.

Murdej

Programuji už od minulého století, prošel jsem od basic g na PMDčku přes pascal, C, C++, js, java …. až pythonu ale vím o jedné situaci kde by se to zlé goto hodilo. Je to tehdy když mám mnoho vstupních paramatrů a mezivýsledek můžu získat někdy z jednoho parametru ale v jiném případě kombinací více paramatrů a voláním dalších funkcí neco jako

if podminka :
  mezivysledek = ...
  goto krok2

if podminka :
  neco udelej
  if jinapodminka:
    mezivysledek = ...
    goto krok2
  ...

:krok2
  neco udelej
  return

Da se to udelat bud slozitym if-else stromem – tim se to ale zneprehledni nebo:

 while True:   if podminka:     mezivysledek = ...     break   if podminka:
Murdej

… to je ten zvyk odsazovat enterem :) …

while True:
  if podminka:
    mezivysledek = ...
    break
  if podminka:
    ...
  break

neco udelej
return

s timto je to prehlednejsi, ale je tam matouci ten while. Tak by me zajimalo nejake elegantni reseni.

Biktop

Ano, jenže jakmile je třeba použít goto (nebo nějakou jeho zakuklenou variantu v podobě break či continue), je to jasný příznak, že problém byl nesprávně faktorisován. Což ovšem nemusí být samo o sobě chybou programátora, může jít o nedostatek jazyka, jenž neposkytuje adekvátní vyjadřovací prostředky, umožňující lepší uchopení problému. Ale ve většině případů je to ta první varianta. :-)
Já jsem si to uvědomil ve chvíli, kdy mou nenávist k Forthu vystřídala láska k němu. To je příklad jazyka, jenž tvrdošijně vzdoruje všem pokusům vyřešit nějaký problém nevhodně. Není to jazyk vhodný pro dnešní dobu, protože kde by dnešní programátor nějakou věc spláchnul konstrukcí přišedší mu zrovna na jazyk (např. s pomocí košatých podmínek, smyček a jejich předčasných či mimořádných ukončení), nějak by to fungovalo a šel by od toho, tam by to ve Forthu obvykle nešlo nebo by to vedlo k neúnosně složitým, nešikovným a nečitelným konstrukcím. Správná varianta pak vynikne ve svém plném lesku, neboť bývá naprosto samodokumentující, jednoduchá a čitelná i pro člověka tento do jisté míry obskurní jazyk neznajícího.
Tváří v tvář takovému vývojovému nástroji si ale člověk rychle uvědomí, jak často věci prostě nějak zaonačoval aby to nějak fungovalo nezamysliv se, používá-li správnou techniku. Jestli by náhodou nebylo lepší jednu rutinu faktorisovat na čtyři menší, co by která z nich měla dělat, jaké by měla mít parametry a co by měla vracet…
Elegantnost řešení ale není jen nějakou libůstkou teoretiků a puristů, je to základní předpoklad tvorby programu, který je robustní, dobře udržovatelný, dobře laditelný a minimalizující možnosti výskytu chyb. Správně navrhnout datové struktury, faktorisaci, rozhraní mezi rutinami – to je podobné, jako mít správnou techniku, správný prstoklad třeba při hře na piano nebo při psaní na klávesnici: jde to i bez toho, ale od jistého bodu složitosti se to začne čím dál více projevovat jako zásadní limitující faktor.
Správná technika – v jakémkoli oboru – se každému začátečníkovi zdá zpočátku spíše jako omezení, stejně tak bude působit i na lidi, kteří se naučili různým zlozvykům.
Nutnost použít nějakou formu příkazu skoku je podobná nutnosti vzít si lék proti bolesti zad nebo prášek na spaní. Cílem by mělo být odstranění příčin těch problémů, na něž potřebuji dané léky, nikoli stát se závislým na lécích.

broukoid

pri cteni tohoto prispevku jsem se tetelil blahem – nadherne napsano, souhlasim s kazdym pismenem a asi si to vytisknu a vylepim v kanclu na zed!

Tisnovsky

presne, i kdyz je to mozna naopak – tvorba delsich slov je tak komplikovana ze to clovek radeji vzda a vyda se tou spravnou cestou. Napriklad diky Forthu pisu velmi male, specializovane a testovatelne metody i v Jave a ma to dalsi vyhodu v tom, ze se usetri cas s psanim dokumentace, protoze kod triradkove vhodne pojmenovane metody je „zrejmy“ na prvni pohled :-)

Cygnus

Zajímavé …

Forth jsem nikdy nepoužíval, ale zkušenosti mne donutily prakticky k stejnému chování i v Z80 assembleru (ve kterém dnes píšu už jen pro radost).

melkor

GOTO je neco jako airbag, je dobre ho mit, kdyz vsechno ostatni selze, ale neni dobre ho pouzivat casto :-)

Radovan

To je moc pěkná formulace :-D

BLEK.

Nejhorsi je, kdyz se do programovani mota clovek, ktery nerozumi, proc jednotliva pravidla vznikla, ale ta pravidla si vynucuje, protoze nekde cetl, ze to tak ma byt, ze se pak program spravne faktorizuje, a ohani se recmi o „cistem“ programovani blabla.

Pravidlo: funkce maji byt male.
Dusledek: velkou funkci rozbijime na vice malych tak dlouho, az z toho ocima zjistit control flow je prakticky nemozne, o mnoho horsi nez z jedne velke funkce.
Priklad: memory management v Linuxu je rozsety mezi spoustu funkci v fs/ a mm/, cim je jich vic, tim je horsi v tom udelat nejakou analyzu a napr. se ptat kde muze byt vzat dany zamek nebo kde se muze cist ci zapisovat nejaka promenna.
Pravidlo: kod nema funkcionalitu nikde duplikovat.
Dusledek: tak dlouho vymyslime ruzna rozhrani mezi castmi kodu, co delaji podobne veci, az to sezere vic casu nez co se usetri deduplikaci.
Priklad: http://www.redhat.com/archives/dm-devel/2009-May/msg00055.html — zde jsem poukazal na problem a podarilo se mi to zarazit, protoze sdileny kod byl tak velky jako dva samostatne ovladace a stejne nemel dostatecnou funkcionalitu. Kdyby se to nechalo programovat podle tech „pravidel“, tak je z toho kodu neudrzovatelna biomasa nebo rovnou mrtvy projekt.
Pravidlo: nema tam byt goto.
Dusledek: misto goto udelame bool promenne, podle kterych se jednotlive casti funkce vykonavaji ci nevykonavaji (a je to nakonec min srozumitelne nez to goto).
Priklad: clanek „goto considered harmful considered harmful“.
Pravidlo: rozhrani maji byt snadno srozumitelna a pouzitelna.
Dusledek: rozhrani soustavne menime a doufame, ze ta pristi verze rozhrani bude lepsi nez ta predchozi, s kazdou zmenou se to ovsem zeslozituje.
Priklad: Documentation/sta­ble_api_nonsen­se.txt nebo tez znamy Linusuv vyrok „Linux is bloated“ (ktery byl pronesen na to, ze nekdo benchmarkovanim Linuxu zjistil, ze se jadra 2.6 v novych verzich postupne zpomaluji).

Abych to shrnul, nejaka pravidla o programovani vyctena z knih jsou opravdu na nic, protoze jsou legitimni situace, kdy se ta pravidla musi porusovat, a ty situace se clovek nauci jen zkusenosti.

broukoid

To je vsechno pravda, ovsem vsechny „protipriklady“ jsou VYJIMKY. A vsichni vime ze zadne pravidlo neni absolutni. Proto tvrdit ze „pravidla vyctena z knih jsou na nic“ na zaklade nekolika velmi specifickych pripadu je nefer.

Abych to parafrazoval: kdyz maminka pujde nakoupit a rekne petiletemu diteti, aby neotviralo cizim lidem, tak az zacne horet, dite neotevre hasicum a umre. Proto by deti nemely poslouchat maminky a vsem otvirat :)

Fakt je, ze zadna pravidla nejsou dokonala a vzdy platna. Proto clovek musi ziskat zkusenosti, aby vedel, kdy pravidla ma cenu porusit. Odsoudit na zaklade nekolika vyjimek cele, jinak uzitecne pravidlo je hloupost.

PS: dovolim si lehce pochybovat o tom zda BLEK. cetl kritizovany prispevek – pise se v nem ze goto je bud znamka spatnych navyku, nebo nutnost dana neschopnosti daneho programovaciho jazyka resit urcite problemy jinak. Takze v podstate „goto je vesmes hnus, ale nekdy je nutne pri pouziti primitivniho jazyka“

BLEK.

No, já tvrdím, že pravidla vyčtená z knih jsou na nic. Pokud člověk to pravidlo nemá vyčtené, ale používá je, tak pochopí, kdy funguje a kdy nefunguje.

Ještě jsem neviděl text o stylu programování, který by ukazoval i negativní důsledky těch pravidel. Většina těch textů (včetně toho příspěvku, na který jsem reagoval) je napsaná způsobem „tak to má být“.

Kdyby někdo psal text o programování způsobem „funkce mají být malé *ALE* musíme si dávat pozor, abychom to nerozdrobovali příliš a neztratila se control flow“ nebo „podobný kód má být sdílený *ALE* toto sdílení může vést k nemožnosti rozdělit program na nezávislé části a spravovat ho systémem ‚rozděl a panuj'“, pak by ten text byl užitečný. Nicméně jsem žádný takový tutorial neviděl.

Jinak, na řeči o čistotě, faktorizaci, eleganci, udržovatelnosti, atd. jsem alergický. Protože nejvíc vytvořených problémů s udržovatelností, co jsem viděl, bylo okořeněno právě těmito řečmi (a následné nesprávné aplikaci pravidel, aniž by člověk znal jejich negativní důsledky).

Problémy s udržovatelností kódu nepůsobí člověk přecházející z BASICu, který místo vnořených bloků a while cyklů používá goto. Jednak nevím, že by to někdo po přechodu od BASICu ke strukturovaným jazykům dělal, druhak se takový člověk hned nedostane na pozici, kde by mohl zasahovat do architektury a dělat nějakou škodu většího rozsahu.

bauglir

jen bych doplnil, že ideálem je sloučení obou metod:
1/ narvat do hlavy začátečníkům jednoznačné poučky
a až se je naučí
2/ ukázat těch pár příkladů, kde neplatí

tzn, naučit je, že některé návyky jsou prostě správné/špatné, ale existuje pár výjimek, naučit je, aby přemýšleli sami a helděli na vše kriticky…
ve finále je nejhorší srážka se spolupracovníkem, pro kterého je všechno černobílé (a to platí o metodách programování, programovacích jazycích, operačních systémech, prohlížečích, umístění závorek…. :))

Radovan

Tak nevím, ale neměl by Opravdový Programátor vědět aspoň něco o Fuzzy logice? ;-)

Radovan

Nojo, to je pak jiný problém. Já jsem kdysi programování kamarádce vysvětloval na houskovém knedlíku, vyšla nám z toho docela slušná knihovna funkcí :-D

Miloš

Velké boje o použití GOTO probíhali někdy ke konci 70.let. Ustaly poté, kdy jeden student ve své diplomové práci dokázal, že jazyk vůbec žádné GOTO nepotřebuje, pokud obsahuje tři následující konstrukce.

a) Předčasné ukončení programu (stop, halt, die či podobné).
b) Předčasné ukončení procedury (exit, return).
c) Předčasné ukončení cyklu (break).

Break bych nenazýval zakukleným GOTO, protože má výrazně zúžené možnosti.(To by pak bylo možné považovat za zakuklené GOTO i blok ELSE).

Konstrukci IF THEN ELSE považuji osobně za nejelengantnější konstrukci pro vnořené podmínky, schopnou popsat celý strom. Pouze se podivuji nad tím, kolik programátorů jí neumí použít.

Cygnus

V C (a podobných) jsem nikdy GOTO nepotřeboval.

Ale taky jsem kdysi začínal na BASICu a tam je GOTO často nezbytností. Ovšem nic nebrání používat GOSUB/RETURN, případně definované funkce.

Nicméně
a) i s GOTO lze napsat přehledný program, vyžaduje to ovšem disciplínu na straně programátora
b) skutečný chaos nastává, když se v assembleru jinou částí programu mění operandy, nebo i cílové adresy skoků, případně celé instrukce … na druhou stranu v extrémních případech to může být vysoce efektivní
c) hardcore použití instrukcí v assembleru pak počítá s tím, že když se instrukce provádí od prvního bytu udělá něco a když odprostřed, tak něco jiného, protože pro CPU to je jiná a taky smysluplná instrukce
d) kdo někdy programoval demo, nebo složitější hru na osmibitech, tak ví, že je důležité i trvání instrukce v taktech CPU, včetně různého trvání skoků, když je podmínka splněna/nesplněna

Nechápu, co je na GOTO tak nechutného. Prostě v současných jazycích není potřeba (a je to tak dobře), toť vše. Ale zprasený kód lze napsat snad v čemkoli … běžným a hnusným příkladem je třeba PHP promíchané s HTML v jednom textu.

Satai

S GOTO lze psat slusne a bez GOTO prasacky. Ale slusne psani se s vetsi pravdepodobnosti objevi tam, kde se nepouziva GOTO a naopak.

A trebas dema na osmibitech jsou natolik specificka otazka, ze bych je do diskuse o vyuce programovani (notabene pro deti!) netahal.

BLEK.

V C (a podobných) jsem nikdy GOTO nepotřeboval.

Goto potřeba je, stačí jednoduchý příklad: chceme otevřít tři soubory. Jak to vypadá s goto:

int h1, h2, h3;
if ((h1 = open("soubor1.txt", O_RDONLY)) < 0) goto err1;
if ((h2 = open("soubor2.txt", O_RDONLY)) < 0) goto err2;
if ((h3 = open("soubor3.txt", O_RDONLY)) < 0) goto err3;
... něco s nimi dělej ...

errno = 0;
close(h3);
err3:
close(h2);
err2:
close(h1);
err1:
return errno;

Jak bychom to chtěli řešit bez goto? Vnořené bloky (čímž je funkce čitelná hůře, nikoli lépe):

if ((h1 = open("soubor1.txt", O_RDONLY)) >= 0) {
    if ((h2 = open("soubor2.txt", O_RDONLY)) >= 0) {
        if ((h3 = open("soubor3.txt", O_RDONLY)) >= 0) {
            ... něco s nimi dělej ..
            close(h3);
        }
        close(h2);
    }
    close(h1);
}

Nebo návrat po každé chybě (kdy ovšem musíme napsat kvadratické množství kódu vzhledem k počtu otevřených souborů):

if ((h1 = open("soubor1.txt", O_RDONLY)) < 0) return errno;
if ((h2 = open("soubor2.txt", O_RDONLY)) < 0) {
    close(h1);
    return errno;
}
if ((h3 = open("soubor3.txt", O_RDONLY)) < 0) {
    close(h1);
    close(h2);
    return errno;
}
... něco dělej ...
close(h1);
close(h2);
close(h3);
return 0;

Jazyk Go na tohle má příkaz „defer“, který způsobí, že se nějaké příkazy vykonají při opuštění aktuální funkce. C ho nemá, tak se musí používat goto.

Satai

V diskusi o vyuce programovani to je dost OT, ale reseni tu samozrejme je:

f1 = open()
f2 = open()
f3 = open()

if (f1 >= 0 && f2 >=0 && f3 >=0) {
   result = do_some_stuff(f1,f2,f3);
} else {
   result = EPIC_FAIL;
}

if (f1 >=0) {
   close(f1)
}

if (f2 >=0) {
   close(f3)
}

if (f3 >=0) {
   close(f3)
}
return result;

(V C uz jsem par let nepsal, proto C-like pseudokod. A z prikladu je docela patrne, proc je dobre mit v jazyce vyjimky a rozumnejsi API. A ano, jsem si vedom, ze se tu muze udelat trochu zbytecne prace, pokud f1 nebo f2 nelze otevrit. Ale nevidim v tom v 99% pripadu problem.)

BLEK.

Takhle podobně to někdy píšu taky (když je to otevírání zdrojů složitější a ošetřování chyb nejde vyřešit jednoduchým goto).

Ale zas to může vést k situaci, kdy tam pak máš spoustu bool proměnných typu „podařilo_se_mi_a­lokovat_struk­turu“, „podařilo_se_mi_na­jít_a_rezervo­vat_zařízení“,
„podařilo_se_mi_na­mapovat_porty“,
„podařilo_se_mi_re­zervovat_paměť_pro_po­žadavky“, „podařilo_se_mi_i­nicializovat_har­dware“, „podařilo_se_mi_za­registrovat_pře­rušení“, „podařilo_se_mi_za­registrovat_o­vladač“ atd.

Tomu goto se nevyhneš stejně, protože nemůžeš dělat další z těchto akcí bez toho, že předchozí akce skončila úspěšně. (s tím otvíráním 3 souborů zrovna můžeš, ale v jiných případech, kdy potřebuješ zaregistrovat víc zdrojů, to nejde, tam to musíš dělat v daném pořadí).

V případě, že se inicializace i uvolňování provádí jednoduše sekvenčně, tak radši použiju víc goto než spoustu takovýchhle proměnných.

Hellboj

No ja se dycky musim chechtat kdyz widim GOTO flamewar ];)) a nejwic se chechtam tem prudernim programatorum kerejm do palice wtloukali ‚GOTO BUBUBU NESMIS!!!‘, ja si do palice dycky wtloukal [uz od dob assembleru na Z80] ze program ma bejt co nejrychlejsi a co nejmensi za kazdou cenu, a pokud tam GOTO sedi tak ho tam dycky naperu, nawic ty wase IF ELSEIF ELSE a juh wi co jeste potom stejne compiler predrbe na jumpy ];)

BLEK.

Ale bacha, „co nejrychlejší a co nejmenší“ nejde na Z80 splnit, protože na skok jsi tam měl větší a rychleší instrukci JP a menší a pomalejší instrukci JR :)

s

to neni zrovna idealni reseni. Kdyz se nepovede otevrit f1, oteviras uplne zbytecne f2 a f3. Kyz si v C, muzes treba udelat do { … } while(0); a kdyz se soubor nepovede otevrit, dat break. V C++ muzes udelat class AutoClose ktera v destruktoru soubor zavre podobne jako se to dela se zamykanim mutexu, pripadne mas rovnou tridu File.

Satai

O mozne neefektivite (ktera se ve vetsine pripadu nijak zavazne neprojevi) uz jsem psal ve svem prispevku.

Reseni s while(0)/break je presne ten druh kodu, ktery povazuji za duvod pro bolestivou popravu. Vyvojar tim vyresi aktualni problem, ale az ho prejede tramvaj, tak ho jeho naslednik (pokud to nebude „mistruv“ ucednik) prokleje pro pouzivani zbesilych obratu. S C++ samozrejme souhlasim, ale to uz se (stejne jako v pripade while(0)/break) dost vzdalujeme od vyuky programovani.

přezdívka

chápu jak jste to myslel, ale podléhám potřebě to upřesnit:
PHP se s HTML může běžně míchat a je to zcela v pořádku <=PHP byl původně určen pro něco, čemu dnes říkáme šablony.
A neexistuje tedy důvod, zatracovat v šablonách použití PHP pro formátování. Jen aplikační logika musí být někde úplně jinde.

john

zkuste Alici, nejlépe ve verzi 3, ale jen anglicky

http://www.alice.org/

Jirka

Pokud bych dneska mel tak desetilete dite ucit programovat, asi bych sahnul po Pythonu. Z „psanych“ jazyku ma snad nejbliz k algoritmum samym – obsahuje primerenou miru abstrakce a neni prilis ukecany. A neni vetsi problem ho provozovat i pod Windows.

Honza

Souhlas.

Diabolus

Co java a robocode? :)

http://robocode.sourceforge.net/

MichalM

pro deti existuje pomerne zajimavy programovaci pocatecni jazyk scratch- nauci se uzitecne zaklady a zabavne. jazyk vznikl na MIT.
http://scratch.mit.edu/

Petr F

Pokud má dítě rádo lego a tatínek je ochotný investovat do toho několik tisíc, tak doporučuji Lego Mindstorms.
Kluk si postaví svého vlastního robota a pak mu pomocí obrázků nakliká jak se má chovat.
Sice se kliká v počítači, ale výsledkem je reálný robot jezdící po pokoji podle daných instrukcí.
Když se to nebude líbit klukovi, tak tatínkovi určitě:)
Disclaimer: Nevlastním na žádné úrovni akcie firmy Lego (nebo jak se jmenuje)

jurasn

Když pročítám příspěvky o jazycích pro výuku programování, nemohu se ubránit pocitu, že oproti basicu mají jednu velkou nevýhodu – výsledné produkty se nechovají jako klasický počítačový program. K čemu bude dítěti, že se naučí vytvářet pěkné interaktivní animace, když pomocí jiných nástrojů může vytvářet programy, které ihned může použít pro zjednodušení svých každodenních starostí (propočty všeho možného, poznámkové bloky na tisíc způsobů, počty s kalendářem/na­rozeninama, …). Kouzlo basicu spočívalo právě v tom, že s minimem znalostí bylo možné vytvořit prakticky plnohodnotné aplikace (a člověk se přestal bát příkazového řádku, když pochopil, že vytvořit program pracující v textovém prostředí je nejjednodušší).

Osobně jsem odkojenec na basicu. Na gymnáziu v informatice na nás nastoupili s C (Bloodshed dev c++) a nebyl to pro nikoho problém (na pointery došlo snad až těsně před maturitou). Na vysoké nás začali učit v Matlabu/Octave (pokud by nebyl striktně maticový, řekl bych, že pro výuku programování jasná volba – všechno je možné zkoušet v interaktivním shellu, netypový, strukturovaný, jednoduchá manipulace se soubory, jediné co by bylo potřeba doplnit, je jednoduchá knihovna na 2D grafiku).

OOP jsem se učil v Javě – opět dokonalý jazyk, bohužel dobrý spíše pro přechod k objektům (vyžaduje již zkušenosti s typy proměnných).

Děti, které se baví psaním vlastních webových stránek, bych se nebál posadit k PHP (v základu velmi jednoduché, navíc mohou konkrétně použít v něčem, co ovládají).

Jako možnou náhradu basicu bych viděl spíš nějský bastl na Lua (pokud by běkdo vytvořil jednoduché prostředí s propojením jak na klasické stdio, tak třeba i na jiné knihovny/nádstavby nad knihovnama).

HerrFranz

…takze pro me byl basicem uz pred 10 lety :) nepotreboval jsem zadnej kompilator, bohuzel vsak neumel pracovat se soubory, tak jsem presel na c a php

ale ocenit ho dokazu teprv co jsem se naucil c#, javu, haskell, prolog a dalsi jazyky

spouste lidi nedochazi ze je to chytre navrzenej funkcionalni jazyk smichanej s oo

HerrFranz
hm

„jediný jazyk, kde zašifrovaný zdroják vypadá stejně jako nezašifrovaný“ – dovolim si povedat ze je to bullshit. To sa da povedat aj o javascripte alebo akomkolvek inom jazyku. Predpokladam ze ak by sa mal ktokolvek ucit jazyk, tak nie tak ze bude pozerat do obrazovky a cakat kym sa mu nieco od niekial nasype do hlavy. Takze predpokladam ze by mal k dispozicii aspon jednu knihu. A ak by to bolo nieco ako Pavel Satrapa: Perl pro zelenáče, tak nevidim dovod aby sa ktokolvek kto nie je vyslovene poleno a pocitac berie ako nutne zlo, nenaucil za tyzden v perle programovat.
Hello world! je jeden riadok: print „Hello world!“; cykly, podmienky prakticky totozne s php, javascriptom alebo c. Kto chce moze podmienky pisat (condition)?’then‘:’­else‘, kto nechce, moze if(condition){then}el­se{other}.
Za hodinu z ktorejkolvek knihy bude kazdemu jasne co je referencia, ako ju vytvorit, ako ju dereferencovat… Veci ako
perl -le ‚s[$,][join$,,(split$­,,($!=85))[(q[0006143730­380126152532042307]­.q[41342211132019313505]­)=~m[..]g]]e and y[yIbp][HJkP] and print‘
Su len ukazky flexibility jazyka. Nikto nechce aby sa z nich niekto ucil zaklady jazyka ani aby nieco take po tyzdni prace s jazykom produkoval.
Perlom netreba strasit… ked strasit tak radsej javou :)

hm

mne je jasne ze to nebolo myslene doslova, ale netreba pisat cokolvek len aby to bolo napisane. Kto s Perlom nema ziadne skusenosti moze byt pri rozhodovani ovplyvneny takymto „forom“. Perl nie je ziaden prototyp super jazyku, ma svoje muchy, nedostatky a obmedzenia … ale je dost sirokospektralny a hromada velkych a znamych aplikacii (napr. spamassassin) / webov (napr. http://www.zoznam.sk) o ktorych by clovek nepovedal ze su v perle

BLEK.

Jde o to, že při tom učení-se Perlu nebudeš ty programy jen psát, ale i číst … a pokud má Perl několik možností, jak napsat obyčejnou podmínku tak tě to zblbne.

if (podminka) { prikaz; }
prikaz if podminka;
unless (!podminka) { prikaz; }
prikaz unless podminka;
podminka && prikaz
!podminka || prikaz

Nějaký perlový odborník by jistě přišel i s dalšími verzemi podmínky. V C můžeš taky && a || požívat místo „if“, ale neviděl jsem, že by to někdo dělal. Perloví a shelloví programátoři to dělají běžně.

Když uvidím v programu v C nějakou funkci, operátor nebo klíčové slovo, co neznám, najdu si to v manuálu. Když uvidím ten guláš, cos napsal v tom příspěvku, nenajdu si o tom v manuálu nic. V C a jiných rozumných jazycích totiž dokáže člověk program rozparsovat i bez znalosti funkce jednotlivých tokenů (a pak si význam těch neznámých tokenů najít).

BLEK.

Schválně, kdybys v „C“ někde viděl

kvak int f(haf q)
{
    žblemt int i = blegule(q++ @ 3);

, tak z toho odhadneš, že „kvak“ je modifikátor funkce, „haf“ je typ, „žblempt“ je modifikátor proměnné, „blegule“ je funkce a „@“ je operátor. Čili si významy těchto věcí nalezneš v manuálu, a zjistíš, co ten program dělá. (schválně jsem do toho programu napsal nesmyslné tokeny, protože pro člověka, co se ten jazyk učí, jsou některé tokeny nesmyslné)

Teď je docela zajímavá otázka, jak by člověk měl parsovat ty hrůzy v Perlu, které ještě nezná. Podle mě je to o dost horší a to tvrzení o zašifrovaném a nezašifrovaném kódu je přesné :)

RK

Ja bych doporucil JavaFX. Syntaxe jednoducha, ma to docela obstojnou praci s poli a ma to grafiku takze si deti vyblbnou. Pravda ten scene graf nebude asi jednoduchy pro zacatecniky, ale kdyz tak muzou kreslit do canvas.

mata

Zdravim, asi to je dite od ditete, ale me jako decko Karel uvadel do rozpaku a byl pro mne silne demotivujici protoze jsem vubec nechapal k cemu to muze byt dobre (prislo mi to spis jako hra nez jako programovani). Rozhodne vic me bavil Basic (@PMD85-2), protoze jsem mel pocit ze „jsem jako dospelak a opravdu programuju“. Ale kazdy jsme jiny a kazdeho muze chytit neco jineho. Toz tak. P.S. Jasne ze pro predskolni deti, zejmena pokud jeste neumi cist/psat, je lepe pouzit neco nazornejsiho.

Mem_

Taky jsem už nad tím přemýšlel. Sám jsem začínal s basicem na osmibitech (Atari 800 XL, Sharp MZ 800, C64 doma), pak na PC (QuickBasic, TurboBasic, PowerBasic, Visual Basic), potom následoval TurboPascal, TASM, C++, Delphi, Java, PHP, ASP, C#, VB.NET, ASP.NET…

Pořád mi vychází, že pro pochopení algoritmů, základů OOP a event-driven programování se nejvíc hodí vizuální „tvořítka“, tj. Game Maker, Game Editor, z našich Baltík, Petr. V pozdějším věku klidně i skriptovací enginy jako WME nebo nástroje typu App Inventor (tady jsem psal stručnou recenzi http://www.svetandroida.cz/google-app-inventor-snadny-vyvoj-aplikaci-pro-android-201010). Pro děti je podstatné vidět okamžitou reakci na jejich snahy, a ovládání spritů v těchto enginech je dostatečně názorné, zvlášť pokud už děti sami hrají plošinkovky a podobné hry.

Na ten SmallBasic, kteří jste tu někteří zmiňovali, se také podívám, vypadá to zajímavě (byť ta ukázková hra 1942 spuštěná přes silverlight se mi seká i na 4jádrovém Phenomu @ 3,6 GHz ;))

Mem_

Koukám ještě na ten MIT Scratch, a už vím, kde lidi z Googlu pro App Inventor opisovali :) Vypadá to každopádně dobře, ten princip propojování eventů, parametrů a metod je prostě názorný (byť pro mladší děti mi stále přijde lepší začít se spritem, pod kterým vizuálně umístím ikony pohybu do stran a pak to hned na klávesnici zkusím, tj. game makery (kde je později možné také přímo skriptovat))

Habo

Čo sú to za hlody?! Hello world na 3 riadky:
begin
writeln(‚Hello world!‘);
end.
Rozhodne si myslím, že na začiatok to nie je také zlé…
Čo sa týka (Comenius) Loga: Keby nebolo, pravdepodobne by som nepísal tento príspevok ;) Na ňom som sa naučil základ (mal som asi 10 – 11 rokov) a potom nebol problém naučiť sa nový jazyk. Rozhodne ODPORÚČAM!!!

koroptev

ale vzdycky jsem mel pocit, ze to, zda cloveka neco jako programovani zaujme, se pozna v podstate ihned, jak zasedne za pocitac, a zjisti (dovede si predstavit, anebo nedovede), co se s tim da delat
tu vetsi cast, kterou to nezaujme, bude otravovat jakykoli jazyk, ta mensina si to s dnesnimi moznostmi (broadband internet vsude) urcite dokaze vybrat sama a lepe, resp. ji staci ponouknout nejakou tou adresou
predstava vylozene malych deti, jak koduji, je naprosto absurdni, dejte jim do ruky lego, merkur a rubikovku, v zavislosti na svetonazoru jim prokazete/nepro­kazete vetsi sluzbu

Miloš

Na MIT vznikl Scratch. Spustil jsem ho v Ubuntu/Mint, ukázal jsem mému sedmiletému synovi jak se přesouvají příkazové bloky, a za půl hodiny už v tom uměl dělat. Vytvořil svůj vlastní program.

Scratch je prostředí, ve kterém se programuje jen taháním za objekty. Programujete pohyb legračně vypadajících zvířátek. Taky můžete zvířítátka deformovat atd. prostě dělat věci které děti baví.

Zdarma pro Linux, Mac a Windows. Přitom má smyčky, podmínky a jiné konstrukce.

koroptev

setkal jsem se nedavno s ~25 let starym asm kodem a poprve v zivote (moc prilezitosti k tomu dnes asi uz neni) videl asi ten pravy spaghetti code, nudle kodu, cas od casu navesti a jiny kod, ktery skakal na tato navesti a kaskadovite jimi proplouval (tozn. navesti bylo JEN navesti, zadna pseudofunkce s navratem k volajicimu „konci“), obrovske casti tvorene temito kaskadami (ten navrat tam eventuelne nekde byl), tomu rikam flow; byla to rozhodne promyslena (jinak by se z toho museli po..) technika, jakym byl cely ten kod vystaven, ne blbost jak jinak udelat if, orientace v tom pro nekoho noveho samozrejme naprosto hruzna (i vzhledem k tomu, ze jmena navesti byla zamerne odlidstena kvuli zamezeni porozumeni nejakym zaskodnikem)
nemyslim, ze dnes jeste nekdo prijde do styku s nestrukturovanym programovanim, narky vyse a citovana pravidla jsou naprosto zbytecne

BLEK.

Já něco takovýho před časem diassembloval, když si člověk nakreslí graf na papír s těmi adresami přiřazenými k jednotlivým uzlům, tak to jde.

Je fakt, že z toho byl orientovaný graf, nikoli nějaká struktura vnořených funkcí.

Koroptev

Presne tak, graf. Nas projekt vyhnil, nez jsem se s tim stacil seznamit, ted se k tomu budu vracet.

peregrin

Chcete, aby se vaše dítě naučilo programovat?
Posďte ho k DrdSim!


…akorát to teda ještě není hotové, ale skriptovací prostředí se už dál měnit nebude

http://drdsim.xf.cz/
http://sourceforge.net/projects/drdsim/

tangero

Taky hledám vhodný programovací jazyk pro děti, mám dvě holky, které už by to bavilo a tak by to chtělo zkusit. Zkusil jsem Karla, úspěch, chtělo by to postoupit dál. Jenže jsem narazil na problém: jazyků je dost, ale nejsou vzorové příklady a úlohy. A to je trochu problém, protože mně napadají samé buďto jednoduché Hello Worldy nebo složité Naprogramujeme celou hru. Nic moc mezi tím, co by děti zajímalo a bavilo. Takže čert vem konkrétní jazyk, ale potřeboval bych nějakou sbírku úloh, ideálně i s variantama řešení, co by se dalo s dětma projít a bylo to odstupňované podle složitosti. Napadá někoho něco? Nějaký vzor k použití?

Bohumír Soukup

Zkuste v Česku (Slovensku a Polsku) nejpoužívanější nástroje: Baltík 2 (4-8 let), Baltík 3 (6-13 let) a Baltie 4 C# (3D grafika DirectX 9, pro 8-19 let). Všechno kompletně česky, příručka od Ing. Pecinovského, on-line kurzy, metodické materiály, soutěže (české i mezinárodní), a hlavně stovky hotových programů se „zdrojáky“, které vytvořily samy děti, a ne dospělí :-), takže děti (i učitelé a rodiče) mají z čeho čerpat.
Pro první pokusy Vám bohatě stačí demo, které umí vše, kromě zápisu na disk. Navíc, pokud Vaše dcery chodí na základní školu, mají na škole Baltíka taky (plnou verzi :-).
Vše najdete na http://www.sgp.cz

tangero

Vyzkoušel jsem, instaloval jsem si to. Pro Mac neexistují, naštěstí to jde v emulátoru. Je to nějaký dosový program se vzhledem z roku 1995, kde je prázdná černá obrazovka a nic, netuším, co s tím dál. Pročítám dokumentaci a děsím se. Tohle mohlo být super v roce 1995, ale teď už jsme o patnáct let dále. Na webu nerozumím ani ťuk tomu, co si stáhnout za verzi, za dokumentaci (potřebuju Výuka B2?), prostě ne, takhle ne.

Bohumír Soukup

Pane Zandle, děkuji za připomínku k orientaci na webu, snad už je to teď trochu lepší (v seznamu produktů se stačí orientovat podle věku dětí), ale časem to zkusíme ještě více zpřehlednit. A teď k Baltíkovi.
Pokud mají Vaše dcery 10 a 12 let, jak uvádíte dále, zapomeňte na Baltíka 2.0, který byl určen pro 4 leté děti před 14 lety. Ty děti od té doby už povyrostly a Baltík s nimi :-). Dnes už pro ně máme vyspělejší nástroje (např. Baltie 4 C#), které obsahují programování ve 3D, C#, debugger, object browser, code completion atd., a přitom pro začátečníky zůstala jednoduchost původního Baltíka.
Pro Vaše dcery je ideální Baltík 3. Když kliknete zde Baltík 3 video a zde Baltík 3 popis, bude Vám určitě vše hned jasné.

A pokud se Vám zalíbil Scratch, bude se Vám určitě líbit i Baltík, kterým se autoři Scratche nechali inspirovat. Když jsem v roce 1998 předvedl Baltíka 3 prof. Seymourovi Papertovi z MIT (mj. autor jazyka LOGO), byl Baltíkem nadšen natolik, že kromě vlastnoručně podepsaného pozdravu „Greetings to my cousin Baltie, Seymour Papert“ na prospekt Baltíka, se v MIT pokusili udělat „svého Baltíka“. Za pár let z toho vzešel Scratch :-) Naše nové nástroje pro výuku programování a algoritmizace (Baltie 4 C# a C# Studio) jsou už ale zase někde jide.

S tím programováním u dětí je to tak, že je teoreticky jedno, u čeho děti začnou, důležité ale je, jestli po snadných začátcích s cizí pomocí budou schopny a hlavně ochotny samy pokračovat. S pomocí rodičů, učitelů to většinou chvíli jde, ale jak už si pak děti mají samy vymyslet a naprogramovat něco většího a složitějšího (například celou hru) a dokončit to, včetně nápovědy, aby pocítily opravdové uspokojení ze své vlastní práce, už to bývá horší. Baltík a soutěže s Baltíkem právě toto umí. Proto by byla určitě škoda vzdát Baltíka po prvních neúspěšných pár minutách s 15 let starou verzí. Udělejte ještě jeden pokus a nainstalujte dcerám Baltíka 3 a věnujte jim ještě jeden víkend, a pak už je nechte, ať samy pracují. Pro inspiraci, kam až by se mohly dostat, se spolu s nimi podívejte třeba na reportáž z finále jedné naší tvůrčí soutěže zde Creative Baltie 2007. Pokud byste pro ně chtěl nějaká jednodušší zadání, najdete je na http://www.baltie.net – soutěž Borec 2010, Zadání.
Pokud mi pak napíšete výsledek nebo postřehy Vaší společné snahy a zkoumání, budu Vám vděčen, stejně tak jako všem ostatním diskutujícím.
Předem děkuji.

tangero

Děkuji za reakci. On mi bohužel na Macovi jiný Baltazar nejde pod CrossOver instalovat, jen ten Baltík. Ale co se rozhraní týká, jsou soudě z obrázků, podobné. A to je ta potíž. Jsou velmi neintuitivní. To možná nevadí, když se to používá ve škole, kde před tím, než to začnou děti používat, musí protrpět teoretické školení, jenže doma to funguje jinak. Dítě kouká tátovi přes rameno, za dvě minuty ho odstrčí a buďto už ho program dál vede, nebo je za deset minut vymalováno a konec. Což byl případ Baltíku. Až po prostudování návodu jsem pochopil, co se tam dělá, bylo to ale velmi nenávodné, bez dalšího studování dokumentace bych se s tím sám potýkal.

Scratch je jiná liga, co se intuitivnosti a učící křivky bez učitele týká. Hned vidíte kocoura a hned vidíte okno, odkud můžete tahat příkazy pro kocoura. Během minutky pochopíte z jejich grafického ztvárnění, jak je zacyklit. Vy mi namítnete, že tohle umí Baltazar taky, že si buzerujete čaroděje. Umí, jenže to nemá tak dobře graficky podané, aby se tomu dalo rozumět bez výkladu učitele.

Ve Scratchi si natáhnete demo verzi Akvária a to je blaho pro dětskou experimentální duši. Je to kratičké, přehledné a můžete hned experimentovat, přidávat rybky, učit je plavat jinak nebo mluvit. Baltík mi přišel jako lepší Karel, ale to může být tím, že bez zaškolení se do toho nepronikne.

On bude možná rozdíl mezi tím, co unese výuka ve škole a co chtějí rodiče. Ve škole děti musí protrpět nějaký základní představení, doma se na to vykašlou. A taky tatínek, když se v tom dost rychle nezorientuje, tak na to zanevře. Přeci se neztrapní tím, že ani neví, jak naučit čaroděje chodit… (Nářky předešlých komentátorů typu „ten a ten jazyk má špatně řešenou ochranu paměti“ jsou úsměvné, tohle s dětma ve věku 12 let těžko budete řešit).

Na „Baltazar group“ se mi líbí to haló kolem toho. Dal bych za roční licenci ty dva litry, kdyby dětem chodily otázky, někdo vyhodnocoval jejich řešení, někam je to elektronicky vedlo, aby nemusely docházet do školy na hodiny „IVT“ atd. To mi přijde díra na trhu, kterou zajímavě naplňujete. Ale Baltík (prominte, směšuju Baltík, Baltazar a ty další,co jsem ani neviděl) je pro samové domácí programování těžká věc. Málo přehledná, málo intuitivní nápověda (dejte někomu z normálních rodičů najít na vašem webu dokumentaci), málo graficky atraktivní. Koncept skvělý, ale zasloužil by si už předělat do moderního grafického hávu, využít větší displeje monitorů a vůbec možností roku 2010. Takhle to vězí v roce kolem 1990, kdy jsem se SGP začínal já. Jenže to už si bohužel nepamatuju natolik, abych to předával dětem :)

Satai

Pro podobny ucel mi prijdou uzasna dotykova rozhrani a’la iPad. Ne nahodou byla jedna z prvnich myslenek, ktera mne napadla po jeho uvedeni, „to je Obrazova citanka pro urozené slecny“ (viz Diamantovy vek). Bohuzel to je technicky proveditelna myslenka, ktera narazi na licencni omezeni – Apple nedovoluje interprety spoustejici stazeny nebo novy kod. Budu doufat, ze se svet Androidu dostatecne konsoliduje, abych se podobneho rozhrani dockal.

Bohumír Soukup

Tak už jenom poslední upřesnění (i pro ostatní čtenáře), abyste z těch Baltíků, Baltazarů a SGP neměli zmatek.
Baltazar je zcela jiný nástroj nežli Baltík.

Zde chronologický vývoj:
1990 – SGP Pascal, C, Basic, Fortran, Cobol, assembler atd. – strukturogramy
1993 – SGP Baltazar (C + strukturogramy + 2D grafika)
1996 – SGP Baltík – pouze ikonové příkazy + 2D grafika stejná jako u Baltazara
2005 – SGP Baltie 4 C# – ikonové příkazy, nebo C#, nebo kombinace, grafika 2D a 3D,
            režimy (console, Windows, 2D, 3D, Baltie 2D, Baltie 3D)
2010 – SGP C# Studio (jednodušší Visual Studio + strukturogramy pro zápis metody) + 2D a 3D grafika.

Takže dle Vašeho přání, využíváme již možností roku 2010 (velké monitory, C#, 3D grafika DirectX 9).

Roční licence nestojí 2.000 Kč, ale 600 Kč (Baltík 3) nebo 800 Kč (Baltie 4 C#) – pro dvě děti stačí 1 a půl licence.

Dokumentace není na webu, ale je přímo v programu (v případě doporučovaného Baltíka 3 – velice podrobná, autorem Rudolf Pecinovský, stejně tak jako učebnice programování pro děti Baltík 3).

Dětem „chodí“ otázky a jejich řešení „někdo“ vyhodnocuje :-) Viz http://www.baltie.net.

Tisíce dětí mladších i starších zvládly Baltíka 3 samy bez učitelů i bez rodičů (viz jejich soutěžní programy na našem webu).
Ale pro práci s Baltie 4 C# (programovací režim) je již nutná pomoc rodičů/učitelů. Tento režim je však již určen pouze pro ty, kteří zvládli Baltíka 3.

Pane Zandle, zkuste prosím ještě jeden pokus, nic Vás to nebude stát, výsledek může pouze příjemně překvapit. Stáhněte Baltíka 3 z http://www.sgp.cz – Stáhnout. Po spuštění Baltíka 3 vyberte z hlavního menu „Nápověda“, „Audiovizuální průvodce Baltíkem“ a nechte své dcery zcela samostatně napospas Baltíkovi. Buď je zaujme, nebo ne. Ale za pokus to určitě stojí.
Děkuji.

Petr Staníček

To je hned vidět skutečný rodič mezi těmi akademickými geeky, Patricku… Pro první seznamování dětí (někde na prvním stupni ZŠ) nejde vůbec o nějaký jazyk a programovací návyky, ale v především o nakopnutí směrem „algoritmické myšlení“. To je ten pravý základ programování: schopnost převést problém do algoritmu, rozložit řešení na atomy a skládat z nich větší celky. A na to, ať se na mě nikdo nezlobí, jsem zatím nepotkal nic lepšího, než je ten Karel (možná i ten Baltík, ale ten jsme nezkoušel a mám pocit, že je trochu jinde; navíc DOS? wtf?).

Jestli budu někdy svým holkám ukazovat nějaké programování, Karel nebo něco jemu co nejvíce podobného bude rozhodně první volbou. A pak teprve bude čas poohlížet se po nějakých jazycích a prostředích.

tangero

Ano, prekvapive deti (12 a 10) nezajimala ochrana pameti, zato je zajimalo, zda je vysledek rychle videt. Karla jsme prosvisteli, ale problem trochu vidim v neexistenci vzorovych uloh a reseni. Jeli jsme web verzi. Ted o vikendu jsme zkusili Scratch z Mit a ten je super. Lze s tim delat neco, co zjevne funguje. Napriklad holcicku, ktera skace na trampoline a kterou ucime interakci s prostredim. Nebo akvarium, kde ucime ryby vyhybat se kamenum. Scratch je navic mysi tahaci a neni treba se ucit nazpamet prikazy, pritom ty se zjevuji tak, ze to dite pochopi. Holky k tomu stacilo pustit a po peti minutach z planovaneho hodinoveho vykladu me vyhodily a osahaly si to samy…

Dan542

>Ano, prekvapive deti (12 a 10) nezajimala ochrana pameti
No dovolte, mě je 12 a ochrana paměti mě zajímá.

Jednou dávno jsem Baltíka zkoušel, ale hledat ikonu a co která ikona dělá, když u C/C++, Python etc. stačí umět anglicky.
Navíc jak jste podotkl Baltík není multiplatformní.

PS: Programuji též webové stránky (HTML, JavaScript, CSS, zkoušel jsem PHP, ale ten balast co vznikne z toho míchání PHP a HTML do jednoho souboruje hrozný, teď se učím Django)

Randy

Ja jsem v deseti letech otevrel flash a kreslil si, po nejaky dobe jsem objevil ze se tam da cosi psat a ono to dela veci. Ve dvanacti jsem uz bezne delal jednoduchy hry, takze nemuzu nez doporucit ACTION SCRIPT !
pro zacatecniky AS2 potom AS3 (OOP), dela to rozhodne zajimavejsi veci nez co lze v pascalu…

samik

zdravim vsechny kteri necim prispeli do diskuze. jsem moc rad ze jsem dnes zabloudil prave sem.
takhle hezkou diskuzi o zajimavem problemu jsem davno necet. zadny osobni invektivy
hezke priklady pro a proti, se spetkou super humoru srozumitelnemu pro nas ajtaky :)
… a moc vhodne pripominky k vhodnosti pouziti ceho k cemu
je zde nekolik momentu co mne z toho vyjeli

programovani by pro deti mnelo byt
zdarma = nema cenu platit za neco co si mozna dite nevybere za sve
zajimave = neco konkretni musi byt na konci (okamzite:)
jednoduche = pochopitelne na urovni ditete (samo dost slozite, protoze deti

jsou schopny obrovskych skoku v kratkem case)

POZOR NE MOC JEDNODUCHE!!! aby se brzo nenudili
– srozumitelne = moznost vysvetleni vsech konstrukci (cykly, podminene vetveni, ap.)
– nezavrene = moznost prechodu k ostatnim jazykum (jejich specialitam, atd)

taky se nesmi zapominat na to, ze vsechny jazyky vznikli za jistych technickych podminek
(= jejich omezeni) a taky v jinem case (modni vlne:) a pro specificke ucely
ze se casem nektery „pretezil“ na jine veci nez na jake byl urcen je nasnade, taky castecne diky
sve oblibenosti, moznosti (jednoduchosti) portovani, moznosti sehnani, ap.

moc mi chybi, ze neexistuje systematicke zmapovani na jednom miste, kde by se od fachmanu
srozumitelne kdokoli docet co je na co vhodnejsi (ktery jazyk je na co vhodnejsi)
perl je (puvodne jenom byl) primarne pro spracovani textu (logu), PHP pro web, JAVA (multi)vlakna, ap.

na netu je sice vsechno – jak pravi reklamni bonmoty – co je zaroven nevyhoda protoze se
v tom mnozstvi informaci dnes skoro neda orientovat, rodice nepohybujici se v problematice jsou ztraceni
v cerne dire

ja jsem si taky pro sebe nasel par tipu na ktere se pujdu podivat. do OOP jsem se moc nechtel poustet
proto dik vsem za inspiraci

samik

PS.: nema nekdo chut udelat si doktorat na toto tema – uspech (svetove) zarucen
vhodne asi jenom pro ty kteri nemaj co jineho na praci ;) ….hmmm…
…. tak snad az v duchodu

mpro

>nema nekdo chut udelat si doktorat na toto tema…

Jednym takym „dochodcom“ (aspon podla veku) je Alan Kay http://en.wikipedia.org/wiki/Alan_Kay, ktory sa o nieco podobne pokusa v spolocnosti Viewpoints Research Institute http://en.wikipedia.org/wiki/Viewpoints_Research_Institute

bauglir

Jako student pedagogické fakulty v oboru výpočetní techniky jsme na toto téma vedli dost vášnivé diskuze jak v didaktice, tak různě z profesory tak i na praxích v vyučujícími.
Názory se dělili na dva tábory: vysokoškolští profesoři zastávali názor „OOP + event driven programming + GUI“, učitelé, kteří fakticky učili malé děti měli názor naprosto opačný „procedurální programování, pěkně strukturované za sebou (program se vykonává, jak je zapsán, žádné eventy), a minimum UI“

Protože jsem začínal ve škole programovat jako malé dítě (10 let) a prošel si standardním kolečkem Karel, Basic, Pascal, tak se musím přiklonit k názoru učitelů na základkách… Jestli mě něco naučilo algoritmizaci, programování jako takovému, tak to byl fakt, že mě od toho neodváděly objekty, eventy a hračičký („jééé tlačítečko“). A následně po letech se teprve zamířilo na Delphi (RAD + ObjectPascal + event driven programming). Výhodou tohoto postupu je fakt, že člověk se učí jazyky velmi rychle, nedělají mu problém jazyky, kde nepotká v životě pointer, o paměť se nestará, neboť GC a GUI si poskládá pomocí RADu; ale na druhou stranu mu nedělají problémy ani jazyky, kde se to hemží pointry, kde GC neexistuje (fakticky si alokaci a dealokaci paměti řeší sám) a GUI není, protože programuje službu běžící na pozadí.
A to nejdůležitější: algoritmizace, nic jiného, algoritmizace a řešení reálných problému s programovacím jazyce.

Mimochodem, JavaScript je právě úžasný příklad toho, proč není postup GUI+events+oop dobrý: protože JS vzniklo na efekt, jako scriptovací jazyk primárně určení k efektní práci na stránce… A takřka všichni se ho takhle učili: „půjčím si kus kódu, kterej mě udělá pěknej hover“ (oop+event+gui), ale málokdo se zatěžoval se skutečně naučit ECMAScript jako jazyk. A pak lidé nadávají na ES, přičemž ho viděli 2x z vlaku :)
ES je sice samozřejmě OOP+event driven, ale to co jsme chtěl řící je to, že efektní programování odvádí od efektivního a u malých dětí zvláště. Bude sice fakn, že poskládají buttonky na formulář, ale pokud nebudou schopni převést zadání učitele (později zákazníka) do nějaké rozumné struktury/archi­tektury/algorit­mu, tak jsou jenom cvičené opice.

bauglir

Ale k tématu článku
1/ JS je Basicem, co se zastoupení týče, procento počítačů bez interpretu JS (prohlížeče) bude mizivé, natož takových, které by používali děti
2/ ale k výuce programování bych JS a dokonce ani ES rozhodně nezvolil

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.