Dobry den,
vazim si toho, ze se snazite vytvaret ekosystem k vyuce programovani. Mam ale pocit, ze timto zpusobem jen rozdelite studenty na dva tabory. Jedni budou celou vyuku nenavidet a jen mensi skupina milovat.
V soucasnem svete takto prijdete o spoustu potencialnich studentu, ktere proste Vas material (at je kvalitni sebevic) nezaujme do x sekund a prejdou na facebook nebo k nejake hre. K lidem, ktere bavi fyzika se s Adou mozna vubec nedostanete a k tem, ktere bavi umeni uz vubec ne. Pritom tito vsichni budou ve sve praci potrebovat znalosti programovani. Minimalne ke komunikaci s nama programatorama.
Cca pred rokem jsem dostal dotaz: "Co se mam ucit, kdyz se chci naucit programovat?" Nez jsem zacal hledat "jazyk", tak jsem si nastavil kriterium, aby bylo lehke vytvorit malou grafickou aplikaci a aby existovalo velke mnozstvi zajimave dokumentace nejen pro nadsene programatory. Jazyk anglictina, kdyz uz se ted uci skoro od materske skoly, tak by to snad na konci zakladky a zacatek stredni nemel byt problem. Priznam se, ze prvni co me napadlo byl Pascal a ted vim, ze by to asi bylo i dobre doporuceni, protoze na strojarne v Brne se uci Delphi.
Nakonec jsem doporucil Processing.
Nejvic me asi presvedcila kniha Processing A programming Handbook for Viual Designers and Artists Reas and Fry.
Duvody?
Skvela dokumentace - nemusim nic pripravovat sam
Dalsi zajimava kniha je The Nature of Code od Daniel Shiffman. Zajimave programovani fyzikalnich jevu a je dokonce zdarma na webu http://natureofcode.com/
Dalsi mozny postup k robotum, protoze Arduino se s processingem docela kamaradi
http://playground.arduino.cc/interfacing/processing
a takovy Sparki robot pouziva IDE, ktere je napsane v processingu.
Mame tu taky ProcessingJS - interpreter processingu do javascriptu, takze je mozne (podmnozinu) praci ukazat primo interaktivne na www strankach http://processingjs.org/ jak to treba dela in kniha The nature of Code
http://natureofcode.com/book/chapter-3-oscillation/ Cviceni 3.1
Amen. Kriticke je zacatecniky motivovat a to jde nejlepe snadnymi uspechy na zacatku.
Z toho duvodu neco jednoducheho, s bohatym API (idealne kreslicim a hrajicim a interagujicim) a s REPLem.
Ja bych vzal Python, ale naprosto chapu, ze nekdo zvoli Scheme, Haskell, Processing... C++ nebo Ada jako uvodni jazyky nechapu.
Tady se silně přeceňuje vliv jazyka na výuku - mnohem důležitější jsou znalosti učitele, jeho pedagogické schopnosti, schopnost odhadnout, čeho je konkrétní student schopný, případně motivovat ty schopnější studenty k obtížnějším úlohám. Jestli to je Python, Lua, Visual Basic, C, PHP je více méně jedno. A samozřejmě něco jiného je výuka na základce, na střední škole, na vysoké škole, a něco jiného se by měli učit budoucí botanici, něco jiného strojaři a něco jiného budoucí programátoři. Navíc studenti i učitelé jsou individuality - s vlastním myšlením, s vlastním vnímáním světa.
Kdo má tendence k programování, tak může začít s tím nejhorším jazykem - a možná se naučí víc, protože nebude mít uhlazenou cestu. Kdo k programování nemá vazbu, tak mu Python, Processing nepomůže.
Ano, ucitel je extremne dulezity. To nema smysl popirat.
Ale hodne bych se divil, ktery ucitel bude tlacit zaky do drsnych jazyku hned na zacatku - jazyk (prostredi...) mu mohou velmi vyrazne pomoci motivovat.
Jo. Ale velka cast (vetsina?) lidi je nekde mezi. S trochou motivace se ledacos nauci. A vazne neni duvod kteroukoli skupinu tyrat nevhodnym jazykem do zacatku.
Co je nevhodný jazyk? Asi Assembler - ale pro začátek - a začátky končí u zanořených cyklů není mezi neúplně obskurními jazyky téměř žádný rozdíl. Dále už se to silně začíná diverzifikovat - OOP v každém jazyku jiné, událostní programování, datové struktury -- tam už neexistuje téměř žádná shoda, co je lepší nebo horší - navíc je otázka, jestli je to důležité - 99% lidí se za tuhle základní hranu nikdy nedostane a navíc nepotřebuje dostat.
Programovací jazyky jsou těžce módní záležitost - trefíte se do vlny, a Python bude těžce cool - jako před 10 roky, pak bylo Ruby, Javascript, když jsem byl na výšce, tak ti největší borci dělali v C a kdo byl opravdu dobrý udělal UI v Delphi, přičemž o vlastním programování to skoro vůbec nic neříká. Každý jazyk je dobrý v několika málo oblastech a ve zbytku je průměr.
Souhlasím. Ještě dodám:
Člověk (např. učitel) by měl být schopen se naučit celý jazyk. Když dostane nějaký výraz v daném jazyce, měl by ho být schopen vyhodnotit (resp. dělat kroky, které k vyhodnocení vedou). V ideálním případě by měl být schopen i o nějakém řetězci rozhodnout, zda je to vůbec výraz v daném jazyce.
Indikátorem je délka formální specifikace (pokud tedy jazyk vůbec nějakou má). Například ne více než 100 stran.
Temer zadny rozdil?
Ja tech rozdilu mezi Adou a Processingem vidim hromadu. Ted nemyslim syntax, ale to, ze treba knih pro uplne zacatecniky je nekolik. Jedna dokonce z MIT. S Adou si urcite muzu taky zacit programovat robota, ale je to nachystany tak, aby mohl zacit i temer zacatecnik?
Prumerny zak 5 tridy zakladni skoly i studen stredni skoly v 2 rocniku uz nemaji jen knihu a televizi o dvou kanalech. Te zabavy kolem je hromada a jsem si jisty, ze az na vyjimky vetsina deti/studentu odpadne, pokud je to nebude bavit.
Btw ma Ada neco takovehoto? http://www.openprocessing.org/
Mit moznost se pochlubit s tim co delam je taky dulezite.
Jsem si jisty, ze by me Ada bavila, ale taky si vzpominam jak jsem jeden rok stval ucitele tim, ze kdyz nas ucil FoxPro, tak jsem vzdy stejny domaci ukol vyresil jeste v PC Fandu za zlomek casu a daval jsem to pri odevzdavani domaciho ukolu nalezite najevo.
Myslim ze mluvite o vecech ktere nejsou podstatne. To jestli je nejaky jazyk "modni zalezitost", nebo "cool" je absolutne irelevantni vec. Jak vubec nekdo, kdo zjevne uci programovani muze vubec neco takoveho napsat!?! To je neco co bych cekal od "HR specialisty" nebo jineho "nezasvecence".
Kdo s programovanim zacina, se hlavne musi CHTIT ucit programovat. A to dokazete prave jenom tim, ze uz v prvni hodine dokaze dotycny clovek vytvorit programek ktery neco (idealne vizualne zajimaveho) dela. Pokud dokaze napsat programek ktery zobrazi pohybujici se krouzek, bude nadseny a bude se tesit na dalsi hodinu a s nejvetsi pravdepodobnosti si stahne prislusne IDE/SDK doma a bude to zkouset sam a vymyslet co udela dalsiho a jak by to udelal atd.
Pokud ho prvni hodinu budete polovinu casu nudit definicemi na tabuli a pak na konci hodiny je nechate napsat hello world, tak jste pravdepodobne ztratil 90% vsech potencialnich programatoru ve tride.
A jeste dulezitejsi je, aby za 2 mesice, kdyz par lidi ve tride (je jasne ze vsechny to bavit nebude) dosahne vyrazne vyssi urovne, aby treba mohli zkusit z hybajicich krouzku udelat jednoduchou hru, nebo simulaci gravitacnich sil ve slunecni soustave a prulety sond.. to vsechno ale vyzaduje, aby ten jazyk, ktery se naucil byl dostatecne "mocny" na to, aby v nem byl schopen vyjadrit i komplexnejsi logiku stale stejne jednoduchym zpusobem. A to je bod, ve kterem vetsina "historicko-pragmatickych" jazyku (pascal, C++, ada, Java) totalne selze, a "primitivni" jazyky jako jsou rizne dialekty lispu (vcetne clojure), python, ruby, javascript a dalsi vyhravaji na cele care.
Kdyz rikate "OOP v každém jazyku jiné, událostní programování, datové struktury" zni to jako Vera Pohlova ("..ty vsechny higher-order functions vsechny jenom otravuji, ja bych vsechny ty vyssi jazyky zakazala!"). V celem tom odstavecku mi chybi nejaky obecnejsi rozhled. To ze je to v ruznych jazycich ruzne je jasne, ale v nekterych jazycich nektere veci VUBEC NEJSOU - jako treba podpora syntaxe pro asociativni pole, funkce jako first class object apod. To je podstatne. Nejde o to jak krypticky se zapisuje "object/class/whatever" ale o to jaky koncept to podporuje. A podle toho, jestli to podporuje koncept dostatecne jednoduse, pochopitelne a konzistentne se uz da jazyk vybrat snadno (hint: neni to ada ani c++)
Zkuste si na 2h (!!!) precist tutorial k pythonu a neco v nem napsat! Jde to primo samo, a brzy zjistite jak SNADNE a POHODLNE je psat neco v podobnem jazyku. A jake utrpeni je se snazit pak vratit k byrokraticke zrudnosti jako je Ada.
Trochu mi to pripada, jako ze propagujete Python jako jazyk pro zacinajici programatory s poruchou pozornosti. Uceni musi byt alespon trochu "vopruz" a znacna cast lidi se programatory nestanou jednoduse proto, ze na to nemaji bunky.
Na uceni je potreba, aby to od zacatku v lidech alespon vyvolavalo dojem ze tomu rozumi a ze to maji pod kontrolou. A zaroven by to ale nemelo umoznovat odvatet pozornost uplne pryc.
Ty mas pocit, ze i kdyz zvolis ten nejlepsi jazyk, co na vyuku je, tak pak ta vyuka bude prochazka ruzovou zahradou a zadny vopruz? Programovani je v ledascemz tezke a i kdyz mladym umeteme nejhorsi miny z cesty, tak, presne jak pises, mnozi nemaji sanci. To ale neni duvod jim tu cestu neumetat.
A ano, jsou lidi, co se narodili s klavesnici v ruce, lidi, kteri nemaji sanci napsat ani nejvetsi spolecny delitel a pak je vetsina tech, kteri se mohou za vhodnych podminek neco naucit. Uplne stejne jako u cizich jazyku, tvurciho psani nebo trebas chemie.
Reaguji na celou diskuzi.
TLDR: je to v lidech a ne v jazycich. Sikovny clovek se nauci sam, snazivy potrebuje obcasnou konzultaci, prumerne to bud bavit bude nebo ne. Nicmene nakonec vzdy rozhoduje vnitrni motivace a chut objevovat nove. To kde clovek zacne a kam nakonec doiteruje je veci osobniho pohledu a nema to na prubeh moc vliv.
A ted to okecam:
Prosel jsem davno krouzkem pascalu, odpad tam byl velky, ale par lidi jsme u toho vydrzeli a programovali jsme jak o zivot. Ani jsem si nedovedl predstavit neco jineho nez pascal. Pak jsem prosel spoustou jazyku, ale kvuli me nature mi nejvic vyhovuje java.
Mezitim jsem potkal spoustu lidi, kteri se chteli naucit programovat a jelikoz nechci investovat moc casu uceni nekoho kdo to stejne vzda, tak se jich v prvni rade ptam, co si od toho slibujou a co je bude bavit. Pak az volim jazyk a platformu. Jsou lidi, kterym staci ukazat javascript, canvas, w3cschools a kutej si co chtej. Pak mam pripad uplneho samouka, ktery zacal programovat az na vejsce a udelal naprosto uzasnou hru v jave.
Nekdo rekl, ze nejlepsi navyky maji ti co zacali pascalem. Opravte me pokud se mylim, ale v prvni pulce 90. let se snad nic jineho nez pascal neucilo. I na mff to byl v prvaku pascal.
Takze tipuju, ze je to zas v lidech. Nekteri si udrzuji ciste zdrojaky, nekdo navrh, nekdo VCS, nekdo to patla jak to prijde a nevadi mu to.
Nerikam ze je motivace dana predem, ale ze muze zaviset na tom co se resi. A to pak urcuje i volbu toho jazyka.
Pokud uz ten clovek vi, ze chce udelat nejakou matlaci apku pro mobil, tak ho nasmeruju jinak, nez kdyz bude chtit delat weby a jinak kdyz bude chtit zpracovavat nejaky textovy soubory. A klidne se muze stat, ze nekdo bude chtit vypsat nejaky graf a po letech v tom matlabu vytvori neskutecny veci a bude mu uplne jedno co jsou nejaky pointery a typy atd.
Cili chci rict, ze cela tahle debata o tom, ktery jazyk je ten pravy zacatecnicky, motivacni a rychlovysledkovy z cele problematiky resi asi tak 20%.
Ostatne kdyz jsme tenkrat honili karla po obrazovce, tak to hned melo vysledky, hned to neco delalo a stejne to nakonec bavilo malokoho.
Přesně tak. Docela z gruntu to vzali ve Velké Británii, kde kromě RPi (Scratch+Python) mají i rozjetý https://www.gov.uk/government/publications/national-curriculum-in-england-computing-programmes-of-study
Jsou k tomu i materiály apod.
http://www.codecademy.com/schools/curriculum/resources
OT: Dost mě překvapuje, jak spousta škol investovala do interaktivních tabulí, na kterých se potom promítají PowerPointové prezentace, ale na geniální Scratch se už jaxi nedostává prostoru.
Vidím to podobně
Ke kombinaci Scratch + Python jsem dospěl také.
15 let učím programovat na ZŠ (převážně první stupeň). Děti v první třídě ještě neumí pořádně číst a prostředí jako Scrach je pro ně použitelné a hlavně je to baví.
Stačí 4 kostičky a už jim tam lítá kocour po ploše a maluje. Ostatní věci se začnou nabalovat tak jak se rozkoukávají v prostředí a chtějí dělat víc.
Dřív to také bylo o různých Karlech, želvách Logo, Baltíkovi, Petrovi a Petře od Gemtree, Gamemakeru. Zmíním ještě Robocode a v Americe rozšířenou Alice http://www.alice.org
Jaké jazyky vybrat a použít na výuku programování jistě závisí na mnoha faktorech. Nemyslím si, že na úplné základy je třeba použít nějaký v praxi použitelný jazyk/prostředí. (Byť i ten Scratch je použitelný například pro učitele k vytváření aplikací pro interaktivní tabule.)
Po hrátkách se Scratchem, když už potřeby žáků začnou přerůstat jeho možnosti, je rád nasměruji na Python + PyGame, případně na Google App Inventor ať si tvoří pro Android, v blízké budoucnosti očekávám, že vzniknou pěkná IDEčka pro HTML5 canvas a Javascript.
Dá se říci, že nic není dokonalé (ani učitelé), všechno se vyvíjí a mění pod rukama, ale špetka toho talentu a hromádka nadšení si s tím hravě poradí.
Ať se nám daří.
Pro úplné základy je parádní minecraftí open source server bukkit/spigot s pluginem https://github.com/zhuowei/RaspberryJuice . Všichni se připojí k jednomu serveru, v community pycharmu jim běží triviální pythonovské prográmky. Programují si zdi, celé domy (nejlépe z TNT, to se pak nejsnáze odstraní :-) ), navzájem si mění polohy hráčů, dá se v tom vyblbnout i s minihrami. Proměnné, cykly, podmínky, procedury, od začátku objekty, základy v pohodě.
Samozřejmě musí mít všichni koupenou licenci MC (používají normální MC klienta) a víc než 4 draky neuhlídáš, aby při tvém sebemenším polevení pozornosti nezačali spolu na serveru pařit :-)
Chtěl bych to postupně začít propojovat s reálným světem - arduino robot bude jezdit podle polohy hráče v MC, objede si místnost a s pomocí sensoru vzdálenosti za pár korun v MC zakreslí její základy, atd. atd.
Ale na základku to není, viz licence a paření. Pro menší skupinku doporučuji.
Minecraft je i pro děti na prvním stupni žhavé téma. S oblibou tiskneme postavičky na 3D tiskárně.
Pokud by bylo možné k tomu bukkit/spigot a RaspberryJuice napsat něco víc, ideálně článek, jak to rozběhat a příklady ovládání, byl bych za to rád.
Ještě, kdyby to šlo bez placeného účtu to by bylo fajn.
Jasně, je to pro první stupeň, to jsou do MC nejvíc zažrané. Do školy se to ale nehodí, protože je neudržíš, aby nezačali spolu hrát a neztratili tak pozornost. Společný MC svět je pro ně mocné lákadlo.
Placený účet - používá se standardní MC klient, který se musí autorizovat vůči serverům mojangu. Kreknuté by možná taky šly, ale to jsem nikdy neřešil a řešit nebudu. Pro domácí "skupinovou výuku" není to pětikilo žádný problém. Samozřejmě ve třídě je to o něčem jiném...
Je to jednoduché - spigot má detailní popis instalace (jen se spustí instalační jar, sám si natáhne a zkompiluje vše potřebné, otestováno ve win i linuxu). Vyleze z toho jar, ten se spustí (opět jen java -jar spigot.jar), java si rozbalí strukturu a už server běží. Pak se do jeho adresáře plugins nakopíruje jar raspberryjuice stažený z netu
Rozšířená pythonní knihovna mcpi se stáhne z toho githubu RJuice a vloží do pythonního adresáře. Návodů na tyhle pythoní prográmky je na webu celá řada, fakt žádná věda, i já to dal na první dobrou :-)
Jen to chce v MC klientovi vypnout opuštění hry při ztrátě fokusu, aby se šlo přepnout do IDE a pořád vidět, co se v MC děje. Triviální změna jednoho parametru v konfigu http://gaming.stackexchange.com/questions/15664/can-i-alt-tab-out-of-minecraft-without-the-game-auto-pausing
Všechny komponenty jsou zcela multiplatformní. Server máme na linuxu (doma ani žádné win nemám), kluci jedou na obojím. Ve win je to pro mě opruz, protože je pořádně neznám a chybí mi v ních základní nástroje. Ale to už je jiná diskuse...
MC docela žere CPU (a samožejmě grafiku), na starém čtyřjádru ale jede kombinace spigot/MC jednoho z kluků úplně v pohodě. Samozřejmě když si naprogramují kostku TNT se stranou 1000, tak spigot dle povelu umisťující kostičky TNT do skonání věku vypínám a přemazávám jeho adresář čistou zálohou...
Taky Zelená hnáta http://www.greenfoot.org/overview pokud teda netrpíte Javaaverzí.