Díky za zpětnou vazbu. My jsme doma začali se Scratchem, ale brzo se narazí na praktické limity. Potom jsme zkoušeli Python, ten byl OK a mladej si trošku hraje i s tím jakoby céčkem pro Arduino (ale popravdě zatím moc netuší typový systém, tak jen všude opisuje "int" :-)
No a nejvíc asi baví kupodivu právě Basic, to asi zdědili nebo co...
Na opravě už se pracuje.
Docela zajimavy, z nostalgie jsem si s tim chvilku hral ale docela me stve/limituje nemoznost predavat prommenne do "subrutin". Ja snad tu holku zacnu ucit Ccko ;-)
GraphicsWindow.PenColor=GraphicsWindow.GetColorFromRGB(255,0,0)
GraphicsWindow.PenWidth=2
Turtle.Show()
Turtle.Speed=10
For k=1 To 1024
TurtleAngle=Math.GetRandomNumber(360)
PosX=60+Math.GetRandomNumber(300)
PosY=60+Math.GetRandomNumber(300)
KresliSrdicko()
EndFor
Sub KresliSrdicko
GraphicsWindow.PenColor = GraphicsWindow.GetColorFromRGB(Math.GetRandomNumber(255),Math.GetRandomNumber(255),Math.GetRandomNumber(255))
Turtle.Angle=TurtleAngle
Turtle.Hide()
Turtle.PenUp()
Turtle.MoveTo(PosX,PosY)
Turtle.Show()
Turtle.PenDown()
For i=1 To 30
Turtle.Turn(8)
Turtle.Move(2)
EndFor
Turtle.Move(26)
Turtle.PenUp()
Turtle.MoveTo(PosX,PosY)
Turtle.PenDown()
For i=1 To 30
Turtle.Turn(-8)
Turtle.Move(2)
EndFor
Turtle.Move(26)
Turtle.PenUp()
EndSub
Tak snad tak nezlobí, že zrovna céčko :-)
A jinak ano, máte naprostou pravdu - když jsem si pro články zkoušel GW-BASIC i Small Basic, tak jsem si říkal, že snad už jsem tak oblblej a zpohodlnělej jazykama s předáváním parametrů, že nedokážu napsat nic většího bez této fíčurky (jsem to i v obou článcích zdůrazňoval - IMHO je podpora plnohodnotných funkcí v tomto kontextu důležitější než například vymazlený typový systém).
Na druhou stranu: když narazí, aspoň budou děcka chápat, PROČ je to tak užitečná a důležitá fíčurka :-)
Pridavam se k dekovnemu hodnoceni... jsem v podobne situaci, kdy bych chtel deti tak trochu ovlivnit v jejich (ne)rozhodovani, co budu delat v zivote dal.
Snove zamestnani typu popelar, pilot, fotbalista, prezident apod. uz je opustilo :-) a po mych neprimych zkusenostech bych nechtel, aby skoncili jako obchodni "manazeri" cehokoliv nebo za volantem jakekoliv masiny... a hlavne je chci drzet s odstupem od vyhledavacich sluzeb, kde si i vypocet 2+1 radsi najdu nez sam spocital.
Ja zacinal na Basicu, bylo to dobre pochopitelne, predtim Karel se mne libil- ovladani vlastniho robotka, ktery ale jinak nic moc neumel.
Bohuzel v 90.letech jako student gymplu jsem nevyuzil schopnosti spojit programovani s matematikou, fyzikou a chemii; na skole to nechapali proc do toho zatahovat pocitace alias programovani a tim pochopeni zakladu :-(
To az pozdeji komercne...
Vážení čtenáři, nějaká nová "fičurka" redakčního systému ignoruje konec řádku jako mezeru, takže je v článku spousta spojených slov. Omlouvám se a opravuji ASAP.
Update - podařilo se mi ručně opravit ty "nulové mezery", ovšem špatně jsou i všechny zdrojáky. To popravdě netuším co se děje, protože jsou v
(pre), ovšem asi špatně ostylované(?).
Mohl by nějaký guru znalý CSS pomoci? nějaká bota v redakčním systému asi.
PS: ten článek je tak dlouhý, že jeho nové nahrání zhazuje nejenom redakční systém, ale zdá se, že i celý Root (na chvíli dostáváme HTTP 500 :-)
12. 10. 2021, 09:13 editováno autorem komentáře
Já bych i souhlasil, ale u Pascalu je trošku problém v tom, že se musí souběžně s algoritmizací vysvětlovat i typový systém. To mi připadně na první krok jako hodně informací. Chtělo by to nějaký step-by-step jazyk, něco jako je možné v matematice (prostě se začne přirozenými čísly, přejde se na zlomky, potom na záporná čísla atd. - vše docela přirozenou cestou).
...souběžně s algoritmizací vysvětlovat i typový systém.
Já si myslím, že je lepší si na to zvyknout hned od začátku, aby pochopili, jak s tím pracuje počítač a nenaučili se nějaké zlozvyky jako "všechno je povoleno, napiš si tam co chceš, systém už si to nějak přebere". Klidně začít s celočíselným typem a pak teprve vysvětlit, jak se pracuje se znaky, s řetězci, se zápornými čísly a s desetinnou čárkou.
To je ovšem trošku problém, protože takto "odpadne" víc děcek, kterým by se jinak programování líbilo. Ale třeba Pascal, i jen primitivní výpočet, vypadá strašně složitě, je to dlouhý a polovina řádků vůbec nesouvisí s řešeným problémem.
My čtenáři Roota víme, že tomu tak není, že to má výhody, ale na začátku by byl odpad strašně velký (zvlášť dnes, když se "doba bdělosti" strašně zmenšila - teď neznám přesný termín, možná attention span je k tomu nejblíž).
Tady jde o začátky, potom ať se posunou někam dál, až narazí na limity (ale současně je to už mezitím chytne). Trošku OT, ale prakticky v přímém přenosu jsem viděl, kolik děcek je odrazeno už prvními úlohami ve škole, které je nebaví nebo jim vůbec nedávají smysl (navíc pokud to někdo zabije tím, že akceptuje jen to jediné správné řešení a ne vlastní snahu to vyřešit vlastní cestou). A přitom by stačilo někdy málo, ukázat něco s vizuálním výstupem a tak.
Tyjo zajímavé, jak některé užitečné články mizi Hodím raději odkaz přes Wayback machine, stejně jako jsem hledal původn verzi https://web.archive.org/web/20130918213750/http://www.salon.com/2006/09/14/basic_2/singleton/
(což je hodně známý článek, takže bych nečekal, že se originál bude přesunovat...)
Nejsem si jist, jestli není nejvhodnější začátek programování v nějakém interaktivním REPLu. Vždyť děti se i ve škole učí psát, učí se rozlišovat výrazy od jejich hodnot (v matematice) apod. Tedy písemná forma vyjadřování je podle mě i na prvním stupni docela přirozená. Současně se dítě seznámí s INPUT-OUTPUT paradigmatem, konceptem sezení apod. Pro krátké programy typu vypiš dny v týdnu, rozblikej LEDku apod. IMHO je to úplně v pohodě.
Taky se mi líbí, že REPL přiznává charakter počítače jakožto stroje, což je podle mého názoru dost důležité z psychologického hlediska - dítě se bude o stroj zajímat, když je na to zralé a schopné pobrat koncept jeho fungování, což je v protikladu např. k hračkám, které předstírají, že jsou živé bytosti a vedou tím děti k iluzornímu vnímání.
Ano, taky pamatuju :-)
Ono asi jde o to, že pokud někdo GOTO zneužíval na šílené špagety, tak je to pochopitelně špatně. Navíc pokud se někomu dostane do ruky možnost GOTO na hodnotu vypočítanou výrazem :-)
V době strukturovaného programování tady byla urputná snaha všechno nacpat do pár konstrukcí, tedy rozeskok, smyčka s testem na začátku a smyčka s testem na konci. Ale v praxi to prostě nestačí, takže se buď utopíme v umělých booleovských příznacích, nebo nějaké výskoky uvnitř smyčky asi budou potřeba no :-)
Coz mi pripomnelo moje gymnazium, a hodiny IT. Ukol znel jasne, a ja pouzil jedno GOTO, ktere vyznamne zjednodusilo strukturu. Tehda jsem to neumel vyresit jinak. Problem byl ucitel, ktery to neuznal a prosazoval jen sve strukturne komplikovanejsi reseni, a dal mi spatnou znamku. Jo to byl pravek v borland pascalu.
Třeba Linus (a mnoho dalších programátorů v C) se na to dívá docela pragmaticky. Prostě GOTO se někde (v céčku) hodí a zjednoduší celou strukturu. Samozřejmě to jde obejít, ale to je IMHO (jak píšeš) jen slepé následování nějakých pravidel bez většího přemýšlení.
PS: jsem si to pro jistotu kontroloval - v našich produkčnách projektech máme 487 zdrojových kódů o celkové velikosti 2,6 MB a ani jedno GOTO, to abych nebyl napadán, že jsem nějakej propagátor špaget :-)
To je niečo podobné ako s tabuľkami v HTML. Pred pár rokmi bola doba, keď všetci, čo trochu robili s HTML tvrdili, že sa nesmú používať tabuľky, lebo to robije vzhľad HTML a stránka nepôsobí dobre. Lenže oni tí múdri nevedeli, že aj tabuľka sa dá dokonale upraviť cez CSS absolútne do dokonalosti. A v čom robiť tabuľky ak nie v tabuľkách? Vraj v DIVoch. Lenže tie mali iné určenie. Takže tabuľky treba robiť v tabuľkách, veď na to predsa sú.
Tuhle jsem si říkal, že pro výuku programování by vlastně nemusel být vůbec špatný OpenSCAD - má okamžitý grafický výstup, jednoduché rozhraní a základní konstrukce strukturovaného programování.
Také jsem kdysi zkoušel dělat Karla ve stylu Scratche: https://pavel-krivanek.github.io/Karel/
(vlastní funkce se přejmenovávají dlouhým kliknutím na její název)
Neviem aké je to v tom jednoduché, ale dnešní rodičia majú pocit, že deťom to treba všetko čo najviac zjednodušiť, takže:
1. Vozia deti každý deň do školy.
2. Nesmú chýbať 2.9. pri novom školskom roku.
3. Všetko pre programovanie musí byť čo najjednoduchšie, aby sa deti naučili.
No a figu, ono je to inak. Pre mňa otec neurobil ani jedno z tohto zoznamu.
1. Nemali sme auto, Oco nosil súrodencov do škôlky a odtiaľ išieil do roboty.
2. No to by sa musel rozštvrtiť a nechodiť pri tom do roboty. Vlastne, pokiaľ by sa rozštvrtil...
3. No a programovať som sa učil na Sharp MZ-800 a to tak, že som si BASIC nahral z kazety a prepisoval som z anglického manuálu príklady. Šlo to pomaly, ale dnes programovať viem. Ak som si nevedel rady, sem-tam mi oco niečo z manuálu preložil. Ak pôjdeme na deti tak, že im dáme všetko, nebudú mať túžbu objavovať nové veci, lebo všetko dostanú, takže treba zabrzdiť a ak to dieťa bude chcieť vedieť programovať, tak sa dieťa naučí aj zložitejšie veci. Viem to, sám som ako decko chápal často aj zložité veci len preto, lebo som nemusel rozmýšľať nad ničím iným. Dnes ako dospelák mám tých povinností a roboty oveľa viac. Takže nedajme deťom všetko na podnose, treba nájsť určitý kompromis.
3. Podle mě záleží na tom, co je vlastně „naším“ cílem. Pokud je to vychovat programátory a nic víc, pak dle mého názoru máte pravdu, nebo jste jí blízko. To si myslím hlavně proto, že v reálném životě „schopnost programovat“ není jen o algoritmizaci, znalosti jazyka, apod., ale i taky o schopnostech, jako je dohledat informace a hledat řešení (myšleno v kontrastu s mentalitou mnoha lidí „tady mám problém, dej mi řešení, nemám zájem o znalost, jak k tomu řešení přijít, takže v budoucnu za tebou přijdu s každým sebemenším problémem, na který kdy narazím a k němuž mi nikdo nedal řešení“). V takovém případě váš přístup odradí lidi, co nemají zájem se učit a hledat, kteří by jako programátoři stejně nejspíš jen trpěli.
Jenže jestliže vezmeme v potaz, že programování zasahuje i do oblastí, které nejsou primárně o tvorbě aplikací, ale jde jen o pomůcku, potom IMHO zjednodušení vstupu do programování je na místě, protože potom pomůže seznámit se s programováním i lidem, kteří by k němu jinak neinklinovali. Tento rozdíl jsem si uvědomil, když brácha (neprogramátor, ale má zájem se učit) přešel do nové práce (která se ani náhodou netýkala IT) a dostal za úkol zpracovat nějaká data v Excelu. Osoba, co mu to zadala, tvrdila, že ten úkol trvá alespoň dvě hodiny. Jemu to vzalo ~15 minut díky tomu, že nedělal všechny kroky manuálně.
(Samozřejmě tím nepopírám, že existují lidi, kteří i když ví, že by si to mohli zjednodušit, raději budou manuálně transformovat data, buňku po buňce, než by začali používat něco nového nebo nedejbože se měli učit. Tímto tyto lidi nechci nijak shazovat, jejich schopnost dělat hodiny ten samý repetetivní úkol je podle mne obdivuhodná - já raději nad jednorázovým úkolem strávím 4× tolik času tím, že si programuji jednorázový automatizující nástroj, než bych dvě hodiny znovu a znovu opakoval ty samé kroky. Jen chci říct, že chápu, že přístup učit lidi základy programování není všespásný.)
Presne tak. Potrebujeme nejenom cistokrevne programatory, ale taky spoustu jinych lidi kteri si umi sem tam neco naprogramovat. Kdyz si vzpomenu na biology nebo chemiky, co jsem potkaval na vysce, to byla tragedie. Sice vynikajici odbornici, ale s trochu komplikovanejsim zpracovanim dat travili zbytecne moc casu. Kdyby umeli aspon to VBA v Excellu...
Přesně tak. V tomto IT (si myslím) docela dost zaspalo. Máme sice jako čistokrevní vývojáři k dispozici skvělé (no jak kdy) technologie, ale kupodivu jediná firma, která nějakým způsobem dbá na programovatelné uživatelské aplikace, je Microsoft s VBA nebo s tím jejich DCOMem. Jasně, je to někdy docela s... ale stačí na to, aby si někdo naskriptoval třeba docházku nebo zápisy do knihy jízd (mluvím o řešení, který jsem viděl a který si udělali sami uživatelé, jinak absolutní IT laici).
aby si někdo naskriptoval třeba docházku nebo zápisy do knihy jízd
Podle mne je těch možností skriptování dost a třeba VB skripty ve Wordu nebo Excelu někdy vedou k užívání těchto programů na něco, na co nebyly určeny. Viděl jsem třeba jednoduchý editor plošných spojů, napsaný ve skriptu v Excelu! A je to samozřejmě výborná příležitost pro šíření malware.
Nebylo by lepší rovnou Smalltalk, když to začíná na Small..?. Třeba Smalltalk/X - https://swing.fit.cvut.cz/projects/stx-jv.
Jak tu někdo propagoval LEGO, tak pro Small Basic existuje i rozšíření pro programování LEGO Mindstorms EV3.
Více zde:
https://techcommunity.microsoft.com/t5/small-basic-blog/lego-mindstorms-ev3-extension-for-small-basic-ev3-basic/ba-p/337553
12. 10. 2021, 20:07 editováno autorem komentáře
Úplně první jazyk byl Atari BASIC, nejdříve na papíře a potom na reálném počítači. Pak následovalo LOGO a assembler (napřed 6502, potom paralelně 8080 - ono to je ve výsledku to samé :-). Karla jsem prolítl, oproti Logu mi to připadalo dost chudé... (špatné načasování, asi měl přijít dřív).
Ve škole jsme se všichni společně učili Pascal (i s učitelem :-), takže příklady přesně podle knížky, testy písemně vůbec ne na algoritmy, ale nabiflovaný operátory a tak - to mě tedy popravdě nějak nebavilo.
Potom zase assemblery, 8048, 8051 a nakonec céčko, kterému jsem asi věnoval nejvíc, navíc asi v nejaktivnějším věku. IMHO to po assemblerech byl ten nejsprávnější krok, když se na to dívám zpětně - najednou dávalo céčko, všechny jeho fíčurky, zcela konkrétní význam a dohromady to mělo logiku.
Jako programovací jazyk pro děti bych zkusil doporučit spíše toto:
https://basic256.org/
https://sourceforge.net/projects/kidbasic/files/
https://sourceforge.net/projects/basic256prtbl/
:-)
je to tak píšu to o pár příspěvků výš. V podstatě na první seznámení pro dítě z rodiny, která až tak IT nehoví, má Small Basic výhodu v tom, že jede z webu na první dobrou (i když třeba ovládání Arduina apod . vyžaduje plnou instalaci).
Basic-256 má větší možností (tedy zastará, resp. přestane vyhovovat mnohem později), jen jsem míval problémy s jeho instalací kvůli závislostem, takže by to mohlo někoho odradit.
PS: právě jsem vyzkoušel instalaci v Mintu a problémy jsou zdá se vyřešeny (chyběla tam předtím závislost na nějaké Qt komponentě).
Trošku OT, ale i SW ukázaný zde je s velkou pravděpodobností v BASICu https://www.idnes.cz/hry/retro/atari-st-spravce-kempu-hry.A211012_124052_bw-novinky_srp
Když už se tu tak řeší, jak učit děti programovat, se známým jsme se bavili o tom, zda by nemělo smysl začít s výukou ještě něčím jednodušším - bohužel si nepamatuji název, ale setkali jsme se s deskovou hrou, kde člověk ovládá robota v herním poli. Každý hráč má sadu karet, každá reprezentuje nějakou akci (pohyb, natočení), v každém kole si hráči připraví určitou sadu příkazů a ty se pak vyhodnotí.
Jistě, nejsou v tom podmínky, smyčky, nelze v tom implementovat nějakou skutečnou logiku, ale přijde mi, že to nutí se lidi zamýšlet nad tím co přesně po tom robotovi chci a proč, včetně následků (v jakém budu stavu po vykonaní konkrétní akce) - což je IMHO důležité pak při samotném programování (po vykonání instrukce se aplikace dostane do nového stavu a ten si musím uvědomovat, abych mohl napsat adekvátní následující příkaz). Byl jsem svědkem toho, že i dospělí lidi (neprogramátoři) měli problém si uvědomit, že když robota natočím jednou akcí, od té doby je jeho „vpřed“ jiné.
Tohle je taky pěkné řešení, vidím jej teď prvně, nicméně ano, je to v tom stylu, co jsem myslel.
Ne, že by to bylo nějak důležité, nicméně to, co jsem zmiňoval, byla fyzická/papírová deskovka (+ plastoví roboti), která byla částečně jednodušší (v každém kole si každý hráč připravoval ~4 příkazy, přesné číslo si nepamatuji) a částečně složitější (větší herní plocha a různé překážky či aktivní prvky).
Njn, ač jsem rád, že doba Flashová je za námi, měla spousty perel a málokteré v nějaké formě přežily. (OT: jednu z mých oblíbených naštěstí portovali.)
Něco podobného se mi před časem taky stalo - člověk si pak uvědomí, jak moc vypadává ze cviku v rámci čehokoli, co nedělá denně...
"nutí se lidi zamýšlet nad tím co přesně po tom robotovi chci a proč,"
Jojo, deti se musi naucit myslet v nejake 'posloupnosti', kdyz po nich chci aby rekli co musi robot udelat, jde videt ze preskakuji nejake kroky a musi naprit svou mysl aby si uvedomili postup. A to ze po konci akce robot skonci nekde jinde, a nemuzou ji jen tak spustit znova ale musi treba robota rucne vratit na start se taky musi naucit. Hezky to bylo videt s nasim lego boost - tam je jezdici robot, jezdi treba po sachovnicovem poli. Ukol je napr. vyhnout se bazine a najit nejakou postavicku. Programovalo se to pomoci ikonek 1x dopredu, otacka vlevo atd., jako stary Karel. Kdyz uz to zvladali, zkousel jsem zvednout uroven a ucit je komplikovanejsi akce pomoci 'motor o 3/4 otacky', ale to slo ztuha, budu muset jeste pockat.
Ono vlastně to, co popisujete, se dá generalizovat na lidi obecně - podobného chování jsem si všiml i u dospělých (myšleno obecně, ne jen v rámci učení se programování). U nich je navíc mnohdy problém v tom, že když „[...] preskakuji nejake kroky [...]“, nenechají si to vysvětlit, protože „to přece chápu, ne? Nedělej ze mě vola.“
S basicom sa ziak ci student tak maximalne nauci kodit. Pre zaciatocnikov, vratane uplnych(!) zaciatocnikov je ovela vhodnejsi LIPS, vdaka jeho jednoduchej syntaxy (https://xkcd.com/297).
Konkretne, v integrovanom prostredi DrRacket je vyuka programovania priamo zabudovana. V centre pozornosti je vyuka systematickej konstrukcie programov, formou konstrukcnych navodov.
Pozri predovsetkym:
How to teach programming to your loved ones
https://media.ccc.de/v/35c3-9800-how_to_teach_programming_to_your_loved_ones
Pěkný článek, díky!
Mně se v poslední době zalíbil MMBasic na Colour Maximite 2 (https://geoffg.net/maximite.html), pár programů je k vidění tady: https://cmm2.fun/
Výhody vidím v tom, že:
1. BASIC je poměrně pohodlný, rychlý a vestavěný editor s barevnou syntaxí
2. Mikrokontroler, na kterém to běží staruje přímo do BASICu během sekundy, podobně jako retropočítače (C64, ZX Spectrum...)
3. Má RPi kompatibilní GPIO a podporu přímo v BASICu, takže lze programovat LEDky, seriové porty, DS18b20, externí displeje...
Takže i pro dítě za pár drobných hodně zábavy...
Není zač, dokonce i funguje skvěle a probíhá i stálý vývoj, přičemž stále stoupá rychlost a přitom je poměrně konzervativní v oblasti rozšiřování (MMBasic běží dnes už na dost platformách a je snaha udržet kompatibilitu).
Vždy, když jsem unaven psaním nějaké aplikace pro "moderní" platformy, CMM2 si docela užívám...